{"version":3,"sources":["../webpack/universalModuleDefinition","i18n.js","utils/address.js","assets/svg/AlertTriangle.js","assets/svg/ChainHecoLogo.js","assets/svg/Checked.js","assets/svg/DarkMobileLogo.js","assets/svg/ErrorFilled.js","assets/svg/ErrorOutlined.js","assets/svg/Info.js","assets/svg/InfoFilled.js","assets/svg/portal-logo.svg","assets/svg/SquareBg.js","assets/svg/SuccessFilled.js","assets/svg/TokenAlert.js","assets/svg/WarningFilled.js","assets/svg/color/ArrowJump.js","assets/svg/color/ArrowLeft.js","assets/svg/color/ChineseIcon.js","assets/svg/color/Close.js","assets/svg/color/CopyIcon.js","assets/svg/color/Disabled.js","assets/svg/color/EnglishIcon.js","assets/svg/color/Loading.js","assets/svg/color/Moon.js","assets/svg/color/NoChecked.js","assets/svg/color/Plus.js","assets/svg/color/Forbidden.js","assets/svg/ZGArrowRight.js","assets/svg/ZGBack.js","assets/svg/ZGCheck.js","assets/svg/ZGConnectWallet.js","assets/svg/ZGCopy.js","assets/svg/ZGEditWallet.js","assets/svg/ZGFlip.js","assets/svg/ZGOpen.js","assets/svg/ZGSearchIcon.js","assets/svg/ZGTokenSelectionChevron.js","assets/svg/Success.js","assets/svg/network/Arbitrum.svg","assets/svg/network/Avalanche.svg","assets/svg/network/Bitcoin.svg","assets/svg/network/BSC.svg","assets/svg/network/Conflux.svg","assets/svg/network/Ethereum.svg","assets/svg/network/OEC.svg","assets/svg/network/Optimism.svg","assets/svg/network/Empty.svg","assets/svg/network/Heco.svg","assets/svg/network/Default.svg","assets/svg/token/BNB.svg","assets/svg/token/BTC.svg","assets/svg/token/CFX.svg","assets/svg/token/DAI.svg","assets/svg/token/ETH.svg","assets/svg/token/USDC.svg","assets/svg/token/USDT.svg","assets/svg/token/Empty.svg","assets/svg/token/Default.svg","assets/svg/wallet/fluent.svg","assets/svg/wallet/metamask.svg","assets/svg/wallet/coinbase.svg","assets/svg/wallet/okx.svg","assets/svg/HamburgerMenu.js","assets/svg/BgRightCircle.js","assets/svg/BgLeftCircle.js","assets/svg/CheckedCircle.js","assets/svg/Clear.js","assets/svg/FooterLogo.js","assets/svg/DiscordLogo.js","assets/svg/TelegramLogo.js","assets/svg/XLogo.js","constants/walletConfig.js","constants/chainConfig.js","utils/index.js","constants/contractConfig.js","constants/tokenConfig.js","constants/index.js","hooks/useTrackCfxErc20Balance.js","hooks/usePortal.js","state/wallet.js","connectors/metaMask.js","connectors/coinbase.js","connectors/okx.js","connectors/index.js","hooks/useZGWallet.js","utils/request.js","utils/api.js","state/transaction.js","state/index.js","hooks/useAllTokenList.js","pages/components/TokenIcon/index.js","hooks/index.js","pages/components/Header/index.js","pages/components/Footer/index.js","components/Button/index.js","components/WrapIcon/index.js","components/Notification/index.js","components/Message/index.js","components/Link/index.js","components/Modal/index.js","components/Loading/index.js","components/Dropdown/index.js","components/Input/index.js","components/Menu/MenuItem.js","components/Menu/index.js","components/Checkbox/index.js","components/Toast/index.js","components/Tooltip/Placements.js","components/Tooltip/index.js","components/Popover/index.js","components/Circle/index.js","components/Tabs/Tab.js","components/Tabs/index.js","pages/components/useTransactionNotification/index.js","pages/components/WalletIcon/index.js","state/zgForm.js","pages/components/Web3Manager/index.js","hooks/useTransaction.js","pages/History/HistoryItem.js","pages/components/ScanItem/index.js","pages/History/HistoryDetailModal.js","pages/History/index.js","utils/aws.js","pages/Request/index.js","hooks/useZGBalance.js","pages/Pool/manager/poolList.js","pages/Pool/hooks/useAllPools.js","pages/Pool/AllPools.js","pages/Pool/manager/yourPools.js","pages/Pool/hooks/useYourPools.js","pages/Pool/YourPools.js","pages/Pool/PoolList.js","pages/Pool/index.js","pages/ZGPortal/Form/Account.js","utils/switchWeb3Network.js","pages/Pool/components/TransactionButton.js","pages/Pool/components/PoolInfo.js","assets/img/status-error.png","assets/img/status-success.png","assets/img/status-waiting.png","pages/Pool/components/TransactionModal.js","pages/Pool/AddLiquidity.js","pages/Pool/RemoveLiquidity.js","pages/Pool/Operation.js","utils/web3.js","hooks/useWeb3Network.js","hooks/useShuttleContract.js","hooks/useShuttleOut.js","hooks/useShuttleAddress.js","hooks/useShuttleData.js","hooks/useShuttleIn.js","pages/ZGPortal/Form/ToBtcAddress.js","pages/ZGPortal/Form/TokenModal.js","pages/ZGPortal/Form/GroupBox.js","pages/ZGPortal/Form/TransactionModal.js","pages/ZGPortal/Form/BtcConfirmTips.js","pages/ZGPortal/Form/BTCTransactionModal.js","pages/ZGPortal/Form/PendingTxList.js","utils/cfx.js","pages/ZGPortal/Form/FromWalletModal.js","pages/ZGPortal/Form/ToWalletModal.js","pages/ZGPortal/Form/index.js","pages/ZGPortal/Portal.js","pages/ZGPortal/Marketing.js","pages/ZGPortal/PortalWithMarket.js","constants/wagmiChains.js","pages/App.js","index.js"],"names":["root","factory","exports","module","define","amd","window","resources","en","translation","i18next","use","LanguageDetector","initReactI18next","init","debug","process","fallbackLng","interpolation","escapeValue","checkHexAddress","address","isHexAddress","checkCfxTokenAddress","type","validateBase32Address","ChainConfig","KeyOfCfx","id","checkBtcAddress","validate","IS_DEV","shortenAddress","chain","checkCfx","check","secondStr","arr","split","getEllipsStr","shortenCfxAddress","KeyOfBtc","shortenBtcAddress","shortenEthAddress","SvgAlertTriangle","props","_jsx","Object","assign","width","height","viewBox","fill","xmlns","_nk","_filehash","children","d","SvgChainHecoLogo","SvgChecked","_jsxs","x","y","rx","stroke","strokeWidth","strokeLinecap","strokeLinejoin","SvgDarkMobileLogo","SvgErrorFilled","maskUnits","mask","fillRule","clipRule","SvgErrorOutlined","SvgInfo","SvgInfoFilled","SvgSquareBg","SvgSuccessFilled","cx","cy","r","SvgTokenAlert","SvgWarningFilled","SvgArrowJump","SvgArrowLeft","SvgChineseIcon","SvgClose","SvgCopyIcon","SvgDisabled","SvgEnglishIcon","SvgLoading","SvgMoon","SvgNoChecked","SvgPlus","SvgForbbiden","ZGArrowRight","SVGZGBack","SVGZGCheck","SVGZGConnectWallet","SVGZGCopy","SVGZGEditWallet","SVGZGFlip","clipPath","transform","SVGZGOpen","SVGZGSearchIcon","ZGTokenSelectionChevron","SvgSuccess","HamburgerMenu","BgRightCircle","ry","fillOpacity","opacity","x1","y1","x2","y2","gradientUnits","stopColor","offset","BgLeftCircle","SvgCheckedCircle","style","maskType","SvgClear","FooterLogo","DiscordLogo","TelegramLogo","XLogo","KeyOfMetaMask","KeyOfCoinbase","KeyOfOkx","KeyOfPortal","WalletConfig","key","name","website","icon","WalletMetamask","WalletCoinbase","WalletOkx","WalletFluent","info","KeyOfEth","keys","ScanUrlEth","ChainNameEth","KeyOfArb","ScanUrlArb","ChainIdArb","ChainNameArb","KeyOfOp","ScanUrlOp","ChainIdOp","ChainNameOp","KeyOfAvax","ScanUrlAvax","ChainIdAvax","ChainNameAvax","KeyOfBsc","ScanUrlBsc","ChainIdBsc","ChainNameBsc","KeyOfOec","ScanUrlOec","ChainIdOec","ChainNameOec","KeyOfCfxESpace","ScanUrlCfxESpace","ChainIdCfxEspace","ChainNameCfxEspace","ScanUrlCfx","MainnetCfx","TestnetCfx","ChainIdCfx","ChainNameCfx","ScanUrlBtc","displayFilter","obj","supported","in_token_list","ChainIconSrc","fullName","shortName","tokenName","nativeToken","provider","checkAddress","scanUrl","scanTxUrl","scanTokenUrl","commonTokens","wallet","remainderAmount","decimals","rpcUrl","supportedToChain","findChainConfigById","inputId","findChainKeyById","NetworkEthereumLogo","NetworkArbitrumLogo","NetworkOptimismLogo","NetworkAvalancheLogo","NetworkBSCLogo","NetworkConfluxLogo","NetworkBitcoinLogo","NetworkOECLogo","length","NetworkDefaultLogo","NetworkEmptyLogo","location","hostname","indexOf","calculateMD5","file","Promise","resolve","reject","reader","FileReader","onload","e","wordArray","lib","WordArray","create","target","result","md5Hash","MD5","toString","onerror","readAsArrayBuffer","str","frontNum","endNum","substring","addHexPrefix","Error","slice","isHexPrefixed","calculateGasMargin","value","margin","addedValue","BigNumber","from","mul","add","div","BN","getExponent","updateTx","trans","hash","data","set","get","ContractType","depositRelayer","depositRelayerCfx","custodianImpl","custodianImplReverse","tokenSponsor","tokenSponsorReverse","balance","tokenBase","bridge","pool","ContractConfig","abi","Pool_ABI","ZGBridge_ABI","DepositRelayer_ABI","DepositRelayer_CFX_ABI","CustodianImpl_ABI","CustodianImplReverse_ABI","TokenSponsor_ABI","TokenSponsorReverse_ABI","Balance_ABI","TokenBase_ABI","AddressOne","tokenContractsInfo","symbol","pegged","priceName","Big","DP","NE","PE","TypeConnectWallet","uninstalled","loading","error","success","ProxyUrlPrefix","shuttleflow","sponsor","zg","ZeroAddrHex","SendStatus","MobileBreakpoint","TypeTransaction","transaction","approve","TransactionStatus","DepositStatus","UserOperationStatus","doing","finished","TxStatus","supportedPools","useState","useEffect","require","useTrackCfxErc20Balance","tokenAddress","account","useAccount","setBalance","undefined","timer","setInterval","fluentProvider","fluent","request","method","params","format","hexAddress","to","then","minUnitBalance","Unit","fromMinUnit","catch","clearInterval","useChainNetId","coreChainId","useChainId","chainId","setChainId","isCore","conflux","parseInt","err","console","useConnect","status","useStatus","useFluentAccount","setError","useMemo","autoRefreshOnNetworkChange","activate","useCallback","p","connect","code","useContract","ABI","_window","confluxJS","isChainIdRight","addrType","getChainIdRight","Contract","log","Boolean","useBalance","isNativeToken","tokenBalance","toDecimalMinUnit","useTokenBalance","nativeTokenBalance","_","useFluentBalance","useNativeTokenBalance","Store","useWalletState","walletMap","initialize","setWalletMap","setField","walletKey","state","metaMaskConnector","InjectedConnector","options","getProvider","ethereum","injectedProvider","providers","realProvider","find","isMetaMask","isFluent","coinbaseConnector","_injectedProvider$pro","isCoinbaseWallet","okxConnector","okxwallet","connectorHub","constructor","this","map","getConnector","initEvents","connector","onAccountsChanged","on","onChainChanged","createConnector","con","useWallet","connectObjPortal","useConnectPortal","connecors","useWeb3Wallets","values","filter","timeout","jsonRpc","url","jsonrpc","fetch","mode","headers","body","JSON","stringify","response","ok","json","RPC_Method","getTokenList","searchToken","getUserWallet","getUserOperationByHash","getUserOperationList","getZGTokenList","getDepositList","requestUserWallet","_ref","defi","fromChain","toChain","createStore","persist","transactions","setTransactions","fromEntries","unshiftTx","tx","isToChainCfx","infoData","timestamp","Date","now","tx_type","in_or_out","mergeData","claimedTxs","setClaimedTxs","setTx","getStorage","localStorage","useTxState","usePortalState","toBtcAddress","fromBtcAddress","fromToken","tokenFromBackend","txClaimModalShown","setFromChain","setToChain","setFromToken","setFromBtcAddress","setToBtcAddress","setTokenFromBackend","setTxClaimModalShown","GetTokenListImplentation","zgTokenListImpl","super","list","getTokenInfo","k","toLowerCase","applyChainInfo","token","chainInfo","chain_id","chainName","_this","_asyncToGenerator","rawData","tokenInfo","token_address","token_abbr","tokenContractKey","_x","apply","arguments","all","index","sfTokenListImpl","transformNativeTokenAddress","mapSFTokenDataToZG","sfToken","_ChainConfig$KeyOfCfx","_ChainConfig","isFromCfx","origin","tokenAbbr","String","reference_symbol","toUpperCase","toTokenAddress","reference","ctoken","toChains","to_chain","isSF","sfChain","display_symbol","display_name","cfxDecimals","reference_name","mapSFTokenListToZG","sfTokenList","mappedData","flatMap","bind","Set","_this2","useAllTokenList","zgTokenList","setZgTokenList","setSfTokenList","res","forEach","sfId","zgToken","t","sfSameToken","includes","push","TokenIcon","size","tokenIcon","TokenBNBLogo","TokenBTCLogo","TokenCFXLogo","TokenDAILogo","TokenETHLogo","TokenUSDCLogo","TokenUSDTLogo","TokenDefaultLogo","TokenEmptyLogo","TokenIconSrc","networkIcon","networkSize","className","src","alt","useIsCfxChain","useIsMobile","useWindowSize","HeaderLink","disabled","_objectWithoutPropertiesLoose","_excluded","NavLink","MobileHeader","menuOpen","setMenuOpen","useTranslation","pathname","useLocation","disableNav","Close","onClick","exact","handleClickLogo","open","Logo","Header","isMobile","Footer","href","rel","handleClickDiscord","handleClickTelegram","handleClickX","sizeStyleObj","small","medium","large","iconSizeObj","Button","color","variant","fullWidth","danger","startIcon","endIcon","disabledStyle","colorStyle","sizeStyle","iconSize","iconColor","startIconComp","React","cloneElement","endIconComp","WrapIcon","defaultGetContainer","defaultCloseIcon","notificationInstance","defaultDuration","defaultTop","defaultBottom","defaultPlacement","getPlacementStyle","placement","top","bottom","left","right","typeToIcon","SuccessFilled","InfoFilled","ErrorFilled","warning","WarningFilled","api","args","callback","getContainer","closeIcon","prefixCls","cacheKey","cacheInstance","instance","closeIconToRender","Notification","newInstance","notification","getNotificationInstance","notice","duration","durationArg","content","title","actions","onClose","iconNode","role","closable","getRCNoticeProps","close","removeNotice","config","destroy","messageInstance","defaultMaxCount","defaultTransitionName","closePromise","transitionName","maxCount","instanceConfig","getRCNotificationInstance","IconComponent","Loading","filled","rejected","promise","messageKey","Link","Modal","closeIconClassName","ref","useRef","useClickAway","iconComp","closeIconComp","currentTarget","stopPropagation","onCloseClick","LoadingSvg","Dropdown","inputStyleObj","prefixStyleObj","Input","prefix","suffix","containerClassName","onChange","bordered","errorMessage","onBlur","customPrefix","focused","setFocused","inputStyle","prefixStyle","borderStyle","onFocus","MenuItem","itemKey","selected","selectedIcon","selectedIconComp","Disabled","Menu","Item","Checkbox","checked","customShow","Checked","NoChecked","Toast","autoHideDuration","setTimeout","autoAdjustOverflowEnabled","adjustX","adjustY","autoAdjustOverflowDisabled","targetOffset","getOverflowOptions","autoAdjustOverflow","getDisabledCompatibleChildren","element","elementType","__ANT_BUTTON","__ANT_SWITCH","__ANT_CHECKBOX","picked","omitted","splitObject","spanStyle","display","cursor","block","buttonStyle","pointerEvents","child","classNames","Tooltip","visible","setVisible","useMergedState","_state","defaultValue","setState","defaultVisible","isNoContent","getTooltipPlacements","builtinPlacements","arrowPointAtCenter","arrowWidth","horizontalArrowShift","verticalArrowShift","placementMap","points","topLeft","leftTop","topRight","rightTop","bottomRight","rightBottom","bottomLeft","leftBottom","overflow","placements","ignoreShake","getPlacements","getPopupContainer","otherProps","openClassName","getTooltipContainer","overlayClassName","overlayInnerStyle","customPrefixCls","tempVisible","childProps","childCls","customOverlayClassName","formattedOverlayInnerStyle","RcTooltip","overlay","getOverlay","onVisibleChange","vis","_props$onVisibleChang","call","onPopupAlign","domNode","align","rect","getBoundingClientRect","transformOrigin","arrowContent","arrowContentStyle","displayName","defaultProps","mouseEnterDelay","mouseLeaveDelay","Popover","customizePrefixCls","_Fragment","trigger","overlayStyle","Circle","Tab","label","containerClass","labelClass","Tabs","tabs","onSelect","selectedTab","setSelectedTab","tab","handleSelectTab","useTransactionNotification","WalletIcon","useZGFormState","walletInit","toToken","fromAmount","toAmount","toAddress","fee","fromWallet","toWallet","sameWallet","lastWeb3Wallet","defaultSetLock","tokenFee","setWalletInit","setToToken","setFromAmount","setToAmount","setToAddress","setFee","setFromWallet","setToWallet","setSameWallet","setDefaultSetLock","setTokenFee","useIsFromChainBtc","useIsToChainBtc","Web3Manager","conF","connectors","optionM","accounts","conM","Web3Provider","_ref2","optionC","conC","_ref3","_x2","optionO","conO","_ref4","_x3","_ref5","_x4","connected","_ref6","_x5","_ref7","_x6","clearTimeout","findTokenById","tokenList","item","useUpdateTxs","cfxAddress","web3Provider","web3Wallets","isCfxCore","txNotificationShow","_transactions","Map","entries","timeInterval","update","transArr","pendingApproveTxs","pendingInApproveTxs","getTransactionReceipt","pendingOutApproveTxs","outcomeStatus","limit","pendingCommonTxs","requestTransactions","from_chain","nonce_or_txid","to_addr","amount","tx_to","tx_input","user_addr","settled_tx","toHash","convertDecimal","BigInt","amountReceived","mapData","concat","requestDepositList","_data$fromToken","_data$toToken","src_chain_id","dest_chain_id","depositor","deposit_token","receiver","receive_amount","receive_token","claim_tx_to","claim_tx_input","claim_tx_hash","deposit_tx_hash","fromAddress","isZG","mapDepositData","_mapListToMap","_apiData$response","apiData","newStatus","state2","txs","appendTxs","finally","useTxData","multipleOrderedStatus","transactionTypes","setArr","connectedAddress","filteredTxs","sort","a","b","usePendingTransactions","pendingTransactions","useUpdateClaimedTxs","_claimedTxs","_window2","submittedTrans","mmSubmittedTrans","portalSubmittedTrans","mmArr","claimHash","sendHash","confluxArr","TokenInfo","HistoryItem","historyItemData","ts","dayjs","date","time","ScanItem","text","copied","setCopied","copy","displayUrl","CopyToClipboard","onCopy","ZGCheck","ZGCopy","ZGOpen","openNewUrl","TokenModal","shortendFromAddr","fromMessage","fromChainConfig","fromChainScanUrl","toChainConfig","toChainScanUrl","displayData","toLocaleString","month","day","year","hour","minute","second","renderList","elements","History","searchKey","setSearchKey","historyData","dataBlocks","groups","monthYear","items","divideByMonth","history","useHistory","showModal","setShowModal","setTransaction","ZGSearchIcon","placeholder","i","j","HistoryDetailModal","handleCloseModal","uploadToS3","AWS","S3","ManagedUpload","Bucket","Key","Body","region","credentials","CognitoIdentityCredentials","IdentityPoolId","FormInput","Request","email","setEmail","issue","setIssue","subject","setSubject","details","setDetails","files","setFiles","popupRef","names","Array","join","errMessage","setErrMessage","submitting","setSubmitting","uploadAttachments","filename","urls","extension","lastIndexOf","md5","handleSubmit","_popupRef$current","table","attachments","Location","current","classList","remove","goBack","ZGBack","htmlFor","Select","theme","borderRadius","colors","primary25","primary50","primary","styles","control","baseStyles","border","borderColor","valueContainer","padding","input","menu","indicatorSeparator","onInput","FileUploader","classes","handleChange","multiple","dropMessageStyle","ZGSuccess","getWeb3Balance","contractAddress","_findChainConfigById","getBalance","BCFX_ABI","balanceOf","poolList","pools","price","fetchPrice","priceSymbolList","raw","Number","force","summary","providerUrl","JsonRpcProvider","bridgeContract","contract","peggedTokenAddress","backToPegged","peggedTokenContract","ERC20_ABI","matchedToken","toLocaleLowerCase","liquidityInToken","totalSupply","liquidity","parseUnits","WeiPerEther","formatUnits","oneDayVolume","sevenDayVolume","_summary$1d$token_abb","_summary$7d$token_abb","getPoolTableData","displayLiquidity","toFixed","displayOneDayVolume","displaySevenDayVolume","getTVL","reduce","acc","useAllPools","tableData","setTableData","tvl","setTVL","updateTableData","PoolList","sorting","setSorting","useReactTable","onSortingChange","getSortedRowModel","columns","header","accessorKey","cell","row","original","getValue","sortDescFirst","getCoreRowModel","getHeaderGroups","headerGroup","column","getToggleSortingHandler","flexRender","columnDef","getContext","getRowModel","rows","handleClickPool","getVisibleCells","yourPools","peggedToken","peggedAmount","isZero","poolShare","displayPeggedAmount","displayPoolShare","useYourPools","setTab","AllPools","YourPools","Pool","setHideWalletList","Account","handleOpenWalletModal","hideEdit","poolContract","hideStake","showBalance","unstakeStatus","setUnstakeStatus","canWithdraw","setCanWithdraw","checksumAccount","startsWith","getAddress","getValidateStatus","requested","userUnstakeRequestMap","displayAccount","showFastPathModal","setShowFastPathModal","stakeInput","setStakeInput","disableStake","processing","getInputError","approveAllowance","tokenContract","getSigner","allowance","gte","gas","estimateGas","MaxUint256","gasLimit","count","hasApproved","setProcessing","handleStake","valueInBigInt","stake","wait","fetchStakedAmount","stakedAmount","setStakedAmount","userStakedAmount","displayStakedAmount","stakeMode","setStakeMode","disableUnstake","eq","handleUnstake","unlockGas","unstake","handleWithdraw","_ref8","withdraw","handleConnectWallet","min","fromTokenKey","_connectors$getConnec","switchChain","nativeCurrency","rpcUrls","message","TransactionButton","handleTransaction","handleSwitchNetwork","switchWeb3Network","PoolInfo","matchedPool","TransactionModal","onClickResend","errInfo","handleCancel","topIcon","StatusWaiting","StatusSuccess","StatusError","AddLiquidity","openWalletModal","setAmount","showTransactionModal","setShowTransactionModal","transactionStatus","setTransactionStatus","fetchBalance","setMax","sub","handleClickAddLiquidity","contractConfig","contractAddr","addLiquidity","handleInput","RemoveLiquidty","peggedTokenBalance","setPeggedTokenBalance","errorInfo","setErrorInfo","updatePeggedTokenBalance","toChecksum","handleClickRemoveLiquidity","removeLiquidity","Operation","useParams","setToken","ArrowLeft","handleClickBack","getContract","library","_unused","isAddress","AddressZero","connectUnchecked","getProviderOrSigner","withSignerIfPossible","useShuttleContract","contractType","inputWallet","contractObj","addressOfChain","contractPortal","useContractPortal","contractWeb3","useContractWeb3","useShuttleOut","setSendStatus","isCfxChain","isToChainBtc","outAddress","setOutAddress","shuttleAddress","useSWR","useShuttleAddress","tokenBaseContract","drCfxContract","getTransactionStatusData","amountVal","estimateData","deposit","estimateGasAndCollateral","sendTransaction","storageLimit","storageCollateralized","txHash","warn","depositToken","useTokenAddress","useCustodianData","chainOfContract","minimal_burn_value","token_minimal_burn_value","minimal_mint_value","token_minimal_mint_value","max_mint_fee","max_burn_fee","mint_fee_ratio","burn_fee_ratio","obverseContract","reverseContract","decimalsNum","contractData","setContractData","fn","burn_fee","mint_fee","wallet_fee","minimal_sponsor_amount","safe_sponsor_amount","minimal_in_value","minimal_out_value","useShuttleIn","fromTokenAddress","_ChainConfig$chain","_ChainConfig$chain$to","shuttleInWalletAddress","drContract","gasData","transfer","gasDt","ToBtcAddress","btcAddressVal","errorBtcAddressMsg","onAddressInputChange","autoComplete","AlertTriangle","tokenModalTitle","searchPart","setSearchPart","showAddToken","sortedTokenList","localeCompare","handleChooseFromToken","image","handleClickAddToken","GroupBox","disableInput","hideAccount","handleShowModal","fromTokenChainInfo","displayFee","displayToAddress","BtcConfirmTips","QRCode","CopyIcon","BTCTransactionModal","isFromChainBtc","showDetail","setShowDetail","PendingTxList","cfx","getSourceTokenName","getFormattedDate","FromWalletModal","hideList","fluentStatus","handleSelectWallet","wallets","Info","ToWalletModal","understand","setUnderstand","showEnterAddress","setShowEnterAddress","setAddress","handleSwitchSameAsSource","disableToSelect","disabledClass","handleClickEnterAddress","handleClickAddressContinue","Form","forwardRef","_ContractConfig$Contr","_ContractConfig$Contr2","manualToAddress","fromAccount","toAccount","allTokenList","showFromWalletModal","setShowFromWalletModal","showToWalletModal","setShowToWalletModal","shuttleOut","shuttleIn","useIsFromChainCfx","shuttleFee","in_fee","Math","max","times","toNumber","out_fee","useShuttleFee","showBTCModal","setShowBTCModal","pendingHistory","successHistory","custodianContractChain","tokenDecimal","displayBalance","useZGBalance","walletChainId","balanceFluent","fetchWeb3Balance","handleZGTransaction","_ChainConfig$fromToke","amountBigNumber","getTime","getShuttleInWalletAddress","handleStartTransaction","_ChainConfig$fromToke2","approveToken","walletAddress","isChainSameAsFromToken","fromTokenList","toTokenList","handleChooseToToken","web3SubEstimation","nativeFee","estimateFee","estimateTokenFee","setToAmountSubEstimation","debounce","shuttleFeeBigNumber","cfxCoreEstimation","approveEVMToken","_ref9","_ChainConfig$fromToke3","drContractAddress","approveCFXToken","_ref11","_ChainConfig$fromToke4","approvedNumber","storage","confirmed","contractApprove","_ref12","hideFromAccount","hideToAccount","pendingList","minimalVal","errorObj","test","isNumber","balanceVal","valBig","lt","gt","validateData","disableTransactionButton","setAmountToMax","_ref13","trunc","selectWhenHasTx","tokenPairMap","mostUsedTokenPair","fromChainId","fromTokenAbbr","toChainId","toTokenAbbr","defaultFromToken","defaultToToken","selectWhenNoTx","setBridgeContract","setPoolContract","handleOpenFromWalletModal","handleClickFlip","handleOpenToWalletModal","handleCloseFromWalletModal","handleCloseToWalletModal","ZGPortal","PortalMarketing","handleClickStart","onAnimationEnd","setHideMarketManul","marketHide","setMarketHide","mobileContainer","portalContainer","getItem","marketClass","setMarketClass","setContainerClass","handleHideMarket","scrollTo","setItem","portalLeft","styleSheet","document","createElement","halfPortalWidth","innerWidth","keyFrames","innerHTML","head","appendChild","handleClickPortal","handleMarketAnimationEnd","confluxESpaceTestnet","defineChain","network","default","http","public","blockExplorers","_window$confluxJS","version","Conflux","defaultGasPrice","defaultGas","logger","publicClient","webSocketPublicClient","configureChains","bscTestnet","bsc","confluxESpace","publicProvider","createConfig","autoConnect","zoomWindows","userAgent","navigator","os","isIOS","maxTouchPoints","MSStream","getPlatformOS","originPixelRatio","devicePixelRatio","isInteger","matchMedia","addEventListener","mqListener","currentPixelRatio","zoom","round","removeEventListener","TxsUpdater","App","hideWalletList","hideMarketManual","setHideMarketManual","hideMarket","Suspense","fallback","Router","basename","AliveScope","WagmiConfig","Switch","Route","path","Portal","PortalWithMarket","PoolOperation","Redirect","completeDetectConflux","ReactDOM","render","StrictMode","querySelector","host","posthog","api_host"],"mappings":"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","file":"static/js/main.f0e50934.chunk.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"zg-portal\"] = factory();\n\telse\n\t\troot[\"zg-portal\"] = factory();\n})(window, function() {\nreturn ","import i18next from 'i18next'\nimport {initReactI18next} from 'react-i18next'\nimport LanguageDetector from 'i18next-browser-languagedetector'\nimport en from './assets/locales/en.json'\n\nconst resources = {\n en: {translation: en},\n}\n\ni18next\n.use(LanguageDetector)\n.use(initReactI18next)\n.init({\n resources,\n debug: process.env.NODE_ENV !== 'production',\n fallbackLng: 'en',\n interpolation: {escapeValue: false},\n})\n\nexport default i18next\n","import {isHexAddress} from '@fluent-wallet/account'\nimport {validateBase32Address} from '@fluent-wallet/base32-address'\nimport {validate} from 'bitcoin-address-validation'\nimport {ChainConfig, KeyOfCfx, KeyOfBtc} from '../constants/chainConfig'\nimport {getEllipsStr, IS_DEV} from '../utils'\n\nexport function checkHexAddress(address) {\n return isHexAddress(address)\n}\n\nexport function checkCfxTokenAddress(address, type) {\n return validateBase32Address(\n address,\n ChainConfig[KeyOfCfx].id,\n type,\n )\n}\n\nexport function checkBtcAddress(address) {\n return validate(address, IS_DEV ? 'testnet' : 'mainnet')\n}\n\nexport function shortenEthAddress(address) {\n if (!checkHexAddress(address)) return ''\n return getEllipsStr(address, 6, 4)\n}\n\nexport function shortenBtcAddress(address) {\n if (!checkBtcAddress(address)) return ''\n return getEllipsStr(address, 10, 0)\n}\n\nexport function shortenCfxAddress(address, type, check = true) {\n if (check && !checkCfxTokenAddress(address, type)) return ''\n const arr = address.split(':')\n let secondStr\n if (IS_DEV) {\n secondStr = getEllipsStr(arr[1], 3, 4)\n } else {\n secondStr = getEllipsStr(arr[1], 3, 8)\n }\n return arr[0] + ':' + secondStr\n}\n\nexport function shortenAddress(chain, address, type = 'user', checkCfx = true) {\n if (chain === KeyOfCfx) return shortenCfxAddress(address, type, checkCfx)\n if (chain === KeyOfBtc) return shortenBtcAddress(address)\n return shortenEthAddress(address)\n}\n","function SvgAlertTriangle(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgAlertTriangle\n","function SvgChainHecoLogo(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgChainHecoLogo\n","function SvgChecked(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgChecked\n","function SvgDarkMobileLogo(props) {\n return (\n \n \n \n \n \n \n )\n}\n\nexport default SvgDarkMobileLogo\n","function SvgErrorFilled(props) {\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgErrorFilled\n","function SvgErrorOutlined(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgErrorOutlined\n","function SvgInfo(props) {\n return (\n \n \n \n \n \n )\n}\n\nexport default SvgInfo\n","function SvgInfoFilled(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgInfoFilled\n","export default __webpack_public_path__ + \"static/media/portal-logo.3d7a6792.svg\";","function SvgSquareBg(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgSquareBg\n","function SvgSuccessFilled(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgSuccessFilled\n","function SvgTokenAlert(props) {\n return (\n \n \n \n \n \n )\n}\n\nexport default SvgTokenAlert\n","function SvgWarningFilled(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgWarningFilled\n","function SvgArrowJump(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgArrowJump\n","function SvgArrowLeft(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgArrowLeft\n","function SvgChineseIcon(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgChineseIcon\n","function SvgClose(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgClose\n","function SvgCopyIcon(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgCopyIcon\n","function SvgDisabled(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgDisabled\n","function SvgEnglishIcon(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgEnglishIcon\n","function SvgLoading(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgLoading\n","function SvgMoon(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgMoon\n","function SvgNoChecked(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgNoChecked\n","function SvgPlus(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgPlus\n","function SvgForbbiden(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgForbbiden\n","function ZGArrowRight(props) {\n return (\n \n \n \n \n )\n}\n\nexport default ZGArrowRight\n","function SVGZGBack(props) {\n return (\n \n \n \n )\n}\n\nexport default SVGZGBack\n","function SVGZGCheck(props) {\n return (\n \n \n \n )\n}\n\nexport default SVGZGCheck\n","function SVGZGConnectWallet(props) {\n return (\n \n\n\n\n\n\n )\n}\n\nexport default SVGZGConnectWallet\n","function SVGZGCopy(props) {\n return (\n \n \n \n )\n}\n\nexport default SVGZGCopy\n","function SVGZGEditWallet(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SVGZGEditWallet\n\n","function SVGZGFlip(props) {\n return (\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n )\n}\n\nexport default SVGZGFlip\n","function SVGZGOpen(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SVGZGOpen\n","function SVGZGSearchIcon(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SVGZGSearchIcon\n","function ZGTokenSelectionChevron(props) {\n return (\n \n \n \n )\n}\n\nexport default ZGTokenSelectionChevron\n","function SvgSuccess(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgSuccess\n","export default __webpack_public_path__ + \"static/media/Arbitrum.85ab4409.svg\";","export default __webpack_public_path__ + \"static/media/Avalanche.3747279d.svg\";","export default __webpack_public_path__ + \"static/media/Bitcoin.ba1fb70f.svg\";","export default __webpack_public_path__ + \"static/media/BSC.8c0ac64c.svg\";","export default __webpack_public_path__ + \"static/media/Conflux.b52b08ae.svg\";","export default __webpack_public_path__ + \"static/media/Ethereum.d582ac53.svg\";","export default __webpack_public_path__ + \"static/media/OEC.41baad43.svg\";","export default __webpack_public_path__ + \"static/media/Optimism.f0673fbb.svg\";","export default __webpack_public_path__ + \"static/media/Empty.006a0989.svg\";","export default __webpack_public_path__ + \"static/media/Heco.397869cc.svg\";","export default __webpack_public_path__ + \"static/media/Default.147e3f68.svg\";","export default __webpack_public_path__ + \"static/media/BNB.ebb600c2.svg\";","export default __webpack_public_path__ + \"static/media/BTC.b39edf1a.svg\";","export default __webpack_public_path__ + \"static/media/CFX.59b2576e.svg\";","export default __webpack_public_path__ + \"static/media/DAI.52b6cf74.svg\";","export default __webpack_public_path__ + \"static/media/ETH.ea1c2c3c.svg\";","export default __webpack_public_path__ + \"static/media/USDC.cab4886a.svg\";","export default __webpack_public_path__ + \"static/media/USDT.0630b94b.svg\";","export default __webpack_public_path__ + \"static/media/Empty.0010acd9.svg\";","export default __webpack_public_path__ + \"static/media/Default.80f46b36.svg\";","export default __webpack_public_path__ + \"static/media/fluent.be8f090a.svg\";","export default __webpack_public_path__ + \"static/media/metamask.61d31698.svg\";","export default __webpack_public_path__ + \"static/media/coinbase.332817c0.svg\";","export default __webpack_public_path__ + \"static/media/okx.c9e0c9ae.svg\";","function HamburgerMenu(props) {\n return (\n \n \n \n \n \n )\n}\n\nexport default HamburgerMenu;\n","function BgRightCircle(props) {\n return (\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n );\n}\n\nexport default BgRightCircle;\n","function BgLeftCircle(props) {\n return (\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n )\n}\n\nexport default BgLeftCircle;\n","function SvgCheckedCircle(props) {\n return (\n \n\n\n\n\n\n\n\n\n\n )\n}\n\nexport default SvgCheckedCircle\n","function SvgClear(props) {\n return \n \n \n \n \n\n}\n\nexport default SvgClear;\n","function FooterLogo(props) {\n return (\n \n\n\n\n\n\n\n\n\n\n\n )\n}\n\nexport default FooterLogo;\n","export default function DiscordLogo(props) {\n return (\n \n\n\n\n )\n}\n","export default function TelegramLogo(props) {\n return (\n \n\n\n\n )\n}\n","export default function XLogo(props) {\n return (\n \n\n\n\n )\n}\n","import {\n WalletCoinbase,\n WalletFluent,\n WalletMetamask,\n WalletOkx,\n} from '../assets/svg'\n\nexport const KeyOfMetaMask = 'MetaMask'\nexport const KeyOfCoinbase = 'Coinbase'\nexport const KeyOfOkx = 'Okx'\nexport const KeyOfPortal = 'Fluent'\n\nexport const WalletConfig = {\n [KeyOfMetaMask]: {\n key: KeyOfMetaMask,\n name: 'MetaMask',\n website: 'https://metamask.io',\n icon: WalletMetamask,\n },\n [KeyOfCoinbase]: {\n key: KeyOfCoinbase,\n name: 'Coinbase Wallet',\n website: 'https://www.coinbase.com/wallet',\n icon: WalletCoinbase,\n },\n [KeyOfOkx]: {\n key: KeyOfOkx,\n name: 'Okx Wallet',\n website: 'https://www.okx.com/web3',\n icon: WalletOkx,\n },\n [KeyOfPortal]: {\n key: KeyOfPortal,\n name: 'Fluent',\n website: 'https://fluentwallet.com',\n icon: WalletFluent,\n info: 'Fluent Wallet only supports tokens on Conflux Core Space'\n },\n}\n\nexport const SupportedWallets = Object.keys(WalletConfig)\n","import {IS_DEV} from '../utils'\nimport {\n checkHexAddress,\n checkCfxTokenAddress,\n checkBtcAddress,\n} from '../utils/address'\nimport {\n NetworkArbitrumLogo,\n // NetworkAvalancheLogo,\n NetworkBitcoinLogo,\n NetworkBSCLogo,\n NetworkConfluxLogo,\n NetworkEthereumLogo,\n NetworkOECLogo,\n NetworkOptimismLogo,\n NetworkEmptyLogo,\n NetworkAvalancheLogo,\n NetworkDefaultLogo,\n} from '../assets/svg'\nimport {KeyOfMetaMask, KeyOfPortal} from './walletConfig'\n\n/**\n * ethereum config\n */\nexport const KeyOfEth = 'eth'\nexport const ScanUrlEth = IS_DEV\n ? 'https://sepolia.etherscan.io/'\n : 'https://etherscan.io'\nexport const ChainIdEth = IS_DEV ? '11155111' : '1'\nexport const ChainNameEth = IS_DEV ? 'Ethereum Sepolia' : 'Ethereum'\n\n/**\n * arbitum one config\n */\nexport const KeyOfArb = 'arbitrum'\nexport const ScanUrlArb = IS_DEV\n ? 'https://goerli.arbiscan.io/'\n : 'https://arbiscan.io/'\nexport const ChainIdArb = IS_DEV ? '421613' : '42161'\nexport const ChainNameArb = IS_DEV ? 'Arbitrum Goerli' : 'Arbitrum One'\n\n/**\n * optimism config\n */\nexport const KeyOfOp = 'optimism'\nexport const ScanUrlOp = IS_DEV\n ? 'https://goerli-optimism.etherscan.io/'\n : 'https://optimistic.etherscan.io/'\nexport const ChainIdOp = IS_DEV ? '420' : '10'\nexport const ChainNameOp = IS_DEV ? 'Optimism Goerli' : 'Optimism'\n\n/**\n * avalanche config\n */\nexport const KeyOfAvax = 'avalanche'\nexport const ScanUrlAvax = IS_DEV\n ? 'https://testnet.avascan.info/'\n : 'https://avascan.info/'\nexport const ChainIdAvax = IS_DEV ? '43113' : '43114'\nexport const ChainNameAvax = IS_DEV ? 'Avalanche Fuji Testnet' : 'Avalanche'\n\n/**\n * bsc config\n */\nexport const KeyOfBsc = 'bsc'\nexport const ScanUrlBsc = IS_DEV\n ? 'https://testnet.bscscan.com'\n : 'https://bscscan.com'\nexport const ChainIdBsc = IS_DEV ? '97' : '56'\nexport const ChainNameBsc = IS_DEV\n ? 'Binance Smart Chain Testnet'\n : 'Binance Smart Chain'\n\n/**\n * oec config\n */\nexport const KeyOfOec = 'oec'\nexport const ScanUrlOec = IS_DEV\n ? 'https://www.oklink.com/okexchain-test'\n : 'https://www.oklink.com/okexchain'\nexport const ChainIdOec = IS_DEV ? '65' : '66'\nexport const ChainNameOec = IS_DEV ? 'OKExChain Testnet' : 'OKExChain'\n\n/**\n * conflux eSpace config\n */\nexport const KeyOfCfxESpace = 'cfxESpace'\nexport const ScanUrlCfxESpace = IS_DEV\n ? 'https://evmtestnet.confluxscan.io/'\n : 'https://evm.confluxscan.io/'\nexport const ChainIdCfxEspace = IS_DEV ? '71' : '1030'\nexport const ChainNameCfxEspace = IS_DEV\n ? 'Conflux eSpace Testnet'\n : 'Conflux eSpace'\n\n/**\n * conflux config\n */\nexport const KeyOfCfx = 'cfx'\nexport const ScanUrlCfx = IS_DEV\n ? 'https://testnet.confluxscan.io'\n : 'https://confluxscan.io'\nexport const MainnetCfx = '1029'\nexport const TestnetCfx = '1'\nexport const ChainIdCfx = IS_DEV ? TestnetCfx : MainnetCfx\nexport const ChainNameCfx = IS_DEV ? 'Conflux Testnet' : 'Conflux'\n\n/**\n * bitcoin config\n */\nexport const KeyOfBtc = 'btc'\nexport const ScanUrlBtc = IS_DEV\n ? 'https://blockstream.info/testnet'\n : 'https://blockstream.info'\n\nexport const ChainIdsBtc = {\n MAINNET: {name: 'Mainnet'},\n TESTNET: {name: 'Testnet'},\n}\n\nexport const displayFilter = obj => {\n return obj?.supported === 1 && obj?.in_token_list === 1\n}\n\n/**\n * chain config\n */\nexport const ChainConfig = {\n [KeyOfEth]: {\n key: KeyOfEth,\n id: ChainIdEth,\n icon: ChainIconSrc(KeyOfEth),\n fullName: ChainNameEth, //full name of the chain\n shortName: 'Ethereum', // short name of chain, usually used for fetching api\n tokenName: 'ETH', //the name of native token for this chain\n nativeToken: '0x0000000000000000000000000000000000000001',\n provider: null,\n checkAddress: checkHexAddress,\n displayFilter,\n scanUrl: ScanUrlEth,\n scanTxUrl: ScanUrlEth + '/tx/',\n scanTokenUrl: ScanUrlEth + '/token/',\n commonTokens: IS_DEV\n ? [\n 'eth',\n '0x08130635368aa28b217a4dfb68e1bf8dc525621c', //AfroX\n '0x27ccd03d1eccb2cbced1efbb18554bbfd526800a', //ecfx\n ]\n : [\n 'eth',\n '0xdac17f958d2ee523a2206206994597c13d831ec7', //usdt\n '0xa1f82e14bc09a1b42710df1a8a999b62f294e592', //ecfx\n ],\n wallet: KeyOfMetaMask,\n remainderAmount: 0.15, //when you shuttle in some tokens,for example: ETH-cETH,you must have reminder of this amount to pay fee\n decimals: 18,\n rpcUrl: IS_DEV ? 'https://eth-sepolia.g.alchemy.com/v2/demo' : 'https://eth.blockrazor.xyz',\n },\n [KeyOfArb]: {\n key: KeyOfArb,\n id: ChainIdArb,\n icon: ChainIconSrc(KeyOfArb),\n fullName: ChainNameArb, //full name of the chain\n shortName: 'Arbitrum One', // short name of chain, usually used for fetching api\n tokenName: 'ETH', //the name of native token for this chain\n nativeToken: '0x0000000000000000000000000000000000000001',\n checkAddress: checkHexAddress,\n displayFilter,\n scanUrl: ScanUrlArb,\n scanTxUrl: ScanUrlArb + '/tx/',\n scanTokenUrl: ScanUrlArb + '/token/',\n commonTokens: IS_DEV ? [] : [],\n wallet: KeyOfMetaMask,\n remainderAmount: 0.15, //when you shuttle in some tokens,for example: ETH-cETH,you must have reminder of this amount to pay fee\n decimals: 18,\n rpcUrl: IS_DEV ? 'https://goerli-rollup.arbitrum.io/rpc' : 'https://arb1.arbitrum.io/rpc',\n },\n [KeyOfOp]: {\n key: KeyOfOp,\n id: ChainIdOp,\n icon: ChainIconSrc(KeyOfOp),\n fullName: ChainNameOp, //full name of the chain\n shortName: 'Optimism', // short name of chain, usually used for fetching api\n tokenName: 'ETH', //the name of native token for this chain\n nativeToken: '0x0000000000000000000000000000000000000001',\n checkAddress: checkHexAddress,\n displayFilter,\n scanUrl: ScanUrlOp,\n scanTxUrl: ScanUrlOp + '/tx/',\n scanTokenUrl: ScanUrlOp + '/token/',\n commonTokens: IS_DEV ? [] : [],\n wallet: KeyOfMetaMask,\n remainderAmount: 0.15, //when you shuttle in some tokens,for example: ETH-cETH,you must have reminder of this amount to pay fee\n decimals: 18,\n rpcUrl: IS_DEV ? 'https://goerli.optimism.io' : 'https://mainnet.optimism.io',\n },\n [KeyOfAvax]: {\n key: KeyOfAvax,\n id: ChainIdAvax,\n icon: ChainIconSrc(KeyOfAvax),\n fullName: ChainNameAvax, //full name of the chain\n shortName: 'Avalanche', // short name of chain, usually used for fetching api\n tokenName: 'AVAX', //the name of native token for this chain\n nativeToken: '0x0000000000000000000000000000000000000001',\n checkAddress: checkHexAddress,\n displayFilter,\n scanUrl: ScanUrlAvax,\n scanTxUrl: ScanUrlAvax + '/tx/',\n scanTokenUrl: ScanUrlAvax + '/token/',\n commonTokens: IS_DEV ? [] : [],\n wallet: KeyOfMetaMask,\n remainderAmount: 0.15, //when you shuttle in some tokens,for example: ETH-cETH,you must have reminder of this amount to pay fee\n decimals: 18,\n rpcUrl: IS_DEV ? 'https://api.avax-test.network/ext/bc/C/rpc' : 'https://api.avax.network/ext/bc/C/rpc',\n },\n [KeyOfBsc]: {\n key: KeyOfBsc,\n id: ChainIdBsc,\n icon: ChainIconSrc(KeyOfBsc),\n fullName: ChainNameBsc,\n shortName: 'BSC',\n tokenName: 'BNB',\n nativeToken: '0x0000000000000000000000000000000000000001',\n checkAddress: checkHexAddress,\n displayFilter,\n scanUrl: ScanUrlBsc,\n scanTxUrl: ScanUrlBsc + '/tx/',\n scanTokenUrl: ScanUrlBsc + '/token/',\n commonTokens: IS_DEV\n ? ['bnb', '0xef3f743830078a9cb5ce39c212ec1ca807e45fe1']\n : ['bnb', '0x045c4324039da91c52c55df5d785385aab073dcf'],\n wallet: KeyOfMetaMask,\n remainderAmount: 0.002,\n decimals: 18,\n rpcUrl: IS_DEV ? 'https://bsc-testnet-dataseed.bnbchain.org' : 'https://bsc-dataseed.binance.org',\n },\n [KeyOfOec]: {\n key: KeyOfOec,\n id: ChainIdOec,\n icon: ChainIconSrc(KeyOfOec),\n fullName: ChainNameOec,\n shortName: 'OEC',\n tokenName: 'OKT',\n nativeToken: '0x0000000000000000000000000000000000000001',\n checkAddress: checkHexAddress,\n displayFilter,\n scanUrl: ScanUrlOec,\n scanTxUrl: ScanUrlOec + '/tx/',\n scanTokenUrl: ScanUrlOec + '/tokenAddr/',\n // commonTokens: ['okt', 'cfxk'],\n commonTokens: IS_DEV\n ? ['okt', '0xae6155367003e028b594f1139f2b6edbcb5bb297']\n : ['okt', '0xfcd4d15f09548cd90efcaf0b1d9531bba670b7b1'],\n wallet: KeyOfMetaMask,\n remainderAmount: 0.001,\n decimals: 18,\n rpcUrl: IS_DEV ? 'https://exchaintestrpc.okex.org' : 'https://exchainrpc.okex.org',\n },\n [KeyOfCfxESpace]: {\n key: KeyOfCfxESpace,\n id: ChainIdCfxEspace,\n icon: ChainIconSrc(KeyOfCfxESpace),\n fullName: ChainNameCfxEspace,\n shortName: 'Conflux eSpace',\n tokenName: 'CFX',\n nativeToken: '0x0000000000000000000000000000000000000001',\n checkAddress: checkHexAddress,\n displayFilter,\n scanUrl: ScanUrlCfxESpace,\n scanTxUrl: ScanUrlCfxESpace + 'tx/',\n scanTokenUrl: ScanUrlCfxESpace + '/address/',\n commonTokens: IS_DEV ? ['cfx'] : [],\n wallet: KeyOfPortal,\n remainderAmount: 1,\n supportedToChain: [KeyOfBsc],\n decimals: 18,\n rpcUrl: IS_DEV ? 'https://evmtestnet.confluxrpc.com' : 'https://evm.confluxrpc.com',\n },\n [KeyOfCfx]: {\n key: KeyOfCfx,\n id: ChainIdCfx,\n icon: ChainIconSrc(KeyOfCfx),\n fullName: ChainNameCfx,\n shortName: 'Conflux',\n tokenName: 'CFX',\n checkAddress: checkCfxTokenAddress,\n displayFilter,\n scanUrl: ScanUrlCfx,\n scanTxUrl: ScanUrlCfx + '/transaction/',\n scanTokenUrl: ScanUrlCfx + '/address/',\n commonTokens: IS_DEV\n ? [\n 'cfx',\n 'cfxtest:acbp2sm9d1ajzthsep0nkmpm0su0n4dzmeexzdcksf',\n 'cfxtest:acceftennya582450e1g227dthfvp8zz1p370pvb6r',\n ]\n : [\n 'cfx',\n 'cfx:acf2rcsh8payyxpg6xj7b0ztswwh81ute60tsw35j7',\n 'cfx:acdrf821t59y12b4guyzckyuw2xf1gfpj2ba0x4sj6',\n ],\n wallet: KeyOfPortal,\n remainderAmount: 1,\n decimals: 18,\n nativeToken: '0x0000000000000000000000000000000000000001',\n },\n [KeyOfBtc]: {\n key: KeyOfBtc,\n id: null,\n icon: ChainIconSrc(KeyOfBtc),\n fullName: 'Bitcoin',\n shortName: 'Bitcoin',\n tokenName: 'BTC',\n checkAddress: checkBtcAddress,\n displayFilter() {\n return true\n },\n scanUrl: ScanUrlBtc,\n scanTxUrl: ScanUrlBtc + '/tx/',\n commonTokens: [],\n remainderAmount: 0,\n },\n}\n\nexport const SupportedChains = Object.keys(ChainConfig)\n\n// set default chain to FromChain and ToChain when shuttle\nexport const DefaultFromChain = KeyOfEth\nexport const DefaultToChain = KeyOfCfx\nexport const SupportedChainIdsWeb3 = [\n ChainConfig[KeyOfEth].id,\n ChainConfig[KeyOfArb].id,\n ChainConfig[KeyOfOp].id,\n ChainConfig[KeyOfAvax].id,\n ChainConfig[KeyOfBsc].id,\n ChainConfig[KeyOfOec].id,\n ChainConfig[KeyOfCfxESpace].id,\n]\n\nexport const findChainConfigById = inputId => {\n for (let key in ChainConfig) {\n if (ChainConfig[key].id === inputId) {\n return ChainConfig[key]\n }\n }\n return ''\n}\n\nexport const findChainKeyById = inputId => {\n for (let key in ChainConfig) {\n if (ChainConfig[key].id === inputId) {\n return key\n }\n }\n return ''\n}\n\nexport function ChainIconSrc(chain) {\n let icon\n switch (chain) {\n case KeyOfEth:\n icon = NetworkEthereumLogo\n break\n case KeyOfArb:\n icon = NetworkArbitrumLogo\n break\n case KeyOfOp:\n icon = NetworkOptimismLogo\n break\n case KeyOfAvax:\n icon = NetworkAvalancheLogo\n break\n case KeyOfBsc:\n icon = NetworkBSCLogo\n break\n case KeyOfCfxESpace:\n case KeyOfCfx:\n icon = NetworkConfluxLogo\n break\n case KeyOfBtc:\n icon = NetworkBitcoinLogo\n break\n case KeyOfOec:\n icon = NetworkOECLogo\n break\n default:\n if (chain?.length) icon = NetworkDefaultLogo\n else icon = NetworkEmptyLogo\n break\n }\n return icon\n}\n","import {ChainConfig, KeyOfCfx} from '../constants/chainConfig'\nimport Big from 'big.js'\nimport BN from 'bn.js'\nimport {BigNumber} from '@ethersproject/bignumber'\nimport {BigNumZero} from '../constants'\nimport {checkCfxTokenAddress} from './address'\nimport {MD5, lib} from 'crypto-js'\n\nexport const IS_DEV =\n process.env.NODE_ENV === 'development' ||\n window.location.hostname.indexOf('dev') > -1 ||\n window.location.hostname.indexOf('testnet') > -1\n\nexport function getFileExtension(filename) {\n return filename.slice(((filename.lastIndexOf('.') - 1) >>> 0) + 2)\n}\n\nexport function calculateMD5(file) {\n return new Promise(function (resolve, reject) {\n var reader = new FileReader()\n reader.onload = function (e) {\n var wordArray = lib.WordArray.create(e.target.result)\n var md5Hash = MD5(wordArray).toString()\n resolve(md5Hash)\n }\n reader.onerror = function (e) {\n reject(e)\n }\n reader.readAsArrayBuffer(file)\n })\n}\n\nexport const getEllipsStr = (str, frontNum, endNum) => {\n if (str) {\n const length = str.length\n if (endNum === 0 && length <= frontNum) {\n return str.substring(0, frontNum)\n }\n return (\n str.substring(0, frontNum) +\n '...' +\n str.substring(length - endNum, length)\n )\n }\n return ''\n}\n\nexport function isNumber(value) {\n return /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(value)\n}\n\nexport function isHexPrefixed(str) {\n if (typeof str !== 'string') {\n throw new Error(\n \"[is-hex-prefixed] value must be type 'string', is currently type \" +\n typeof str +\n ', while checking isHexPrefixed.',\n )\n }\n\n return str.slice(0, 2) === '0x'\n}\n\nexport const addHexPrefix = function (str) {\n if (typeof str !== 'string') {\n return str\n }\n\n return isHexPrefixed(str) ? str : '0x' + str\n}\n\nexport const getMaxAmount = (chain, amount) => {\n const remainderAmount = ChainConfig[chain]?.remainderAmount\n let amountBig = new Big(amount)\n if (amountBig.gt(remainderAmount)) {\n return amountBig.minus(remainderAmount)\n } else {\n return BigNumZero\n }\n}\n\n// add 10%\nexport function calculateGasMargin(value, margin = 0.1) {\n const addedValue = BigNumber.from(value?.toString(10))\n .mul(BigNumber.from(10000).add(BigNumber.from(10000 * margin)))\n .div(BigNumber.from(10000))\n .toString()\n return addHexPrefix(new BN(addedValue, 10).toString(16))\n}\n\nexport function getExponent(decimals) {\n return `1e${decimals}`\n}\n\nexport function getChainIdRight(chain, chainId, address, addrType = 'user') {\n const {wallet, id} = ChainConfig[chain] || {}\n const isCfxChain = chain === KeyOfCfx ? true : false\n\n if (isCfxChain) {\n return wallet && chainId == id && checkCfxTokenAddress(address, addrType)\n }\n\n return wallet && chainId == id\n}\n\n//remove duplicate object from array\nexport function uniqueArray(arr) {\n return arr.filter((item, index) => {\n const _thing = JSON.stringify(item)\n return (\n index ===\n arr.findIndex(obj => {\n return JSON.stringify(obj) === _thing\n })\n )\n })\n}\n\n//whether contains object in array\nexport function containsObj(arr, obj) {\n arr.forEach(item => {\n const _item = JSON.stringify(item)\n if (JSON.stringify(obj) === _item) {\n return true\n }\n return false\n })\n}\n\n/**\n * whether the value of each object in this array equals to the value\n * @param {*} arr\n * @param {*} key\n * @param {*} value\n */\nexport function containsValueBy(arr, key, value) {\n arr.forEach(item => {\n if (item[key] === value) {\n return true\n }\n return false\n })\n}\n\nexport function removeTxByHash(trans, hash) {\n const index = trans.findIndex(tran => tran.hash == hash)\n trans.splice(index, 1)\n return trans\n}\n\nexport function removeTxs(trans, hashs) {\n hashs.forEach(hash => {\n trans.delete(hash)\n })\n return trans\n}\n\nexport function updateTx(trans, hash, data) {\n trans.set(hash, {...trans.get(hash), ...data})\n}\n","/**\n * Config of All Contract used by Shuttle\n */\nimport {\n KeyOfEth,\n KeyOfBsc,\n KeyOfOec,\n KeyOfBtc,\n KeyOfCfxESpace,\n KeyOfArb,\n KeyOfOp,\n KeyOfAvax,\n} from './index'\nimport {KeyOfPortal, KeyOfMetaMask} from './walletConfig'\nimport {\n DepositRelayer_ABI,\n DepositRelayer_CFX_ABI,\n CustodianImpl_ABI,\n CustodianImplReverse_ABI,\n TokenSponsor_ABI,\n TokenSponsorReverse_ABI,\n Balance_ABI,\n TokenBase_ABI,\n ZGBridge_ABI,\n Pool_ABI,\n} from '../abi'\nimport {IS_DEV} from '../utils'\n\nexport const ContractType = {\n depositRelayer: 'depositRelayer',\n depositRelayerCfx: 'depositRelayerCfx',\n custodianImpl: 'custodianImpl',\n custodianImplReverse: 'custodianImplReverse',\n tokenSponsor: 'tokenSponsor',\n tokenSponsorReverse: 'tokenSponsorReverse',\n balance: 'balance',\n tokenBase: 'tokenBase',\n bridge: 'bridge',\n pool: 'pool',\n}\n\nexport const ContractConfig = {\n [ContractType.pool]: {\n wallet: KeyOfMetaMask,\n abi: Pool_ABI,\n address: {\n [KeyOfBsc]: IS_DEV ? '0xc180d7263e12daf32847e03be82d0db5d6046437' : '',\n [KeyOfCfxESpace]: IS_DEV ? '0xa634ccb66dbdc04260f958c066031461671d76a5' : '0xc8aaa22dde503cb72561d678bc2d7978144d0319',\n [KeyOfEth]: IS_DEV ? '' : '0xc8aaa22dde503cb72561d678bc2d7978144d0319',\n },\n },\n [ContractType.bridge]: {\n wallet: KeyOfMetaMask,\n abi: ZGBridge_ABI,\n address: {\n [KeyOfArb]: IS_DEV ? '0x8a09a76fbeedc437b31b66a1f813e3fbb515974e' : '',\n [KeyOfOp]: IS_DEV ? '0x5eb19038ddbe7555490642981feb75af37bf9b34' : '',\n [KeyOfBsc]: IS_DEV ? '0xf0accf2b8e9c0af6dcd8f13df612137e988ae1db' : '',\n [KeyOfCfxESpace]: IS_DEV\n ? '0x33d0994481a61a3e789b3f24f0070a11a85d6fc5'\n : '0xc23b863a1547367b236d113f4933a561e56011cb',\n [KeyOfAvax]: IS_DEV ? '0x4d7449188003a33f9dc1f2542f03fd97725776c5' : '',\n [KeyOfEth]: IS_DEV ? '' : '0xc23b863a1547367b236d113f4933a561e56011cb',\n },\n },\n [ContractType.depositRelayer]: {\n wallet: KeyOfMetaMask,\n abi: DepositRelayer_ABI,\n address: {\n [KeyOfEth]: IS_DEV\n ? '0xF84b35F22cd7D4fca9Fd83abdC71347074ED71C5'\n : '0x02a9656f6851527e2199ce0ad3c15adddbaf734f',\n [KeyOfBsc]: IS_DEV\n ? '0x95edfd5fd720ace4cd585a469e5d8f12a448e27c'\n : '0x50468a03643ae9664c3c40b2bdcd4ebc8a6bc1f3',\n [KeyOfOec]: IS_DEV\n ? '0x5cF9C20DE32aE58d33Cb8C22e73d9b2B2E886AdA'\n : '0x214c2958C04150846A442A7b977F9f190B603F31',\n },\n },\n [ContractType.depositRelayerCfx]: {\n wallet: KeyOfPortal,\n abi: DepositRelayer_CFX_ABI,\n address: {\n [KeyOfEth]: IS_DEV\n ? 'cfxtest:acfuhfjw1cg8d9mn2kbk7ts5xxx1jy48r62p0fn5zn'\n : 'cfx:acesn0rpwutkb0ex9cghm91rs4dj60szk6ayzcm9aw',\n [KeyOfBsc]: IS_DEV\n ? 'cfxtest:acau4v7hac8r01h659u2m525dg5w0391pjb406f0m2'\n : 'cfx:acbsxck3mt6tdcxpbnxunx3wy29fy5k5m6d5cnmpy4',\n [KeyOfOec]: IS_DEV\n ? 'cfxtest:acd2cgm2f7yph27ycsyes1zg45yysccfna5dsm18jc'\n : 'cfx:acg8v55scuua60xcfheggkr5cry179kx0ef6gjcs64',\n },\n },\n [ContractType.custodianImpl]: {\n wallet: KeyOfPortal,\n abi: CustodianImpl_ABI,\n address: {\n [KeyOfEth]: IS_DEV\n ? 'cfxtest:acbuck0rc2pgaf2wh4ber14hhtwgvzww6eryn3kr0t'\n : 'cfx:aceu6t9m2wvpgtnzww8f13vstf2s8zeb6a4eja1756',\n [KeyOfBtc]: IS_DEV\n ? 'cfxtest:acbuck0rc2pgaf2wh4ber14hhtwgvzww6eryn3kr0t'\n : 'cfx:aceu6t9m2wvpgtnzww8f13vstf2s8zeb6a4eja1756',\n [KeyOfBsc]: IS_DEV\n ? 'cfxtest:acg8g810ntrv2wn62mjd7jn8brackkcc6pxv3u47ae'\n : 'cfx:acb3gfhjazfbxtajmfm1x5vc12drvs382ew0ykwyv8',\n [KeyOfOec]: IS_DEV\n ? 'cfxtest:achs3f2knh85024646aex8j226y96ynukesc46s63h'\n : 'cfx:acfscwx5sr9yfasnypgdmujc71gt66sajpzr0mhzpz',\n },\n },\n [ContractType.custodianImplReverse]: {\n wallet: KeyOfPortal,\n abi: CustodianImplReverse_ABI,\n address: {\n [KeyOfEth]: IS_DEV\n ? 'cfxtest:accjppmacssdnw1neymw6h27w2ze3guz9pzmdwejpr'\n : 'cfx:acfphjkmvy23zww7tpzrrxp3hrs6r70bbyke5zfb5z',\n [KeyOfBsc]: IS_DEV\n ? 'cfxtest:acdbc6vygv2rcejrf59rga0b1ze52h94by3en9b77n'\n : 'cfx:acfgmctw40vy2a608uey5g9t32b8m4kp1268zwhrh1',\n [KeyOfOec]: IS_DEV\n ? 'cfxtest:acbsbs2cp9secres4kfd3zvwbp42zrr4fee3unj3bz'\n : 'cfx:acf0xp9vrv55gkft3tjntkjagvwme19vcu2wsj39fz',\n },\n },\n //actually the tokenSponsor contract is no longer usefull after claim feature,but keep it for a short time\n [ContractType.tokenSponsor]: {\n wallet: KeyOfPortal,\n abi: TokenSponsor_ABI,\n address: {\n [KeyOfEth]: IS_DEV\n ? 'cfxtest:achw291k5c4yd8r2efdxz1w6z5n5y8hddernmat51y'\n : 'cfx:acfbfhg8bk3u9pf26rm8h2pmmru7csfkna4pfvy6ac',\n [KeyOfBtc]: IS_DEV\n ? 'cfxtest:achw291k5c4yd8r2efdxz1w6z5n5y8hddernmat51y'\n : 'cfx:acfbfhg8bk3u9pf26rm8h2pmmru7csfkna4pfvy6ac',\n [KeyOfBsc]: IS_DEV\n ? 'cfxtest:aca2kmezyet575cusyzhhp2jmwc1b4ka1ynevxeycf'\n : 'cfx:acfet2rcf4uag2daavzrsddkkvefpz4wmp1n76msw4',\n [KeyOfOec]: IS_DEV\n ? 'cfxtest:aca6tuc7cyarypp9ht8tkh34suuasv7uz6myay066j'\n : 'cfx:acc3zs32wsn06b5betf8g1g1phb7cg24xpbfjnfg7j',\n },\n },\n //actually the tokenSponsor contract is no longer usefull after claim feature,but keep it for a short time\n [ContractType.tokenSponsorReverse]: {\n wallet: KeyOfPortal,\n abi: TokenSponsorReverse_ABI,\n address: {\n [KeyOfEth]: IS_DEV\n ? 'cfxtest:acbjrt1zdnpf8xxknmxg2wruu1fbbagv5uawx0s1pk'\n : 'cfx:ach579brthtn13szzxzxcjsn6bt1vbdr4p8sej5eex',\n [KeyOfBsc]: IS_DEV\n ? 'cfxtest:acgw7pkuhvb8nk1a98jjzveugn7bkhj9za79hgwu4p'\n : 'cfx:aceftme5ycg8zj0gw71b3r1kurzpmhpn92ka1x565t',\n [KeyOfOec]: IS_DEV\n ? 'cfxtest:acfkp578z73dhecgprf8n4rd9g4751049yd75xun65'\n : 'cfx:acghjp9u0s4kgbars93dun5kftjhe1xjre3fa6smv4',\n },\n },\n [ContractType.balance]: {\n wallet: KeyOfPortal,\n abi: Balance_ABI,\n address: IS_DEV\n ? 'cfxtest:achxne2gfh8snrstkxn0f32ua2cf19zwkyw9tpbc6k'\n : 'cfx:achxne2gfh8snrstkxn0f32ua2cf19zwky2y66hj2d',\n },\n [ContractType.tokenBase]: {\n wallet: KeyOfPortal,\n abi: TokenBase_ABI,\n address: '',\n },\n}\n","import {\n TokenBNBLogo,\n TokenBTCLogo,\n TokenCFXLogo,\n TokenDAILogo,\n TokenDefaultLogo,\n TokenETHLogo,\n TokenEmptyLogo,\n TokenUSDCLogo,\n TokenUSDTLogo,\n} from '../assets/svg'\n\nexport const TokenConfig = {\n}\n\nexport function TokenIconSrc(token) {\n let icon\n switch (token) {\n case 'BNB':\n icon = TokenBNBLogo\n break\n case 'BTC':\n icon = TokenBTCLogo\n break\n case 'CFX':\n icon = TokenCFXLogo\n break\n case 'DAI':\n icon = TokenDAILogo\n break\n case 'ETH':\n icon = TokenETHLogo\n break\n case 'USDC':\n icon = TokenUSDCLogo\n break\n case 'USDT':\n icon = TokenUSDTLogo\n break\n default:\n if (token?.length) icon = TokenDefaultLogo\n else icon = TokenEmptyLogo\n break\n }\n return icon\n}\n\nexport const AddressOne = '0x0000000000000000000000000000000000000001';\n\nexport const tokenContractsInfo = {\n // eth mainnet\n '1+0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': { // USDC\n symbol: 'USDC',\n name: 'USDC',\n pegged: '0xad03020ac793f956a4fcf652a7e7624a30dcfc62',\n priceName: 'USDCUSDT',\n },\n '1+0xdac17f958d2ee523a2206206994597c13d831ec7': { // USDT\n symbol: 'USDT',\n name: 'USDT',\n pegged: '0x0ffaa757feff390d1718743fbdb8447bfd695696',\n priceName: 'USDCUSDT',\n },\n\n '11155111+0x46e988dc4c0a149f83d09281d7f31fe9e65d9156': { // eth sepolia USDT\n symbol: 'USDT',\n name: 'USDT',\n pegged: '0xa5000d7bd6afcb205206efd06602c9d36681656a',\n priceName: 'USDCUSDT',\n },\n '11155111+0x5a8e3980d4e9052b116bbd5278d8483167060f2f': { // eth sepolia USDC\n symbol: 'USDC',\n name: 'USDC',\n pegged: '0x40cfe7905e375f2d1158e9a9d297e4e51f74a619',\n priceName: 'USDCUSDT',\n },\n\n '1030+0x6963EfED0aB40F6C3d7BdA44A05dcf1437C44372': { // USDC eSpace\n symbol: 'USDC',\n name: 'USDC',\n pegged: '0xad03020ac793f956a4fcf652a7e7624a30dcfc62',\n priceName: 'USDCUSDT',\n },\n '1030+0xfe97E85d13ABD9c1c33384E796F10B73905637cE': { // USDT eSpace\n symbol: 'USDT',\n name: 'USDT',\n pegged: '0xcbd2a243c0f2c6f0dd9fee178bc8cb724c8e57e9',\n priceName: 'USDCUSDT',\n },\n\n // cfx eSpace testnet\n '71+0x0000000000000000000000000000000000000001': { // CFX\n symbol: 'CFX',\n name: 'CFX',\n pegged: '0x797e0038eee764aaa897efd09f2a28bccfbf1a3c',\n priceName: 'CFXUSDT',\n },\n '71+0x7c8Db2BdB4A0EE722D8D4B70D2a02c15DDBaF517': { // ETH\n symbol: 'zgETH',\n name: 'zgETH',\n pegged: '0xc7f56d86a7c33834a5a9f38562979efd9ef7e8a3',\n priceName: 'ETHUSDT',\n },\n '71+0xa84D84BDBB4Abce2d1aef6bE85323953F877E01D': { // USDC\n symbol: 'zgUSDC',\n name: 'zgUSDC',\n pegged: '0x207581a4d99d450aa85e8f90a6a58d700df3c508',\n priceName: 'USDCUSDT',\n },\n\n // bsc testnet\n '97+0x1cb9ee88a3c37a564364be9f4450c9d62a2c505d': { // CFX\n symbol: 'bCfx',\n name: 'bCfx',\n pegged: '0x45510d80073543a1c3a140728135a58e22a4d2c8',\n priceName: 'CFXUSDT',\n },\n '97+0x839f685FF05f3CcC6b8030c2BE23f09A39ed170D': { // ETH\n symbol: 'zgETH',\n name: 'zgETH',\n pegged: '0xc90fbb6794ec15bb0b129c43a24420922b78c5db',\n priceName: 'ETHUSDT',\n },\n '97+0x64a23998EbCEb3138F1C7C0E7A6C029C0166B294': { // USDC\n symbol: 'zgUSDC',\n name: 'zgUSDC',\n pegged: '0x34490ebee40a26e025b93911ebfb541dad2220ab',\n priceName: 'USDCUSDT',\n },\n\n // Optimism Goerli\n '420+0x51ec0cfcb174ae37712d9041f6d29269c0d23cfd': { // CFX\n symbol: 'bCfx',\n name: 'bCfx',\n },\n '420+0x1397F53e72AF8776Cc7dBAa468fb191b3d2C2531': { // ETH\n symbol: 'zgETH',\n name: 'zgETH',\n },\n '420+0x2757dC0AF733B79314bc5dBFA91b2922c18ECA88': { // USDC\n symbol: 'zgUSDC',\n name: 'zgUSDC',\n },\n\n // Arbitrum Goerli\n '421613+0x4c764b397de55948e0ba66b644b1f1f37fa4dd62': { // CFX\n symbol: 'bCfx',\n name: 'bCfx',\n },\n '421613+0x781F8b25a1Bb374A7c8fcff551f493397377106E': { // ETH\n symbol: 'zgETH',\n name: 'zgETH',\n },\n '421613+0x6a88cC44C07654bC0ba5fA45450956a1a9868658': { // USDC\n symbol: 'zgUSDC',\n name: 'zgUSDC',\n },\n\n // Avalanche\n '43113+0x7BDDD49F9E3c924f347e47c7B5BA4a55393A610B': { // CFX\n symbol: 'bCfx',\n name: 'bCfx',\n },\n '421613+0x51Ec0Cfcb174AE37712D9041F6d29269c0d23CfD': { // ETH\n symbol: 'zgETH',\n name: 'zgETH',\n },\n '421613+0x8C0b5f22C24c2BCDd38D21a3AfcB0D2e7F67D397': { // USDC\n symbol: 'zgUSDC',\n name: 'zgUSDC',\n },\n};\n","import Big from 'big.js'\nimport { IS_DEV } from '../utils'\n\nBig.DP = 40\nBig.NE = -40\nBig.PE = 1000\n\nexport const NetworkContextName = 'NETWORK'\n\nexport const TypeConnectWallet = {\n uninstalled: 'uninstalled',\n loading: 'loading',\n error: 'error',\n success: 'success',\n}\n\nexport const ProxyUrlPrefix = {\n shuttleflow: '/rpctx',\n sponsor: '/rpctoken',\n zg: '/rpcnext',\n}\n\n/**\n * interval time config\n */\nexport const IntervalTime = {\n fetchBalance: 3000,\n fetchTokenList: 6000,\n}\n\nexport const BigNumZero = new Big(0)\n\nexport const ZeroAddrHex = '0x0000000000000000000000000000000000000000'\n\nexport const TxReceiptModalType = {\n ongoing: 'ongoing',\n success: 'success',\n error: 'error',\n}\n\nexport const SendStatus = {\n ongoing: 'waiting',\n success: 'success',\n error: 'failed',\n claim: 'claim',\n}\n\nexport const ClaimStatus = {\n ongoing: 'ongoing',\n success: 'success',\n error: 'error',\n}\n\nexport const MobileBreakpoint = 768\n\nexport const Decimal18 = '18'\n\nexport const TypeAccountStatus = {\n unconnected: 'unconnected',\n success: 'success',\n error: 'error',\n}\n\n/**\n * Type of cached tx type\n */\nexport const TypeTransaction = {\n transaction: 'transaction', //common transaction,for example: send for native token or transfer for erc20 token\n approve: 'approve', //approve for erc20 token\n}\n\n/**\n * Status of shuttle transaction, mainly for local environment\n */\nexport const TransactionStatus = {\n pending: 'pending',\n waiting: 'waiting',\n success: 'success',\n error: 'error',\n skip: 'skip',\n}\n\n/**\n * Status of zg deposit\n */\nexport const DepositStatus = {\n wait_for_confirm: 'WAIT_FOR_CONFIRM',\n wait_for_signature: 'WAIT_FOR_SIGNATURE',\n wait_for_claim: 'WAIT_FOR_CLAIM',\n claiming: 'CLAIMING',\n claimed: 'CLAIMED',\n failed: 'CLAIM_FAILED',\n}\n\nexport const UserOperationStatus = {\n doing: 'doing',\n finished: 'finished',\n}\n\nexport const Millisecond = {\n day: 24 * 60 * 60 * 1000,\n}\n\nexport const ClaimButtonType = {\n twoStep: 'twoStep',\n common: 'common',\n}\n\nexport const TxStatus = {\n submitted: 'submitted',\n success: 'success',\n error: 'error',\n}\n\nexport const supportedPools = IS_DEV ? [\n '97+0x1cb9ee88a3c37a564364be9f4450c9d62a2c505d',\n '97+0x839f685FF05f3CcC6b8030c2BE23f09A39ed170D',\n '97+0x64a23998EbCEb3138F1C7C0E7A6C029C0166B294',\n '71+0x0000000000000000000000000000000000000001',\n '71+0x7c8Db2BdB4A0EE722D8D4B70D2a02c15DDBaF517',\n '71+0xa84D84BDBB4Abce2d1aef6bE85323953F877E01D',\n] : [\n '1+0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n '1+0xdac17f958d2ee523a2206206994597c13d831ec7',\n '1030+0x6963EfED0aB40F6C3d7BdA44A05dcf1437C44372',\n '1030+0xfe97E85d13ABD9c1c33384E796F10B73905637cE',\n]\n\nexport * from './chainConfig'\nexport * from './contractConfig'\nexport * from './tokenConfig'\nexport * from './walletConfig'\n","const { useState, useEffect } = require(\"react\");\n// import { provider as fluentProvider } from '@cfxjs/use-wallet'\nimport { format } from 'js-conflux-sdk';\nimport { useAccount, Unit } from '@cfxjs/use-wallet';\n\nexport const useTrackCfxErc20Balance = (tokenAddress) => {\n const account = useAccount();\n\n const [balance, setBalance] = useState(undefined);\n\n useEffect(() => {\n if (!account) {\n setBalance(undefined);\n return;\n }\n const timer = setInterval(() => {\n const fluentProvider = window.fluent;\n if (!fluentProvider) return;\n fluentProvider.request({\n method: `cfx_call`,\n params: [\n {\n data: '0x70a08231000000000000000000000000' + format.hexAddress(account).slice(2),\n to: tokenAddress,\n },\n 'latest_state',\n ],\n })\n .then((minUnitBalance) => {\n setBalance(Unit.fromMinUnit(minUnitBalance))\n })\n .catch(() => {})\n }, 3000)\n\n return () => clearInterval(timer);\n }, [account, tokenAddress]);\n\n return balance;\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport {useMemo, useState, useCallback, useEffect} from 'react'\nimport {connect, useStatus, useChainId, useBalance as useFluentBalance } from '@cfxjs/use-wallet'\nimport {ERC20_ABI} from '../abi'\nimport {MainnetCfx, TestnetCfx, TypeConnectWallet, KeyOfCfx} from '../constants'\nimport {getChainIdRight} from '../utils'\nimport {checkCfxTokenAddress} from '../utils/address'\nimport { useTrackCfxErc20Balance } from './useTrackCfxErc20Balance'\n// eslint-disable-next-line\nimport { useAccount as useFluentAccount } from '@cfxjs/use-wallet-react/conflux/Fluent';\n\nfunction getESpaceProvider() {\n return window.conflux;\n}\n\nfunction useChainNetId() {\n const coreChainId = useChainId()\n const [chainId, setChainId] = useState(coreChainId);\n\n const isCore = coreChainId === MainnetCfx || coreChainId === TestnetCfx\n const provider = getESpaceProvider()\n\n useEffect(() => {\n if (!coreChainId) return;\n if (isCore) {\n setChainId(coreChainId)\n } else {\n provider.request({\n method: 'eth_chainId'\n }).then(data => {\n setChainId('' + parseInt(data));\n }).catch(err => {\n console.error(err);\n })\n }\n }, [coreChainId, isCore, provider])\n\n return {\n chainId,\n isCore,\n }\n}\n\n// function useFluentAccount() {\n// const coreAccount = useAccount();\n// const [account, setAccount] = useState(coreAccount);\n\n// const {isCore, chainId} = useChainNetId();\n// const provider = getESpaceProvider()\n// useEffect(() => {\n// if (isCore) {\n// setAccount(coreAccount);\n// return;\n// }\n// if (!provider) return;\n// provider.request({\n// method: 'eth_accounts',\n// }).then(accounts => {\n// setAccount(accounts[0]);\n// });\n// }, [chainId, coreAccount, isCore, provider])\n\n// return account;\n// }\n\nexport function useConnect() {\n const status = useStatus()\n const address = useFluentAccount()\n const [error, setError] = useState(null)\n const {chainId, isCore} = useChainNetId()\n const type = useMemo(() => {\n if (status === 'not-active') return TypeConnectWallet.error\n if (status === 'active') return TypeConnectWallet.success\n if (status === 'not-installed') return TypeConnectWallet.uninstalled\n if (status === 'in-activating') return TypeConnectWallet.loading\n return TypeConnectWallet.loading\n }, [status])\n\n if (window && window.conflux && window.conflux.autoRefreshOnNetworkChange)\n window.conflux.autoRefreshOnNetworkChange = false\n\n const login = useCallback(() => {\n const p = connect()\n p.catch(err => {\n setError(err)\n if (err.code === 4001) {\n // EIP-1193 userRejectedRequest error\n // If this happens, the user rejected the connection request.\n console.error('Please connect to ConfluxPortal.')\n } else {\n console.error(err)\n }\n })\n return p\n }, [])\n\n return {\n type,\n activate: login,\n error,\n address,\n chainId,\n isCore,\n }\n}\n\nexport function useContract(address, ABI) {\n const confluxJS = window?.confluxJS\n const {chainId} = useConnect(KeyOfCfx)\n const isChainIdRight =\n getChainIdRight(KeyOfCfx, chainId, address, 'contract') || !address\n return useMemo(\n () => {\n if (!ABI || !confluxJS || !isChainIdRight) return null\n try {\n return confluxJS.Contract({abi: ABI, address})\n } catch (error) {\n console.log('get cfx contract error: ', error)\n return null\n }\n },\n [address, Boolean(confluxJS)],\n isChainIdRight,\n )\n}\n\nexport function useTokenContract(tokenAddress) {\n return useContract(tokenAddress || '', ERC20_ABI)\n}\n\n/**\n * get CFX balance from Conflux Network\n * @returns balance of account\n */\n// eslint-disable-next-line no-unused-vars\nexport function useNativeTokenBalance(_) {\n const balance = useFluentBalance();\n return balance ? balance.toDecimalMinUnit() : null;\n}\n\nexport function useTokenBalance(tokenAddress) {\n // eslint-disable-next-line no-unused-vars\n const balance = useTrackCfxErc20Balance(tokenAddress);\n return balance ? balance.toDecimalMinUnit() : null;\n}\n\nexport function useBalance(address, tokenAddress) {\n const isNativeToken = !checkCfxTokenAddress(tokenAddress, 'contract')\n const tokenBalance = useTokenBalance(tokenAddress)\n const nativeTokenBalance = useNativeTokenBalance(address)\n return isNativeToken ? nativeTokenBalance : tokenBalance\n}\n\n\n/**\n * call some method from contract and get the value\n * @param {*} contract\n * @param {*} method\n * @param {*} params\n * @returns\n */\nexport function useContractState(tokenAddress, method, params, interval) {\n const contract = useTokenContract(tokenAddress)\n const [data, setData] = useState(null)\n\n useEffect(() => {\n const getContractData = async params => {\n try {\n const res = await contract?.[method](...params)\n setData(res)\n } catch (error) {\n setData(null)\n }\n }\n\n if (interval) {\n getContractData(params)\n const timeInterval = setInterval(() => getContractData(params), interval)\n return () => clearInterval(timeInterval)\n } else {\n getContractData(params)\n }\n }, [...params, interval, Boolean(contract)])\n\n return data\n}\n","import create from 'zustand'\nimport {KeyOfPortal, KeyOfMetaMask, KeyOfCoinbase, KeyOfOkx} from '../constants'\n\nlet Store = null\n\nconst createStore = () =>\n create(set => ({\n init: false,\n walletMap: {\n [KeyOfPortal]: {},\n [KeyOfMetaMask]: {},\n [KeyOfCoinbase]: {},\n [KeyOfOkx]: {},\n },\n initialize: () => set({init: true}),\n setWalletMap: walletMap => set({walletMap}),\n setField: (walletKey, key, value) =>\n set(state => {\n const walletMap = state.walletMap\n if (walletMap[walletKey]) {\n walletMap[walletKey][key] = value\n return walletMap\n }\n return state.walletMap\n }),\n }))\n\nexport const useWalletState = () => {\n if (!Store) Store = createStore()\n const useStore = Store\n const state = useStore()\n\n return state\n}\n","import { InjectedConnector } from 'wagmi/connectors/injected'\nimport { KeyOfMetaMask } from '../constants'\n\n\nexport const metaMaskConnector = new InjectedConnector({\n options: {\n name: KeyOfMetaMask,\n getProvider: () => {\n if (window?.ethereum) {\n const injectedProvider = window.ethereum\n\n if (injectedProvider.providers) {\n const realProvider = injectedProvider.providers.find(p => p.isMetaMask && !p.isFluent)\n if (realProvider) return realProvider\n }\n\n if (injectedProvider.isMetaMask && !injectedProvider.isFluent) {\n return injectedProvider\n }\n }\n return undefined\n }\n }\n})\n","import { InjectedConnector } from 'wagmi/connectors/injected'\nimport { KeyOfCoinbase } from '../constants';\n\nexport const coinbaseConnector = new InjectedConnector({\n options: {\n name: KeyOfCoinbase,\n getProvider: () => {\n if (window?.ethereum) {\n const injectedProvider = window.ethereum\n\n if (injectedProvider.providers?.length) {\n const realProvider = injectedProvider.providers.find(p => p.isCoinbaseWallet)\n if (realProvider) return realProvider\n }\n\n if (injectedProvider.isCoinbaseWallet) {\n return injectedProvider\n }\n }\n return undefined\n }\n }\n})\n","import { InjectedConnector } from 'wagmi/connectors/injected'\nimport { KeyOfOkx } from '../constants';\n\nexport const okxConnector = new InjectedConnector({\n options: {\n name: KeyOfOkx,\n getProvider: () => {\n return window?.okxwallet\n }\n }\n})\n","import {connect} from '@cfxjs/use-wallet'\nimport {KeyOfPortal, KeyOfMetaMask, KeyOfCoinbase, KeyOfOkx} from '../constants'\nimport {metaMaskConnector} from './metaMask'\nimport {coinbaseConnector} from './coinbase'\nimport {okxConnector} from './okx'\n\nclass ConnectorHub {\n constructor() {\n this.map = []\n }\n\n getConnector(wallet) {\n return this.map[wallet]\n }\n\n initEvents(connector, options) {\n if (options) {\n connector.getProvider().then(p => {\n options.onAccountsChanged &&\n p.on('accountsChanged', options.onAccountsChanged)\n options.onChainChanged && p.on('chainChanged', options.onChainChanged)\n })\n }\n }\n\n createConnector(wallet, options) {\n let con\n switch (wallet) {\n case KeyOfPortal:\n con = {\n connect,\n }\n break\n case KeyOfMetaMask:\n con = metaMaskConnector\n this.initEvents(con, options)\n break\n case KeyOfCoinbase:\n con = coinbaseConnector\n this.initEvents(con, options)\n break\n case KeyOfOkx:\n con = okxConnector\n this.initEvents(con, options)\n break\n default:\n break\n }\n this.map[wallet] = con\n return this.map[wallet]\n }\n}\n\nconst connectorHub = new ConnectorHub()\nexport default connectorHub\n","import { ChainConfig, KeyOfPortal } from '../constants'\nimport {\n useConnect as useConnectPortal,\n} from './usePortal'\nimport { useWalletState } from '../state/wallet'\nimport connecors from '../connectors'\nimport { useMemo } from 'react'\n\nexport function useWallet(wallet) {\n const connectObjPortal = useConnectPortal()\n\n const {walletMap} = useWalletState()\n\n let data = {}\n switch (wallet) {\n case KeyOfPortal:\n data = connectObjPortal\n break\n default:\n data = {\n ...(walletMap[wallet] || {}),\n connector: connecors.getConnector(wallet),\n }\n break\n }\n return data\n}\n\nexport function useWeb3Wallets() {\n const {walletMap} = useWalletState()\n\n const res = Object.values(walletMap).filter(wallet => wallet.address && !wallet.isCore).map(wallet => wallet.address)\n return res\n}\n\n/**\n * whether this address is native token in this chain\n * @param {*} chain\n * @param {*} address\n * @returns\n */\nexport function useIsNativeToken(chain, tokenAddress) {\n return useMemo(\n () => ChainConfig[chain]?.tokenName?.toLowerCase() === tokenAddress,\n [chain, tokenAddress],\n )\n}\n","const timeout = 6000\n\n/**\n * request the remote api\n * @param {*} url\n * @param {*} method rpc method\n * @param {*} params body params\n * @returns\n */\nexport default function jsonRpc(url, method, params) {\n const data = {id: 1, jsonrpc: '2.0', method, params}\n return fetch(url, {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n mode: 'cors', // no-cors, *cors, same-origin\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data), // body data type must match \"Content-Type\" header\n timeout,\n })\n .then(response => {\n if (!response.ok) {\n const error = new Error('An error occurred while fetching the data.')\n error.info = response.json()\n error.status = response.status\n throw error\n }\n return response.json()\n })\n .then(data => {\n return data.result\n })\n .catch(() => {})\n}\n","import jsonRpc from './request'\nimport {ProxyUrlPrefix, ZeroAddrHex} from '../constants'\nimport { mockTokenList } from './mockData'\n\nexport const RPC_Method = {\n getTokenList: 'getTokenList',\n searchToken: 'searchToken',\n getUserWallet: 'getUserWallet',\n getUserOperationByHash: 'getUserOperationByHash',\n getUserOperationList: 'getUserOperationList',\n getZGTokenList: 'getTokenList',\n getDepositList: 'getDepositList',\n}\n\nexport function requestAllTokenList(url) {\n if (process.env.NODE_ENV === 'development') {\n return mockTokenList\n }\n return jsonRpc(url, RPC_Method.getTokenList, [])\n}\n\nexport function requestToken(url, fromChain, toChain, address) {\n return jsonRpc(url, RPC_Method.searchToken, [fromChain, toChain, address])\n}\n\n/**\n *\n * @param {*} url api url\n * @param {*} address (String) user conflux address (shuttle-in) or external chain address (shuttle-out)\n * @param {*} defi (String) conflux defi address (for shuttleflow frontend, hard code zero address)\n * @param {*} fromChain (String) source chain (\"btc\" | \"cfx\"). source chain means the chain this token published on, not the chain user is on\n * @param {*} toChain (String) target chain (\"cfx\" | \"eth\" | \"bsc\"). target chain means the other chain in this cross-chain pair\n * @param {*} type (String) \"in\" | \"out\"\n */\nexport function requestUserWallet([url,\n address,\n defi = ZeroAddrHex,\n fromChain,\n toChain,\n type,]) {\n if (!fromChain || !toChain) return '';\n return jsonRpc(url, RPC_Method.getUserWallet, [\n address,\n defi,\n fromChain,\n toChain,\n type,\n ])\n}\n\n/**\n *\n * @param {*} url\n * @param {*} hash transaction hash\n * @param {*} type \"in\"(another chain to conflux) | \"out\" (conflux to another chain)\n * @param {*} fromChain\n * @param {*} toChain\n * @returns\n */\nexport function requestUserOperationByHash(\n url,\n hash,\n type,\n fromChain,\n toChain,\n) {\n return jsonRpc(url, RPC_Method.getUserOperationByHash, [\n hash,\n type,\n fromChain,\n toChain,\n ])\n}\n\n/**\n *\n * @param {*} url\n * @param {*} type \"in\" | \"out\"\n * @param {*} address user conflux address\n * @param {*} status [\"doing\", \"finished\"]\n * @param {*} fromChain\n * @param {*} toChain\n * @param {*} limit the maximum number of operations to return, <= 100\n * @param {*} defi conflux defi address (for shuttleflow frontend, hard code zero address)\n * @returns\n */\nexport function requestUserOperationList(\n url,\n type,\n address,\n status,\n fromChain,\n toChain,\n limit = 100,\n defi = ZeroAddrHex,\n) {\n return jsonRpc(url, RPC_Method.getUserOperationList, [\n {\n type,\n defi,\n address,\n status,\n from_chain: fromChain,\n to_chain: toChain,\n },\n 0,\n limit,\n ])\n}\n\nexport function requestZGTokenList() {\n return jsonRpc(ProxyUrlPrefix.zg, RPC_Method.getZGTokenList, [])\n}\n\nexport function requestDepositList(\n url,\n account,\n status,\n offset,\n limit = 100,\n) {\n return jsonRpc(url, RPC_Method.getDepositList, [\n {\n account,\n status,\n offset,\n limit,\n }\n ])\n}\n\nexport function requestVolumeSummary(url) {\n return jsonRpc(url, 'getVolumeSummary', [])\n}\n","import create from 'zustand'\nimport {persist} from 'zustand/middleware'\nimport fromEntries from 'object.fromentries'\nimport {TypeTransaction, TransactionStatus} from '../constants'\nimport {KeyOfCfx} from '../constants/chainConfig'\n\nlet Store = null\n\nconst mergeData = data => {\n const isToChainCfx = data?.toChain === KeyOfCfx ? true : false\n const infoData = {\n timestamp: Date.now(),\n tx_type: TypeTransaction.transaction,\n status: TransactionStatus.pending,\n in_or_out: isToChainCfx ? 'in' : 'out',\n }\n const mergedData = {...infoData, ...data}\n return mergedData\n}\n\nexport const createStore = () =>\n create(\n persist(\n (set, get) => ({\n transactions: {},\n setTransactions: transactions => {\n set({transactions: fromEntries(transactions)})\n },\n unshiftTx: tx => {\n let trans = get().transactions\n trans[tx.hash] = mergeData(tx)\n set({transactions: trans})\n },\n claimedTxs: {},\n setClaimedTxs: claimedTxs => {\n set({claimedTxs: fromEntries(claimedTxs)})\n },\n setTx: (hash, value) => {\n let trans = get().claimedTxs\n trans[hash] = value\n set({claimedTxs: trans})\n },\n }),\n {\n name: 'transactions', // unique name\n getStorage: () => localStorage,\n },\n ),\n )\n\nexport const useTxState = () => {\n if (!Store) Store = createStore()\n const useStore = Store\n const state = useStore()\n return state\n}\n","import create from 'zustand'\n\nlet Store = null\n\nconst createStore = () =>\n create(set => ({\n toBtcAddress: '',\n fromBtcAddress: '',\n fromChain: '',\n toChain: '',\n fromToken: '',\n tokenFromBackend: {},\n error: null,\n txClaimModalShown: false,\n setFromChain: fromChain => set({fromChain}),\n setToChain: toChain => set({toChain}),\n setFromToken: fromToken => set({fromToken}),\n setFromBtcAddress: fromBtcAddress => set({fromBtcAddress}),\n setToBtcAddress: toBtcAddress => set({toBtcAddress}),\n setTokenFromBackend: tokenFromBackend => set({tokenFromBackend}),\n setError: error => set({error}),\n setTxClaimModalShown: txClaimModalShown => set({txClaimModalShown}),\n }))\n\nexport const usePortalState = () => {\n if (!Store) Store = createStore()\n const useStore = Store\n const state = useStore()\n\n return state\n}\n","import { useEffect, useState } from \"react\";\n\nimport { ChainConfig, KeyOfCfx } from \"../constants/chainConfig\";\nimport { checkCfxTokenAddress, checkHexAddress } from \"../utils/address\";\nimport { requestZGTokenList, requestAllTokenList } from \"../utils/api\";\nimport { tokenContractsInfo, findChainConfigById, ProxyUrlPrefix } from \"../constants\";\n\nclass GetTokenListImplentation {\n fetch() {}\n getTokenList() {}\n}\n\nclass GetTokenListFromZG extends GetTokenListImplentation {\n constructor() {\n super();\n this.list = [];\n }\n\n getTokenInfo(key) {\n const info = tokenContractsInfo[Object.keys(tokenContractsInfo).find(k => k.toLowerCase() === key.toLowerCase())];\n if (!info) return {\n symbol: '',\n name: '',\n };\n return info;\n }\n\n applyChainInfo(token) {\n const chainInfo = findChainConfigById(token.chain_id)\n return {\n ...token,\n ...chainInfo,\n chainName: chainInfo?.fullName,\n decimals: token.decimals || chainInfo.decimals || 18\n }\n }\n\n async fetch() {\n if (this.list.length) return;\n const rawData = await requestZGTokenList() || [];\n const tokenInfo = rawData.map(async token => {\n if (findChainConfigById(token.chain_id).nativeToken === token.token_address)\n return {\n symbol: token.token_abbr,\n name: token.token_abbr,\n }\n const tokenContractKey = `${token.chain_id}+${token.token_address}`;\n try {\n const { symbol, name } = await this.getTokenInfo(tokenContractKey);\n return {\n symbol,\n name,\n }\n } catch (err) {\n console.log(\n `token ${token.token_abbr} on chain ${\n findChainConfigById(token.chain_id).chainName\n } error ${err}`,\n )\n }\n })\n const data = await Promise.all(tokenInfo).then(tokenInfo => {\n return rawData.map(this.applyChainInfo).map((token, index) => {\n return {\n ...token,\n ...tokenInfo[index],\n id: `${token.chain_id}+${token.token_address}`,\n }\n })\n })\n this.list = data;\n }\n getTokenList() {\n return this.list;\n }\n}\n\nclass GetTokenListFromSF extends GetTokenListImplentation {\n constructor() {\n super();\n this.list = [];\n }\n\n transformNativeTokenAddress(address) {\n if (!checkCfxTokenAddress(address) && !checkHexAddress(address))\n return \"0x0000000000000000000000000000000000000001\";\n return address;\n }\n\n mapSFTokenDataToZG(sfToken) {\n\t\tconst isFromCfx = sfToken.origin === \"cfx\";\n\t\tconst tokenAbbr = String(\n\t\t\tisFromCfx ? sfToken.symbol : sfToken.reference_symbol,\n\t\t).toUpperCase();\n const toTokenAddress = this.transformNativeTokenAddress(\n sfToken.reference,\n )\n\n\t\treturn [\n\t\t\t{\n\t\t\t\t...sfToken,\n\t\t\t\ttoken_address:\n\t\t\t\t\tsfToken.ctoken === KeyOfCfx\n\t\t\t\t\t\t? \"0x0000000000000000000000000000000000000001\"\n\t\t\t\t\t\t: sfToken.ctoken,\n\t\t\t\tchainName: ChainConfig[KeyOfCfx]?.fullName,\n\t\t\t\ttoken_abbr: tokenAbbr,\n\t\t\t\tchain_id: ChainConfig[KeyOfCfx].id,\n\t\t\t\ttoChains: [sfToken.to_chain],\n\t\t\t\tisSF: true,\n\t\t\t\tsymbol: sfToken.symbol,\n\t\t\t\tsfChain: KeyOfCfx,\n\t\t\t\tdisplay_symbol: sfToken.symbol,\n\t\t\t\tdisplay_name: sfToken.name,\n\t\t\t\taddress: sfToken.ctoken, // address may be string, such as 'eth', 'cfx'\n cfxDecimals: sfToken.ctoken === KeyOfCfx ? sfToken.decimals : 18, // decimals of tokens which are not cfx origin is 18\n\t\t\t},\n\t\t\t{\n\t\t\t\t...sfToken,\n\t\t\t\ttoken_address: toTokenAddress,\n\t\t\t\tchainName:\n\t\t\t\t\tChainConfig[isFromCfx ? sfToken.to_chain : sfToken.origin]?.fullName,\n\t\t\t\ttoken_abbr: tokenAbbr,\n\t\t\t\tchain_id: ChainConfig[isFromCfx ? sfToken.to_chain : sfToken.origin].id,\n\t\t\t\tisSF: true,\n\t\t\t\tsymbol: sfToken.reference_symbol,\n\t\t\t\tsfChain: isFromCfx ? sfToken.to_chain : sfToken.origin,\n\t\t\t\tdisplay_symbol: sfToken.reference_symbol,\n\t\t\t\tdisplay_name: sfToken.reference_name,\n\t\t\t\taddress: sfToken.reference, // address may be string, such as 'eth', 'cfx'\n\t\t\t},\n\t\t].map((token) => {\n\t\t\ttoken.id = `${token.sfChain || token.chainName}+${token.token_abbr}`; // sf token should use sfChain for id\n\t\t\treturn token;\n\t\t});\n\t};\n\n mapSFTokenListToZG(sfTokenList) {\n\t\tconst mappedData = sfTokenList\n\t\t\t.filter((token) => {\n\t\t\t\tif (token.origin === \"btc\" || token.to_chain === \"btc\") return true;\n\t\t\t\treturn token?.supported === 1 && token?.in_token_list === 1;\n\t\t\t})\n\t\t\t.flatMap(this.mapSFTokenDataToZG.bind(this));\n\t\tconst tokenAddressSet = new Set(\n\t\t\tmappedData.map(\n\t\t\t\t(token) => `${token?.chain_id}+${token?.token_abbr.toUpperCase()}`,\n\t\t\t),\n\t\t);\n\t\tconst uniqueTokenAddressList = [...tokenAddressSet];\n\t\tconst uniqueTokenList = uniqueTokenAddressList.map((tokenAddress) => {\n\t\t\tconst tokenData = mappedData.find(\n\t\t\t\t(token) =>\n\t\t\t\t\t`${token?.chain_id}+${token?.token_abbr.toUpperCase()}` ===\n\t\t\t\t\ttokenAddress,\n\t\t\t);\n\t\t\treturn tokenData;\n\t\t});\n\t\treturn uniqueTokenList;\n\t}\n\n async fetch() {\n if (this.list.length) return;\n const rawData = await requestAllTokenList(ProxyUrlPrefix.sponsor) || [];\n this.list = rawData;\n }\n\n getTokenList() {\n return this.mapSFTokenListToZG(this.list);\n }\n}\n\nexport const zgTokenListImpl = new GetTokenListFromZG();\nexport const sfTokenListImpl = new GetTokenListFromSF();\n\n/**\n * combine zg and sf token list\n * CAUTION: this list is for display only, it includes all the useable tokens\n */\nexport const useAllTokenList = () => {\n const [zgTokenList, setZgTokenList] = useState([]);\n const [sfTokenList, setSfTokenList] = useState([]);\n\n const isV2 = process.env.REACT_APP_ENABLE_V2 === 'true'\n\n useEffect(() => {\n if (isV2) {\n zgTokenListImpl.fetch().then(() => {\n setZgTokenList(zgTokenListImpl.getTokenList());\n });\n } else {\n setZgTokenList([])\n }\n // setZgTokenList(zgTokenListImpl.getTokenList());\n sfTokenListImpl.fetch().then(() => {\n setSfTokenList(sfTokenListImpl.getTokenList());\n });\n }, [])\n\n const res = [...zgTokenList];\n sfTokenList.forEach(token => {\n const sfId = `${token.chain_id}+${token.token_address}`\n const zgToken = res.find(t => t.id.toLowerCase() === sfId.toLowerCase())\n if (!zgToken) {\n res.push(token)\n } else {\n zgToken.sfSameToken = token\n token.symbol = token.symbol.includes(' (SF)') ? token.symbol : `${token.symbol} (SF)`\n res.push(token)\n }\n })\n\n\treturn res;\n};\n","import PropTypes from 'prop-types'\nimport {ChainIconSrc, findChainKeyById} from '../../../constants/chainConfig'\nimport {TokenIconSrc} from '../../../constants/tokenConfig'\n\nfunction TokenIcon({token, size = 38}) {\n const {token_abbr = '', chain_id = ''} = token\n\n const tokenIcon = TokenIconSrc(token_abbr)\n const chain = findChainKeyById(chain_id)\n const networkIcon = ChainIconSrc(chain)\n const networkSize = (size * 16) / 38\n\n return (\n \n \n {chain_id && }\n \n )\n}\n\nTokenIcon.propTypes = {\n token: PropTypes.object,\n size: PropTypes.number,\n}\n\nexport default TokenIcon\n","import {useWindowSize} from 'react-use'\nimport {useMemo} from 'react'\nimport {KeyOfCfx, KeyOfBtc, KeyOfCfxESpace} from '../constants/chainConfig'\nimport {MobileBreakpoint} from '../constants'\n\nexport function useIsCfxChain(chain) {\n const isCfxChain = useMemo(() => chain === KeyOfCfx || chain === KeyOfCfxESpace, [chain])\n return isCfxChain\n}\n\nexport function useIsBtcChain(chain) {\n const isBtcChain = useMemo(() => chain === KeyOfBtc, [chain])\n return isBtcChain\n}\n\nexport function useIsMobile() {\n const {width} = useWindowSize()\n if (width < MobileBreakpoint) return true\n return false\n}\n","import PropTypes from 'prop-types'\nimport {NavLink} from 'react-router-dom'\nimport {useLocation} from 'react-use'\nimport {useTranslation} from 'react-i18next'\nimport { useState } from 'react'\n\nimport { useIsMobile } from '../../../hooks'\nimport { HamburgerMenu, Close, Logo } from '../../../assets/svg'\n\nimport './header.css'\n\nfunction Header() {\n const {t} = useTranslation()\n const {pathname} = useLocation()\n const isMobile = useIsMobile()\n\n const handleClickLogo = () => {\n window.open('https://0g.ai/', '_blank')\n }\n\n if (pathname === '/maintenance' || pathname === '/notfound') {\n return null\n }\n const disableNav = pathname === '/request'\n const isV2 = process.env.REACT_APP_ENABLE_V2 === 'true'\n return isMobile ? : (\n
\n \n {!disableNav &&
\n \n {t('nav.portal')}\n \n {isV2 && \n {t('nav.pool')}\n }\n \n {t('nav.history')}\n \n
}\n
\n )\n}\n\nHeader.propTypes = {\n disableNav: PropTypes.bool,\n}\n\nfunction HeaderLink({to, children, disabled = false, ...props}) {\n const getStyle = () => {\n if (disabled) return 'text-gray-40'\n return 'text-gray-80'\n }\n return (\n \n {children}\n \n )\n}\n\nHeaderLink.propTypes = {\n to: PropTypes.string.isRequired,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n disabled: PropTypes.bool,\n}\n\nconst MobileHeader = () => {\n const [menuOpen, setMenuOpen] = useState(false);\n const {t} = useTranslation()\n const {pathname} = useLocation()\n const disableNav = pathname === '/request'\n\n const handleClickLogo = () => {\n window.open('https://0g.ai/', '_blank')\n }\n const isV2 = process.env.REACT_APP_ENABLE_V2 === 'true'\n return menuOpen ? (\n
\n
\n setMenuOpen(false)} />\n
\n
\n
\n setMenuOpen(false)}\n >\n {t('nav.portal')}\n \n
\n {isV2 &&
\n setMenuOpen(false)}\n >\n {t('nav.pool')}\n \n
}\n
\n setMenuOpen(false)}\n >\n {t('nav.history')}\n \n
\n
\n
\n ) : (\n
\n \n {!disableNav && setMenuOpen(true)} />}\n
\n )\n}\n\nexport default Header\n","import { useLocation } from \"react-use\";\n\nimport { FooterLogo, DiscordLogo, XLogo, TelegramLogo } from \"../../../assets/svg\";\n\nconst Footer = () => {\n const { pathname } = useLocation();\n\n if (pathname === '/notfound') {\n return null\n }\n\n const handleClickDiscord = () => {\n window.open(\"http://discord.gg/0glabs\", \"_blank\");\n }\n const handleClickTelegram = () => {\n window.open(\"https://t.me/web3_0glabs\", \"_blank\");\n }\n const handleClickX = () => {\n window.open(\"https://twitter.com/0G_labs\", \"_blank\");\n }\n\n return (\n
\n
\n \n \n
\n
\n

© 2023 Zero Gravity. All rights reserved.

\n
\n \n \n \n
\n
\n
\n );\n}\n\nexport default Footer;\n","import React, {useMemo} from 'react'\nimport PropTypes from 'prop-types'\n\nconst sizeStyleObj = {\n small: 'text-xs h-8',\n medium: 'text-sm h-10',\n large: 'text-base h-12',\n}\n\nconst iconSizeObj = {\n small: 'w-4 h-4',\n medium: 'w-4 h-4',\n large: 'w-5 h-5',\n}\n\nfunction Button({\n onClick,\n className = '',\n children,\n size = 'medium',\n color = 'primary',\n variant = 'contained',\n disabled = false,\n fullWidth = false,\n danger = false,\n startIcon,\n endIcon,\n ...props\n}) {\n const disabledStyle = useMemo(() => {\n if (disabled) {\n if (variant === 'text')\n return 'bg-transparent text-gray-40 cursor-not-allowed'\n else return 'bg-gray-20 text-gray-40 cursor-not-allowed'\n }\n return ''\n }, [disabled, variant])\n\n const colorStyle = useMemo(() => {\n if (disabled) return ''\n if (variant === 'text') {\n if (danger) return 'text-error bg-transparent hover:bg-error-10'\n if (color === 'primary')\n return 'text-gray-80 bg-transparent hover:bg-gray-10'\n } else if (variant === 'outlined') {\n if (danger)\n return 'border border-error text-error bg-gray-0 hover:border-error-dark hover:text-error-dark'\n if (color === 'primary')\n return 'border border-primary text-primary bg-gray-0 hover:border-primary-dark hover:text-primary-dark'\n } else if (variant === 'contained') {\n if (danger) return 'text-white bg-error hover:bg-error-dark'\n if (color === 'primary')\n return 'text-fuscia-100 bg-primary-fuscia hover:bg-primary-dark'\n else if (color === 'secondary')\n return 'text-secondary-1 bg-neutral-100'\n }\n return ''\n }, [disabled, variant, color, danger])\n\n const sizeStyle = sizeStyleObj[size] || ''\n const iconSize = iconSizeObj[size] || ''\n\n const iconColor = useMemo(() => {\n if (disabled) return 'text-gray-40'\n if (variant === 'contained') return 'text-white'\n return 'text-primary hover:text-primary-dark'\n }, [disabled, variant])\n\n const startIconComp = startIcon\n ? React.cloneElement(startIcon, {\n className: `mr-2 ${iconColor} ${iconSize} ${\n startIcon.props.className || ''\n }`,\n })\n : null\n\n const endIconComp = endIcon\n ? React.cloneElement(endIcon, {\n className: `ml-2 ${iconColor} ${iconSize} ${\n endIcon.props.className || ''\n }`,\n })\n : null\n\n return (\n onClick && onClick(e)}\n disabled={disabled}\n className={`\n flex justify-center items-center focus:outline-none rounded-full font-medium ${disabledStyle} ${colorStyle} ${sizeStyle} ${\n fullWidth ? 'w-full' : 'px-4'\n } ${className}`}\n {...props}\n >\n {startIconComp}\n {children}\n {endIconComp}\n \n )\n}\n\nButton.propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n color: PropTypes.string,\n variant: PropTypes.string,\n disabled: PropTypes.bool,\n fullWidth: PropTypes.bool,\n danger: PropTypes.bool,\n onClick: PropTypes.func,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n startIcon: PropTypes.node,\n endIcon: PropTypes.node,\n}\n\nexport default Button\n","import PropTypes from 'prop-types'\nimport {CircleBg, SquareBg} from '../../assets/svg'\n\nfunction WrapIcon({\n type,\n size = 'w-4 h-4',\n children,\n className = '',\n onClick,\n clickable = true,\n ...props\n}) {\n return (\n onClick && onClick(e)}\n aria-hidden=\"true\"\n className={`${size} relative flex justify-center items-center ${\n clickable ? 'cursor-pointer' : ''\n } ${className}`}\n {...props}\n >\n {type === 'circle' && }\n {type === 'square' && }\n \n {children}\n \n \n )\n}\n\nexport default WrapIcon\n\nWrapIcon.propTypes = {\n type: PropTypes.oneOf(['circle', 'square']).isRequired,\n size: PropTypes.string,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n className: PropTypes.string,\n onClick: PropTypes.func,\n clickable: PropTypes.bool,\n}\n","import Notification from 'rc-notification'\nimport {Close} from '../../assets/svg'\nimport {\n ErrorFilled,\n SuccessFilled,\n WarningFilled,\n InfoFilled,\n} from '../../assets/svg'\n\nexport const NotificationPlacement = [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight',\n]\n\nexport const IconTypes = ['success', 'info', 'error', 'warning']\n\nconst notificationInstance = {}\nlet defaultDuration = 4.5\nlet defaultTop = 24\nlet defaultBottom = 24\nlet defaultPlacement = 'topRight'\nlet defaultGetContainer\nlet defaultCloseIcon\n\nfunction setNotificationConfig(options) {\n const {duration, placement, bottom, top, getContainer, closeIcon} = options\n if (duration !== undefined) {\n defaultDuration = duration\n }\n if (placement !== undefined) {\n defaultPlacement = placement\n } else {\n defaultPlacement = 'topLeft'\n }\n if (bottom !== undefined) {\n defaultBottom = bottom\n }\n if (top !== undefined) {\n defaultTop = top\n }\n if (getContainer !== undefined) {\n defaultGetContainer = getContainer\n }\n if (closeIcon !== undefined) {\n defaultCloseIcon = closeIcon\n }\n}\n\nfunction getPlacementStyle(\n placement,\n top = defaultTop,\n bottom = defaultBottom,\n) {\n let style\n switch (placement) {\n case 'topLeft':\n style = {\n left: 0,\n top,\n bottom: 'auto',\n }\n break\n case 'topRight':\n style = {\n right: 0,\n top,\n bottom: 'auto',\n }\n break\n case 'bottomLeft':\n style = {\n left: 0,\n top: 'auto',\n bottom,\n }\n break\n default:\n style = {\n right: 0,\n top: 'auto',\n bottom,\n }\n break\n }\n return style\n}\n\nfunction getNotificationInstance(args, callback) {\n const {\n placement = defaultPlacement,\n top,\n bottom,\n getContainer = defaultGetContainer,\n closeIcon = defaultCloseIcon,\n } = args\n const prefixCls = 'notification'\n\n const cacheKey = `${prefixCls}-${placement}`\n const cacheInstance = notificationInstance[cacheKey]\n if (cacheInstance) {\n Promise.resolve(cacheInstance).then(instance => {\n callback({instance})\n })\n\n return\n }\n\n const closeIconToRender = (\n \n {closeIcon || }\n \n )\n\n notificationInstance[cacheKey] = new Promise(resolve => {\n Notification.newInstance(\n {\n prefixCls,\n className: `absolute z-20`,\n style: getPlacementStyle(placement, top, bottom),\n getContainer,\n closeIcon: closeIconToRender,\n },\n notification => {\n resolve(notification)\n callback({\n instance: notification,\n })\n },\n )\n })\n}\n\nconst typeToIcon = {\n success: ,\n info: ,\n error: ,\n warning: ,\n}\n\nfunction getRCNoticeProps(args) {\n const {\n duration: durationArg,\n icon,\n type,\n content,\n title,\n actions,\n onClose,\n onClick,\n key,\n style = {},\n className = '',\n } = args\n\n const duration = durationArg === undefined ? defaultDuration : durationArg\n\n let iconNode = null\n if (icon) {\n iconNode = {args.icon}\n } else if (type) {\n iconNode = typeToIcon[type] || null\n }\n\n return {\n content: (\n
\n
\n {iconNode}\n
\n
\n {title}\n
\n
{content}
\n
\n
\n {actions ? {actions} : null}\n
\n ),\n duration,\n closable: true,\n onClose,\n onClick,\n key,\n style: style || {},\n className: `${className} p-6 shadow-2 rounded w-full md:w-100 mt-4 md:mb-4 md:mr-4 relative animate-move-left bg-gray-0`,\n }\n}\n\nfunction notice(args) {\n getNotificationInstance(args, ({instance}) => {\n instance.notice(getRCNoticeProps(args))\n })\n}\n\nconst api = {\n open: notice,\n close(key) {\n Object.keys(notificationInstance).forEach(cacheKey =>\n Promise.resolve(notificationInstance[cacheKey]).then(instance => {\n instance.removeNotice(key)\n }),\n )\n },\n config: setNotificationConfig,\n destroy() {\n Object.keys(notificationInstance).forEach(cacheKey => {\n Promise.resolve(notificationInstance[cacheKey]).then(instance => {\n instance.destroy()\n })\n delete notificationInstance[cacheKey] // lgtm[js/missing-await]\n })\n },\n}\n\nIconTypes.forEach(type => {\n api[type] = args =>\n api.open({\n ...args,\n type,\n })\n})\n\nexport default api\n","import Notification from 'rc-notification'\nimport {Loading} from '../../components'\nimport {\n ErrorFilled,\n SuccessFilled,\n WarningFilled,\n InfoFilled,\n} from '../../assets/svg'\n\nconst IconTypes = ['info', 'success', 'error', 'warning', 'loading']\n\nlet messageInstance\nlet defaultDuration = 3\nlet defaultTop = 20\nlet key = 1\nlet defaultTransitionName = 'animation-move-up'\nlet defaultGetContainer\nlet defaultMaxCount\n\nexport function getKeyThenIncreaseKey() {\n return key++\n}\n\nfunction setMessageConfig(options) {\n if (options.top !== undefined) {\n defaultTop = options.top\n // delete messageInstance for new defaultTop\n messageInstance = null\n }\n if (options.duration !== undefined) {\n defaultDuration = options.duration\n }\n if (options.getContainer !== undefined) {\n defaultGetContainer = options.getContainer\n }\n if (options.transitionName !== undefined) {\n defaultTransitionName = options.transitionName\n // delete messageInstance for new transitionName\n messageInstance = null\n }\n if (options.maxCount !== undefined) {\n defaultMaxCount = options.maxCount\n messageInstance = null\n }\n}\n\nfunction getRCNotificationInstance(args, callback) {\n const {\n getContainer = defaultGetContainer,\n transitionName = defaultTransitionName,\n maxCount = defaultMaxCount,\n } = args\n const prefixCls = 'message'\n\n if (messageInstance) {\n callback({instance: messageInstance})\n return\n }\n\n const instanceConfig = {\n prefixCls,\n transitionName,\n style: {top: defaultTop},\n getContainer,\n maxCount,\n className: 'absolute w-full flex justify-center',\n }\n\n Notification.newInstance(instanceConfig, instance => {\n if (messageInstance) {\n callback({instance})\n return\n }\n messageInstance = instance\n\n callback({instance})\n })\n}\n\nconst typeToIcon = {\n success: ,\n info: ,\n error: ,\n warning: ,\n}\n\nfunction getRCNoticeProps(args) {\n const {\n duration: durationArg,\n type,\n key,\n content,\n style = {},\n className = '',\n onClose,\n onClick,\n icon,\n } = args\n\n const duration = durationArg === undefined ? defaultDuration : durationArg\n\n const IconComponent =\n type === 'loading' ? (\n \n ) : (\n typeToIcon[type]\n )\n\n return {\n key,\n duration,\n style,\n className: `${className} px-4 py-3 text-gray-80 bg-gray-0 shadow-1 relative mb-4 animate-move-down`,\n content: (\n
\n {icon || IconComponent || null}\n {content}\n
\n ),\n onClose: onClose,\n onClick: onClick,\n }\n}\n\nfunction notice(args) {\n const target = args.key || key++\n const closePromise = new Promise(resolve => {\n const callback = () => {\n if (typeof args.onClose === 'function') {\n args.onClose()\n }\n return resolve(true)\n }\n\n getRCNotificationInstance(args, ({instance}) => {\n instance.notice(\n getRCNoticeProps({...args, key: target, onClose: callback}),\n )\n })\n })\n const result = () => {\n if (messageInstance) {\n messageInstance.removeNotice(target)\n }\n }\n result.then = (filled, rejected) => closePromise.then(filled, rejected)\n result.promise = closePromise\n return result\n}\n\nconst api = {\n open: notice,\n config: setMessageConfig,\n destroy(messageKey) {\n if (messageInstance) {\n if (messageKey) {\n const {removeNotice} = messageInstance\n removeNotice(messageKey)\n } else {\n const {destroy} = messageInstance\n destroy()\n messageInstance = null\n }\n }\n },\n}\n\nIconTypes.forEach(type => {\n api[type] = args =>\n api.open({\n ...args,\n type,\n })\n})\n\nexport default api\n","import React, {useMemo} from 'react'\nimport PropTypes from 'prop-types'\n\nconst sizeStyleObj = {\n small: 'text-xs',\n medium: 'text-sm',\n large: 'text-base',\n}\n\nconst iconSizeObj = {\n small: 'w-3 h-3',\n medium: 'w-4 h-4',\n large: 'w-5 h-5',\n}\n\nfunction Link({\n onClick,\n className = '',\n children,\n size = 'medium',\n disabled = false,\n startIcon,\n endIcon,\n ...props\n}) {\n const disabledStyle = useMemo(() => {\n if (disabled) {\n return 'bg-transparent text-gray-40 cursor-not-allowed'\n }\n return ''\n }, [disabled])\n\n const colorStyle = useMemo(() => {\n if (disabled) return ''\n return 'text-primary bg-transparent hover:text-primary-dark hover:underline'\n }, [disabled])\n\n const sizeStyle = sizeStyleObj[size] || ''\n const iconSize = iconSizeObj[size] || ''\n\n const iconColor = useMemo(() => {\n if (disabled) return 'text-gray-40'\n return 'text-primary hover:text-primary-dark'\n }, [disabled])\n\n const startIconComp = startIcon\n ? React.cloneElement(startIcon, {\n className: `mr-2 ${iconColor} ${iconSize} ${\n startIcon.props.className || ''\n }`,\n })\n : null\n\n const endIconComp = endIcon\n ? React.cloneElement(endIcon, {\n className: `ml-2 ${iconColor} ${iconSize} ${\n endIcon.props.className || ''\n }`,\n })\n : null\n\n return (\n onClick && !disabled && onClick(e)}\n className={`\n flex justify-center items-center focus:outline-none rounded cursor-pointer ${disabledStyle} ${colorStyle} ${sizeStyle} ${className}`}\n {...props}\n >\n {startIconComp}\n {children}\n {endIconComp}\n \n )\n}\n\nLink.propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n startIcon: PropTypes.node,\n endIcon: PropTypes.node,\n}\n\nexport default Link\n","import React, {useRef} from 'react'\nimport PropTypes from 'prop-types'\nimport {useClickAway} from 'react-use'\nimport {Close} from '../../assets/svg'\n\nfunction Modal({\n className = '',\n width,\n open = false,\n closable = true,\n closeIcon,\n icon,\n onClose,\n title,\n content,\n actions,\n size = 'small',\n closeIconClassName,\n ...props\n}) {\n const ref = useRef(null)\n\n const onCloseClick = e => {\n e.stopPropagation()\n if (closable) {\n onClose && onClose(e)\n }\n }\n\n useClickAway(ref, e => {\n onClose && onClose(e)\n })\n\n const iconComp = icon\n ? React.cloneElement(icon, {\n className: `w-12 h-12 mb-3 ${icon.props.className || ''}`,\n })\n : null\n\n const closeIconComp = closeIcon\n ? React.cloneElement(closeIcon, {\n className: `${size === 'medium' ? 'w-6 h-6' : 'w-4 h-4'} text-gray-40 ${\n closeIcon.props.className || ''\n }`,\n })\n : null\n\n const handleClickOutside = e => {\n if (e.target === e.currentTarget) {\n closable && onClose && onClose(e)\n }\n }\n\n if (!open) return null\n return (\n \n \n {closable && (\n onCloseClick(e)}\n className=\"absolute top-6 right-6\"\n >\n {closeIcon ? (\n closeIconComp\n ) : (\n \n )}\n \n )}\n {iconComp}\n {title && (\n
\n {title}\n
\n )}\n
{content}
\n {actions && (\n
{actions}
\n )}\n \n \n )\n}\n\nexport default Modal\n\nModal.propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium']),\n width: PropTypes.string,\n title: PropTypes.string,\n open: PropTypes.bool,\n closable: PropTypes.bool,\n onClose: PropTypes.func,\n actions: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]),\n content: PropTypes.node.isRequired,\n icon: PropTypes.node,\n closeIcon: PropTypes.node,\n id: PropTypes.string,\n closeIconClassName: PropTypes.string,\n}\n","import PropTypes from 'prop-types'\nimport {Loading as LoadingSvg} from '../../assets/svg'\n\nfunction Loading({className = ''}) {\n return (\n \n )\n}\n\nexport default Loading\n\nLoading.propTypes = {\n className: PropTypes.string,\n}\n","/* eslint-disable no-unused-vars */\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport RcDropdown from 'rc-dropdown'\nimport 'rc-dropdown/assets/index.css'\nimport {ArrowDownOutlined} from '../../assets/svg'\nfunction Dropdown({\n overlay,\n trigger,\n mouseEnterDelay = 0.15,\n mouseLeaveDelay = 0.1,\n transitionName,\n disabled,\n placement,\n children,\n ...props\n}) {\n // TODO: custom animation name\n // const getTransitionName = () => {\n // if (transitionName !== undefined) {\n // return transitionName\n // }\n // if (placement && placement.indexOf('top') >= 0) {\n // return 'slide-down'\n // }\n // return 'slide-up'\n // }\n\n const renderOverlay = () => {\n // rc-dropdown already can process the function of overlay, but we have check logic here.\n // So we need render the element to check and pass back to rc-dropdown.\n\n let overlayNode\n if (typeof overlay === 'function') {\n overlayNode = overlay()\n } else {\n overlayNode = overlay\n }\n overlayNode = React.Children.only(\n typeof overlayNode === 'string' ? (\n {overlayNode}\n ) : (\n overlayNode\n ),\n )\n\n const overlayProps = overlayNode.props\n\n // menu can be selectable and focusable in dropdown defaultly\n const {selectable = true, focusable = true, expandIcon} = overlayProps\n\n const overlayNodeExpandIcon =\n typeof expandIcon !== 'undefined' && React.isValidElement(expandIcon) ? (\n expandIcon\n ) : (\n \n )\n\n const fixedModeOverlay =\n typeof overlayNode.type === 'string'\n ? overlayNode\n : React.cloneElement(overlayNode, {\n mode: 'vertical',\n className: 'shadow-2 py-2 my-0.5 bg-gray-0 relative',\n selectable,\n focusable,\n expandIcon: overlayNodeExpandIcon,\n })\n\n return fixedModeOverlay\n }\n\n const getPlacement = () => {\n if (placement !== undefined) {\n return placement\n }\n return 'bottomLeft'\n }\n\n const child = React.Children.only(children)\n\n const dropdownTrigger = React.cloneElement(child, {\n className: `trigger ${child.props.className || ''}`,\n disabled,\n })\n\n const triggerActions = disabled ? [] : trigger\n let alignPoint\n if (triggerActions && triggerActions.indexOf('contextMenu') !== -1) {\n alignPoint = true\n }\n\n return (\n renderOverlay()}\n placement={getPlacement()}\n {...props}\n >\n {dropdownTrigger}\n \n )\n}\n\nDropdown.propTypes = {\n arrow: PropTypes.bool,\n trigger: PropTypes.array,\n overlay: PropTypes.oneOfType([PropTypes.func, PropTypes.node]).isRequired,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n onVisibleChange: PropTypes.func,\n visible: PropTypes.bool,\n disabled: PropTypes.bool,\n align: PropTypes.object,\n getPopupContainer: PropTypes.func,\n prefixCls: PropTypes.string,\n className: PropTypes.string,\n transitionName: PropTypes.string,\n placement: PropTypes.oneOf([\n 'topLeft',\n 'topCenter',\n 'topRight',\n 'bottomLeft',\n 'bottomCenter',\n 'bottomRight',\n ]),\n overlayClassName: PropTypes.string,\n overlayStyle: PropTypes.object,\n forceRender: PropTypes.bool,\n mouseEnterDelay: PropTypes.number,\n mouseLeaveDelay: PropTypes.number,\n openClassName: PropTypes.string,\n}\n\nexport default Dropdown\n","import {useState, useMemo} from 'react'\nimport PropTypes from 'prop-types'\n\nconst sizeStyleObj = {\n small: 'h-8',\n medium: 'h-auto',\n large: 'h-12',\n}\n\nconst inputStyleObj = {\n small: 'text-xs',\n medium: 'text-sm',\n large: 'text-base',\n}\n\nconst iconSizeObj = {\n small: 'w-3 h-3',\n medium: 'w-4 h-4',\n large: 'w-5 h-5',\n}\nconst prefixStyleObj = {\n small: '-mr-2',\n medium: '-mr-1.5',\n large: '-mr-1',\n}\nfunction Input({\n prefix,\n suffix,\n value,\n disabled,\n className = '',\n containerClassName = '',\n onChange,\n bordered = true,\n size = 'medium',\n width = 'w-60',\n errorMessage = '',\n onBlur,\n customPrefix,\n ...props\n}) {\n const [focused, setFocused] = useState(false)\n const disabledStyle = useMemo(() => {\n if (disabled) return 'cursor-not-allowed'\n return ''\n }, [disabled])\n\n const sizeStyle = sizeStyleObj[size] || ''\n const inputStyle = inputStyleObj[size] || ''\n const iconSize = iconSizeObj[size] || ''\n const prefixStyle = prefixStyleObj[size] || ''\n\n const borderStyle = useMemo(() => {\n if (!bordered) return 'border-0'\n if (errorMessage !== '') return 'border-error border'\n else return `border ${focused ? 'border-primary' : 'border-gray-20'}`\n }, [bordered, errorMessage, focused])\n\n return (\n
\n \n {customPrefix && customPrefix}\n {!customPrefix && prefix && (\n setFocused(true)}\n className={`pl-3 ${prefixStyle}`}\n >\n
{prefix}
\n
\n )}\n setFocused(true)}\n onBlur={() => {\n setFocused(false)\n onBlur && onBlur()\n }}\n disabled={disabled}\n onChange={e => !disabled && onChange && onChange(e)}\n className={`w-full h-full px-3 text-black opacity-90 placeholder-[#D1D5DB] border-0 rounded p-0 outline-none bg-transparent ${inputStyle} ${className}`}\n {...props}\n />\n {suffix && (\n setFocused(true)}\n >\n
{suffix}
\n \n )}\n \n {errorMessage && (\n
{errorMessage}
\n )}\n \n )\n}\n\nInput.propTypes = {\n value: PropTypes.string,\n className: PropTypes.string,\n containerClassName: PropTypes.string,\n onChange: PropTypes.func,\n width: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n errorMessage: PropTypes.string,\n prefix: PropTypes.node,\n suffix: PropTypes.node,\n disabled: PropTypes.bool,\n bordered: PropTypes.bool,\n onBlur: PropTypes.func,\n customPrefix: PropTypes.node,\n}\n\nexport default Input\n","import React, {useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport {SuccessFilled, Disabled} from '../../assets/svg'\nfunction MenuItem({\n children,\n itemKey,\n selected,\n selectedIcon,\n icon,\n onClick,\n disabled,\n}) {\n const style = useMemo(() => {\n if (disabled) return 'text-gray-40 cursor-not-allowed'\n if (selected) return 'bg-gray-0 text-primary cursor-poiniter'\n return 'bg-gray-0 text-gray-100 cursor-poiniter hover:bg-gray-10 hover:text-primary'\n }, [disabled, selected])\n\n const iconComp = icon\n ? React.cloneElement(icon, {\n className: `mr-2 w-6 h-6 ${icon.props.className || ''}`,\n })\n : null\n\n const selectedIconComp = selectedIcon\n ? React.cloneElement(selectedIcon, {\n className: `w-4 h-4 ${selectedIcon.props.className || ''}`,\n })\n : null\n\n return (\n !disabled && onClick && onClick(itemKey)}\n className={`w-50 h-12 ${\n icon ? 'px-4' : 'pl-12 pr-4'\n } flex items-center ${style}`}\n >\n
\n {iconComp}\n {children}\n
\n {!disabled &&\n selected &&\n (selectedIcon ? (\n selectedIconComp\n ) : (\n \n ))}\n {disabled && }\n \n )\n}\n\nMenuItem.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n itemKey: PropTypes.string.isRequired,\n selected: PropTypes.bool,\n selectedIcon: PropTypes.node,\n icon: PropTypes.node,\n onClick: PropTypes.func,\n disabled: PropTypes.bool,\n}\n\nexport default MenuItem\n","import PropTypes from 'prop-types'\nimport MenuItem from './MenuItem'\n\n//TODO: extend menu with rc-menu\nfunction Menu({children, className = '', onClick}) {\n return (\n
\n {children}\n
\n )\n}\n\nMenu.Item = MenuItem\nexport default Menu\n\nMenu.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n className: PropTypes.string,\n onClick: PropTypes.func,\n}\n","import PropTypes from 'prop-types'\nimport {Checked, NoChecked} from '../../assets/svg'\n\nfunction Checkbox({checked, onChange, children, className, customShow}) {\n return (\n onChange && onChange()}\n aria-hidden=\"true\"\n className={`flex items-center cursor-pointer ${className}`}\n >\n {!customShow && checked && }\n {!customShow && !checked && }\n {children}\n \n )\n}\n\nexport default Checkbox\n\nCheckbox.propTypes = {\n checked: PropTypes.bool,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n className: PropTypes.string,\n onChange: PropTypes.func,\n customShow: PropTypes.bool,\n}\n","import PropTypes from 'prop-types'\nimport React, {useEffect} from 'react'\n\nfunction Toast({\n className = '',\n open,\n icon,\n title,\n content,\n autoHideDuration = 2000,\n type = 'block',\n onClose,\n ...props\n}) {\n useEffect(() => {\n if (open) setTimeout(() => onClose && onClose(), autoHideDuration)\n }, [open, autoHideDuration, onClose])\n if (!open) return null\n const iconComp = icon\n ? React.cloneElement(icon, {\n className: `w-13 h-13 mb-2 ${icon.props.className || ''}`,\n })\n : null\n\n if (type === 'block') {\n return (\n \n {iconComp}\n {title && (\n
{title}
\n )}\n
{content}
\n \n )\n } else if (type === 'line' || !title) {\n return (\n \n {icon && \"status\"}\n
{content}
\n \n )\n }\n return null\n}\n\nToast.propTypes = {\n className: PropTypes.string,\n open: PropTypes.bool,\n icon: PropTypes.node,\n title: PropTypes.string,\n content: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n autoHideDuration: PropTypes.number,\n type: PropTypes.oneOf(['block', 'line']),\n onClose: PropTypes.func,\n top: PropTypes.string,\n}\n\nexport default Toast\n","import {placements} from 'rc-tooltip/lib/placements'\n\nconst autoAdjustOverflowEnabled = {\n adjustX: 1,\n adjustY: 1,\n}\n\nconst autoAdjustOverflowDisabled = {\n adjustX: 0,\n adjustY: 0,\n}\n\nconst targetOffset = [0, 0]\n\nexport function getOverflowOptions(autoAdjustOverflow) {\n if (typeof autoAdjustOverflow === 'boolean') {\n return autoAdjustOverflow\n ? autoAdjustOverflowEnabled\n : autoAdjustOverflowDisabled\n }\n return {\n ...autoAdjustOverflowDisabled,\n ...autoAdjustOverflow,\n }\n}\n\nexport default function getPlacements(config) {\n const {\n arrowWidth = 4,\n horizontalArrowShift = 16,\n verticalArrowShift = 8,\n autoAdjustOverflow,\n } = config\n const placementMap = {\n left: {\n points: ['cr', 'cl'],\n offset: [-4, 0],\n },\n right: {\n points: ['cl', 'cr'],\n offset: [4, 0],\n },\n top: {\n points: ['bc', 'tc'],\n offset: [0, -4],\n },\n bottom: {\n points: ['tc', 'bc'],\n offset: [0, 4],\n },\n topLeft: {\n points: ['bl', 'tc'],\n offset: [-(horizontalArrowShift + arrowWidth), -4],\n },\n leftTop: {\n points: ['tr', 'cl'],\n offset: [-4, -(verticalArrowShift + arrowWidth)],\n },\n topRight: {\n points: ['br', 'tc'],\n offset: [horizontalArrowShift + arrowWidth, -4],\n },\n rightTop: {\n points: ['tl', 'cr'],\n offset: [4, -(verticalArrowShift + arrowWidth)],\n },\n bottomRight: {\n points: ['tr', 'bc'],\n offset: [horizontalArrowShift + arrowWidth, 4],\n },\n rightBottom: {\n points: ['bl', 'cr'],\n offset: [4, verticalArrowShift + arrowWidth],\n },\n bottomLeft: {\n points: ['tl', 'bc'],\n offset: [-(horizontalArrowShift + arrowWidth), 4],\n },\n leftBottom: {\n points: ['br', 'cl'],\n offset: [-4, verticalArrowShift + arrowWidth],\n },\n }\n Object.keys(placementMap).forEach(key => {\n placementMap[key] = config.arrowPointAtCenter\n ? {\n ...placementMap[key],\n overflow: getOverflowOptions(autoAdjustOverflow),\n targetOffset,\n }\n : {\n ...placements[key],\n overflow: getOverflowOptions(autoAdjustOverflow),\n }\n\n placementMap[key].ignoreShake = true\n })\n return placementMap\n}\n","import * as React from 'react'\nimport PropTypes from 'prop-types'\nimport RcTooltip from 'rc-tooltip'\nimport classNames from 'classnames'\nimport getPlacements from './Placements'\nimport './index.css'\n\nconst splitObject = (obj, keys) => {\n const picked = {}\n const omitted = {...obj}\n keys.forEach(key => {\n if (obj && key in obj) {\n picked[key] = obj[key]\n delete omitted[key]\n }\n })\n return {picked, omitted}\n}\n\n// Fix Tooltip won't hide at disabled button\n// mouse events don't trigger at disabled button in Chrome\n// https://github.com/react-component/tooltip/issues/18\nfunction getDisabledCompatibleChildren(element, prefixCls) {\n const elementType = element.type\n if (\n (elementType.__ANT_BUTTON === true ||\n elementType.__ANT_SWITCH === true ||\n elementType.__ANT_CHECKBOX === true ||\n element.type === 'button') &&\n element.props.disabled\n ) {\n // Pick some layout related style properties up to span\n // Prevent layout bugs like https://github.com/ant-design/ant-design/issues/5254\n const {picked, omitted} = splitObject(element.props.style, [\n 'position',\n 'left',\n 'right',\n 'top',\n 'bottom',\n 'float',\n 'display',\n 'zIndex',\n ])\n const spanStyle = {\n display: 'inline-block', // default inline-block is important\n ...picked,\n cursor: 'not-allowed',\n width: element.props.block ? '100%' : null,\n }\n const buttonStyle = {\n ...omitted,\n pointerEvents: 'none',\n }\n const child = React.cloneElement(element, {\n style: buttonStyle,\n className: null,\n })\n return (\n \n {child}\n \n )\n }\n return element\n}\n\n\nconst useMergedState = (_state, { value, defaultValue }) => {\n const [state, setState] = React.useState(() => defaultValue ?? _state);\n\n return [value ?? state, setState];\n}\n\nconst Tooltip = React.forwardRef((props, ref) => {\n const [visible, setVisible] = useMergedState(false, {\n value: props.visible,\n defaultValue: props.defaultVisible,\n })\n\n const isNoContent = () => {\n const {content} = props\n return !content && content !== 0\n }\n\n const onVisibleChange = vis => {\n setVisible(isNoContent() ? false : vis)\n\n if (!isNoContent()) {\n props.onVisibleChange?.(vis)\n }\n }\n\n const getTooltipPlacements = () => {\n const {builtinPlacements, arrowPointAtCenter, autoAdjustOverflow} = props\n return (\n builtinPlacements ||\n getPlacements({\n arrowPointAtCenter,\n autoAdjustOverflow,\n })\n )\n }\n\n // 动态设置动画点\n const onPopupAlign = (domNode, align) => {\n const placements = getTooltipPlacements()\n // 当前返回的位置\n const placement = Object.keys(placements).filter(\n key =>\n placements[key].points[0] === align.points[0] &&\n placements[key].points[1] === align.points[1],\n )[0]\n if (!placement) {\n return\n }\n // 根据当前坐标设置动画点\n const rect = domNode.getBoundingClientRect()\n const transformOrigin = {\n top: '50%',\n left: '50%',\n }\n if (placement.indexOf('top') >= 0 || placement.indexOf('Bottom') >= 0) {\n transformOrigin.top = `${rect.height - align.offset[1]}px`\n } else if (\n placement.indexOf('Top') >= 0 ||\n placement.indexOf('bottom') >= 0\n ) {\n transformOrigin.top = `${-align.offset[1]}px`\n }\n if (placement.indexOf('left') >= 0 || placement.indexOf('Right') >= 0) {\n transformOrigin.left = `${rect.width - align.offset[0]}px`\n } else if (\n placement.indexOf('right') >= 0 ||\n placement.indexOf('Left') >= 0\n ) {\n transformOrigin.left = `${-align.offset[0]}px`\n }\n domNode.style.transformOrigin = `${transformOrigin.left} ${transformOrigin.top}`\n }\n\n const getOverlay = () => {\n const {content} = props\n if (content === 0) {\n return content\n }\n return content || ''\n }\n\n const {getPopupContainer, ...otherProps} = props\n\n const {\n openClassName,\n getTooltipContainer,\n overlayClassName,\n overlayInnerStyle,\n children,\n prefixCls: customPrefixCls,\n } = props\n const prefixCls = customPrefixCls || 'tooltip'\n\n let tempVisible = visible\n // Hide tooltip when there is no content\n if (!('visible' in props) && isNoContent()) {\n tempVisible = false\n }\n\n const child = getDisabledCompatibleChildren(\n typeof children !== 'string' ? children : {children},\n prefixCls,\n )\n const childProps = child.props\n const childCls = classNames(childProps.className, {\n [openClassName || `${prefixCls}-open`]: true,\n })\n\n const customOverlayClassName = overlayClassName\n\n let formattedOverlayInnerStyle = overlayInnerStyle\n let arrowContentStyle\n\n return (\n \n }\n >\n {tempVisible ? React.cloneElement(child, {className: childCls}) : child}\n \n )\n})\n\nTooltip.displayName = 'Tooltip'\n\nTooltip.propTypes = {\n content: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n visible: PropTypes.bool,\n defaultVisible: PropTypes.bool,\n getPopupContainer: PropTypes.func,\n getTooltipContainer: PropTypes.func,\n onVisibleChange: PropTypes.func,\n openClassName: PropTypes.string,\n overlayClassName: PropTypes.string,\n overlayInnerStyle: PropTypes.object,\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n builtinPlacements: PropTypes.string,\n arrowPointAtCenter: PropTypes.bool,\n autoAdjustOverflow: PropTypes.bool,\n prefixCls: PropTypes.string,\n}\n\nTooltip.defaultProps = {\n placement: 'top',\n mouseEnterDelay: 0.1,\n mouseLeaveDelay: 0.1,\n arrowPointAtCenter: false,\n autoAdjustOverflow: true,\n}\n\nexport default Tooltip\n","import * as React from 'react'\nimport PropTypes from 'prop-types'\nimport Tooltip from '../Tooltip'\nimport './index.css'\n\nconst Popover = React.forwardRef(\n ({prefixCls: customizePrefixCls, title, content, ...otherProps}, ref) => {\n const getOverlay = prefixCls => (\n <>\n {title &&
{title}
}\n
{content}
\n \n )\n\n const prefixCls = customizePrefixCls || 'popover'\n\n return (\n \n )\n },\n)\n\nPopover.displayName = 'Popover'\n\nPopover.propTypes = {\n prefixCls: PropTypes.string,\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n content: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n}\n\nPopover.defaultProps = {\n placement: 'top',\n trigger: 'hover',\n mouseEnterDelay: 0.1,\n mouseLeaveDelay: 0.1,\n overlayStyle: {},\n}\n\nexport default Popover\n","import PropTypes from 'prop-types'\n\nfunction Circle({\n color = 'bg-gray-80',\n size = 'w-1 h-1',\n className = '',\n containerClassName = '',\n}) {\n return (\n \n \n \n )\n}\n\nCircle.propTypes = {\n color: PropTypes.string,\n size: PropTypes.string,\n className: PropTypes.string,\n containerClassName: PropTypes.string,\n}\n\nexport default Circle\n","import PropTypes from 'prop-types';\n\nconst Tab = ({ selected, label, ...props }) => {\n const containerClass = selected ? 'bg-S-100' : 'bg-transparent';\n const labelClass = selected ? 'text-primary-fuscia' : 'text-G-400';\n\n return (\n \n );\n}\n\nTab.propTypes = {\n selected: PropTypes.bool,\n label: PropTypes.string,\n}\n\nexport default Tab;\n","import { useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Tab from \"./Tab\";\n\nconst Tabs = ({ tabs, onSelect, ...props }) => {\n const [selectedTab, setSelectedTab] = useState(tabs[0]);\n\n const handleSelectTab = (tab) => {\n setSelectedTab(tab);\n onSelect && onSelect(tab);\n };\n\n return (\n
\n {tabs.map((tab, index) => (\n handleSelectTab(tab)}\n />\n ))}\n
\n );\n};\n\nTabs.propTypes = {\n tabs: PropTypes.arrayOf(PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.string,\n })),\n onSelect: PropTypes.func,\n}\n\nexport default Tabs;\n","// import queryString from 'query-string'\nimport {useTranslation} from 'react-i18next'\nimport {ChainConfig} from '../../../constants/chainConfig'\nimport {Notification} from '../../../components'\nimport {useIsMobile} from '../../../hooks'\n\nconst useTransactionNotification = () => {\n const {t} = useTranslation()\n // const history = useHistory()\n const isMobile = useIsMobile()\n // const {\n // fromChain: pathFromChain,\n // toChain: pathToChain,\n // fromTokenAddress,\n // ...others\n // } = queryString.parse(search)\n // eslint-disable-next-line react/prop-types\n return function TransactionNotification({symbol, fromChain, toChain, value}) {\n Notification.open({\n title: t('notificationDetail', {\n value,\n symbol,\n fromChain: ChainConfig[fromChain].shortName,\n toChain: ChainConfig[toChain].shortName,\n }),\n type: 'success',\n content: (\n {\n // const pathWithQuery = queryString.stringifyUrl({\n // url: '/history',\n // query: {\n // ...others,\n // fromChain: pathFromChain,\n // toChain: pathToChain,\n // fromTokenAddress,\n // },\n // })\n // history.push(pathWithQuery)\n // }}\n >\n Success\n {/* {t('viewInHistory')} */}\n \n ),\n duration: 10,\n placement: isMobile ? 'bottomRight' : 'topRight',\n bottom: isMobile ? 0 : 24,\n className: 'h-32',\n })\n }\n}\n\nexport default useTransactionNotification\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport {SupportedWallets, WalletConfig} from '../../../constants'\n\nfunction WalletIcon({type, size = 30}) {\n const {icon, name } = WalletConfig[type]\n return \n \n \n}\n\nWalletIcon.propTypes = {\n type: PropTypes.oneOf(SupportedWallets).isRequired,\n size: PropTypes.number,\n}\n\nexport default WalletIcon\n","/**\n * Store for necessary transaction data of zg flow\n */\n\nimport create from 'zustand'\nimport { useMemo } from 'react'\nimport { BigNumber } from '@ethersproject/bignumber'\nimport { KeyOfBtc, KeyOfCfx, KeyOfPortal } from '../constants'\n\nlet Store = null\n\nconst createStore = () =>\n create(set => ({\n /**\n * {\n * // info from backend\n * chain_id: string;\n * token_address: string;\n * token_abbr: string;\n * decimals: number;\n * pegged_address: string;\n *\n * // info hard coded in ChainConfig\n * chainName: string;\n * provider: Provider;\n * nativeToken: string;\n *\n * // info from chain\n * symbol: string;\n * name: string;\n *\n * // info for shuttleflow bridges\n * toChains?: string[];\n * isSF?: boolean;\n * }\n */\n walletInit: false,\n fromToken: {}, // should be from useZGTokenList\n toToken: {}, // should be from useZGTokenList\n fromAmount: '',\n toAmount: '',\n toAddress: '',\n fee: BigNumber.from(0),\n fromWallet: '',\n toWallet: '',\n sameWallet: true,\n lastWeb3Wallet: '',\n fromBtcAddress: '', // only for sf btc now\n toBtcAddress: '', // only for sf btc now\n defaultSetLock: false, // lock auto set default token\n balance: null,\n tokenFee: [BigNumber.from(0), BigNumber.from(0)],\n setWalletInit: () => set({walletInit: true}),\n setFromToken: fromToken => set({fromToken}),\n setToToken: toToken => set({toToken}),\n setFromAmount: fromAmount => set({fromAmount}),\n setToAmount: toAmount => set({toAmount}),\n setToAddress: toAddress => set({toAddress}),\n setFee: fee => set({fee}),\n setFromWallet: fromWallet => set((state) => {\n let sameWallet = state.sameWallet\n let toWallet = sameWallet ? fromWallet : state.toWallet\n let lastWeb3Wallet = state.lastWeb3Wallet\n if (fromWallet === KeyOfPortal) {\n sameWallet = false\n toWallet = lastWeb3Wallet\n } else {\n lastWeb3Wallet = fromWallet\n }\n return {\n fromWallet,\n lastWeb3Wallet,\n sameWallet,\n toWallet,\n }\n }),\n setToWallet: toWallet => set({toWallet}),\n setSameWallet: sameWallet => set((state) => {\n return {\n sameWallet,\n toWallet: sameWallet ? state.fromWallet : state.toWallet\n }\n }),\n setFromBtcAddress: fromBtcAddress => set({fromBtcAddress}),\n setToBtcAddress: toBtcAddress => set({toBtcAddress}),\n setDefaultSetLock: defaultSetLock => set({defaultSetLock}),\n setBalance: balance => set({balance}),\n setTokenFee: tokenFee => set({tokenFee}),\n }))\n\nexport const useZGFormState = () => {\n if (!Store) Store = createStore()\n const useStore = Store\n const state = useStore()\n\n return state\n}\n\nexport const useIsFromChainBtc = () => {\n const { fromToken } = useZGFormState();\n\n return useMemo(() => {\n return (fromToken?.sfChain || '').toLowerCase() === KeyOfBtc\n }, [fromToken.sfChain]);\n}\n\nexport const useIsToChainBtc = () => {\n const { toToken } = useZGFormState();\n\n return useMemo(() => {\n return (toToken?.sfChain || '').toLowerCase() === KeyOfBtc\n }, [toToken.sfChain]);\n}\n\nexport const useIsFromChainCfx = () => {\n const { fromToken } = useZGFormState();\n\n return useMemo(() => {\n return fromToken.sfChain === KeyOfCfx\n }, [fromToken.sfChain]);\n}\n","import connectors from '../../../connectors'\nimport {useWalletState} from '../../../state/wallet'\nimport {\n KeyOfCoinbase,\n KeyOfMetaMask,\n KeyOfOkx,\n KeyOfPortal,\n} from '../../../constants'\nimport {useEffect} from 'react'\nimport {useZGFormState} from '../../../state/zgForm'\nimport {Web3Provider} from '@ethersproject/providers'\n// eslint-disable-next-line react/prop-types\nexport default function Web3Manager({children}) {\n const {init, initialize, setField} = useWalletState()\n const {setFromWallet, setWalletInit} = useZGFormState()\n\n useEffect(() => {\n if (!init) {\n const timer = setTimeout(() => {\n // init Fluent\n const conF = connectors.createConnector(KeyOfPortal)\n setField(KeyOfPortal, 'activate', conF.connect)\n\n // init metamask\n const optionM = {\n onAccountsChanged: accounts => {\n setField(KeyOfMetaMask, 'address', accounts[0])\n },\n onChainChanged: chainId => {\n setField(KeyOfMetaMask, 'chainId', '' + parseInt(chainId))\n conM\n .getProvider()\n .then(p =>\n setField(KeyOfMetaMask, 'web3Provider', new Web3Provider(p)),\n )\n },\n }\n const conM = connectors.createConnector(KeyOfMetaMask, optionM)\n setField(KeyOfMetaMask, 'activate', async id => {\n const {account, chain} = await conM.connect(id)\n setField(KeyOfMetaMask, 'address', account)\n setField(KeyOfMetaMask, 'chainId', '' + parseInt(chain.id))\n })\n conM\n .getProvider()\n .then(p =>\n setField(KeyOfMetaMask, 'web3Provider', new Web3Provider(p)),\n )\n\n // init coinbase wallet\n const optionC = {\n onAccountsChanged: accounts => {\n setField(KeyOfCoinbase, 'address', accounts[0])\n },\n onChainChanged: chainId => {\n setField(KeyOfCoinbase, 'chainId', '' + parseInt(chainId))\n conC\n .getProvider()\n .then(p =>\n setField(KeyOfCoinbase, 'web3Provider', new Web3Provider(p)),\n )\n },\n }\n const conC = connectors.createConnector(KeyOfCoinbase, optionC)\n setField(KeyOfCoinbase, 'activate', async id => {\n const {account, chain} = await conC.connect(id)\n setField(KeyOfCoinbase, 'address', account)\n setField(KeyOfCoinbase, 'chainId', '' + parseInt(chain.id))\n })\n conC\n .getProvider()\n .then(p =>\n setField(KeyOfCoinbase, 'web3Provider', new Web3Provider(p)),\n )\n\n // init okx wallet\n const optionO = {\n onAccountsChanged: accounts => {\n setField(KeyOfOkx, 'address', accounts[0])\n },\n onChainChanged: chainId => {\n setField(KeyOfOkx, 'chainId', '' + parseInt(chainId))\n conO\n .getProvider()\n .then(p =>\n setField(KeyOfOkx, 'web3Provider', new Web3Provider(p)),\n )\n },\n }\n const conO = connectors.createConnector(KeyOfOkx, optionO)\n setField(KeyOfOkx, 'activate', async id => {\n const {account, chain} = await conO.connect(id)\n setField(KeyOfOkx, 'address', account)\n setField(KeyOfOkx, 'chainId', '' + parseInt(chain.id))\n })\n conO\n .getProvider()\n .then(p => setField(KeyOfOkx, 'web3Provider', new Web3Provider(p)))\n\n initialize()\n\n // eager connect\n function eagerConnectM() {\n return conM.getProvider().then(async p => {\n if (!p) return false\n const accounts = await p.request({method: 'eth_accounts'})\n if (!accounts.length) return false\n const chainId = await p.request({method: 'eth_chainId'})\n setField(KeyOfMetaMask, 'address', accounts[0])\n setField(KeyOfMetaMask, 'chainId', '' + parseInt(chainId))\n setFromWallet(KeyOfMetaMask)\n return true\n })\n }\n\n function eagerConnectC() {\n return conC.getProvider().then(async p => {\n if (!p) return false\n const accounts = await p.request({method: 'eth_accounts'})\n if (!accounts.length) return false\n const chainId = await p.request({method: 'eth_chainId'})\n setField(KeyOfCoinbase, 'address', accounts[0])\n setField(KeyOfCoinbase, 'chainId', '' + parseInt(chainId))\n setFromWallet(KeyOfCoinbase)\n return true\n })\n }\n\n function eagerConnectO() {\n return conO.getProvider().then(async p => {\n if (!p) return false\n const accounts = await p.request({method: 'eth_accounts'})\n if (!accounts.length) return false\n const chainId = await p.request({method: 'eth_chainId'})\n setField(KeyOfOkx, 'address', accounts[0])\n setField(KeyOfOkx, 'chainId', '' + parseInt(chainId))\n setFromWallet(KeyOfOkx)\n return true\n })\n }\n\n eagerConnectM()\n .then(connected => (connected ? true : eagerConnectC()))\n .then(connected => (connected ? true : eagerConnectO()))\n\n setWalletInit()\n }, 1000)\n\n return () => clearTimeout(timer)\n }\n })\n\n return children\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport {useEffect, useState} from 'react'\nimport Big from 'big.js'\nimport {convertDecimal} from '@cfxjs/data-format'\nimport {useWallet, useWeb3Wallets} from '../hooks/useZGWallet'\nimport {\n UserOperationStatus,\n TransactionStatus,\n DepositStatus,\n TypeTransaction,\n ProxyUrlPrefix,\n KeyOfPortal,\n KeyOfCfx, findChainKeyById, KeyOfMetaMask,\n TxStatus,\n} from '../constants'\nimport {requestUserOperationList} from '../utils/api'\nimport {useTxState} from '../state/transaction'\nimport {usePortalState} from '../state'\nimport {useAllTokenList} from '../hooks/useAllTokenList'\nimport {updateTx} from '../utils/index'\nimport {\n useTransactionNotification,\n // useClaimNotification,\n} from '../pages/components'\nimport {useZGFormState} from '../state/zgForm'\nimport { requestDepositList } from '../utils/api'\n\nfunction findTokenById(tokenList, id) {\n return tokenList.find(item => item.id === id)\n || tokenList.find(item => {\n const [chain, token] = id.split('+');\n return ((item.reference || '').toUpperCase() === token || (item.ctoken || '').toUpperCase() === token) && item.sfChain === chain;\n })\n || {}\n}\n\nfunction appendTxs(trans, txs) {\n txs.forEach(tx => {\n const hash = tx?.hash\n trans.set(hash, tx)\n })\n}\n\nexport const useUpdateTxs = () => {\n const {fromWallet} = useZGFormState()\n const {address: cfxAddress, isCore} = useWallet(KeyOfPortal)\n const {web3Provider} = useWallet(fromWallet)\n const web3Wallets = useWeb3Wallets(fromWallet)\n const isCfxCore = cfxAddress && isCore\n const {transactions, setTransactions} = useTxState()\n const {txClaimModalShown} = usePortalState()\n const tokenList = useAllTokenList()\n const txNotificationShow = useTransactionNotification()\n\n window._transactions = new Map(Object.entries(transactions))\n useEffect(() => {\n const update = () => {\n let trans = new Map(window._transactions)\n let transArr = [...trans.values()]\n // only check fromAddress for pending\n // when tx type is approve transaction\n const approveTxs = transArr.filter(\n item => item.tx_type === TypeTransaction.approve,\n )\n const pendingApproveTxs = approveTxs.filter(\n item => item.status === TransactionStatus.pending,\n )\n const pendingInApproveTxs = pendingApproveTxs.filter(\n item => item.fromChain !== KeyOfCfx,\n )\n if (web3Provider) {\n pendingInApproveTxs.forEach(item => {\n const {hash} = item\n web3Provider.getTransactionReceipt(hash).then(res => {\n if (res?.status) {\n updateTx(trans, hash, {status: TransactionStatus.success})\n } else {\n updateTx(trans, hash, {status: TransactionStatus.error})\n }\n })\n })\n }\n\n const pendingOutApproveTxs = pendingApproveTxs.filter(\n item => item.fromChain === KeyOfCfx,\n )\n\n if (window?.confluxJS) {\n pendingOutApproveTxs.forEach(item => {\n const {hash} = item\n window.confluxJS.getTransactionReceipt(hash).then(res => {\n if (res?.outcomeStatus == 0) {\n updateTx(trans, hash, {status: TransactionStatus.success})\n } else {\n updateTx(trans, hash, {status: TransactionStatus.error})\n }\n })\n })\n }\n\n // check all connected address for history\n // when tx type is common transacton\n const commonTxs = transArr.filter(\n item => item.tx_type === TypeTransaction.transaction,\n )\n const pendingCommonTxs = commonTxs.filter(\n item =>\n item.status === TransactionStatus.pending ||\n item.status === TransactionStatus.waiting,\n )\n\n let requestTransactions = []\n if (isCfxCore) {\n requestTransactions.push(\n requestUserOperationList(\n ProxyUrlPrefix.shuttleflow,\n null,\n cfxAddress,\n Object.values(UserOperationStatus),\n null,\n null,\n 1000,\n ).then(list => (list || []).map(item => mapData(item, tokenList))),\n )\n }\n const isV2 = process.env.REACT_APP_ENABLE_V2 === 'true'\n if (web3Wallets.length && isV2) {\n requestTransactions = requestTransactions.concat(\n web3Wallets.map(account =>\n requestDepositList(ProxyUrlPrefix.zg, account, null, 0, 1000).then(\n list => list.map(item => mapDepositData(item, tokenList)),\n ),\n ),\n )\n }\n\n Promise.all(requestTransactions)\n .then(res => [].concat(...res))\n .then(list => {\n if (!list) return;\n const mappedData = _mapListToMap(list)\n\n // notification\n pendingCommonTxs.forEach(item => {\n const {hash, amount, fromChain, toChain, fromToken} = item\n const {display_symbol, symbol} = fromToken || {}\n const apiData = mappedData.get(hash)\n const {status: newStatus} = apiData || {}\n if (newStatus === TransactionStatus.success && !apiData?.response?.state2) { // if state2 exists, it means the transaction is refunded\n //Success Notification\n txNotificationShow({\n symbol: display_symbol || symbol,\n fromChain,\n toChain,\n value: amount,\n })\n }\n })\n\n appendTxs(trans, list)\n setTransactions(trans)\n })\n .finally(() => {})\n }\n if (isCfxCore || web3Wallets.length) {\n update()\n }\n let timeInterval\n if (isCfxCore || web3Wallets.length) {\n timeInterval = setInterval(() => update(), 10000)\n }\n return () => {\n timeInterval && clearInterval(timeInterval)\n }\n }, [\n cfxAddress,\n JSON.stringify(web3Wallets),\n txClaimModalShown,\n JSON.stringify(tokenList),\n ])\n\n function _mapListToMap(list) {\n const map = new Map()\n list.forEach(item => {\n if (item?.hash) {\n map.set(item.hash, item)\n }\n })\n return map\n }\n}\n\n/**\n * Get tokenInfo from tokenList by token address\n * Merge api data to local data\n */\nexport function mapData(item = {}, tokenList) {\n const data = {}\n if (!item) return {}\n const {\n from_chain,\n to_chain,\n token,\n status,\n timestamp,\n in_or_out,\n nonce_or_txid,\n to_addr,\n amount,\n tx_to,\n tx_input,\n user_addr,\n settled_tx,\n } = item\n // basic info\n data.response = item\n data.toAddress = to_addr\n data.tx_type = TypeTransaction.transaction\n data.hash = nonce_or_txid?.split('_')[0]\n data.toHash = settled_tx\n data.tx_to = tx_to\n data.tx_input = tx_input\n data.cfxAddress = user_addr\n data.timestamp = timestamp\n data.in_or_out = in_or_out\n\n // network\n if (in_or_out === 'in') {\n if (from_chain === KeyOfCfx) {\n data.fromChain = to_chain\n data.toChain = from_chain\n } else {\n data.fromChain = from_chain\n data.toChain = to_chain\n }\n }\n if (in_or_out === 'out') {\n if (from_chain === KeyOfCfx) {\n data.fromChain = from_chain\n data.toChain = to_chain\n } else {\n data.fromChain = to_chain\n data.toChain = from_chain\n }\n }\n\n // token\n data.fromToken = findTokenById(\n tokenList,\n `${data.fromChain}+${token.toUpperCase()}`,\n )\n data.toToken = findTokenById(\n tokenList,\n `${data.toChain}+${token.toUpperCase()}`,\n )\n data.amount = new Big(\n convertDecimal(BigInt(amount) || 0, 'divide', data.fromToken.decimals),\n ).toString()\n data.amountReceived = data.amount\n\n // map status\n data.status = TransactionStatus.pending\n if (status === 'confirming') {\n data.status = TransactionStatus.pending\n }\n if (status === 'doing') {\n if (tx_to && tx_input) {\n data.status = TransactionStatus.waiting\n } else {\n data.status = TransactionStatus.pending\n }\n }\n if (status === 'finished') {\n data.status = 'success'\n }\n if (status === 'invalid') {\n data.status = 'error'\n }\n\n return data\n}\n\n/**\n * Get tokenInfo from tokenList by token address\n * Merge api data to local data\n */\nexport function mapDepositData(item = {}, tokenList) {\n const data = {}\n if (!item) return {}\n const {\n src_chain_id,\n dest_chain_id,\n status,\n timestamp,\n depositor,\n // nonce,\n deposit_token,\n receiver,\n amount,\n receive_amount,\n receive_token,\n claim_tx_to,\n claim_tx_input,\n claim_tx_hash,\n deposit_tx_hash,\n } = item\n // basic info\n data.response = item\n data.timestamp = timestamp * 1000\n data.fromAddress = depositor\n data.toAddress = receiver\n data.tx_type = TypeTransaction.transaction\n data.hash = deposit_tx_hash\n data.toHash = claim_tx_hash\n // data.nonce = nonce\n\n // network\n const from_chain = findChainKeyById(src_chain_id)\n const to_chain = findChainKeyById(dest_chain_id)\n data.fromChain = from_chain\n data.toChain = to_chain\n\n // token\n data.fromToken = findTokenById(tokenList, `${src_chain_id}+${deposit_token}`)\n data.toToken = findTokenById(tokenList, `${dest_chain_id}+${receive_token}`)\n data.amount = new Big(\n convertDecimal(BigInt(amount) || 0, 'divide', data.fromToken?.decimals),\n ).toString()\n data.amountReceived = new Big(\n convertDecimal(\n BigInt(receive_amount) || 0,\n 'divide',\n data.toToken?.decimals,\n ),\n ).toString()\n data.tx_to = claim_tx_to\n data.tx_input = claim_tx_input\n\n // map status\n data.status = TransactionStatus.pending\n if (status === DepositStatus.wait_for_claim) {\n data.status = TransactionStatus.waiting\n }\n if (status === DepositStatus.claimed) {\n data.status = TransactionStatus.success\n }\n if (status === DepositStatus.failed) {\n data.status = TransactionStatus.error\n }\n\n data.isZG = true\n\n return data\n}\n\nexport const useTxData = (\n multipleOrderedStatus,\n transactionTypes = Object.values(TypeTransaction),\n) => {\n const {transactions} = useTxState()\n const [arr, setArr] = useState([])\n const {address} = useWallet(KeyOfPortal)\n const web3Wallets = useWeb3Wallets()\n const connectedAddress = address\n ? [address].concat(web3Wallets)\n : [].concat(web3Wallets)\n\n useEffect(() => {\n if (connectedAddress.length) {\n const transArr = Object.values(transactions)\n const filteredTypeTxs = transArr.filter(\n tx =>\n transactionTypes.indexOf(tx.tx_type) != -1 &&\n multipleOrderedStatus.indexOf(tx.status) != -1,\n )\n const filteredTxs = filteredTypeTxs\n .filter(\n tx =>\n connectedAddress.indexOf((tx?.fromAddress || '').toLowerCase()) > -1 ||\n connectedAddress.indexOf((tx?.toAddress || '').toLowerCase()) > -1,\n )\n .sort((a, b) => b.timestamp - a.timestamp)\n\n setArr(filteredTxs)\n } else {\n setArr([])\n }\n }, [JSON.stringify(transactions), JSON.stringify(connectedAddress)])\n return arr\n}\n\nexport const usePendingTransactions = () => {\n const pendingTransactions = useTxData(\n [TransactionStatus.pending, TransactionStatus.waiting],\n Object.values(TypeTransaction),\n );\n\n const pendingTransactionsIcon = pendingTransactions.length > 0 && (\n
\n {pendingTransactions.length > 99 ? '99+' : pendingTransactions.length}\n
\n )\n\n return [pendingTransactions, pendingTransactionsIcon];\n}\n\nexport const useUpdateClaimedTxs = () => {\n const {claimedTxs, setClaimedTxs} = useTxState()\n const { fromWallet } = useZGFormState()\n const { web3Provider } = useWallet(fromWallet)\n window._claimedTxs = new Map(Object.entries(claimedTxs))\n useEffect(() => {\n const update = async () => {\n let trans = new Map(window._claimedTxs)\n let transArr = [...trans.values()]\n const submittedTrans = transArr.filter(\n item => item.status === TxStatus.submitted,\n )\n const mmSubmittedTrans = submittedTrans.filter(\n item => item.wallet === KeyOfMetaMask,\n )\n const portalSubmittedTrans = submittedTrans.filter(\n item => item.wallet === KeyOfPortal,\n )\n const mmArr = []\n if (web3Provider) {\n mmSubmittedTrans.forEach(item => {\n const {claimHash} = item\n mmArr.push(web3Provider.getTransactionReceipt(claimHash))\n })\n }\n const mmResults = await Promise.all(mmArr)\n mmResults.forEach((res, index) => {\n const {sendHash} = mmSubmittedTrans[index]\n if (res) {\n if (res?.status) {\n updateTx(trans, sendHash, {status: TxStatus.success})\n } else {\n updateTx(trans, sendHash, {status: TxStatus.error})\n }\n }\n })\n const confluxArr = []\n if (window?.confluxJS) {\n portalSubmittedTrans.forEach(item => {\n const {claimHash} = item\n confluxArr.push(window.confluxJS.getTransactionReceipt(claimHash))\n })\n }\n const confluxResults = await Promise.all(confluxArr)\n confluxResults.forEach((res, index) => {\n const {sendHash} = portalSubmittedTrans[index]\n if (res) {\n if (res?.outcomeStatus == 0) {\n updateTx(trans, sendHash, {status: TxStatus.success})\n } else {\n updateTx(trans, sendHash, {status: TxStatus.error})\n }\n }\n })\n setClaimedTxs(trans)\n }\n update()\n const timeInterval = setInterval(() => update(), 5000)\n return () => {\n timeInterval && clearInterval(timeInterval)\n }\n }, [web3Provider])\n}\n","import PropTypes from 'prop-types'\nimport * as dayjs from 'dayjs'\nimport {ChainConfig} from '../../constants/chainConfig'\nimport {ZGArrowRight} from '../../assets/svg'\nimport {TokenIcon} from '../components'\n\nfunction TokenInfo({token, chain, amount, className}) {\n const {shortName} = chain ? ChainConfig[chain] : {}\n\n return (\n
\n \n \n
\n )\n}\n\nTokenInfo.propTypes = {\n token: PropTypes.object,\n chain: PropTypes.string,\n amount: PropTypes.string,\n className: PropTypes.string,\n}\n\nfunction HistoryItem({historyItemData, onClick}) {\n const {\n fromToken,\n fromChain,\n toToken,\n toChain,\n amount,\n amountReceived,\n timestamp,\n } = historyItemData\n\n const ts = dayjs(timestamp)\n const date = ts.format('MM/DD/YYYY')\n const time = ts.format('HH:mm:ss')\n\n return (\n \n
\n {date}\n
\n  \n {time}\n
\n
\n \n \n \n
\n \n )\n}\n\nHistoryItem.propTypes = {\n historyItemData: PropTypes.object.isRequired,\n onClick: PropTypes.func.isRequired,\n}\n\nexport default HistoryItem\n","import PropTypes from 'prop-types'\nimport {CopyToClipboard} from 'react-copy-to-clipboard'\nimport {ZGCheck, ZGCopy, ZGOpen} from '../../../assets/svg'\nimport {useCallback, useState} from 'react'\nimport {Tooltip} from '../../../components'\n\nfunction ScanItem({display, text, prefix}) {\n const [copied, setCopied] = useState(false)\n\n const copy = useCallback(() => {\n setCopied(true)\n setTimeout(() => {\n setCopied(false)\n }, 2000)\n }, [])\n\n const url = prefix + text\n const displayUrl = (url || '').substring(0, 26) + '...'\n\n const openNewUrl = () => {\n window.open(url, '_blank')\n }\n\n return (\n
\n {display}\n {text && <>\n copy()}>\n {copied ? (\n \n \n \n ) : (\n \n \n \n )}\n \n \n \n \n }\n
\n )\n}\n\nScanItem.propTypes = {\n display: PropTypes.string,\n text: PropTypes.string,\n prefix: PropTypes.string,\n}\n\nexport default ScanItem\n","import PropTypes from 'prop-types'\nimport {useTranslation} from 'react-i18next'\nimport {Modal} from '../../components'\nimport {shortenAddress} from '../../utils/address'\nimport {getEllipsStr} from '../../utils'\nimport ScanItem from '../components/ScanItem'\nimport { ChainConfig } from '../../constants'\n\nconst TokenModal = ({open, onClose, transaction}) => {\n const {t} = useTranslation()\n const {\n status,\n // nonce,\n timestamp,\n fromAddress,\n toAddress,\n amount,\n fromChain,\n toChain,\n fromToken,\n hash,\n toHash,\n } = transaction\n\n const shortendFromAddr = shortenAddress(fromChain,fromAddress)\n const fromMessage = shortendFromAddr ? `from: ${shortendFromAddr} ` : ''\n const fromChainConfig = ChainConfig[fromChain]\n const fromChainScanUrl = fromChainConfig?.scanTxUrl\n const toChainConfig = ChainConfig[toChain]\n const toChainScanUrl = toChainConfig?.scanTxUrl\n\n const displayData = {\n status,\n // nonce,\n timestamp: new Date(timestamp).toLocaleString('en-US', {\n // to do: i18n\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n }),\n amount: `${fromMessage}to: ${shortenAddress(toChain, toAddress)} amount: ${amount} ${\n fromToken?.token_abbr\n }`,\n }\n\n displayData.hash = ;\n displayData.toHash = ;\n\n const renderList = () => {\n const elements = []\n\n for (const key in displayData) {\n elements.push(\n
\n
{t(`history.${key}`)}
\n
{displayData[key]}
\n
,\n )\n }\n\n return elements\n }\n\n return (\n \n

{t('history.detail')}

\n {renderList()}\n \n }\n />\n )\n}\n\nTokenModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n transaction: PropTypes.object.isRequired,\n}\n\nexport default TokenModal\n","import {useState} from 'react'\nimport {useHistory} from 'react-router-dom'\nimport {useTranslation} from 'react-i18next'\nimport {useTxData} from '../../hooks/useTransaction'\nimport {TransactionStatus} from '../../constants'\nimport {TypeTransaction} from '../../constants'\nimport {Button, Input} from '../../components'\nimport {ZGSearchIcon} from '../../assets/svg'\nimport HistoryItem from './HistoryItem'\nimport HistoryDetailModal from './HistoryDetailModal'\n\nfunction divideByMonth(list, searchKey) {\n const groups = {}\n const res = []\n\n const filtered = searchKey ? list.filter(item => {\n const values = Object.values(item)\n for (let value of values) {\n if ((JSON.stringify(value) || '').toLowerCase().indexOf(searchKey) > -1) {\n return true\n }\n }\n }) : list\n\n filtered.forEach(item => {\n const dt = new Date(item.timestamp)\n const options = { month: 'long', year: 'numeric' };\n const monthYear = dt.toLocaleString('en-US', options); // to do: set locale when i18n enabled\n\n if (!groups[monthYear]) {\n groups[monthYear] = []\n res.push({\n key: monthYear,\n items: groups[monthYear],\n })\n }\n\n groups[monthYear].push(item)\n })\n\n return res\n}\n\nfunction History() {\n const {t} = useTranslation()\n const [searchKey, setSearchKey] = useState('');\n\n const historyData = useTxData(\n [\n TransactionStatus.pending,\n TransactionStatus.waiting,\n TransactionStatus.success,\n TransactionStatus.error,\n ],\n [TypeTransaction.transaction],\n )\n const dataBlocks = divideByMonth(historyData, searchKey)\n const history = useHistory()\n\n const [showModal, setShowModal] = useState(false)\n const [transaction, setTransaction] = useState({})\n\n const handleShowModal = (tx) => {\n setTransaction(tx)\n setShowModal(true)\n }\n\n const handleCloseModal = () => {\n setTransaction({})\n setShowModal(false)\n }\n\n return (\n
\n

{t('history.title')}

\n
\n {historyData.length === 0 && (\n
\n

\n {t('history.empty')}\n

\n history.push('/')}\n >\n {t('history.portalCTA')}\n \n
\n )}\n {historyData.length !== 0 && (\n
\n }\n placeholder={t('history.search')}\n onChange={e => setSearchKey(e.target.value)}\n />\n
\n {dataBlocks.map((block, i) => (\n
\n

{block.key}

\n
\n {block.items.map((item, j) => (\n handleShowModal(item)}/>\n ))}\n
\n
\n ))}\n
\n \n
\n )}\n
\n
\n )\n}\n\nexport default History\n","import {default as AWS} from 'aws-sdk';\n\nAWS.config.update({\n region: 'us-west-1',\n credentials: new AWS.CognitoIdentityCredentials({\n IdentityPoolId: process.env.REACT_APP_IDENTITY_POOL_ID\n })\n});\n\nexport function uploadToS3(key, file) {\n var upload = new AWS.S3.ManagedUpload({\n params: {\n Bucket: 'zg-portal-feedback-attachments',\n Key: key,\n Body: file\n }\n })\n return upload.promise()\n}\n","import PropTypes from 'prop-types'\nimport {useCallback, useRef, useState} from 'react'\nimport {ZGBack, ZGSuccess} from '../../assets/svg'\nimport {Button, Loading, Notification} from '../../components'\nimport {useHistory} from 'react-router-dom/cjs/react-router-dom'\nimport {FileUploader} from 'react-drag-drop-files'\nimport Select from 'react-select'\nimport {uploadToS3} from '../../utils/aws'\nimport {calculateMD5, getFileExtension} from '../../utils'\n\nconst FormInput = ({label, ...props}) => {\n return (\n
\n \n \n
\n )\n}\n\nFormInput.propTypes = {\n label: PropTypes.string,\n}\n\nconst options = [\n {value: 'Bugs/Feature Request', label: 'Bugs/Feature Request'},\n {value: 'Token Transaction', label: 'Token Transaction'},\n {value: 'Integration Inquiry', label: 'Integration Inquiry'},\n {value: 'Other', label: 'Other'},\n]\n\nfunction Request() {\n const [email, setEmail] = useState('')\n const [issue, setIssue] = useState('')\n const [subject, setSubject] = useState('')\n const [details, setDetails] = useState('')\n const [files, setFiles] = useState(null)\n const popupRef = useRef(null)\n\n const handleChange = file => {\n setFiles(file)\n }\n\n const names = files\n ? Array.from(files)\n .map(item => item.name)\n .join(',')\n : ''\n\n const history = useHistory()\n\n const [errMessage, setErrMessage] = useState('')\n const [submitting, setSubmitting] = useState('')\n\n const uploadAttachments = useCallback(async () => {\n const urls = []\n for (let file of files) {\n const extension = getFileExtension(file.name)\n const md5 = await calculateMD5(file)\n const result = await uploadToS3(`${md5}.${extension}`, file)\n urls.push(result)\n }\n return urls\n }, [files])\n\n const handleSubmit = useCallback(async () => {\n if (!email || !issue || !subject || !details) {\n setErrMessage('Please fill all the required fields')\n return\n }\n setErrMessage('')\n if (submitting) return\n setSubmitting(true)\n try {\n const urls = files ? await uploadAttachments(files) : []\n await fetch('/api/form', {\n method: 'POST',\n body: JSON.stringify({\n table: 'Feedbacks',\n email,\n issue: issue.value,\n subject,\n details,\n attachments: urls.map(item => ({\n filename: item.Key,\n url: item.Location,\n })),\n }),\n })\n popupRef.current?.classList.remove('hidden');\n } catch (err) {\n Notification.open({\n type: 'error',\n content: 'Something went wrong, please try again later.',\n })\n } finally {\n setSubmitting(false)\n setEmail('')\n setIssue('')\n setSubject('')\n setDetails('')\n setFiles(null)\n }\n }, [details, email, files, issue, subject, submitting, uploadAttachments])\n\n return (\n
\n

\n Submit a Request\n

\n \n \n

\n Back\n

\n \n
\n
\n \n Please select an issue below*\n \n ({\n ...theme,\n borderRadius: 20,\n colors: {\n ...theme.colors,\n primary25: '#1D1B2014',\n primary50: '#1D1B2014',\n primary: '#DC3CB9',\n },\n })}\n styles={{\n control: baseStyles => ({\n ...baseStyles,\n border: '1px',\n borderColor: 'transparent',\n }),\n placeholder: baseStyles => ({\n ...baseStyles,\n color: '#D1D5DB',\n }),\n valueContainer: baseStyles => ({\n ...baseStyles,\n padding: '27px 24px',\n '@media only screen and (max-width: 768px)': {\n padding: '23px 16px',\n },\n }),\n input: baseStyles => ({\n ...baseStyles,\n padding: '0',\n margin: '0',\n }),\n menu: baseStyles => ({\n ...baseStyles,\n overflow: 'hidden',\n padding: '8px 0',\n }),\n indicatorSeparator: baseStyles => ({\n ...baseStyles,\n display: 'none',\n }),\n }}\n placeholder=\"Select option\"\n value={issue}\n onChange={setIssue}\n options={options}\n />\n
\n setEmail(e.target.value)}\n />\n setSubject(e.target.value)}\n />\n
\n \n Details*\n \n setDetails(e.target.value)}\n />\n
\n
\n \n Attachments (optional)\n \n \n
\n {!names && (\n <>\n Add or drop files here\n \n )}\n {names}\n
\n \n
\n
\n \n {submitting && }\n {!submitting && 'Submit'}\n \n
\n
\n
\n Please fill all the required fields\n
\n
\n
\n
\n \n

Thank you!

\n

Your submission has been received. We will be in touch and contact you shortly.

\n \n
\n
\n
\n
\n )\n}\n\nRequest.propTypes = {\n backNav: PropTypes.string,\n}\n\nexport default Request\n","import { useEffect, useMemo, useCallback } from 'react';\nimport { Contract } from '@ethersproject/contracts';\nimport Big from 'big.js';\nimport { formatUnits } from '@ethersproject/units';\n\nimport { BCFX_ABI } from '../abi';\nimport { findChainConfigById, KeyOfPortal } from '../constants';\nimport { useBalance as useFluentBalance } from './usePortal';\nimport { useWallet } from './useZGWallet';\nimport { useZGFormState } from '../state/zgForm';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nexport const getWeb3Balance = async (web3Provider, address, contractAddress, chainId) => {\n if (!web3Provider || !address) return BigNumber.from(0);\n const isNativeToken = contractAddress === findChainConfigById(String(chainId))?.nativeToken;\n if (!isNativeToken) {\n const contract = new Contract(contractAddress, BCFX_ABI, web3Provider);\n return contract.balanceOf(address);\n } else {\n return web3Provider.getBalance(address);\n }\n}\n\nexport const useZGBalance = (wallet, chainId, contractAddress, decimals) => {\n const { balance, setBalance } = useZGFormState();\n\n const { address, chainId: walletChainId, web3Provider } = useWallet(wallet);\n const balanceFluent = useFluentBalance(address, contractAddress);\n\n const fetchWeb3Balance = useCallback(async () => {\n if (!web3Provider || !address) return;\n if (wallet === KeyOfPortal) return;\n if (chainId !== walletChainId) {\n setBalance(0)\n return; // only fetch balance when chainId is matched\n }\n getWeb3Balance(web3Provider, address, contractAddress, chainId)\n .then(setBalance)\n .catch(err => {\n setBalance(0);\n console.log(err)\n });\n }, [address, contractAddress, chainId, walletChainId, wallet, web3Provider, setBalance]);\n\n useEffect(() => {\n if (wallet === KeyOfPortal) {\n setBalance(balanceFluent);\n } else {\n fetchWeb3Balance();\n }\n }, [wallet, balanceFluent, fetchWeb3Balance, setBalance]);\n\n const displayBalance = useMemo(() => {\n if (!balance) return '0';\n if (wallet !== KeyOfPortal) {\n return formatUnits(new Big(balance).toString(), decimals || 18).slice(0, 7);\n } else if (wallet === KeyOfPortal) {\n return formatUnits(new Big(balance).toString(), decimals || 18).slice(0, 7);\n }\n return '0';\n }, [balance, wallet, decimals]);\n\n return {\n balance,\n displayBalance,\n }\n};\n","import { JsonRpcProvider } from \"@ethersproject/providers\";\nimport { Contract } from \"@ethersproject/contracts\";\nimport { formatUnits, parseUnits } from \"@ethersproject/units\";\nimport { WeiPerEther } from \"@ethersproject/constants\";\n\nimport { tokenContractsInfo } from \"../../../constants/tokenConfig\";\nimport { ChainConfig, ContractConfig, ContractType } from \"../../../constants\";\nimport { ERC20_ABI, ZGBridge_ABI } from \"../../../abi\";\nimport { getWeb3Balance } from \"../../../hooks/useZGBalance\";\nimport { requestVolumeSummary } from \"../../../utils/api\";\nimport { supportedPools } from \"../../../constants\";\n\nclass PoolListManager {\n constructor(pools) {\n this.pools = pools;\n this.data = [];\n this.price = {};\n }\n\n async fetchPrice() {\n if (Object.keys(this.price).length) return;\n const priceSymbolList = new Set(this.pools.map(pool => {\n const tokenContractInfo = tokenContractsInfo[pool];\n return tokenContractInfo.priceName;\n }).filter(name => !!name));\n const raw = await fetch(`/api/price`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n const data = await raw.json();\n return Promise.all(Array.from(priceSymbolList).map(async priceName => {\n try {\n data.forEach(item => {\n if (priceName === item.symbol) {\n this.price[priceName] = Number(item.price);\n }\n });\n } catch (err) {\n this.price[priceName] = 0;\n console.log(err);\n }\n }));\n }\n\n async fetch(account, tokenList, force = false) {\n if (this.data.length && !force) return this.data;\n await this.fetchPrice();\n const summary = await requestVolumeSummary('/rpcnext');\n const pools = await Promise.all(this.pools.map(async (pool) => {\n try {\n const [chainId, address] = pool.split('+');\n const { symbol, name, priceName } = tokenContractsInfo[pool];\n const chain = Object.values(ChainConfig).find(chain => chain.id === chainId);\n const providerUrl = chain.rpcUrl;\n const provider = new JsonRpcProvider(providerUrl);\n const bridgeContract = ContractConfig[ContractType.bridge].address[chain.key]\n console.log(pool, bridgeContract, chain.key)\n if (!bridgeContract) return null;\n const contract = new Contract(bridgeContract, ZGBridge_ABI, provider);\n const peggedTokenAddress = await contract.backToPegged(address);\n const peggedTokenContract = new Contract(peggedTokenAddress, ERC20_ABI, provider);\n const matchedToken = tokenList.find(t => t.chain_id === chainId && t.token_address === String(address).toLocaleLowerCase());\n if (!matchedToken) return null;\n const { decimals, token_abbr } = matchedToken;\n const price = this.price[priceName];\n const liquidityInToken = await peggedTokenContract.totalSupply();\n const liquidity = liquidityInToken.mul(parseUnits(String(price))).div(WeiPerEther);\n const tokenBalance = formatUnits(await getWeb3Balance(provider, account, address, chainId), decimals);\n let oneDayVolume = 0;\n let sevenDayVolume = 0;\n try {\n oneDayVolume = parseUnits(String(summary['1d'][token_abbr]?.[String(chainId)] || 0)).mul(parseUnits(String(price))).div(WeiPerEther);\n sevenDayVolume = parseUnits(String(summary['7d'][token_abbr]?.[String(chainId)] || 0)).mul(parseUnits(String(price))).div(WeiPerEther);\n } catch (err) {\n console.log(err);\n }\n\n return {\n id: pool,\n chainId,\n address,\n symbol,\n token_abbr,\n name,\n liquidity,\n peggedTokenAddress,\n tokenBalance,\n token: matchedToken,\n price,\n decimals,\n provider,\n liquidityInToken,\n oneDayVolume,\n sevenDayVolume,\n };\n } catch (err) {\n console.log(err, pool);\n return null;\n }\n }));\n\n this.data = pools.filter(pool => !!pool);\n return pools;\n }\n\n getPoolTableData() {\n return this.data.map((pool) => {\n return {\n ...pool,\n displayLiquidity: `$${Number(formatUnits(pool.liquidity, pool.decimals).toString()).toFixed(4)}`,\n displayOneDayVolume: `$${Number(formatUnits(pool.oneDayVolume, pool.decimals).toString()).toFixed(4)}`,\n displaySevenDayVolume: `$${Number(formatUnits(pool.sevenDayVolume, pool.decimals).toString()).toFixed(4)}`,\n };\n });\n }\n\n getTVL() {\n return this.data.reduce((acc, pool) => {\n return acc + Number(formatUnits(pool.liquidity, pool.decimals));\n }, 0);\n }\n}\n\nconst poolList = new PoolListManager(supportedPools);\n\nexport default poolList;\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport { useWallet } from \"../../../hooks/useZGWallet\";\nimport { useZGFormState } from \"../../../state/zgForm\";\nimport { zgTokenListImpl } from \"../../../hooks/useAllTokenList\";\nimport poolList from \"../manager/poolList\";\n\nconst useAllPools = () => {\n const { fromWallet } = useZGFormState();\n const { address } = useWallet(fromWallet);\n\n const [tableData, setTableData] = useState([]);\n const [tvl, setTVL] = useState('');\n\n const updateTableData = useCallback(async (force = false) => {\n await zgTokenListImpl.fetch();\n poolList.fetch(address, zgTokenListImpl.getTokenList(), force).then(() => {\n setTableData(poolList.getPoolTableData());\n setTVL(poolList.getTVL().toString());\n });\n }, [address])\n\n useEffect(() => {\n updateTableData();\n }, [updateTableData]);\n\n return {\n tableData,\n tvl,\n updateTableData,\n };\n}\n\nexport default useAllPools;\n","import React from 'react';\nimport { useReactTable, getCoreRowModel, flexRender, getSortedRowModel } from \"@tanstack/react-table\";\nimport { useHistory } from 'react-router-dom';\n\nimport { TokenIcon } from '../components'\nimport useAllPools from \"./hooks/useAllPools\";\n\nconst PoolList = () => {\n const { tableData } = useAllPools();\n const [sorting, setSorting] = React.useState([])\n\n const table = useReactTable({\n data: tableData,\n state: {\n sorting,\n },\n onSortingChange: setSorting,\n getSortedRowModel: getSortedRowModel(),\n columns: [\n {\n header: () => (\n

Name

\n ),\n accessorKey: 'name',\n cell: (info) => (\n
\n \n

{info.row.original.token.chainName} {info.getValue()}

\n
\n )\n },\n {\n header: 'Wallet Balance',\n accessorKey: 'tokenBalance',\n cell: (info) => Number(info.getValue()) ? Number(info.getValue()).toFixed(6) : '-',\n sortDescFirst: true,\n },\n {\n header: 'Liquidity',\n accessorKey: 'displayLiquidity',\n sortDescFirst: true,\n },\n {\n header: 'Volume (24h)',\n accessorKey: 'displayOneDayVolume',\n },\n {\n header: 'Volume (7d)',\n accessorKey: 'displaySevenDayVolume',\n },\n ],\n getCoreRowModel: getCoreRowModel(),\n });\n\n const history = useHistory();\n const handleClickPool = (pool) => {\n history.push(`/pool/${pool.chainId}+${pool.address}`);\n }\n\n return (\n
\n
\n
\n {table.getHeaderGroups().map((headerGroup) => (\n
\n {headerGroup.headers.map((header) => (\n \n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n \n ))}\n
\n ))}\n
\n {tableData && !!tableData.length &&
}\n {tableData && !!tableData.length && (\n
\n {table.getRowModel().rows.map(row => (\n \n ))}\n
\n )}\n
\n
\n );\n}\n\nexport default PoolList;\n","import { Contract } from \"@ethersproject/contracts\";\nimport { formatUnits } from \"@ethersproject/units\";\n\nimport { tokenContractsInfo } from \"../../../constants\";\nimport poolList from \"./poolList\";\nimport { ERC20_ABI } from \"../../../abi\";\n\nclass YourPools {\n constructor(poolList) {\n this.poolList = poolList;\n this.data = [];\n }\n\n async fetch(account, tokenList, force = false) {\n if (this.data.length && !force) return this.data;\n await this.poolList.fetch(account, tokenList, force);\n const data = await Promise.all(this.poolList.getPoolTableData().map(async pool => {\n const peggedToken = tokenContractsInfo[pool.id].pegged;\n const contract = new Contract(peggedToken, ERC20_ABI, pool.provider);\n const peggedAmount = await contract.balanceOf(account);\n if (peggedAmount.isZero()) return {\n pool,\n peggedAmount: 0,\n poolShare: 0,\n };\n const poolShare = Number(formatUnits(peggedAmount, pool.decimals)) / Number(formatUnits(pool.liquidityInToken, pool.decimals));\n\n return {\n pool,\n peggedAmount,\n poolShare,\n };\n }));\n\n this.data = data;\n return data;\n }\n\n getPoolTableData() {\n return this.data.map((pool) => {\n return {\n ...pool.pool,\n displayLiquidity: `$${(Number(formatUnits(pool.pool.liquidity, pool.pool.decimals).toString())).toFixed(4)}`,\n peggedAmount: pool.peggedAmount,\n poolShare: pool.poolShare,\n displayPeggedAmount: `${Number(formatUnits(pool.peggedAmount, pool.pool.decimals).toString()).toFixed(6)}`,\n displayPoolShare: `${pool.poolShare ? (pool.poolShare * 100).toFixed(3) : '0'}%`,\n };\n });\n }\n}\n\nconst yourPools = new YourPools(poolList);\n\nexport default yourPools;\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport { useWallet } from \"../../../hooks/useZGWallet\";\nimport { useZGFormState } from \"../../../state/zgForm\";\nimport { zgTokenListImpl } from \"../../../hooks/useAllTokenList\";\nimport yourPools from \"../manager/yourPools\";\n\nconst useYourPools = () => {\n const { fromWallet } = useZGFormState();\n const { address } = useWallet(fromWallet);\n\n const [tableData, setTableData] = useState([]);\n\n const updateTableData = useCallback(async (force = false) => {\n await zgTokenListImpl.fetch();\n yourPools.fetch(address, zgTokenListImpl.getTokenList(), force).then(() => {\n setTableData(yourPools.getPoolTableData());\n });\n }, [address])\n\n useEffect(() => {\n updateTableData();\n }, [updateTableData]);\n\n return {\n tableData,\n updateTableData,\n };\n}\n\nexport default useYourPools;\n","import React from 'react';\nimport { useReactTable, getCoreRowModel, flexRender, getSortedRowModel } from \"@tanstack/react-table\";\nimport { useHistory } from 'react-router-dom';\n\nimport { TokenIcon } from '../components'\n\nimport useYourPools from \"./hooks/useYourPools\";\n\nconst PoolList = () => {\n const { tableData: raw } = useYourPools();\n const tableData = raw.filter(pool => pool.peggedAmount !== 0)\n const [sorting, setSorting] = React.useState([])\n\n const table = useReactTable({\n data: tableData,\n state: {\n sorting,\n },\n onSortingChange: setSorting,\n columns: [\n {\n header: () => (\n

Name

\n ),\n accessorKey: 'name',\n cell: (info) => (\n
\n \n

{info.row.original.token.chainName} {info.getValue()}

\n
\n )\n },\n {\n header: 'Wallet Balance',\n accessorKey: 'tokenBalance',\n cell: (info) => Number(info.getValue()) ? Number(info.getValue()).toFixed(6) : '-',\n },\n {\n header: 'Liquidity',\n accessorKey: 'displayLiquidity',\n },\n {\n header: 'Your Pool Tokens',\n accessorKey: 'displayPeggedAmount',\n },\n ],\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n });\n\n const history = useHistory();\n const handleClickPool = (pool) => {\n history.push(`/pool/${pool.chainId}+${pool.address}`);\n }\n\n return (\n
\n
\n
\n {table.getHeaderGroups().map((headerGroup) => (\n
\n {headerGroup.headers.map((header) => (\n \n {flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n \n ))}\n
\n ))}\n
\n {tableData && !!tableData.length &&
}\n {tableData && !!tableData.length && (\n
\n {table.getRowModel().rows.map(row => (\n \n ))}\n
\n )}\n
\n
\n );\n}\n\nexport default PoolList;\n","import { useTranslation } from \"react-i18next\";\nimport { useState } from \"react\";\n\nimport { Tabs } from \"../../components\";\n\nimport AllPools from \"./AllPools\";\nimport YourPools from \"./YourPools\";\nimport useAllPools from \"./hooks/useAllPools\";\n\nconst PoolList = () => {\n const {t} = useTranslation();\n const [tab, setTab] = useState('allPools');\n const {tvl} = useAllPools();\n\n const handleSwitchTab = (tab) => {\n setTab(tab.value);\n }\n\n return (\n
\n
\n
\n \n

TVL: {tvl}$

\n
\n
\n {tab === 'allPools' && }\n {tab === 'yourPools' && }\n
\n );\n}\n\nexport default PoolList;\n","import {useTranslation} from 'react-i18next'\nimport PropTypes from 'prop-types';\n\nimport PoolList from './PoolList';\nimport { KeyOfPortal } from '../../constants';\nimport { useEffect } from 'react';\n\nconst Pool = ({ setHideWalletList }) => {\n const {t} = useTranslation()\n\n useEffect(() => {\n setHideWalletList([KeyOfPortal]);\n }, [setHideWalletList])\n\n return (\n
\n
\n

{t('pool.title')}

\n {/*

{t('pool.description')}

*/}\n
\n \n
\n );\n}\n\nPool.propTypes = {\n setHideWalletList: PropTypes.func.isRequired,\n};\n\nexport default Pool;\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport {Loading as LoadingSvg} from '../../../assets/svg'\nimport SVGZGConnectWallet from '../../../assets/svg/ZGConnectWallet';\nimport SVGZGEditWallet from '../../../assets/svg/ZGEditWallet';\nimport { useZGFormState } from '../../../state/zgForm';\nimport { WalletIcon } from '../../components';\nimport SvgPlus from '../../../assets/svg/color/Plus';\nimport { Button, Input, Modal, Tabs } from '../../../components';\nimport { formatUnits, parseUnits } from '@ethersproject/units';\nimport { Contract } from '@ethersproject/contracts';\nimport { ERC20_ABI } from '../../../abi';\nimport { useWallet } from '../../../hooks/useZGWallet';\nimport { MaxUint256 } from '@ethersproject/constants';\nimport { KeyOfPortal } from '../../../constants';\nimport { getAddress } from '@ethersproject/address';\nimport { BigNumber } from '@ethersproject/bignumber';\n\n\nconst Account = ({ account, handleOpenWalletModal, wallet, hideEdit, balance, bridgeContract, tokenInfo, poolContract, hideStake }) => {\n const { walletInit } = useZGFormState()\n const { t } = useTranslation();\n const showBalance = useMemo(() => {\n return balance !== undefined;\n }, [balance]);\n const [unstakeStatus, setUnstakeStatus] = useState('default');\n const [canWithdraw, setCanWithdraw] = useState(false);\n const { web3Provider } = useWallet(wallet);\n\n const checksumAccount = useMemo(() => {\n if (!account) return '';\n if (account.startsWith('0x')) {\n return getAddress(account);\n }\n return account;\n }, [account]);\n\n const getValidateStatus = useCallback(async () => {\n if (!account || !poolContract || !account.startsWith('0x')) {\n return;\n }\n try {\n const requested = await poolContract.userUnstakeRequestMap(\n checksumAccount,\n tokenInfo.token_address,\n )\n const canWithdraw = await poolContract.canWithdraw(\n checksumAccount,\n tokenInfo.token_address,\n );\n setCanWithdraw(canWithdraw);\n if (canWithdraw) {\n setUnstakeStatus('unstaked');\n } else if (requested) {\n setUnstakeStatus('requested');\n } else {\n setUnstakeStatus('default');\n }\n } catch (e) {\n if (String(e).includes('invalidated user')) {\n setUnstakeStatus('requested');\n } else {\n setUnstakeStatus('default');\n }\n }\n }, [poolContract, account, tokenInfo, checksumAccount]);\n\n useEffect(() => {\n getValidateStatus();\n const timer = setInterval(() => {\n getValidateStatus();\n }, 3000);\n\n return () => {\n clearInterval(timer);\n }\n }, [getValidateStatus, account]);\n\n const displayAccount = useMemo(() => {\n if (!account) return null;\n return `${account.slice(0, 6)}...${account.slice(-4)}`;\n }, [account]);\n\n const handleConnectWallet = () => {\n handleOpenWalletModal();\n }\n\n const [showFastPathModal, setShowFastPathModal] = useState(false);\n const [stakeInput, setStakeInput] = useState('');\n\n const disableStake = () => {\n if (!bridgeContract) {\n return true;\n }\n if (stakeInput === '' || !Number(stakeInput)) {\n return true;\n }\n if (processing) return true;\n if (getInputError() !== '') return true;\n return false;\n }\n\n const approveAllowance = async (contract, tokenInfo) => {\n if (tokenInfo.token_address === tokenInfo.nativeToken) return\n const tokenContract = new Contract(\n tokenInfo.token_address,\n ERC20_ABI,\n web3Provider.getSigner(),\n )\n const hasApproved = await tokenContract.allowance(\n account,\n contract.address,\n )\n if (hasApproved.gte(parseUnits(stakeInput, tokenInfo.decimals))) return\n const gas = await tokenContract.estimateGas.approve(\n contract.address,\n MaxUint256,\n )\n await tokenContract.approve(\n contract.address,\n MaxUint256,\n {\n gasLimit: gas.add(gas.div(10)),\n },\n )\n let count = 0\n const maxCount = 30 // max check 30 times\n await new Promise(resolve => {\n setInterval(async () => {\n const hasApproved = await tokenContract.allowance(\n account,\n contract.address,\n )\n count++;\n if (hasApproved.gte(parseUnits(stakeInput, tokenInfo.decimals))) {\n resolve()\n }\n if (count > maxCount) {\n resolve()\n }\n }, 2000)\n })\n }\n\n const [processing, setProcessing] = useState(false);\n const handleStake = async () => {\n if (disableStake()) {\n return;\n }\n setProcessing(true);\n try {\n await approveAllowance(poolContract, tokenInfo);\n const valueInBigInt = parseUnits(stakeInput, tokenInfo.decimals);\n const gas = await poolContract.estimateGas.stake(\n tokenInfo.token_address,\n valueInBigInt,\n {\n value: tokenInfo.token_address === tokenInfo.nativeToken ? valueInBigInt : BigInt(0),\n }\n );\n const tx = await poolContract.stake(\n tokenInfo.token_address,\n valueInBigInt,\n {\n value: tokenInfo.token_address === tokenInfo.nativeToken ? valueInBigInt : BigInt(0),\n gasLimit: gas.mul(2),\n },\n );\n await tx.wait();\n } catch (err) {\n console.log(err);\n } finally {\n setProcessing(false);\n }\n fetchStakedAmount();\n }\n\n const [stakedAmount, setStakedAmount] = useState(BigInt(0));\n const fetchStakedAmount = useCallback(\n async () => {\n if (!poolContract || !account) {\n return;\n }\n try {\n const amount = await poolContract.userStakedAmount(\n account,\n tokenInfo.token_address,\n );\n setStakedAmount(amount);\n } catch (e) {\n console.log(e);\n setStakedAmount(BigInt(0));\n }\n }\n , [account, poolContract, tokenInfo]);\n\n useEffect(() => {\n if (account) {\n fetchStakedAmount();\n }\n }, [account, fetchStakedAmount])\n\n const displayStakedAmount = useMemo(() => {\n if (!tokenInfo) return '';\n return formatUnits(stakedAmount, tokenInfo.decimals)\n }, [stakedAmount, tokenInfo]);\n\n const [stakeMode, setStakeMode] = useState('Stake');\n\n const disableUnstake = () => {\n if (!bridgeContract) {\n return true;\n }\n if (processing) return true;\n if (canWithdraw && stakeMode === 'Withdraw') {\n return false;\n }\n if (BigNumber.from(0).eq(stakedAmount)) {\n return true;\n }\n if (unstakeStatus === 'requested') return true;\n return false;\n }\n\n const handleUnstake = async () => {\n if (disableUnstake()) {\n return;\n }\n try {\n setProcessing(true);\n await fetchStakedAmount();\n if (BigNumber.from(0).eq(stakedAmount)) {\n return;\n }\n const unlockGas = await poolContract.estimateGas.unstake(\n tokenInfo.token_address,\n );\n const tx = await poolContract.unstake(\n tokenInfo.token_address,\n {\n gasLimit: unlockGas.mul(2),\n },\n );\n await tx.wait();\n setUnstakeStatus('requested');\n setProcessing(false);\n fetchStakedAmount();\n } catch (e) {\n console.log(e)\n } finally {\n setProcessing(false);\n }\n }\n\n const handleWithdraw = async () => {\n setProcessing(true);\n const gas = await poolContract.estimateGas.withdraw(\n tokenInfo.token_address,\n );\n const tx = await poolContract.withdraw(\n tokenInfo.token_address,\n {\n gasLimit: gas.mul(2),\n },\n );\n await tx.wait();\n fetchStakedAmount();\n setProcessing(false);\n }\n\n const getFastPathLabel = () => {\n if (unstakeStatus === 'unstaked') {\n return 'Withdrawable'\n }\n if (unstakeStatus === 'requested') {\n return 'Unstaking'\n }\n return 'Fast Path'\n }\n\n const getInputError = () => {\n if (balance && Number(stakeInput) > Number(balance)) {\n return 'Insufficient balance'\n }\n return ''\n }\n\n const handleStakeInputChange = (e) => {\n // must be no less than 0\n if (Number(e.target.value) < 0) {\n return;\n }\n setStakeInput(e.target.value)\n }\n\n return (\n <>\n {\n (account) ? (\n
\n {wallet ? :
}\n
\n

{displayAccount}

\n {showBalance && (\n <>\n

\n {t('balance')} {balance}\n

\n {wallet !== KeyOfPortal && !hideStake && tokenInfo.token_address && !tokenInfo.isSF && (\n

\n {getFastPathLabel()}: {displayStakedAmount} { setShowFastPathModal(true) }} className='w-[16px] h-[16px] cursor-pointer' />\n

\n )}\n \n )}\n
\n {!hideEdit && }\n
\n ) : (\n \n )\n }\n {\n if (processing) return;\n setShowFastPathModal(false)\n setStakeMode('Stake')\n }}\n content={(\n
\n setStakeMode(tab.label)}\n />\n {\n stakeMode === 'Stake' ? (\n unstakeStatus !== 'default' ?

Unstaking, can not stake

: \n ) : (\n
\n

Staked amount: {displayStakedAmount}

\n {unstakeStatus === 'requested' && (\n

Unstaking, wait for 1000 blocks to confirm...

\n )}\n
\n )\n }\n {\n stakeMode === 'Stake' ? (\n \n ) : (\n \n )\n }\n
\n )}\n />\n \n )\n}\n\nAccount.propTypes = {\n tokenInfo: PropTypes.object,\n account: PropTypes.string,\n handleOpenWalletModal: PropTypes.func,\n wallet: PropTypes.string,\n hideEdit: PropTypes.bool,\n balance: PropTypes.string,\n bridgeContract: PropTypes.object,\n poolContract: PropTypes.object,\n hideStake: PropTypes.bool,\n}\n\nexport default Account;\n","import connectors from \"../connectors\";\nimport { ChainConfig } from \"../constants\";\n\nexport default async(fromWallet, fromToken, fromTokenKey) => {\n try {\n await connectors.getConnector(fromWallet)?.switchChain(Number(fromToken.chain_id))\n } catch (err) {\n if (err?.code === 4902) {\n console.log('network missing')\n }\n if ((String(err) || '').includes('not configured for connector')) {\n try {\n const provider = await connectors.getConnector(fromWallet).getProvider();\n await provider.request({\n method: 'wallet_addEthereumChain',\n params: [{\n chainId: `0x${Number(fromToken.chain_id).toString(16)}`,\n chainName: ChainConfig[fromTokenKey].fullName,\n nativeCurrency: {\n symbol: ChainConfig[fromTokenKey].tokenName,\n decimals: ChainConfig[fromTokenKey].decimals,\n },\n rpcUrls: [ChainConfig[fromTokenKey].rpcUrl],\n }],\n });\n } catch (err) {\n console.log('add network failed: ', err)\n Notification.open({\n type: 'error',\n message: 'add network failed',\n })\n }\n }\n }\n}\n","import PropTypes from \"prop-types\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useZGFormState } from \"../../../state/zgForm\";\nimport { useWallet } from \"../../../hooks/useZGWallet\";\nimport { Button } from \"../../../components\";\nimport switchWeb3Network from \"../../../utils/switchWeb3Network\";\nimport { findChainKeyById } from \"../../../constants\";\n\nconst TransactionButton = ({ token, handleTransaction, disabled }) => {\n const { t } = useTranslation();\n const { fromWallet } = useZGFormState();\n const { chainId } = useWallet(fromWallet);\n\n const handleSwitchNetwork = async () => {\n await switchWeb3Network(fromWallet, token, findChainKeyById(token.chain_id));\n }\n\n return chainId === token.chain_id ? (\n \n ) : (\n \n )\n}\n\nTransactionButton.propTypes = {\n token: PropTypes.object.isRequired,\n handleTransaction: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n};\n\nexport default TransactionButton;\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport useYourPools from '../hooks/useYourPools';\n\nconst PoolInfo = ({ token, ...props }) => {\n const { t } = useTranslation();\n const { tableData } = useYourPools();\n\n const matchedPool = tableData.find(pool => pool.token.id === token.id);\n\n return (\n
\n

{t('pool.operation.poolInfo')}

\n
\n
\n

{t('pool.operation.pooledTokens')}

\n

{matchedPool?.displayPeggedAmount || '-'}

\n
\n
\n

{t('pool.operation.lpt')}

\n

{matchedPool?.displayPeggedAmount || '-'}

\n
\n
\n

{t('pool.operation.share')}

\n

{matchedPool?.displayPoolShare || '-'}

\n
\n
\n

{t('pool.operation.volume24')}

\n

{matchedPool?.displayOneDayVolume || '-'}

\n
\n
\n

{t('pool.operation.liquidity')}

\n

{matchedPool?.displayLiquidity || '-'}

\n
\n
\n
\n );\n}\n\nPoolInfo.propTypes = {\n token: PropTypes.object.isRequired,\n};\n\nexport default PoolInfo;\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import {useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport {useTranslation} from 'react-i18next'\n\nimport {Modal, Button} from '../../../components'\nimport {StatusError, StatusSuccess, StatusWaiting} from '../../../assets/img'\n\nfunction TransactionModal({open, onClose, status, onClickResend, errInfo}) {\n const {t} = useTranslation()\n\n const handleCancel = () => {\n onClose && onClose()\n }\n\n const topIcon = useMemo(() => {\n switch (status) {\n case 'waiting':\n return StatusWaiting\n case 'success':\n return StatusSuccess\n case 'failed':\n return StatusError\n default:\n return StatusWaiting\n }\n }, [status])\n\n const title = useMemo(() => {\n switch (status) {\n case 'waiting':\n return t('zgPortal.transactionModal.confirmTitle')\n case 'success':\n return t('zgPortal.transactionModal.successTitle')\n case 'failed':\n return errInfo || t('zgPortal.transactionModal.failedTitle')\n default:\n return t('zgPortal.transactionModal.confirmTitle')\n }\n }, [status, t, errInfo])\n\n const notice = useMemo(() => {\n switch (status) {\n case 'waiting':\n return t('zgPortal.transactionModal.refreshNotice')\n case 'success':\n return ''\n case 'failed':\n return ''\n default:\n return t('zgPortal.transactionModal.refreshNotice')\n }\n }, [status, t])\n\n\n return (\n \n \"tunnel\"\n

\n {title}\n

\n

\n {notice}\n

\n
\n {status === 'success' ? (\n \n {t('zgPortal.transactionModal.newTransactionButton')}\n \n ) : (\n <>\n \n {t('zgPortal.transactionModal.cancelButton')}\n \n \n \n )}\n
\n
\n }\n />\n )\n}\n\nTransactionModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n status: PropTypes.string,\n onClickResend: PropTypes.func,\n fromAddress: PropTypes.string,\n toAddress: PropTypes.string,\n errInfo: PropTypes.string,\n}\n\nexport default TransactionModal\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport PropTypes from \"prop-types\";\nimport { MaxUint256 } from \"@ethersproject/constants\";\nimport { Contract } from \"@ethersproject/contracts\";\nimport { formatUnits, parseUnits } from \"@ethersproject/units\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\n\nimport { Input } from \"../../components\";\nimport { getWeb3Balance } from \"../../hooks/useZGBalance\";\nimport { useWallet } from \"../../hooks/useZGWallet\";\nimport { useZGFormState } from \"../../state/zgForm\";\nimport Account from \"../ZGPortal/Form/Account\";\nimport { AddressOne, ContractConfig, ContractType } from \"../../constants\";\nimport { ERC20_ABI } from \"../../abi\";\n\nimport TransactionButton from \"./components/TransactionButton\";\nimport PoolInfo from \"./components/PoolInfo\";\nimport TransactionModal from \"./components/TransactionModal\";\nimport useYourPools from \"./hooks/useYourPools\";\n\nconst AddLiquidity = ({ token, openWalletModal }) => {\n const [amount, setAmount] = useState('');\n const [balance, setBalance] = useState('');\n const [showTransactionModal, setShowTransactionModal] = useState(false);\n const [transactionStatus, setTransactionStatus] = useState('waiting')\n const { t } = useTranslation();\n const { fromWallet } = useZGFormState();\n const { web3Provider, address, chainId } = useWallet(fromWallet);\n const { updateTableData } = useYourPools();\n\n useEffect(() => {\n const fetchBalance = async () => {\n if (!web3Provider) return;\n if (chainId !== token.chain_id) return;\n const balance = await getWeb3Balance(web3Provider, address, token.token_address, token.chain_id);\n setBalance(balance);\n }\n setInterval(fetchBalance, 1000);\n }, [token, address, web3Provider, chainId]);\n\n const setMax = async () => {\n let gas = BigNumber.from(0);\n if (token.symbol === 'CFX') {\n gas = BigNumber.from(parseUnits('0.1'), 18);\n } else if (token.token_address === AddressOne) {\n gas = BigNumber.from(parseUnits('0.0001'), 18);\n }\n if (!balance) return;\n setAmount(formatUnits(BigNumber.from(balance).sub(gas).toString(), token.decimals || 18));\n }\n\n const handleClickAddLiquidity = async () => {\n try {\n setTransactionStatus('waiting');\n setShowTransactionModal(true);\n const contractConfig = ContractConfig[ContractType.bridge];\n const contractAddr = contractConfig.address[token.key];\n\n if (token.token_address !== AddressOne) {\n const tokenContract = new Contract(\n token.token_address,\n ERC20_ABI,\n web3Provider.getSigner(),\n )\n const allowance = await tokenContract.allowance(address, contractAddr);\n\n if (allowance.toString() === '0') {\n const gas = await tokenContract.estimateGas.approve(contractAddr, parseUnits(amount, token.decimals).toString());\n await tokenContract.approve(contractAddr, MaxUint256, {\n gasLimit: gas.add(gas.div(10)),\n });\n\n let count = 0\n const maxCount = 30 // max check 30 times\n await new Promise(resolve => {\n setInterval(async () => {\n const hasApproved = await tokenContract.allowance(\n address,\n contractAddr,\n )\n count++;\n if (hasApproved.gte(parseUnits(amount, token.decimals))) {\n resolve()\n }\n if (count > maxCount) {\n resolve()\n }\n }, 2000)\n })\n }\n }\n\n const contract = new Contract(contractConfig.address[token.key], contractConfig.abi, web3Provider.getSigner());\n\n const gas = await contract.estimateGas.addLiquidity(\n token.token_address,\n parseUnits(amount, token.decimals).toString(),\n token.token_address !== AddressOne ? {} : {\n value: parseUnits(amount, token.decimals).toString(),\n }\n );\n const tx = await contract.addLiquidity(\n token.token_address,\n parseUnits(amount, token.decimals).toString(),\n token.token_address !== AddressOne ? {\n gasLimit: gas.add(gas.div(10)),\n } : {\n value: parseUnits(amount, token.decimals).toString(),\n gasLimit: gas.add(gas.div(10)),\n },\n )\n\n await tx.wait();\n\n setTransactionStatus('success');\n updateTableData(true);\n } catch (err) {\n console.log(err)\n setTransactionStatus('failed');\n }\n }\n\n const errorMessage = () => {\n if (!amount) return '';\n if (Number(amount) > Number(formatUnits(balance || 0, token.decimals))) return t('error.mustLteMax');\n return '';\n }\n\n const handleInput = (amount) => {\n try {\n amount && parseUnits(amount, token.decimals)\n } catch (err) {\n console.log('invalid amount')\n return\n }\n setAmount(amount)\n }\n\n return (\n
\n

Total amount

\n
\n handleInput(e.target.value)}\n />\n
\n \n \n
\n
\n {errorMessage() &&

{errorMessage()}

}\n \n
\n \n
\n setShowTransactionModal(false)}\n status={transactionStatus}\n onClickResend={handleClickAddLiquidity}\n />\n
\n );\n}\n\nAddLiquidity.propTypes = {\n token: PropTypes.object.isRequired,\n openWalletModal: PropTypes.func.isRequired,\n};\n\nexport default AddLiquidity;\n","import { Contract } from \"@ethersproject/contracts\";\nimport PropTypes from \"prop-types\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { formatUnits, parseUnits } from \"@ethersproject/units\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { tokenContractsInfo, ContractConfig, ContractType } from \"../../constants\";\nimport { useZGFormState } from \"../../state/zgForm\";\nimport { useWallet } from \"../../hooks/useZGWallet\";\nimport { ERC20_ABI } from \"../../abi\";\nimport { Input } from \"../../components\";\nimport Account from \"../ZGPortal/Form/Account\";\n\nimport TransactionButton from \"./components/TransactionButton\";\nimport PoolInfo from \"./components/PoolInfo\";\nimport TransactionModal from \"./components/TransactionModal\";\nimport { toChecksum } from \"@fluent-wallet/account\";\nimport useYourPools from \"./hooks/useYourPools\";\n\nconst RemoveLiquidty = ({ token, openWalletModal }) => {\n const { fromWallet } = useZGFormState();\n const { web3Provider, address, chainId } = useWallet(fromWallet);\n const [amount, setAmount] = useState('');\n const [peggedTokenBalance, setPeggedTokenBalance] = useState('');\n const [showTransactionModal, setShowTransactionModal] = useState(false);\n const [transactionStatus, setTransactionStatus] = useState('waiting')\n const [errorInfo, setErrorInfo] = useState('');\n const { updateTableData } = useYourPools();\n\n const { t } = useTranslation();\n\n const updatePeggedTokenBalance = useCallback(async () => {\n if (!web3Provider) return;\n const [chainId, tokenAddress] = token.id.split('+');\n const info = tokenContractsInfo[`${chainId}+${(toChecksum(tokenAddress))}`] || tokenContractsInfo[`${chainId}+${tokenAddress}`]\n const peggedToken = info?.pegged;\n if (!peggedToken) return;\n const contract = new Contract(peggedToken, ERC20_ABI, web3Provider.getSigner());\n const balance = await contract.balanceOf(address);\n setPeggedTokenBalance(balance);\n }, [web3Provider, address, token])\n\n useEffect(() => {\n const timer = setInterval(updatePeggedTokenBalance, 1000);\n return () => clearInterval(timer);\n }, [web3Provider, address, token, chainId, updatePeggedTokenBalance])\n\n const setMax = async () => {\n setAmount(formatUnits(peggedTokenBalance || 0, token.decimals));\n }\n\n const handleClickRemoveLiquidity = async () => {\n try {\n setTransactionStatus('waiting');\n setShowTransactionModal(true);\n const contractConfig = ContractConfig[ContractType.bridge];\n const contract = new Contract(contractConfig.address[token.key], contractConfig.abi, web3Provider.getSigner());\n const gas = await contract.estimateGas.removeLiquidity(token.token_address, parseUnits(amount, token.decimals).toString());\n const tx = await contract.removeLiquidity(\n token.token_address,\n parseUnits(amount, token.decimals).toString(),\n {\n gasLimit: gas.add(gas.div(10)),\n },\n )\n await tx.wait();\n updateTableData(true);\n setTransactionStatus('success');\n } catch (err) {\n setTransactionStatus('failed');\n console.log(err)\n if (String(err).includes('insufficient liquidity')) {\n setErrorInfo('Insufficient Liquidity')\n }\n }\n }\n\n const errorMessage = () => {\n if (!amount) return '';\n if (Number(amount) > Number(formatUnits(peggedTokenBalance || 0, token.decimals))) return t('error.mustLteMax');\n return '';\n }\n\n const handleInput = (amount) => {\n try {\n amount && parseUnits(amount, token.decimals)\n } catch (err) {\n console.log('invalid amount')\n return\n }\n setAmount(amount)\n }\n\n return (\n
\n

Total amount

\n
\n handleInput(e.target.value)}\n />\n
\n \n \n
\n
\n {errorMessage() &&

{errorMessage()}

}\n \n
\n \n
\n setShowTransactionModal(false)}\n status={transactionStatus}\n onClickResend={handleClickRemoveLiquidity}\n errInfo={errorInfo}\n />\n
\n );\n};\n\nRemoveLiquidty.propTypes = {\n token: PropTypes.object,\n openWalletModal: PropTypes.func.isRequired,\n};\n\nexport default RemoveLiquidty;\n","import { useParams, useHistory } from 'react-router-dom';\nimport { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { zgTokenListImpl } from '../../hooks/useAllTokenList';\nimport { TokenIcon } from '../components';\nimport { ArrowLeft } from '../../assets/svg';\nimport { Tabs } from '../../components';\n\nimport AddLiquidity from './AddLiquidity';\nimport RemoveLiquidty from './RemoveLiquidity';\nimport { KeyOfPortal } from '../../constants';\n\nconst Operation = ({ openWalletModal, setHideWalletList }) => {\n const { id } = useParams();\n const history = useHistory();\n const [token, setToken] = useState({});\n const [tab, setTab] = useState('add');\n\n useEffect(() => {\n setHideWalletList([KeyOfPortal])\n }, [setHideWalletList]);\n\n const handleClickBack = () => {\n history.push('/pool');\n }\n\n useEffect(() => {\n zgTokenListImpl.fetch().then(() => {\n const tokenList = zgTokenListImpl.getTokenList();\n const matchedToken = tokenList.find(t => t.id === id.toLowerCase());\n setToken(matchedToken);\n });\n }, [id]);\n\n const handleSelectTab = (tab) => {\n setTab(tab.value);\n }\n\n return (\n
\n
\n \n \n

{`${token.chainName} ${token.symbol} Pool`}

\n
\n
\n \n
\n
\n {tab === 'add' && }\n {tab === 'remove' && }\n
\n
\n
\n );\n};\n\nOperation.propTypes = {\n openWalletModal: PropTypes.func.isRequired,\n setHideWalletList: PropTypes.func.isRequired,\n};\n\nexport default Operation;\n","import {Contract} from '@ethersproject/contracts'\nimport {AddressZero} from '@ethersproject/constants'\nimport {getAddress} from '@ethersproject/address'\n\nexport function isAddress(value) {\n try {\n return getAddress(value)\n } catch {\n return false\n }\n}\n\n// account is not optional\nexport function getSigner(library, account) {\n return library.getSigner(account).connectUnchecked()\n}\n\n// account is optional\nexport function getProviderOrSigner(library, account) {\n return account ? getSigner(library, account) : library\n}\n\n// account is optional\nexport function getContract(address, ABI, library, account) {\n if (!isAddress(address) || address === AddressZero) {\n throw Error(`Invalid 'address' parameter '${address}'.`)\n }\n\n return new Contract(address, ABI, getProviderOrSigner(library, account))\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n/**\n * For the chain based on Ethereum: multiple connectors\n */\nimport {useMemo} from 'react'\nimport { getContract} from '../utils/web3'\nimport {checkHexAddress} from '../utils/address'\nimport {ERC20_ABI} from '../abi'\nimport { useWallet } from './useZGWallet'\n\n// returns null when has error\nexport function useContract(address, wallet, ABI, withSignerIfPossible = true) {\n const {web3Provider: library, address: account} = useWallet(wallet)\n return useMemo(() => {\n if (!address || !ABI || !library || !checkHexAddress(address)) return null\n try {\n return getContract(\n address,\n ABI,\n library,\n withSignerIfPossible && account ? account : undefined,\n )\n } catch (error) {\n return null\n }\n }, [address, Boolean(library), withSignerIfPossible, account])\n}\n\nexport function useTokenContract(tokenAddress, wallet, withSignerIfPossible = true) {\n return useContract(tokenAddress, wallet, ERC20_ABI, withSignerIfPossible)\n}\n","import {ContractConfig} from '../constants/contractConfig'\nimport {useContract as useContractPortal} from '../hooks/usePortal'\nimport {useContract as useContractWeb3} from '../hooks/useWeb3Network'\nimport {KeyOfMetaMask, KeyOfPortal} from '../constants'\n\nexport function useShuttleContract(contractType, chain, inputWallet) {\n const contractObj = ContractConfig[contractType]\n const {abi, wallet} = contractObj\n const addressOfChain = contractObj?.address\n const address =\n typeof addressOfChain === 'object'\n ? addressOfChain[chain] || ''\n : addressOfChain\n const contractPortal = useContractPortal(address, abi)\n const contractWeb3 = useContractWeb3(address, inputWallet, abi)\n let contract = {}\n switch (wallet) {\n case KeyOfMetaMask:\n contract = contractWeb3\n break\n case KeyOfPortal:\n contract = contractPortal\n break\n }\n return contract\n}\n\n/**\n *\n * @param {*} contractType\n * @param {*} chain\n * @param {*} methodWithParams first param is method name,second param is the params of this method\n */\nexport function useContractData(contractType, chain, methodWithParams = []) {\n const contract = useShuttleContract(contractType, chain)\n let methodArr = []\n methodWithParams.map(item => {\n methodArr.push(contract[item[0]](item[1]))\n })\n const promiseArr = methodArr.map(fn => fn.call())\n let reseponse = []\n Promise.all(promiseArr)\n .then(data => {\n reseponse = data\n })\n .catch(() => {\n reseponse = []\n })\n return reseponse\n}\n","import { useState, useEffect } from \"react\";\nimport Big from \"big.js\";\n\nimport { KeyOfCfx } from \"../constants/chainConfig\";\nimport useShuttleAddress from \"../hooks/useShuttleAddress\";\nimport { useIsCfxChain, useIsBtcChain } from \"../hooks\";\nimport { useShuttleContract } from \"../hooks/useShuttleContract\";\nimport { ContractType } from \"../constants/contractConfig\";\nimport { ZeroAddrHex, TypeTransaction, SendStatus } from \"../constants\";\nimport { getExponent, calculateGasMargin } from \"../utils\";\nimport { useTxState } from \"../state/transaction\";\nimport { useZGFormState } from \"../state/zgForm\";\n\nfunction useShuttleOut({\n fromChain,\n toChain,\n fromToken,\n toToken,\n value,\n fromAddress,\n toAddress,\n setSendStatus,\n}) {\n const { origin, decimals, ctoken } = toToken;\n const isCfxChain = useIsCfxChain(origin);\n const isToChainBtc = useIsBtcChain(toChain);\n const [outAddress, setOutAddress] = useState(\"\");\n const shuttleAddress = useShuttleAddress(\n outAddress,\n fromChain,\n toChain,\n \"out\"\n );\n const tokenBaseContract = useShuttleContract(ContractType.tokenBase);\n const drCfxContract = useShuttleContract(\n ContractType.depositRelayerCfx,\n toChain\n );\n const { toBtcAddress } = useZGFormState();\n const { unshiftTx, transactions } = useTxState();\n window._transactions = new Map(Object.entries(transactions));\n useEffect(() => {\n if (isToChainBtc) {\n setOutAddress(toBtcAddress);\n } else {\n setOutAddress(toAddress);\n }\n\n }, [isToChainBtc, toAddress, toBtcAddress]);\n\n function getTransactionStatusData(hash, type = TypeTransaction.transaction) {\n const data = {\n hash: hash,\n fromChain,\n toChain,\n fromAddress,\n toAddress,\n amount: new Big(value).toString(10),\n fromToken,\n toToken,\n tx_type: type,\n shuttleAddress: shuttleAddress,\n cfxAddress: fromAddress,\n };\n return data;\n }\n\n return async () => {\n setSendStatus(SendStatus.ongoing);\n if (isCfxChain) {\n const amountVal = Big(value).mul(getExponent(decimals));\n if (ctoken === KeyOfCfx) {\n try {\n const estimateData = await drCfxContract\n .deposit(toAddress, ZeroAddrHex)\n .estimateGasAndCollateral({\n from: fromAddress,\n value: amountVal,\n });\n drCfxContract\n .deposit(toAddress, ZeroAddrHex)\n .sendTransaction({\n from: fromAddress,\n value: amountVal,\n gas: calculateGasMargin(estimateData?.gasLimit, 0.5),\n storageLimit: calculateGasMargin(\n estimateData?.storageCollateralized,\n 0.5\n ),\n })\n .then((txHash) => {\n unshiftTx(getTransactionStatusData(txHash));\n // fetchShuttleData(txHash)\n setSendStatus(SendStatus.success);\n })\n .catch((error) => {\n console.warn(error);\n setSendStatus(SendStatus.error);\n });\n } catch (error) {\n console.warn(error);\n setSendStatus(SendStatus.error);\n }\n } else {\n try {\n const estimateData = await drCfxContract\n .depositToken(ctoken, toAddress, ZeroAddrHex, amountVal)\n .estimateGasAndCollateral({\n from: fromAddress,\n });\n drCfxContract\n .depositToken(ctoken, toAddress, ZeroAddrHex, amountVal)\n .sendTransaction({\n from: fromAddress,\n gas: calculateGasMargin(estimateData?.gasLimit, 0.5),\n storageLimit: calculateGasMargin(\n estimateData?.storageCollateralized,\n 0.5\n ),\n })\n .then((txHash) => {\n unshiftTx(getTransactionStatusData(txHash));\n // fetchShuttleData(txHash)\n setSendStatus(SendStatus.success);\n })\n .catch((error) => {\n console.warn(error);\n setSendStatus(SendStatus.error);\n });\n } catch (error) {\n console.warn(error);\n setSendStatus(SendStatus.error);\n }\n }\n } else {\n const amountVal = Big(value).mul(getExponent(18));\n try {\n const estimateData = await tokenBaseContract[\"burn\"](\n fromAddress,\n amountVal,\n 0,\n outAddress,\n ZeroAddrHex\n ).estimateGasAndCollateral({\n from: fromAddress,\n to: ctoken,\n });\n tokenBaseContract[\"burn\"](\n fromAddress,\n amountVal,\n 0,\n outAddress,\n ZeroAddrHex\n )\n .sendTransaction({\n from: fromAddress,\n to: ctoken,\n gas: calculateGasMargin(estimateData?.gasLimit, 0.5),\n storageLimit: calculateGasMargin(\n estimateData?.storageCollateralized,\n 0.5\n ),\n })\n .then((data) => {\n unshiftTx(getTransactionStatusData(data));\n // fetchShuttleData(data)\n setSendStatus(SendStatus.success);\n })\n .catch((error) => {\n console.warn(error);\n setSendStatus(SendStatus.error);\n });\n } catch (error) {\n console.warn(error);\n setSendStatus(SendStatus.error);\n }\n }\n };\n}\n\nexport default useShuttleOut;\n","import useSWR from 'swr'\nimport {ProxyUrlPrefix} from '../constants'\nimport {requestUserWallet} from '../utils/api'\n\nexport default function useShuttleAddress(address, fromChain, toChain, type) {\n const {data} = useSWR(\n address\n ? [\n ProxyUrlPrefix.shuttleflow,\n address,\n undefined,\n fromChain,\n toChain,\n type,\n ]\n : null,\n requestUserWallet,\n )\n return data ? data : ''\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\n/**\n * data about shuttle, mainly various contract params\n */\nimport { useState, useEffect, useMemo } from \"react\";\nimport Big from \"big.js\";\nimport { useShuttleContract } from \"./useShuttleContract\";\nimport { ContractType } from \"../constants/contractConfig\";\nimport { KeyOfBtc, KeyOfCfx } from \"../constants/chainConfig\";\nimport { ZeroAddrHex } from \"../constants\";\nimport { useIsCfxChain } from \"../hooks\";\nimport { getExponent } from \"../utils\";\n\nfunction useTokenAddress(token, isCfxChain) {\n const {ctoken, reference} = token\n return useMemo(\n () => (!token ? '' : isCfxChain ? ctoken : reference),\n [ctoken, reference, isCfxChain, Boolean(token)],\n ) // address may be string, such as 'eth', 'cfx'\n}\n\nexport function useShuttleData() {}\n\n/**\n *\n * @param {*} chainOfContract which chain this contract in\n * @param {*} token\n * @returns\n */\nexport function useCustodianData(chainOfContract, token) {\n const {\n origin,\n decimals,\n ctoken,\n minimal_burn_value: token_minimal_burn_value,\n minimal_mint_value: token_minimal_mint_value,\n max_mint_fee,\n max_burn_fee,\n mint_fee_ratio,\n burn_fee_ratio,\n } = token;\n const isCfxChain = useIsCfxChain(origin);\n let contractAddress = useTokenAddress(token, isCfxChain);\n if (ctoken === KeyOfCfx) {\n contractAddress = ZeroAddrHex;\n }\n\n const obverseContract = useShuttleContract(\n ContractType.custodianImpl,\n chainOfContract\n );\n const reverseContract = useShuttleContract(\n ContractType.custodianImplReverse,\n chainOfContract\n );\n const contract = isCfxChain ? reverseContract : obverseContract;\n const decimalsNum = getExponent(decimals);\n const [contractData, setContractData] = useState({});\n\n useEffect(() => {\n if (!origin || !contract || !Object.keys(contract).length) {\n setContractData({});\n return;\n }\n Promise.all(\n [\n contract[\"burn_fee\"](contractAddress),\n contract[\"mint_fee\"](contractAddress),\n contract[\"wallet_fee\"](contractAddress),\n contractAddress === KeyOfBtc\n ? contract[\"btc_minimal_burn_value\"]()\n : contract[\"minimal_mint_value\"](contractAddress),\n contractAddress === KeyOfBtc\n ? contract[\"btc_minimal_burn_value\"]()\n : contract[\"minimal_burn_value\"](contractAddress),\n contract[\"minimal_sponsor_amount\"](),\n contract[\"safe_sponsor_amount\"](),\n ].map((fn) => fn.call())\n )\n .then((data) => {\n let [\n burn_fee,\n mint_fee,\n wallet_fee,\n minimal_mint_value,\n minimal_burn_value,\n minimal_sponsor_amount,\n safe_sponsor_amount,\n ] = data.map((x) => Big(x));\n minimal_mint_value =\n contractAddress === KeyOfBtc\n ? minimal_mint_value\n : Big(token_minimal_mint_value);\n minimal_burn_value =\n contractAddress === KeyOfBtc\n ? minimal_burn_value\n : Big(token_minimal_burn_value);\n setContractData({\n //Big(burn_fee).div(decimalsNum)\n burn_fee,\n mint_fee,\n wallet_fee: wallet_fee.div(`${decimalsNum}`),\n minimal_in_value: minimal_mint_value.div(`${decimalsNum}`),\n minimal_out_value: minimal_burn_value.div(`${decimalsNum}`),\n minimal_sponsor_amount: minimal_sponsor_amount.div(getExponent(18)),\n safe_sponsor_amount: safe_sponsor_amount.div(getExponent(18)),\n max_mint_fee: Big(max_mint_fee),\n max_burn_fee: Big(max_burn_fee),\n mint_fee_ratio: Big(mint_fee_ratio),\n burn_fee_ratio: Big(burn_fee_ratio),\n });\n })\n .catch(() => {\n setContractData({});\n });\n }, [\n isCfxChain,\n chainOfContract,\n contractAddress,\n decimalsNum,\n origin,\n Boolean(contract),\n token,\n ]);\n return contractData;\n}\n\nexport function useSponsorData(chainOfContract, token) {\n const { origin, ctoken } = token;\n const isCfxChain = useIsCfxChain(origin);\n let contractAddress = useTokenAddress(token, isCfxChain);\n if (ctoken === KeyOfCfx) {\n contractAddress = ZeroAddrHex;\n }\n const obverseData = useShuttleContract(\n ContractType.tokenSponsor,\n chainOfContract\n );\n const reverseData = useShuttleContract(\n ContractType.tokenSponsorReverse,\n chainOfContract\n );\n const contract = isCfxChain ? reverseData : obverseData;\n const [contractData, setContractData] = useState({});\n useEffect(() => {\n if (!origin || !contract) {\n setContractData({});\n return;\n }\n Promise.all(\n [\n contract[\"sponsorOf\"](contractAddress),\n contract[\"sponsorValueOf\"](contractAddress),\n ].map((fn) => fn.call())\n )\n .then((data) => {\n setContractData({\n sponsor: data[0],\n sponsorValue: Big(data[1])?.div(getExponent(18)),\n });\n })\n .catch(() => {\n setContractData({});\n });\n }, [chainOfContract, isCfxChain, contractAddress, origin, Boolean(contract)]);\n return contractData;\n}\n\nexport function useShuttleFee(chainOfContract, token, toChain, value) {\n const isToChainCfx = useIsCfxChain(toChain);\n const { decimals } = token;\n const {\n burn_fee,\n mint_fee,\n max_mint_fee,\n max_burn_fee,\n burn_fee_ratio,\n mint_fee_ratio,\n } = useCustodianData(chainOfContract, token);\n const decimalsNum = getExponent(decimals || 18);\n //real_mint_fee = max(min(amount * burn_fee / 1e18, max_mint_fee), mint_fee)\n const in_fee =\n value && mint_fee_ratio && max_mint_fee && mint_fee\n ? Math.max(\n Math.min(\n Big(value).times(mint_fee_ratio).div(1e18).toNumber(),\n max_mint_fee.div(`${decimalsNum}`).toNumber()\n ),\n mint_fee.div(`${decimalsNum}`).toNumber()\n )\n : Big(0);\n //real_burn_fee = max(min(amount * mint_fee / 1e18, max_burn_fee), burn_fee)\n const out_fee =\n value && burn_fee_ratio && max_burn_fee && burn_fee\n ? Math.max(\n Math.min(\n Big(value).times(burn_fee_ratio).div(1e18).toNumber(),\n max_burn_fee.div(`${decimalsNum}`).toNumber()\n ),\n burn_fee.div(`${decimalsNum}`).toNumber()\n )\n : Big(0);\n return useMemo(\n () =>\n isToChainCfx\n ? in_fee\n ? in_fee.toString(10)\n : \"0\"\n : out_fee\n ? out_fee.toString(10)\n : \"0\",\n [in_fee, out_fee]\n );\n}\n","/* eslint-disable no-debugger */\n/* eslint-disable react-hooks/exhaustive-deps */\nimport { convertDecimal } from \"@cfxjs/data-format\";\nimport { format } from \"js-conflux-sdk/dist/js-conflux-sdk.umd.min.js\";\nimport { BigNumber } from \"@ethersproject/bignumber\";\nimport Big from \"big.js\";\nimport { Contract } from \"@ethersproject/contracts\";\n\nimport { ContractConfig, ContractType } from \"../constants/contractConfig\";\n\nimport { ZeroAddrHex, TypeTransaction, SendStatus } from \"../constants\";\nimport { useIsNativeToken } from \"../hooks/useZGWallet\";\nimport { calculateGasMargin } from \"../utils\";\nimport { useIsCfxChain } from \"../hooks\";\nimport { useTxState } from \"../state/transaction\";\nimport { ERC20_ABI } from \"../abi\";\nimport { useWallet } from '../hooks/useZGWallet'\n\nfunction useShuttleIn({\n fromChain,\n toChain,\n fromToken,\n toToken,\n value,\n fromAddress,\n toAddress,\n setSendStatus,\n fromWallet,\n}) {\n const { address: fromTokenAddress, decimals, origin } = fromToken;\n const isCfxChain = useIsCfxChain(origin);\n const isNativeToken = useIsNativeToken(fromChain, fromTokenAddress);\n const { unshiftTx, transactions } = useTxState();\n const { web3Provider } = useWallet(fromWallet);\n window._transactions = new Map(Object.entries(transactions));\n\n function getTransactionStatusData(hash, type = TypeTransaction.transaction) {\n const data = {\n hash: hash,\n fromChain,\n toChain,\n fromAddress,\n toAddress,\n amount: value,\n fromToken,\n toToken,\n tx_type: type,\n cfxAddress: toAddress,\n };\n return data;\n }\n\n return async (shuttleInWalletAddress) => {\n setSendStatus(SendStatus.ongoing);\n if (isNativeToken) {\n let params = [\n format.hexAddress(toAddress),\n ZeroAddrHex,\n {\n value: new Big(\n convertDecimal(value, \"multiply\", decimals)\n ).toString(),\n },\n ];\n try {\n const drContract = new Contract(\n ContractConfig[ContractType.depositRelayer].address[fromChain],\n ContractConfig[ContractType.depositRelayer].abi,\n web3Provider.getSigner(),\n )\n let gas = await drContract.estimateGas.deposit(\n params[0],\n params[1],\n params[2]\n );\n drContract\n .deposit(params[0], params[1], {\n ...params[2],\n gasLimit: calculateGasMargin(gas),\n })\n .then((data) => {\n unshiftTx(getTransactionStatusData(data?.hash));\n // fetchShuttleData(data?.hash)\n setSendStatus(SendStatus.success);\n })\n .catch((error) => {\n console.warn(error);\n setSendStatus(SendStatus.error);\n });\n } catch (error) {\n console.warn(error);\n setSendStatus(SendStatus.error);\n }\n } else {\n if (!isCfxChain) {\n const drContract = new Contract(\n ContractConfig[ContractType.depositRelayer].address[fromChain],\n ContractConfig[ContractType.depositRelayer].abi,\n web3Provider.getSigner(),\n )\n let params = [\n fromTokenAddress,\n format.hexAddress(toAddress),\n ZeroAddrHex,\n new Big(convertDecimal(value, \"multiply\", decimals)).toString(),\n {\n value: BigNumber.from(0),\n },\n ];\n try {\n let gasDt = await drContract.estimateGas.depositToken(\n params[0],\n params[1],\n params[2],\n params[3],\n params[4]\n );\n drContract\n .depositToken(params[0], params[1], params[2], params[3], {\n ...params[4],\n gasLimit: calculateGasMargin(gasDt),\n })\n .then((data) => {\n unshiftTx(getTransactionStatusData(data?.hash));\n // fetchShuttleData(data?.hash)\n setSendStatus(SendStatus.success);\n })\n .catch((error) => {\n console.warn(error);\n setSendStatus(SendStatus.error);\n });\n } catch (error) {\n console.warn(error);\n setSendStatus(SendStatus.error);\n }\n } else {\n const amountVal = new Big(\n convertDecimal(value, \"multiply\", decimals)\n ).toString();\n try {\n const tokenContract = new Contract(\n fromTokenAddress,\n ERC20_ABI,\n web3Provider.getSigner(),\n );\n const gasData = await tokenContract.estimateGas.transfer(\n shuttleInWalletAddress,\n amountVal\n );\n tokenContract\n .transfer(shuttleInWalletAddress, amountVal, {\n gasLimit: calculateGasMargin(gasData),\n })\n .then((data) => {\n unshiftTx(getTransactionStatusData(data?.hash));\n // fetchShuttleData(data?.hash)\n setSendStatus(SendStatus.success);\n })\n .catch((error) => {\n console.warn(error);\n setSendStatus(SendStatus.error);\n });\n } catch (error) {\n console.warn(error);\n setSendStatus(SendStatus.error);\n }\n }\n }\n };\n}\n\nexport default useShuttleIn;\n","import PropTypes from 'prop-types'\nimport {useTranslation} from 'react-i18next'\nimport {Input, Circle} from '../../../components'\nimport {AlertTriangle} from '../../../assets/svg'\n\nfunction ToBtcAddress({\n btcAddressVal,\n errorBtcAddressMsg,\n onAddressInputChange,\n}) {\n const {t} = useTranslation()\n return (\n
\n \n
\n \n \n {t('tips.notice')}\n \n \n \n {t('tips.toBtcAddressTip')}\n \n \n \n {t('tips.toBtcGasTip')}\n \n \n \n {t('tips.btcWaitLongTip')}\n \n
\n
\n )\n}\n\nToBtcAddress.propTypes = {\n btcAddressVal: PropTypes.string,\n errorBtcAddressMsg: PropTypes.string,\n onAddressInputChange: PropTypes.func,\n}\n\nexport default ToBtcAddress\n","import PropTypes from 'prop-types'\nimport {useMemo, useState} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {Input, Modal, Tabs} from '../../../components'\nimport { TokenIcon } from '../../components';\nimport SVGZGSearchIcon from '../../../assets/svg/ZGSearchIcon'\nimport SvgPlus from '../../../assets/svg/color/Plus';\nimport { useWallet } from '../../../hooks/useZGWallet';\nimport { SvgClear } from '../../../assets/svg';\n\nconst TokenModal = ({open, onClose, setToken, tokenList, wallet, tokenModalTitle}) => {\n const handleChooseFromToken = token => {\n setToken(token)\n onClose()\n }\n const { t } = useTranslation()\n const { connector, chainId } = useWallet(wallet)\n\n const [searchKey, setSearchKey] = useState('');\n const [searchPart, setSearchPart] = useState('token');\n\n const handleClickAddToken = (token) => {\n if (token.sfChain === 'cfx') return;\n if (!connector) return;\n const {token_address, symbol, decimals, icon} = token;\n\n connector.getProvider().then(provider => {\n provider.request({\n method: 'wallet_watchAsset',\n params: {\n type: 'ERC20',\n options: {\n address: token_address,\n symbol,\n decimals,\n image: icon,\n },\n },\n }).catch(() => {\n console.log('add token failed');\n });\n })\n };\n\n const showAddToken = (token) => {\n if (token.sfChain === 'cfx') return false;\n if (!connector) return false;\n if (token.token_address === '0x0000000000000000000000000000000000000001') return false;\n const {chain_id} = token;\n return chainId === chain_id;\n };\n\n const sortedTokenList = useMemo(() => tokenList.sort((a, b) => {\n if (searchPart === 'token') {\n if (a.symbol === b.symbol) return a.chainName.localeCompare(b.chainName);\n return a.symbol.localeCompare(b.symbol);\n }\n if (a.chainName === b.chainName) return a.symbol.localeCompare(b.symbol);\n return (a.chainName || '').localeCompare(b.chainName);\n }), [tokenList, searchPart]);\n\n return (\n \n

{tokenModalTitle}

\n }\n placeholder={t('zgPortal.tokenModal.searchPlaceholder')}\n value={searchKey}\n onChange={e => setSearchKey(e.target.value)}\n suffix={searchKey ? setSearchKey('')} /> : null}\n />\n
\n {setSearchPart(item.value)}}\n />\n
\n

{searchKey ? `${t('zgPortal.tokenModal.resultTip')} ${searchKey}` : t('zgPortal.tokenModal.allTokens')}

\n
\n
\n {sortedTokenList.filter(token => {\n if (searchPart === 'token') {\n return (token.symbol || '').toLowerCase().includes(searchKey.toLowerCase())\n } else {\n return (token.chainName || '').toLowerCase().includes(searchKey.toLowerCase())\n }\n }).map(token => (\n handleChooseFromToken(token)}\n >\n
\n \n
\n
\n

\n {token.symbol}\n

\n {showAddToken(token) && handleClickAddToken(token)} />}\n
\n

{token.chainName}

\n
\n
\n \n ))}\n
\n
\n }\n />\n )\n}\n\nTokenModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n setToken: PropTypes.func,\n tokenList: PropTypes.array,\n wallet: PropTypes.string,\n tokenModalTitle: PropTypes.string,\n}\n\nexport default TokenModal\n","import {useState} from 'react'\nimport propTypes from 'prop-types'\nimport { useTranslation } from 'react-i18next'\n\nimport ZGTokenSelectionChevron from '../../../assets/svg/ZGTokenSelectionChevron'\nimport {Input} from '../../../components'\n\nimport Account from './Account'\nimport TokenModal from './TokenModal'\nimport { TokenIcon } from '../../components'\n\nconst GroupBox = ({\n tokenInfo,\n setToken,\n address,\n setAmount,\n amount,\n tokenList,\n disableInput,\n handleOpenWalletModal,\n wallet,\n hideAccount,\n setMax,\n tokenModalTitle,\n balance,\n bridgeContract,\n poolContract,\n}) => {\n const [showModal, setShowModal] = useState(false)\n const { t } = useTranslation()\n\n const handleChangeAmount = e => {\n setAmount && setAmount(e.target.value)\n }\n const handleShowModal = () => {\n setShowModal(true)\n }\n const handleCloseModal = () => {\n setShowModal(false)\n }\n\n return (\n
\n
\n \n {disableInput ? (\n \n ) : (\n \n )}\n
\n
\n \n
\n
\n \n {tokenInfo.name ? (\n
\n

{tokenInfo.symbol}

\n

{tokenInfo.chainName}

\n
\n ) : (\n <>\n

{t('selectToken')}

\n \n )}\n
\n \n
\n \n {hideAccount ?
: }\n
\n \n
\n )\n}\n\nGroupBox.propTypes = {\n tokenInfo: propTypes.object.isRequired,\n setToken: propTypes.func.isRequired,\n address: propTypes.string,\n setAmount: propTypes.func,\n amount: propTypes.string,\n tokenList: propTypes.array.isRequired,\n disableInput: propTypes.bool,\n handleOpenWalletModal: propTypes.func,\n wallet: propTypes.string,\n hideAccount: propTypes.bool,\n setMax: propTypes.func,\n tokenModalTitle: propTypes.string,\n balance: propTypes.string,\n bridgeContract: propTypes.object,\n poolContract: propTypes.object,\n}\n\nexport default GroupBox\n","import {useMemo} from 'react'\nimport PropTypes from 'prop-types'\nimport {useTranslation} from 'react-i18next'\nimport { formatUnits } from '@ethersproject/units'\n\nimport {Modal, Button} from '../../../components'\nimport {useZGFormState} from '../../../state/zgForm'\nimport {StatusError, StatusSuccess, StatusWaiting} from '../../../assets/img'\nimport { useIsToChainBtc } from '../../../state/zgForm'\nimport Account from './Account'\nimport { ChainConfig } from '../../../constants'\n\nfunction TransactionModal({open, onClose, status, onClickResend, fromAddress, toAddress}) {\n const {t} = useTranslation()\n\n const {fromToken, toToken, fromAmount, toAmount, fee, toBtcAddress, fromWallet, toWallet, tokenFee} =\n useZGFormState()\n const isToChainBtc = useIsToChainBtc()\n\n const handleCancel = () => {\n onClose && onClose()\n }\n\n const topIcon = useMemo(() => {\n switch (status) {\n case 'waiting':\n return StatusWaiting\n case 'success':\n return StatusSuccess\n case 'failed':\n return StatusError\n default:\n return StatusWaiting\n }\n }, [status])\n\n const title = useMemo(() => {\n switch (status) {\n case 'waiting':\n return t('zgPortal.transactionModal.confirmTitle')\n case 'success':\n return t('zgPortal.transactionModal.successTitle')\n case 'failed':\n return t('zgPortal.transactionModal.failedTitle')\n default:\n return t('zgPortal.transactionModal.confirmTitle')\n }\n }, [status, t])\n\n const notice = useMemo(() => {\n switch (status) {\n case 'waiting':\n return t('zgPortal.transactionModal.refreshNotice')\n case 'success':\n return ''\n case 'failed':\n return ''\n default:\n return t('zgPortal.transactionModal.refreshNotice')\n }\n }, [status, t])\n\n const fromTokenChainInfo = useMemo(() => {\n return Object.values(ChainConfig).find(chain => chain.id === fromToken.chain_id) || {};\n }, [fromToken.chain_id])\n\n const displayFee = useMemo(() => {\n if (!fee) return '0';\n if (!fromToken.isSF) { // for zg, the fee is native token + source token\n if (fromTokenChainInfo.tokenName === fromToken.symbol) {\n return formatUnits(fee.add(tokenFee[0]).add(tokenFee[1]), fromTokenChainInfo.decimals).toString() + fromTokenChainInfo.tokenName;\n }\n // const nativeFee = formatUnits(fee, fromTokenChainInfo.decimals).toString() + fromTokenChainInfo.tokenName;\n const sourceTokenFee = formatUnits(tokenFee[0].add(tokenFee[1]), fromToken.decimals).toString() + fromToken.symbol;\n return `${sourceTokenFee}`;\n }\n return formatUnits(fee, fromToken.decimals).toString() + fromToken.symbol; // for sf, the fee is from token\n }, [fee, fromToken.decimals, fromToken.isSF, fromTokenChainInfo, tokenFee, fromToken.symbol])\n\n const displayToAddress = useMemo(() => {\n if (isToChainBtc) return toBtcAddress;\n return toAddress;\n }, [isToChainBtc, toBtcAddress, toAddress]);\n\n return (\n \n \"tunnel\"\n

\n {title}\n

\n

\n {notice}\n

\n
\n
\n
\n

{t('zgPortal.transactionModal.from')}

\n

\n {fromAmount} {fromToken.symbol}\n

\n

{t('zgPortal.transactionModal.fee')} {displayFee}

\n
\n \n
\n
\n
\n

{t('zgPortal.transactionModal.to')}

\n

\n {toAmount} {toToken.symbol}\n

\n
\n \n
\n
\n
\n {status === 'success' ? (\n \n {t('zgPortal.transactionModal.newTransactionButton')}\n \n ) : (\n <>\n \n {t('zgPortal.transactionModal.cancelButton')}\n \n \n \n )}\n
\n
\n }\n />\n )\n}\n\nTransactionModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n status: PropTypes.string,\n onClickResend: PropTypes.func,\n fromAddress: PropTypes.string,\n toAddress: PropTypes.string,\n}\n\nexport default TransactionModal\n","import {useState} from 'react'\nimport {useTranslation} from 'react-i18next'\nimport QRCode from 'qrcode.react'\nimport {CopyToClipboard} from 'react-copy-to-clipboard'\nimport {CopyIcon} from '../../../assets/svg'\nimport {Toast} from '../../../components'\nimport { useZGFormState } from '../../../state/zgForm'\n\nfunction BtcConfirmTips() {\n const {t} = useTranslation()\n const {fromBtcAddress} = useZGFormState()\n const [copied, setCopied] = useState(false)\n return (\n \n
\n \n
\n
\n
\n
\n \n {fromBtcAddress}\n \n
\n setCopied(true)}>\n \n \n
\n
\n\n setCopied(false)}\n className=\"top-10 right-10 w-20\"\n />\n
\n )\n}\n\nexport default BtcConfirmTips\n","import PropTypes from 'prop-types';\nimport { useEffect, useState } from 'react';\n\nimport { Modal } from \"../../../components\";\nimport BtcConfirmTips from './BtcConfirmTips';\nimport { useZGFormState, useIsFromChainBtc } from '../../../state/zgForm';\nimport { requestUserWallet } from '../../../utils/api';\nimport { ProxyUrlPrefix } from '../../../constants';\n\nfunction BTCTransactionModal({ open, onClose, toAddress }) {\n const {\n fromToken,\n setFromBtcAddress,\n } = useZGFormState();\n\n const isFromChainBtc = useIsFromChainBtc();\n const [showDetail, setShowDetail] = useState(false);\n\n useEffect(() => {\n if (isFromChainBtc && toAddress) {\n setShowDetail(false);\n requestUserWallet([\n ProxyUrlPrefix.shuttleflow,\n toAddress,\n undefined,\n 'btc',\n 'cfx',\n 'in'\n ]).then(data => {\n setFromBtcAddress(data)\n setShowDetail(true);\n });\n }\n }, [fromToken, isFromChainBtc, setFromBtcAddress, toAddress, open])\n\n return (\n \n \n
\n )}\n />\n );\n}\n\nBTCTransactionModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n toAddress: PropTypes.string,\n}\n\nexport default BTCTransactionModal;\n","import PropTypes from \"prop-types\";\nimport { useTranslation } from \"react-i18next\";\nimport * as dayjs from 'dayjs';\nimport {NavLink} from 'react-router-dom';\n\nimport { TokenIcon } from \"../../components\";\nimport { KeyOfCfx } from \"../../../constants\";\nimport { Button } from \"../../../components\";\n\nfunction PendingTxList({ list }) {\n const { t } = useTranslation();\n\n const getSourceTokenName = (tx) => {\n const token = tx.fromToken;\n if (token.sfChain) {\n return token.sfChain === KeyOfCfx ? token.symbol : token.reference_symbol;\n }\n return token.symbol\n }\n\n const getFormattedDate = (timestamp) => {\n const ts = dayjs(timestamp)\n const date = ts.format('MM/DD/YYYY')\n const time = ts.format('HH:mm:ss')\n return `${date} ${time}`\n }\n\n return (\n
\n

{t('zgPortal.form.pendingTitle')}

\n
\n {list.map(item => (\n
\n
\n \n
\n

{getSourceTokenName(item)}

\n

{item.fromChain}

\n

{getFormattedDate(item.timestamp)}

\n
\n
\n
\n

{item.amount} {getSourceTokenName(item)}

\n
\n
\n ))}\n
\n
\n \n
\n
\n );\n}\n\nPendingTxList.propTypes = {\n list: PropTypes.array,\n};\n\nexport default PendingTxList;\n","import {Conflux} from 'js-conflux-sdk/dist/js-conflux-sdk.umd.min.js'\n\nlet cfx\nif (window?.confluxJS?.version !== '2.0.3') {\n cfx = new Conflux({\n url: 'https://main.confluxrpc.com',\n defaultGasPrice: 1000000,\n defaultGas: 1000000,\n logger: console,\n })\n\n window.confluxJS = cfx\n const timer = setInterval(() => {\n if (window.conflux) {\n window.confluxJS.provider = window.conflux\n clearInterval(timer)\n }\n }, 1000)\n}\n\nexport default cfx\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useStatus } from '@cfxjs/use-wallet';\n\nimport { useZGFormState } from '../../../state/zgForm';\nimport { Modal, Tooltip } from \"../../../components\";\nimport { WalletIcon } from '../../components'\nimport { KeyOfPortal, WalletConfig } from '../../../constants'\n\nimport { useWalletState } from '../../../state/wallet';\nimport { SvgCheckedCircle, Info } from '../../../assets/svg';\n\nconst FromWalletModal = ({ open, onClose, hideList }) => {\n const { t } = useTranslation();\n const { setFromWallet, setFromToken, fromWallet } = useZGFormState();\n\n const {walletMap} = useWalletState()\n const fluentStatus = useStatus();\n\n const handleSelectWallet = async (wallet) => {\n try {\n if (wallet.key === KeyOfPortal) {\n console.log('fluentStatus', fluentStatus)\n }\n await walletMap[wallet.key].activate()\n } catch (e) {\n return window.open(WalletConfig[wallet.key].website, '_blank');\n }\n setFromWallet(wallet.key)\n setFromToken({})\n\n onClose();\n }\n\n const wallets = Object.values(WalletConfig).filter(wallet => !(hideList || []).includes(wallet.key));\n\n return (\n \n

{t('zgPortal.walletModal.sourceTitle')}

\n
\n {wallets.map(wallet => (\n handleSelectWallet(wallet)}\n >\n
\n \n

{wallet.name}

\n {wallet.info && }\n
\n
\n {wallet.key === fromWallet && }\n
\n \n ))}\n
\n
\n )}\n />\n );\n}\n\nFromWalletModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n hideList: PropTypes.array,\n};\n\nexport default FromWalletModal;\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useState } from 'react';\n\nimport { useZGFormState } from '../../../state/zgForm';\n\nimport { Modal, Checkbox, Input, Button } from \"../../../components\";\nimport { WalletIcon } from '../../components'\nimport { Checked, NoChecked } from '../../../assets/svg';\nimport { KeyOfCfx, KeyOfPortal, WalletConfig } from '../../../constants'\nimport SVGZGConnectWallet from '../../../assets/svg/ZGConnectWallet';\nimport { SvgCheckedCircle, SvgClear } from '../../../assets/svg';\nimport SvgArrowLeft from '../../../assets/svg/color/ArrowLeft';\n\nimport { useWalletState } from '../../../state/wallet';\n\nconst ToWalletModal = ({ open, onClose }) => {\n const { t } = useTranslation();\n const [understand, setUnderstand] = useState(false);\n const {\n fromAddress,\n setToAddress,\n sameWallet,\n setSameWallet,\n setToWallet,\n toToken,\n toWallet,\n } = useZGFormState();\n const [showEnterAddress, setShowEnterAddress] = useState(false);\n const [address, setAddress] = useState('');\n\n const handleSwitchSameAsSource = () => {\n setSameWallet(!sameWallet);\n if (!sameWallet) {\n setToAddress(fromAddress);\n onClose();\n }\n }\n\n const handleInputAddress = (e) => {\n setAddress(e.target.value);\n }\n\n const {walletMap} = useWalletState()\n\n const handleSelectWallet = async (wallet) => {\n try {\n await walletMap[wallet.key].activate()\n } catch (e) {\n return window.open(WalletConfig[wallet.key].website, '_blank');\n }\n setToWallet(wallet.key)\n setToAddress('') // when select wallet, clear the manually input address\n\n onClose();\n }\n\n const wallets = (toToken?.sfChain === KeyOfCfx) ? [WalletConfig[KeyOfPortal]] : Object.values(WalletConfig)\n const disableToSelect = sameWallet\n const disabledClass = disableToSelect ? 'bg-[#EEF0F2] cursor-default opacity-40' : ''\n\n const handleClickEnterAddress = () => {\n if (disableToSelect) return;\n setShowEnterAddress(true);\n }\n\n const handleClickAddressContinue = () => {\n setToAddress(address);\n onClose && onClose();\n }\n\n return (\n \n {!showEnterAddress && (\n <>\n

{t('zgPortal.walletModal.destinationTitle')}

\n {(toToken.sfChain !== KeyOfCfx) && (\n \n )}\n
\n {wallets.map(wallet => (\n !disableToSelect && handleSelectWallet(wallet)}\n >\n
\n \n

{wallet.name}

\n
\n
\n {wallet.key === toWallet && }\n
\n \n ))}\n
\n
\n \n \n

{t('zgPortal.walletModal.enterWalletAddress')}

\n \n
\n \n )}\n {showEnterAddress && (\n <>\n setShowEnterAddress(false)} />\n

{t('zgPortal.walletModal.enterWalletAddress')}

\n setAddress('')} /> : null}\n />\n \n
\n \n \n
\n \n )}\n \n )}\n />\n );\n}\n\nToWalletModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n};\n\nexport default ToWalletModal;\n","import {useEffect, useState, useMemo, useCallback, forwardRef} from 'react'\nimport {useTranslation} from 'react-i18next'\nimport {Contract} from '@ethersproject/contracts'\nimport {parseUnits, formatUnits} from '@ethersproject/units'\nimport {MaxUint256} from '@ethersproject/constants'\n// import { BigNumber } from '@ethersproject/bignumber'\nimport {debounce} from 'underscore'\nimport Big from 'big.js'\nimport PropTypes from 'prop-types'\n\nimport {useZGFormState} from '../../../state/zgForm'\nimport {Button} from '../../../components'\nimport {\n ContractConfig,\n ContractType,\n findChainKeyById,\n ChainConfig,\n KeyOfCfx,\n TypeTransaction,\n TransactionStatus,\n ProxyUrlPrefix,\n KeyOfBtc,\n} from '../../../constants'\nimport {ERC20_ABI, Pool_ABI, ZGBridge_ABI} from '../../../abi'\nimport {useAllTokenList} from '../../../hooks/useAllTokenList'\nimport useShuttleOut from '../../../hooks/useShuttleOut'\nimport {useShuttleFee, useCustodianData} from '../../../hooks/useShuttleData'\nimport useShuttleIn from '../../../hooks/useShuttleIn'\nimport { calculateGasMargin } from '../../../utils'\nimport { KeyOfPortal, KeyOfMetaMask } from '../../../constants'\nimport { useIsFromChainBtc, useIsToChainBtc, useIsFromChainCfx } from '../../../state/zgForm'\nimport ToBtcAddress from './ToBtcAddress'\nimport { useTxData } from '../../../hooks/useTransaction'\nimport { isNumber } from '../../../utils'\nimport { useZGBalance } from '../../../hooks/useZGBalance'\nimport { requestUserWallet } from '../../../utils/api'\nimport { Notification } from '../../../components'\nimport { useWallet } from '../../../hooks/useZGWallet'\nimport switchWeb3Network from '../../../utils/switchWeb3Network'\n\nimport SVGZGFlip from '../../../assets/svg/ZGFlip'\n\nimport GroupBox from './GroupBox'\nimport TransactionModal from './TransactionModal'\nimport BTCTransactionModal from './BTCTransactionModal'\nimport PendingTxList from './PendingTxList'\nimport FromWalletModal from './FromWalletModal'\nimport ToWalletModal from './ToWalletModal'\nimport { checkBtcAddress, checkCfxTokenAddress, checkHexAddress } from '../../../utils/address'\n// import { useFeeData } from 'wagmi'\n\nconst Form = forwardRef(function Form ({ className, onClick }, ref) {\n const {\n fromToken,\n toToken,\n setFromToken,\n setToToken,\n fromAmount,\n lastWeb3Wallet,\n setFromAmount,\n toAmount,\n setToAmount,\n toAddress: manualToAddress,\n setFee,\n fee,\n sameWallet,\n setFromWallet,\n setToWallet,\n fromWallet,\n toWallet,\n setToBtcAddress,\n toBtcAddress,\n defaultSetLock,\n setDefaultSetLock,\n setSameWallet,\n setTokenFee,\n } = useZGFormState()\n\n const fromAccount = useWallet(fromWallet)\n const toAccount = useWallet(toWallet)\n const { address: fromAddress, web3Provider, chainId } = fromAccount\n const { address: toAddress } = toAccount\n\n const fromTokenKey = findChainKeyById(fromToken.chain_id)\n const [showTransactionModal, setShowTransactionModal] = useState()\n const [transactionStatus, setTransactionStatus] = useState('waiting')\n const {t} = useTranslation()\n const allTokenList = useAllTokenList()\n const [showFromWalletModal, setShowFromWalletModal] = useState(false)\n const [showToWalletModal, setShowToWalletModal] = useState(false)\n const shuttleOut = useShuttleOut({\n fromChain: fromToken.sfChain,\n toChain: toToken.sfChain,\n fromToken,\n toToken,\n value: fromAmount,\n fromAddress: fromAddress,\n toAddress: manualToAddress || toAddress,\n setSendStatus: setTransactionStatus,\n })\n const shuttleIn = useShuttleIn({\n fromChain: fromToken.sfChain,\n toChain: toToken.sfChain,\n fromToken,\n toToken,\n value: fromAmount,\n fromAddress: fromAddress,\n toAddress: manualToAddress || toAddress,\n fromWallet,\n setSendStatus: setTransactionStatus,\n })\n const isFromCfx = useIsFromChainCfx();\n const shuttleFee = useShuttleFee(\n isFromCfx ? toToken.sfChain : fromToken.sfChain,\n fromToken,\n toToken.sfChain,\n fromAmount,\n )\n const [showBTCModal, setShowBTCModal] = useState(false);\n const isFromChainBtc = useIsFromChainBtc();\n const isToChainBtc = useIsToChainBtc();\n const pendingHistory = useTxData([TransactionStatus.pending, TransactionStatus.waiting], [TypeTransaction.transaction]);\n const successHistory = useTxData([TransactionStatus.success], [TypeTransaction.transaction]);\n const custodianContractChain = isFromCfx ? toToken.sfChain : fromToken.sfChain;\n const { minimal_in_value, minimal_out_value } = useCustodianData(custodianContractChain, toToken);\n let tokenDecimal = fromToken.decimals;\n if (isFromCfx && fromToken.origin !== KeyOfCfx) tokenDecimal = 18;\n const { balance, displayBalance } = useZGBalance(\n fromWallet,\n fromToken.chain_id,\n fromToken.token_address,\n tokenDecimal,\n );\n\n const handleClickFlip = () => {\n // flip fromToken and toToken\n setFromToken(toToken)\n setToToken(fromToken)\n // flip fromWallet and toWallet\n if (!sameWallet) {\n setFromWallet(toWallet)\n setToWallet(fromWallet)\n }\n }\n\n const handleZGTransaction = async () => {\n const isNativeToken =\n ChainConfig[fromTokenKey]?.nativeToken ===\n fromToken.token_address\n\n const bridgeContract = ContractConfig[ContractType.bridge].address[fromTokenKey]\n const contract = new Contract(\n bridgeContract,\n ZGBridge_ABI,\n web3Provider.getSigner(),\n )\n const amountBigNumber = parseUnits(fromAmount, fromToken.decimals)\n const toAddress = manualToAddress || toAccount.address;\n try {\n const gas = await contract.estimateGas.deposit(\n fromToken.token_address,\n amountBigNumber.toString(),\n toToken.chain_id,\n toAddress,\n new Date().getTime(),\n {\n value: isNativeToken\n ? amountBigNumber.add(fee).toString()\n : fee.toString(),\n },\n )\n const gasLimit = gas.add(gas.div(10))\n const tx = await contract.deposit(\n fromToken.token_address,\n amountBigNumber.toString(),\n toToken.chain_id,\n toAddress,\n new Date().getTime(),\n {\n value: isNativeToken\n ? amountBigNumber.add(gasLimit).add(fee).toString()\n : gasLimit.add(fee).toString(),\n gasLimit,\n },\n )\n await tx.wait();\n setTransactionStatus('success')\n } catch (err) {\n console.log(err)\n setTransactionStatus('failed')\n }\n }\n\n const getShuttleInWalletAddress = async() => {\n const data = await requestUserWallet([\n ProxyUrlPrefix.shuttleflow,\n manualToAddress || toAddress,\n undefined,\n toToken.sfChain,\n fromToken.sfChain,\n 'in'\n ]);\n return data;\n }\n\n const handleStartTransaction = async () => {\n if (isFromChainBtc) {\n setShowBTCModal(true);\n return;\n };\n if (fromToken.sfChain === KeyOfCfx) {\n const checkRes = checkCfxTokenAddress(fromAddress, 'user');\n if (!checkRes) {\n Notification.open({\n type: 'error',\n content: t('zgPortal.form.invalidFromAddress'),\n })\n return;\n }\n } else {\n const checkRes = checkHexAddress(fromAddress);\n if (!checkRes) {\n Notification.open({\n type: 'error',\n content: t('zgPortal.form.invalidFromAddress'),\n })\n return;\n }\n }\n if (toToken.sfChain === KeyOfCfx) {\n const checkRes = checkCfxTokenAddress(manualToAddress || toAddress, 'user');\n if (!checkRes) {\n Notification.open({\n type: 'error',\n content: t('zgPortal.form.invalidToAddress'),\n })\n return;\n }\n } else {\n const checkRes = checkHexAddress(manualToAddress || toAddress);\n if (!checkRes) {\n Notification.open({\n type: 'error',\n content: t('zgPortal.form.invalidToAddress'),\n })\n return;\n }\n }\n setTransactionStatus('waiting')\n setShowTransactionModal(true)\n\n const isNativeToken =\n ChainConfig[fromTokenKey]?.nativeToken ===\n fromToken.token_address\n if (!isNativeToken) {\n await approveToken()\n }\n\n if (fromToken.isSF || toToken.isSF) {\n if (fromToken.sfChain === 'cfx') {\n await shuttleOut()\n } else {\n const walletAddress = await getShuttleInWalletAddress();\n await shuttleIn(walletAddress)\n }\n } else {\n setTimeout(async () => {\n await handleZGTransaction()\n }, 2000)\n }\n }\n\n const isChainSameAsFromToken = useMemo(() => {\n if (!fromToken.chain_id) return true;\n return fromToken.chain_id === String(fromAccount.chainId)\n }, [fromToken, fromAccount.chainId])\n\n const handleSwitchNetwork = async () => {\n if (isChainSameAsFromToken) return\n if (!fromToken?.chain_id) return\n if (fromToken?.sfChain === KeyOfCfx) {\n await window?.confluxJS.request({ method: 'wallet_switchConfluxChain', params: [{ chainId: `0x${fromToken.chain_id}` }] });\n return;\n }\n await switchWeb3Network(fromWallet, fromToken, fromTokenKey);\n }\n\n const fromTokenList = allTokenList\n\n const toTokenList = useMemo(() => {\n return allTokenList.filter(token => {\n const baseRule =\n token.chain_id !== fromToken.chain_id &&\n token.token_abbr === fromToken.token_abbr // must not be same chain and same token\n if (!baseRule) return false\n if (fromToken.isSF !== token.isSF) return false // if fromToken is shuttleflow token, toToken must be shuttleflow token, vice versa\n if (fromToken.isSF && fromToken.sfChain !== 'cfx')\n return token.sfChain === 'cfx' // if fromToken is shuttleflow token and is not on cfx chain, toToken must be on cfx chain\n return true\n })\n }, [fromToken, allTokenList])\n\n const handleChooseFromToken = token => {\n if (fromToken.sfChain !== KeyOfCfx && token.sfChain === KeyOfCfx) {\n Notification.open({\n type: 'info',\n content: 'Tokens on Conflux Core Space are only supported by Fluent Wallet.'\n // t('zgPortal.form.invalidFromAddress'),\n })\n } else if (fromToken.sfChain === KeyOfCfx && token.sfChain !== KeyOfCfx) {\n Notification.open({\n type: 'info',\n content: 'Fluent Wallet only supports tokens on Conflux Core Space.'\n // t('zgPortal.form.invalidFromAddress'),\n })\n }\n setDefaultSetLock(true)\n setFromToken(token)\n if (token.sfChain === KeyOfCfx) {\n setFromWallet(KeyOfPortal)\n } else {\n setFromWallet(lastWeb3Wallet)\n }\n setToToken({}) // reset toToken when fromToken is changed\n }\n\n const handleChooseToToken = token => {\n setDefaultSetLock(true)\n setToToken(token)\n if (token.sfChain === KeyOfCfx) {\n setToWallet(KeyOfPortal)\n setSameWallet(false)\n } else {\n setToWallet(KeyOfMetaMask)\n }\n }\n\n const web3SubEstimation = async amount => {\n if (!amount || !toToken.chain_id) {\n setToAmount('')\n return\n }\n if (fromWallet === KeyOfPortal) return\n const bridgeContract = ContractConfig[ContractType.bridge].address[fromTokenKey]\n if (!bridgeContract) return\n const contract = new Contract(\n bridgeContract,\n ZGBridge_ABI,\n web3Provider.getSigner(),\n )\n const amountBigNumber = parseUnits(amount, fromToken.decimals)\n try {\n const nativeFee = await contract.estimateFee(\n fromToken.token_address,\n amountBigNumber.toString(),\n toToken.chain_id,\n toAddress,\n new Date().getTime(),\n '0x',\n )\n setFee(nativeFee)\n const tokenFee = await contract.estimateTokenFee(\n fromToken.token_address,\n amountBigNumber.toString(),\n toToken.chain_id,\n )\n setTokenFee(tokenFee)\n if (fromToken.nativeToken === fromToken.token_address) {\n setToAmount(formatUnits(amountBigNumber.sub(nativeFee).sub(tokenFee[0]).sub(tokenFee[1]), fromToken.decimals))\n } else {\n setToAmount(formatUnits(amountBigNumber.sub(tokenFee[0]).sub(tokenFee[1]), fromToken.decimals))\n }\n } catch (err) {\n console.log('estimation failed: ', err)\n }\n }\n\n const cfxCoreEstimation = amount => {\n if (!amount) {\n setToAmount('')\n return\n }\n const shuttleFeeBigNumber = parseUnits(shuttleFee, fromToken.decimals)\n setFee(shuttleFeeBigNumber)\n const amountBigNumber = parseUnits(amount, fromToken.decimals)\n setToAmount(\n formatUnits(amountBigNumber.sub(shuttleFeeBigNumber), fromToken.decimals),\n )\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const setToAmountSubEstimation = useCallback(\n debounce(async amount => {\n if (fromToken.sfChain === 'cfx' || toToken.sfChain === 'cfx') {\n cfxCoreEstimation(amount)\n } else {\n await web3SubEstimation(amount)\n }\n }, 500),\n [fromToken, shuttleFee, toToken, fromToken, web3Provider],\n )\n\n const handleSetFromAmount = amount => {\n try {\n amount && parseUnits(amount, fromToken.decimals)\n } catch (err) {\n console.log('invalid amount')\n return\n }\n setFromAmount(amount)\n setToAmountSubEstimation(amount)\n }\n\n const approveEVMToken = async () => {\n if (fromToken.token_address === ChainConfig[fromTokenKey]?.nativeToken) return\n if (toToken.sfChain === KeyOfCfx && fromToken.origin === KeyOfCfx) return // for shuttle in, cfx-native token does not need approve\n const tokenContract = new Contract(\n fromToken.token_address,\n ERC20_ABI,\n web3Provider.getSigner(),\n )\n const contractAddr = fromToken.isSF ? ContractConfig[ContractType.depositRelayer].address[fromTokenKey] : ContractConfig[ContractType.bridge].address[fromTokenKey];\n const hasApproved = await tokenContract.allowance(\n fromAddress,\n contractAddr,\n )\n if (hasApproved.gte(parseUnits(fromAmount, fromToken.decimals))) return\n const gas = await tokenContract.estimateGas.approve(\n contractAddr,\n MaxUint256,\n )\n await tokenContract.approve(\n contractAddr,\n MaxUint256,\n {\n gasLimit: gas.add(gas.div(10)),\n },\n )\n let count = 0\n const maxCount = 30 // max check 30 times\n await new Promise(resolve => {\n setInterval(async () => {\n const hasApproved = await tokenContract.allowance(\n fromAddress,\n contractAddr,\n )\n count++;\n if (hasApproved.gte(parseUnits(fromAmount, fromToken.decimals))) {\n resolve()\n }\n if (count > maxCount) {\n resolve()\n }\n }, 2000)\n })\n }\n\n const drContractAddress = ContractConfig[ContractType.depositRelayerCfx]?.address?.[toToken.sfChain];\n function contractApprove(tokenContract, value, gas, storage) {\n return tokenContract\n .approve(drContractAddress, value)\n .sendTransaction({\n gas: gas ? calculateGasMargin(gas, 0.5) : undefined,\n from: fromAddress,\n storageLimit: storage ? calculateGasMargin(storage, 0.5) : undefined,\n })\n .confirmed()\n .catch((err) => {\n console.log('approve error', err)\n });\n }\n\n const approveCFXToken = async () => {\n const provider = window?.confluxJS;\n if (!provider) return;\n if (fromToken.token_address === ChainConfig[fromTokenKey]?.nativeToken) return;\n if (fromToken.origin !== KeyOfCfx) return; // for shuttle out, non-cfx-native token does not need approve\n if (toToken.sfChain === KeyOfBtc) return;\n const tokenContract = provider.Contract({\n address: fromToken.token_address,\n abi: ERC20_ABI,\n });\n const approvedNumber = await tokenContract.allowance(\n fromAddress,\n drContractAddress,\n );\n if (new Big(approvedNumber.toString()).gte(parseUnits(fromAmount, fromToken.decimals))) return;\n await tokenContract\n .approve(drContractAddress, MaxUint256)\n .estimateGasAndCollateral({\n from: fromAddress,\n })\n .then((estimateData) => {\n return contractApprove(\n tokenContract,\n MaxUint256,\n estimateData?.gasLimit,\n estimateData?.storage\n );\n })\n .catch((error) => {\n console.log('cfx token allowance error', error)\n });\n }\n\n const approveToken = async () => {\n try {\n if (fromWallet === KeyOfPortal) await approveCFXToken();\n if (fromWallet !== KeyOfPortal) await approveEVMToken();\n } catch (err) {\n console.log('approve allowance failed: ', err)\n setTransactionStatus('failed')\n throw(err);\n }\n }\n\n useEffect(() => {\n setToAmountSubEstimation(fromAmount)\n }, [chainId, fromAmount, fromToken.id, toToken, shuttleFee, setToAmountSubEstimation])\n\n const handleCloseFromWalletModal = () => {\n setShowFromWalletModal(false)\n }\n const handleOpenFromWalletModal = () => {\n setShowFromWalletModal(true)\n }\n const handleCloseToWalletModal = () => {\n setShowToWalletModal(false)\n }\n const handleOpenToWalletModal = () => {\n setShowToWalletModal(true)\n }\n\n const hideFromAccount = useMemo(() => {\n return isFromChainBtc;\n }, [isFromChainBtc]);\n const hideToAccount = useMemo(() => {\n return isToChainBtc;\n }, [isToChainBtc]);\n const displayToAddress = useMemo(() => {\n if (isToChainBtc) return toBtcAddress;\n return manualToAddress?.length ? manualToAddress : toAddress;\n }, [isToChainBtc, toBtcAddress, toAddress, manualToAddress]);\n\n const pendingList = useMemo(() => {\n return pendingHistory.filter(item => item.status === TransactionStatus.pending);\n }, [pendingHistory]);\n\n const minimalVal = isFromCfx\n ? minimal_out_value\n ? minimal_out_value.toString(10)\n : '0'\n : minimal_in_value\n ? minimal_in_value.toString(10)\n : '0'\n\n const errorObj = useMemo(() => {\n const validateData = (value) => {\n if ((!isFromChainBtc && !fromAddress) || !isChainSameAsFromToken || fromAmount === '') return ''\n let error = null\n if (isNumber(value)) {\n const balanceVal = balance\n ? formatUnits(new Big(balance).toString(), fromToken.cfxDecimals || fromToken.decimals || 18).toString()\n : null\n const valBig = new Big(value || 0)\n if (valBig.lt('0.000001') && minimalVal === '0') {\n // when min = 0 should >= 0.000001\n error = {str: 'error.mustGteCommonMin'}\n } else if (valBig.lt(minimalVal) && minimalVal !== '0') {\n // when min > 0 should >= min\n error = {\n str: 'error.mustGteMin',\n obj: {value: minimalVal},\n }\n } else if (!isFromChainBtc && balanceVal && valBig.gt(balanceVal)) {\n // should <= balance\n error = {str: 'error.mustLteMax'}\n }\n } else {\n //not a valid number\n error = {str: 'error.inputValidAmount'}\n }\n return error\n }\n\n return validateData(fromAmount);\n }, [fromAmount, balance, fromAddress, minimalVal, isFromChainBtc, fromToken.decimals, isChainSameAsFromToken])\n\n const disableTransactionButton = useMemo(() => {\n if (!fromToken || !toToken || Number(fromAmount) === 0 || !(toAddress || manualToAddress) || !toToken.symbol || !fromToken.symbol || Number(toAmount) === 0)\n return true\n if (fromToken.chain_id === toToken.chain_id) return true\n if (errorObj) return true;\n if (isToChainBtc && !checkBtcAddress(toBtcAddress)) return true\n return false\n }, [fromToken, toToken, fromAmount, toAddress, manualToAddress, errorObj, toBtcAddress, toAmount])\n\n // const { data } = useFeeData();\n const setAmountToMax = async () => {\n if (isFromChainBtc) return;\n // let gasFee = new Big(0);\n // if (fromWallet === KeyOfPortal && fromToken.symbol === 'CFX') {\n // gasFee = BigNumber.from(parseUnits('0.1'), 18);\n // }\n // if (fromWallet !== KeyOfPortal && fromToken.token_address === ChainConfig[fromTokenKey]?.nativeToken){\n // gasFee = BigNumber.from(data.gasPrice).mul(BigNumber.from(21000));\n // }\n let isNativeToken = false;\n if (fromToken.nativeToken === fromToken.token_address) {\n isNativeToken = true;\n } else if (fromWallet === KeyOfPortal && fromToken.symbol === 'CFX') {\n isNativeToken = true;\n }\n const balanceVal = balance\n ? (\n isNativeToken\n ? formatUnits((BigInt(Math.trunc(balance)) * BigInt(999) / BigInt(1000)).toString(), tokenDecimal || 18).toString()\n : formatUnits(BigInt(Math.trunc(balance)).toString(), tokenDecimal || 18).toString()\n )\n : null\n if (balanceVal) {\n setFromAmount(balanceVal)\n }\n }\n\n // select default token pair\n useEffect(() => {\n const selectWhenNoTx = () => {\n if (fromTokenList.length) {\n const defaultFromToken = fromTokenList.find(token => token.token_abbr === 'USDC')\n !fromToken?.token_abbr && defaultFromToken && handleChooseFromToken(defaultFromToken)\n const defaultToToken = toTokenList.find(token => token.token_abbr === 'USDC')\n !toToken?.token_abbr && defaultToToken && handleChooseToToken(defaultToToken)\n }\n }\n\n const selectWhenHasTx = () => {\n if (!successHistory.length || !fromTokenList.length) return;\n const tokenPairMap = {};\n successHistory.forEach(tx => {\n const { fromToken, toToken } = tx;\n if (typeof fromToken.id === 'number' || typeof toToken.id === 'number') return; // old data, ignore\n const key = `${fromToken.chain_id}+${fromToken.token_abbr}+${toToken.chain_id}+${toToken.token_abbr}`;\n tokenPairMap[key] = (tokenPairMap[key] || 0) + 1;\n });\n const mostUsedTokenPair = Object.keys(tokenPairMap).sort((a, b) => tokenPairMap[b] - tokenPairMap[a])[0];\n if (!mostUsedTokenPair) return;\n const [fromChainId, fromTokenAbbr, toChainId, toTokenAbbr] = mostUsedTokenPair.split('+');\n const defaultFromToken = fromTokenList.find(token => token.token_abbr === fromTokenAbbr && token.chain_id === fromChainId);\n const defaultToToken = fromTokenList.find(token => token.token_abbr === toTokenAbbr && token.chain_id === toChainId);\n defaultFromToken && defaultFromToken.token_abbr !== fromToken.token_abbr && handleChooseFromToken(defaultFromToken);\n defaultToToken && defaultToToken.token_abbr !== toToken.token_abbr && handleChooseToToken(defaultToToken);\n }\n\n if (defaultSetLock) return; // once user has selected token, don't auto select\n if (successHistory.length) {\n selectWhenHasTx();\n } else {\n selectWhenNoTx();\n }\n }, [fromTokenList, successHistory, fromToken, toToken, setFromToken, setToToken, toTokenList, defaultSetLock])\n\n const errorBtcAddressMsg = toBtcAddress && (checkBtcAddress(toBtcAddress) ? undefined : t('destinationInvalidErr'))\n\n const [bridgeContract, setBridgeContract] = useState();\n const [poolContract, setPoolContract] = useState();\n useEffect(() => {\n if (!fromTokenKey || !web3Provider) return;\n const bridgeContract = ContractConfig[ContractType.bridge].address[fromTokenKey]\n if (!bridgeContract) return\n const contract = new Contract(\n bridgeContract,\n ZGBridge_ABI,\n web3Provider.getSigner(),\n )\n setBridgeContract(contract);\n }, [fromTokenKey, web3Provider])\n\n useEffect(() => {\n if (!fromTokenKey || !web3Provider) return;\n const poolContract = ContractConfig[ContractType.pool].address[fromTokenKey]\n if (!poolContract) return\n const contract = new Contract(\n poolContract,\n Pool_ABI,\n web3Provider.getSigner(),\n )\n setPoolContract(contract);\n }, [fromTokenKey, web3Provider])\n\n return (\n // eslint-disable-next-line\n \n
\n

{t('zgPortal.form.formTitle')}

\n

{t('zgPortal.form.fromTitle')}

\n \n {errorObj && (\n

{t(errorObj.str, errorObj.obj)}

\n )}\n
\n \n
\n

{t('zgPortal.form.toTitle')}

\n \n {isToChainBtc && (\n setToBtcAddress(e.target.value)}\n errorBtcAddressMsg={errorBtcAddressMsg}\n />\n )}\n
\n {isChainSameAsFromToken ? (\n \n {t('zgPortal.form.transactionButton')}\n \n ) : (\n \n )}\n
\n {!!pendingList?.length && }\n setShowTransactionModal(false)}\n status={transactionStatus}\n onClickResend={handleStartTransaction}\n fromAddress={fromAddress}\n toAddress={manualToAddress || toAddress}\n />\n setShowBTCModal(false)}\n toAddress={manualToAddress || toAddress}\n />\n \n \n
\n \n )\n})\n\nForm.propTypes = {\n className: PropTypes.string,\n onClick: PropTypes.func,\n}\n\nexport default Form\n","import PropTypes from 'prop-types'\nimport { useEffect } from 'react'\n\nimport Form from './Form'\nimport './animation.css'\n\nconst ZGPortal = ({ setHideWalletList }) => {\n useEffect(() => {\n setHideWalletList([])\n }, [setHideWalletList]);\n\n return
\n}\n\nZGPortal.propTypes = {\n setHideWalletList: PropTypes.func.isRequired,\n}\n\nexport default ZGPortal\n","import PropTypes from \"prop-types\";\n\nimport { Button } from \"../../components\";\n\nconst PortalMarketing = ({ handleClickStart, className, onAnimationEnd }) => {\n return (\n
\n
\n

Make a fast and secure transaction

\n

{'With <1 sec finality and coverage across most chains, Zero Gravity allows you to seamlessly and securely transfer your assets for a friction-free Web3.'}

\n
\n
\n

Fast

\n

Finality

\n
\n
\n
\n

Top 20

\n

Blockchains

\n
\n
\n
\n

&140M

\n

TVL

\n
\n
\n
\n \n
\n );\n}\n\nPortalMarketing.propTypes = {\n handleClickStart: PropTypes.func.isRequired,\n className: PropTypes.string,\n onAnimationEnd: PropTypes.func,\n}\n\nexport default PortalMarketing;\n","import PropTypes from 'prop-types'\nimport { useEffect, useState, useRef } from 'react'\n\nimport { useIsMobile } from '../../hooks'\n\nimport Form from './Form'\nimport PortalMarketing from './Marketing'\nimport './animation.css'\n\nconst ZGPortal = ({ setHideWalletList, setHideMarketManul }) => {\n useEffect(() => {\n setHideWalletList([])\n }, [setHideWalletList]);\n\n const [marketHide, setMarketHide] = useState(false);\n const mobileContainer = useRef(null);\n const portalContainer = useRef(null);\n\n useEffect(() => {\n const isMarketHide = localStorage.getItem('isMarketHide')\n if (isMarketHide) {\n setMarketHide(true)\n }\n }, [])\n\n const [marketClass, setMarketClass] = useState('');\n const [containerClass, setContainerClass] = useState('');\n\n const isMobile = useIsMobile();\n const handleHideMarket = () => {\n if (isMobile) {\n mobileContainer.current.scrollTo({\n top: 500,\n });\n localStorage.setItem('isMarketHide', true)\n return;\n }\n const portalLeft = portalContainer.current.getBoundingClientRect().left;\n const styleSheet = document.createElement(\"style\", {\n type: \"text/css\",\n });\n let halfPortalWidth = 504;\n if (window.innerWidth < 1440) {\n halfPortalWidth = 472;\n }\n if (window.innerWidth < 1024) {\n halfPortalWidth = 352;\n }\n const keyFrames = `\n @keyframes movePortalToCenter {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(calc(50vw - ${halfPortalWidth}px - ${portalLeft}px));\n }\n }\n `;\n styleSheet.innerHTML = keyFrames;\n document.head.appendChild(styleSheet);\n setMarketClass('hide-market-to-left')\n setContainerClass('move-portal-to-center')\n localStorage.setItem('isMarketHide', true)\n }\n\n const handleClickPortal = () => {\n if (marketHide) return\n handleHideMarket();\n }\n\n const handleMarketAnimationEnd = () => {\n setHideMarketManul && setHideMarketManul();\n }\n\n return isMobile ? (\n
\n \n \n
\n ) : (\n
\n {/* eslint-disable-next-line */}\n
\n \n \n
\n )\n}\n\nZGPortal.propTypes = {\n setHideWalletList: PropTypes.func.isRequired,\n setHideMarketManul: PropTypes.func,\n}\n\nexport default ZGPortal\n","import { defineChain } from \"viem\";\n\nexport const confluxESpaceTestnet = defineChain({\n id: 71,\n name: 'Conflux eSpace Testnet',\n network: 'cfx-espace-testnet',\n nativeCurrency: { name: 'Conflux', symbol: 'CFX', decimals: 18 },\n rpcUrls: {\n default: {\n http: ['https://evmtestnet.confluxrpc.com'],\n },\n public: {\n http: ['https://evmtestnet.confluxrpc.com'],\n },\n },\n blockExplorers: {\n default: {\n name: 'ConfluxScan',\n url: 'https://evmtestnet.confluxscan.io',\n },\n },\n})\n","import {Suspense, useState} from 'react'\nimport {\n BrowserRouter as Router,\n Route,\n Switch,\n Redirect,\n NavLink,\n} from 'react-router-dom'\nimport {AliveScope} from 'react-activation'\nimport History from '../pages/History'\nimport {Footer, Header, Web3Manager} from '../pages/components'\nimport Request from '../pages/Request'\nimport {Loading} from '../components'\nimport {\n useUpdateTxs,\n usePendingTransactions,\n useUpdateClaimedTxs,\n} from '../hooks/useTransaction'\nimport {BgRightCircle, BgLeftCircle} from '../assets/svg'\nimport PoolList from './Pool'\nimport PoolOperation from './Pool/Operation';\nimport Portal from './ZGPortal/Portal'\nimport PortalWithMarket from './ZGPortal/PortalWithMarket'\n\nimport { WagmiConfig, createConfig, configureChains } from 'wagmi'\nimport { bsc, bscTestnet, confluxESpace} from 'wagmi/chains';\nimport { publicProvider } from 'wagmi/providers/public'\nimport { confluxESpaceTestnet } from '../constants/wagmiChains'\n\nconst { publicClient, webSocketPublicClient } = configureChains(\n IS_DEV ? [confluxESpaceTestnet, bscTestnet] : [bsc, confluxESpace],\n [publicProvider()],\n)\n\nconst config = createConfig({\n autoConnect: true,\n publicClient,\n webSocketPublicClient,\n})\n\n\n// eslint-disable-next-line no-unused-vars\nimport cfx from '../utils/cfx'\nimport FromWalletModal from './ZGPortal/Form/FromWalletModal'\nimport { useLocation } from 'react-use'\nimport { IS_DEV } from '../utils'\n// import * as Sentry from '@sentry/browser'\n// import {Integrations} from '@sentry/tracing'\n// import {IS_DEV} from '../utils'\n\n// Sentry.init({\n// dsn: 'https://4d2e829843a54d21b43df7b20a8e93cf@o339419.ingest.sentry.io/5880699',\n// integrations: [new Integrations.BrowserTracing()],\n\n// // Set tracesSampleRate to 1.0 to capture 100%\n// // of transactions for performance monitoring.\n// // We recommend adjusting this value in production\n// tracesSampleRate: 1.0,\n// environment: IS_DEV ? 'development' : 'production',\n// })\nfunction getPlatformOS() {\n const userAgent = window.navigator.userAgent\n let os = null\n\n const isIOS =\n (/iPad|iPhone|iPod/.test(userAgent) ||\n (/Mac|Mac OS|MacIntel/gi.test(userAgent) &&\n (navigator.maxTouchPoints > 1 || 'ontouchend' in document))) &&\n !window.MSStream\n\n if (/Macintosh|Mac|Mac OS|MacIntel|MacPPC|Mac68K/gi.test(userAgent)) {\n os = 'Mac OS'\n } else if (isIOS) {\n os = 'iOS'\n } else if (/'Win32|Win64|Windows|Windows NT|WinCE/gi.test(userAgent)) {\n os = 'Windows'\n } else if (/Android/gi.test(userAgent)) {\n os = 'Android'\n } else if (/Linux/gi.test(userAgent)) {\n os = 'Linux'\n }\n\n return os\n}\n\nfunction zoomWindows() {\n if (getPlatformOS() === 'Windows') {\n let originPixelRatio = localStorage.devicePixelRatio\n if (!originPixelRatio) {\n originPixelRatio = window.devicePixelRatio\n // 整数保存\n if (Number.isInteger(originPixelRatio)) {\n localStorage.devicePixelRatio = originPixelRatio\n }\n }\n\n let mqListener = function () {\n let currentPixelRatio = window.devicePixelRatio\n const zoom =\n Math.round(1000 * (currentPixelRatio / originPixelRatio)) / 10 / 100\n document.body.style.zoom = 1 / zoom\n\n // 移除之前的查询检测\n this.removeEventListener('change', mqListener)\n // 使用新的查询检测\n matchMedia(`(resolution: ${currentPixelRatio}dppx)`).addEventListener(\n 'change',\n mqListener,\n )\n }\n\n matchMedia(`(resolution: ${originPixelRatio}dppx)`).addEventListener(\n 'change',\n mqListener,\n )\n\n const zoom =\n Math.round(1000 * (window.devicePixelRatio / originPixelRatio)) / 10 / 100\n console.log({zoom})\n document.body.style.zoom = 1 / zoom\n }\n}\n\nfunction TxsUpdater() {\n useUpdateTxs()\n useUpdateClaimedTxs()\n usePendingTransactions()\n zoomWindows()\n\n return null\n}\n\nfunction App() {\n // useMetaMaskHostedByFluent()\n const [showFromWalletModal, setShowFromWalletModal] = useState(false);\n const [hideWalletList, setHideWalletList] = useState([]);\n const [hideMarketManual, setHideMarketManual] = useState(false);\n const hideMarket = localStorage.getItem('isMarketHide')\n const {pathname} = useLocation()\n\n const handleCloseFromWalletModal = () => {\n setShowFromWalletModal(false)\n }\n const handleOpenFromWalletModal = () => {\n setShowFromWalletModal(true)\n }\n\n return (\n \n \n
\n }\n >\n
\n \n \n
\n \n \n
\n
\n \n \n
\n \n \n \n \n {(hideMarket || hideMarketManual) ? : setHideMarketManual(true)} />}\n \n \n \n \n \n
\n \n
\n
\n \n
\n \n
\n
\n \n
\n \n
\n
\n \n \n \n
\n
\n
\n
\n Need help?{' '}\n \n Submit a request.\n \n
\n
\n
\n
\n
\n
\n \n )\n}\n\nexport default App\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport './index.css'\nimport './i18n'\nimport App from './pages/App'\nimport posthog from 'posthog-js'\n// eslint-disable-next-line\nimport { completeDetect as completeDetectConflux } from '@cfxjs/use-wallet-react/conflux/Fluent';\n\nPromise.all([completeDetectConflux()]).then(() => {\n console.log('completeDetectConflux')\n ReactDOM.render(\n \n \n ,\n document.querySelector('#root'),\n )\n})\n\nif (window.location.host === 'portal.zglabs.org') {\n posthog.init('phc_kAbQtRA97KcP7VK19DRgGgBHxnUyObp0mpGssgnipIU', { api_host: 'https://app.posthog.com' })\n}\n\n// TO DO: add web vitals when necessary\n\n// import reportWebVitals from './reportWebVitals'\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\n// reportWebVitals()\n"],"sourceRoot":""}