{"version":3,"sources":["hooks/useNetwork.ts","types/network.ts","store/SendProcessStore.ts","images/loading.gif","images/failed.gif","images/complete.gif","hooks/useMantle.ts","hooks/useTerraBalance.ts","hooks/useEtherBaseBalance.ts","hooks/useAsset.ts","hooks/useSendValidate.ts","components/ExtLink.tsx","components/View.tsx","components/Text.tsx","components/Button.tsx","components/Container.tsx","components/Row.tsx","components/FormImage.tsx","components/CopyTokenAddressButton.tsx","images/copy_clipboard.png","pages/Send/FormTitle.tsx","images/btn_back.png","components/FormLabel.tsx","components/FormErrorMessage.tsx","components/FormLabelInput.tsx","hooks/useShuttle.ts","components/Modal/index.tsx","store/SelectWalletStore.ts","components/FormInput.tsx","pages/Send/SendForm/AssetList.tsx","pages/Send/SendForm/CopyTokenAddress.tsx","components/FormSelect.tsx","pages/Send/SendForm/FormFeeInfo.tsx","pages/Send/SendForm/WarningInfo.tsx","images/caution.png","pages/Send/SendForm/index.tsx","pages/Send/Confirm/index.tsx","pages/Send/Finish/index.tsx","routes.tsx","hooks/useSelectWallet.ts","hooks/useTerraTxInfo.ts","pages/Send/SendFormButton/SubmitButton.tsx","pages/Send/SendFormButton/NextOrApproveButton.tsx","pages/Send/SendFormButton/index.tsx","images/electric.gif","hooks/useAuth.ts","components/SelectBlockChain.tsx","pages/Send/BlockChainNetwork.tsx","pages/Send/FinishButton.tsx","pages/Send/index.tsx","images/WalletConnect.png","images/CoinbaseWallet.png","components/WalletLogo.tsx","images/Metamask.png","components/layouts/Header.tsx","images/bridge_logo.png","images/testnet_label.png","components/layouts/Footer.tsx","components/WalletConnectQrCodeModal.tsx","services/terraWalletConnectService.ts","packages/walletconnect/core/index.ts","services/walletConnectService.ts","services/coinBaseService.ts","services/metaMaskService.ts","services/bscService.ts","App/SelectWalletModal/WalletButton.tsx","App/SelectWalletModal/index.tsx","App/TerraExtensionDownModal.tsx","App/BscExtensionDownModal.tsx","App/NotSupportNetworkModal.tsx","App/NetworkErrorScreen.tsx","App/UnderMaintenance.tsx","images/maintenance.png","App/useApp.ts","App/index.tsx","reportWebVitals.ts","index.tsx","services/terraService.ts","types/queryKeys.ts","hooks/useSend.ts","store/SendStore.ts","images/BinanceChain.png","images/Terra.png","hooks/useTerraNetwork.ts","hooks/useTerraAssets.ts","hooks/useEtherBaseContract.ts","types/wallet.ts","store/NetworkStore.ts","types/asset.ts","store/AuthStore.ts","store/ContractStore.ts","packages/walletconnect/socket-transport/index.ts","packages/walletconnect/socket-transport/network.ts","consts/asset.ts","consts/color.ts","consts/style.ts","images/Ethereum.png","images/harmony-one.png","images/osmo.svg","images/secret.svg","consts/network.ts","consts/currency.ts","consts/util.ts"],"names":["useNetwork","asset","useRecoilValue","SendStore","fromBlockChain","toBlockChain","terraExt","NetworkStore","etherBaseExt","isTestnet","terraWhiteList","ContractStore","ethWhiteList","bscWhiteList","hmyWhiteList","getTokenAddress","blockChain","tokenAddress","BlockChainType","terra","ethereum","bsc","hmy","getScannerLink","address","type","chainID","subdomain","name","fromTokenAddress","useMemo","terraToken","toTokenAddress","isIbcNetwork","network","osmo","scrt","includes","TerraNetworkEnum","TerraAssetsPathEnum","ibcChannels","ibcPrefix","allowedCoins","AssetNativeDenomEnum","uusd","uluna","ukrw","ProcessStatus","sendProcessStatus","atom","key","default","Input","requestTxResult","success","waitForReceiptError","useMantle","terraLocal","fetchQuery","query","variables","fetch","mantle","method","headers","body","JSON","stringify","then","res","json","data","undefined","alias","token","contract","msg","replace","useTerraBalance","loginUser","AuthStore","getTerraTokenBalances","a","queries","Object","values","map","balance","aliasResult","fetchResult","_","some","list","forEach","x","UTIL","jsonTryParse","Result","getTerraBankBalances","resultList","BankBalancesAddress","Denom","Amount","getTerraBalances","bank","useEtherBaseBalance","getEtherBaseContract","useEtherBaseContract","getEtherBalance","userAddress","fn","toString","getEtherBalances","whiteList","Promise","all","useAsset","isLoggedIn","assetList","setAssetList","useSetRecoilState","loginUserAssetList","setBalanceToAssetList","balanceList","reduce","arr","getAssetList","NETWORK","isEtherBaseBlockChain","fromList","toWhiteList","pairList","item","disabled","isEmpty","filter","allowed","filteredList","formatBalance","bnBalance","BigNumber","div","ASSET","TERRA_DECIMAL","dp","ETHER_BASE_DECIMAL","integerValue","ROUND_DOWN","useSendValidate","allTokenAddress","toAddress","amount","memo","feeDenom","gasFee","tax","validateFee","sendAmount","selectedAssetAmount","find","gasFeeIfSameDenomWithSendAsset","taxAmount","isLessThan","plus","isValid","errorMessage","validateSendData","toAddressValidResult","trim","validAddress","AccAddress","validate","startsWith","Bech32Address","error","ethers","utils","isAddress","validateToAddress","amountValidResult","bnAmount","isNaN","isNegative","isZero","rebalanceDecimal","isInteger","isLessThanOrEqualTo","isGreaterThan","validateAmount","memoValidResult","size","assetValidResult","symbol","blockChainName","every","StyledA","styled","ExtLink","children","attrs","target","rel","StyledView","StyledText","View","COLOR","text","Text","props","StyledContainer","StyledDefaultButton","button","primary","white","Button","rest","Container","StyledRow","StyledFormImage","src","FormImage","Row","CopyTokenAddressButton","value","useState","isCopied","setIsCopied","useClipboard","setCopied","onClick","setTimeout","style","paddingRight","color","fontSize","alignItems","StyledFormTitle","FormTitleText","Confirm","Submit","Pending","Done","Failed","FormTitle","onClickGoBackToSendInputButton","status","SendProcessStore","GoBackButton","position","cursor","left","StyledLable","label","FormLabel","title","red","FormErrorMessage","StyledInput","input","darkGray2","FormLabelInput","inputProps","labelProps","placeholder","onWheel","currentTarget","blur","getTerraMAssetPairContract","addressList","mapped","pairContractAddress","useShuttle","shuttleUusdPairs","etherVaultTokenList","getTerraDenomShuttleFee","denom","minUst","zeroDotOnePerAmount","times","denomLunaPriceList","OracleDenomsExchangeRates","uusdLunaPrice","targetLunaPrice","oneUstValueTargetPrice","getTerraCW20TokenShuttleFee","contractAddress","etherVaultToken","getPricePerUst","tokenPrice","minimumPrice","toBignumber","multipliedBy","isEqualTo","assets","info","getTerraShuttleFee","isNativeDenom","StyledModal","Modal","STYLE","media","mobile","StyledModalHeader","StyledModalHeaderClose","setAppElement","SelectWalletModalType","DefaultModal","isOpen","close","onRequestClose","header","overlay","backgroundColor","display","flexDirection","justifyContent","css","borderRadius","FormInput","StyledAssetItemBox","darkGray","StyledAssetItem","StyledSelectAssetButton","StyledIconBox","AssetItem","setShowModal","onChangeAmount","useRecoilState","oriAsset","setAsset","logoURI","fontWeight","blueGray","SelectAssetButton","flex","marginTop","marginLeft","marginRight","AssetList","selectedAsset","scrollRef","useRef","showModal","inputFilter","setInputFilter","filteredAssetList","inputFilterLower","toLowerCase","useEffect","current","scrollTo","top","behavior","marginBottom","border","overflow","onChange","maxLength","ref","onLoad","index","indexOf","padding","CopyTokenAddress","paddingTop","paddingLeft","StyledDropdown","Dropdown","StyledDropdownItem","Item","StyledDropdownToggle","Toggle","StyledDropdownMenu","Menu","FormSelect","selectedValue","optionList","onSelect","containerStyle","menuContainerStyle","selectedTextStyle","variant","option","i","isDisabled","StyledFormSection","FormFeeInfo","feeValidationResult","gasFeeList","setGasFee","setFee","fee","setFeeDenom","shuttleFee","amountAfterShuttleFee","validationResult","setOptionList","setStdFee","stdFee","toArray","length","defaultOptionList","ownedAmount","feeAmount","symbolOfDenom","selected","selectable","borderTop","paddingBottom","margin","skyGray","opacity","width","height","letterSpacing","StyledWarningInfo","StyledWarningInfoText","WarningInfo","infoText","setInfoText","StyledMaxButton","StyledRefreshButton","refreshing","RefreshButton","setRefreshing","dbcRefresh","useDebouncedCallback","finally","callback","terraSky","SendForm","setToAddress","setAmount","setMemo","setTax","setGasFeeList","setShuttleFee","setAmountAfterShuttleFee","setValidationResult","inputAmount","setInputAmount","useSend","getTerraFeeList","getTerraSendTax","toNumber","decimalSize","onClickMaxButton","assetAmount","terraTax","minus","setTerraShuttleFee","computedAmount","dbcGetFeeInfoWithValidation","sendDataResult","ableToGetFeeInfo","terraFeeList","cancel","onChangeToAddress","onChangeMemo","StyledSection","StyledSecH","StyledSecD","StyledSecDText","isError","StyledSecDText2","StyledSpaceBetween","truncate","href","hash","StyledInfoText","StyledAmountText","Finish","setRequestTxResult","setWaitForReceiptError","displayAmount","displayToAddress","displayRequestTxResult","displayErrorMessage","walletType","wordBreak","textAlign","PathEnum","isVisibleModalType","useSelectWallet","setIsVisibleModalType","SelectWalletStore","open","selectWallet","closeModal","useTerraTxInfo","getTxInfos","TxInfos","SubmitButton","setStatus","setErrorMessage","submitRequestTx","waitForEtherBaseTransaction","loading","waitForReceipt","submitResult","waitReceipt","setInterval","txInfos","clearInterval","onClickSubmitButton","IfLoadingText","CircularProgress","NextOrApproveButton","waitingForApprove","setWaitingForApprove","approveResult","setApproveResult","allowanceOfSelectedAsset","approveTxFromEtherBase","ableButton","onClickApproveTxFromEtherBase","onClickSendNextButton","isNeedApprove","allowance","SendFormButton","useAuth","LocalStorageKey","useTerraNetwork","getTerraNetworkByName","getTerraNetworkByWalletconnectID","setLoginUser","setEtherBaseExt","setTerraExt","setTerraLocal","setIsVisibleNotSupportNetworkModal","isVisibleNotSupportNetworkModal","setTriedNotSupportNetwork","triedNotSupportNetwork","setFromBlockChain","checkIsValidEtherNetwork","ETH_CHAINID","ETH_MAIN","ETH_ROPSTEN","BSC_MAIN","BSC_TEST","HMY_MAIN","HMY_TEST","chainId","login","user","WalletEnum","TerraWalletConnect","walletConneceId","terraWalletConnect","localNetwork","isNumber","terraService","extNet","setLoginStorage","provider","getNetwork","isValidEtherNetwork","reSelectFromBlockChain","localStorage","setItem","lastFromBlockChain","lastWalletType","logout","killSession","initLoginUser","getLoginStorage","getItem","StyledCircle","StyledLabel","StyledBlockChainLabel","SelectBlockChain","setBlockChain","blockChainImage","StyledNetworkBox","BlockChainNetwork","setToBlockChain","electric","backgroundSize","FinishButton","onClickHomeButton","StyledProcessCircle","StyledForm","black","Send","formScrollView","initPage","setInitPage","renderProcessStatus","useCallback","complete","boxShadow","failed","scroll","overflowX","minWidth","SwitchPages","exact","path","walletLogo","TerraExtension","TerraPng","Binance","BinancePng","MetaMask","WalletConnect","WalletConnectPng","CoinbaseWallet","CoinbaseWalletPng","WalletLogo","walleEnum","Logo","StyledNavContainer","StyledNav","StyledLogo","StyledAddress","StyledConnectWallet","StyledLoginUserInfoBox","dropdownKeyframes","keyframes","StyledConnectedText","StyledTestnetLabel","LoginUserInfo","setIsOpen","onClickAway","isBrowser","toUpperCase","Header","alt","isMobile","Footer","textTransform","TerraWalletconnectQrcodeModal","modalContainer","setCloseCallback","uri","_qrcodeModalOptions","window","document","createElement","encodeURIComponent","btoa","modal","TerraQRCodeModal","onClose","render","querySelector","appendChild","location","parentElement","removeChild","modalEnter","figureEnter","className","connectorOpts","pushServerOpts","cryptoLib","opts","protocol","version","_bridge","_key","_clientId","_clientMeta","_peerId","_peerMeta","_handshakeId","_handshakeTopic","_connected","_accounts","_chainId","_networkId","_rpcUrl","_cryptoLib","_transport","_eventManager","EventManager","_sessionStorage","_qrcodeModal","this","getClientMeta","clientMeta","sessionStorage","SessionStorage","qrcodeModal","qrcodeModalOptions","bridge","session","Error","ERROR_MISSING_REQUIRED","_getStorageSession","handshakeId","_subscribeToSessionResponse","CustomTransport","url","subscriptions","clientId","_subscribeToInternalEvents","_initTransport","_subscribeToSessionRequest","_registerPushServer","convertArrayBufferToHex","convertHexToArrayBuffer","uuid","_formatUri","_parseUri","handshakeTopic","connected","accounts","peerId","peerMeta","event","eventEmitter","subscribe","instantRequest","_generateKey","request","_formatRequest","params","id","trigger","on","ERROR_QRCODE_MODAL_USER_CLOSED","endInstantRequest","_sendCallRequest","result","ERROR_QRCODE_MODAL_NOT_PROVIDED","createSession","resolve","reject","payload","ERROR_SESSION_CONNECTED","pending","_sendSessionRequest","topic","sessionStatus","networkId","rpcUrl","sessionParams","approved","response","jsonrpc","_sendResponse","_setStorageSession","sessionError","message","ERROR_SESSION_REJECTED","_formatResponse","_removeStorageSession","ERROR_SESSION_DISCONNECTED","_manageStorageSession","_sendRequest","_handleSessionDisconnect","tx","parsedTx","parseTransactionData","parsePersonalSign","chainParams","options","_subscribeToResponse","ERROR_MISSING_JSON_RPC","convertNumberToHex","formattedRequest","isJsonRpcResponseSuccess","ERROR_MISSING_RESULT","formattedResponse","isJsonRpcResponseError","ERROR_MISSING_ERROR","callRequest","_encrypt","encryptionPayload","silent","forcePushNotification","isSilentPayload","send","errorMsg","signingMethods","mobileLinkUrl","getLocal","mobileLinkChoiceKey","_subscribeToCallResponse","ERROR_MISSING_METHOD","payloadId","ERROR_MISSING_ID","baseResponse","formatRpcError","ERROR_INVALID_RESPONSE","removeLocal","socketMessage","parse","_decrypt","_handleSessionResponse","code","internalPayload","_handleIncomingMessages","parseWalletConnectUri","decodeURIComponent","ERROR_INVALID_URI","generateKey","encrypt","decrypt","getSession","setSession","removeSession","pushSubscription","peerName","language","Accept","connect","connector","WalletConnectProvider","infuraId","INFURAID","enable","WalletLinkConnector","appName","activate","account","autoRefreshOnNetworkChange","checkInstalled","MetaMaskOnboarding","isMetaMaskInstalled","install","startOnboarding","BscConnector","supportedChainIds","BinanceChain","StyledWalletButton","StyledButtonContents","StyledErrorMessage","WalletButton","wallet","WalletSupportBrowser","isSupport","WalletTitle","SelectEtherBaseWalletModal","onClickTerraExtension","terraExtInstall","onClickTerraWalletConnect","terraWalletConnectService","console","log","onClickBinanceChain","bscService","providers","Web3Provider","bscInstall","onClickMetamask","metaMaskService","onClickWalletConnect","walletConnectService","onClickCoinbase","coinBaseService","onClickWallet","buttons","TerraExtensionDownModal","navigator","userAgent","TERRA_EXTENSION","reload","CHROME","BscExtensionDownModal","BSC_EXTENSION","StyledTitle","NotSupportNetworkModal","isVisibleModal","setIsVisibleModal","StyledBg","isOnline","NetworkErrorScreen","shuttlePairs","initOnlyShuttlePairs","initOnlyTerraWhiteList","initOnlyEthWhiteList","initOnlyBscWhiteList","initOnlyHmyWhiteList","onLine","setIsOnline","showError","setShowError","setTitle","content","setContent","onOffline","onOnline","checkIfServerAvailable","addEventListener","removeEventListener","StyledDesc","StyledEnterAnyway","UnderMaintenance","hideMaintenance","setHideMaintenance","maintenance","useTerraAssets","station_maintenamce","defaultList","AssetSymbolEnum","Luna","UST","KRT","SDT","usdr","MNT","umnt","useApp","initOnlyAssetList","setShuttlePairs","setTerraWhiteList","setEthWhiteList","setBscWhiteList","setHmyWhiteList","setIbcWhiteList","initOnlyIbcWhiteList","fetchAssets","TERRA_ASSETS_URL","getContractAddress","cw20_pairs","fetchPairJson","formattedPairJson","pairs","val","obj","cw20_tokens","terraListJson","ibc_tokens","ibcListJson","tokenList","icon","concat","formattedTerraListJson","shuttle_eth","ethListJson","shuttle_bsc","bscListJson","shuttle_hmy","hmyListJson","ibcTokensJson","initApp","queryClient","QueryClient","App","initComplete","setInitComplete","QueryClientProvider","client","routes","SelectWalletModal","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode","getElementById","ext","Extension","isAvailable","post","QueryKeysEnum","decodeTerraAddressOnEtherBase","words","bech32","decode","fromWords","Buffer","from","gasPrices","gasPricesFromServer","setGasPricesFromServer","setSendAmount","useQuery","signer","getSigner","withSigner","vault","refetchAllowanceOfSelectedAsset","refetch","getGasPricesFromServer","fcd","axios","get","baseURL","_feeDenom","lcd","LCDClient","URL","isNativeTerra","calculateTax","Coin","gas","feeDenoms","ownedAssetList","msgs","getTerraMsgs","create","unsignedTx","auth_info","gas_limit","ROUND_UP","Coins","Fee","recipient","shuttle","MsgExecuteContract","burn","MsgTransfer","Date","now","MsgSend","transfer","submitRequestTxFromTerra","memoOrToAddress","txFee","greaterThan","add","sendId","serializedTxOptions","toJSON","gasAdjustment","sendCustomRequest","txhash","jsonMsg","handleTxErrorFromEtherBase","approve","submitRequestTxFromEtherBase","isTerra","decoded","vaultContract","vaultContractSigner","padEnd","waitForTransaction","initSendData","defaultTerraNetworks","mainnet","walletconnectID","harmony","testnet","chains","networkList","getOptions","net","terraAssetsJson","Contract","abi","isChrome","isEdgeChromium","selector","_terraExt","_etherBaseExt","dangerouslyAllowMutability","fetchedData","ethVaultTokenList","ETH_VAULT_TOKEN_LIST","clone","ether","flatMap","WS","global","WebSocket","require","SocketTransport","_protocol","_version","_url","_netMonitor","_socket","_nextSocket","_queue","_events","_subscriptions","netMonitor","NetworkMonitor","_socketCreate","readyState","_socketClose","_socketSend","push","splitUrl","split","env","host","getLocation","detectEnv","queryString","appendToQueryString","getQueryString","getWebSocketUrl","onmessage","_socketReceive","onopen","_socketOpen","onerror","_socketError","onclose","_queueSubscriptions","_pushQueue","_setToQueue","events","e","_eventEmitters","eventEmitters","terraDenoms","nativeDenoms","footerBg","deviceWidth","tablet","laptop","desktop","BinanceChainPng","EthereumPng","HarmonyPng","OsmoSvg","SecretSvg","process","REACT_APP_INFURAID","getEtherPricePerUst","cache","fetchData","usd","bc","terra1dzhzukyezv0etz22ud940z7adyv7xgcjkahuun","terra19mkj9nec6e3y5754tlnuz4vem7lzh4n0lc2s3l","currencies","str","currency","slice","h","t","head","tail","join","setComma","parts","delComma","extractNumber"],"mappings":"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MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QC/HIxI,EAAgB,SAACyI,GAAD,OACpBA,EAAI37B,WAAW,MACf47B,EAASF,WAAWjkC,SAASkkC,EAAIE,MAAM,GAAGxf,gBAO7B,GACb/J,SApCe,WAA2D,IAA1DpQ,EAAyD,uDAA1C,GAA0C,yDAAnB,CAAC,EAAG,GAAe,mBAArC45B,EAAqC,KAAlCC,EAAkC,KACnEC,EAAO95B,EAAK25B,MAAM,EAAGC,GACrBG,EAAO/5B,EAAK25B,OAAO,EAAIE,EAAG75B,EAAKkM,QACrC,OAAOlM,EAAKkM,OAAS0tB,EAAIC,EAAI,CAACC,EAAMC,GAAMC,KAAK,OAASh6B,GAkCxD9G,aA/BmB,SAAI+H,GACvB,IACE,OAAO7J,KAAKktB,MAAMrjB,GAClB,SACA,SA4BFg5B,SAxBe,SAACR,GAChB,IAAMS,EAAQthC,IAAEqB,SAASw/B,GAAK7C,MAAM,KAEpC,OADAsD,EAAM,GAAKA,EAAM,GAAGniC,QAAQ,wBAAyB,KAC9CmiC,EAAMF,KAAK,MAsBlBG,SAnBe,SAACV,GAChB,OAAO7gC,IAAEqB,SAASw/B,GAAK1hC,QAAQ,KAAM,KAmBrCqiC,cAhBoB,SAACX,GAAD,OAAyBA,EAAI1hC,QAAQ,OAAQ,KAiBjEi5B,gBACAtrB,cAZoB,SAAC+zB,GAAD,MACZ,UAARA,GAAmBzI,EAAcyI,IAYjCr0B,YAVkB,SAACnE,GAAD,OAA+B,IAAInF,IAAUmF,GAAS,K","file":"static/js/main.3b57b974.chunk.js","sourcesContent":["import { useMemo } from 'react'\nimport { useRecoilValue } from 'recoil'\nimport ContractStore from 'store/ContractStore'\n\nimport NetworkStore from 'store/NetworkStore'\nimport SendStore from 'store/SendStore'\n\nimport { BlockChainType } from 'types/network'\n\nconst useNetwork = (): {\n getScannerLink: (props: { address: string; type: 'tx' | 'address' }) => string\n fromTokenAddress?: string\n toTokenAddress?: string\n} => {\n const FINDER = 'https://finder.terra.money'\n const asset = useRecoilValue(SendStore.asset)\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n const toBlockChain = useRecoilValue(SendStore.toBlockChain)\n const terraExt = useRecoilValue(NetworkStore.terraExt)\n const etherBaseExt = useRecoilValue(NetworkStore.etherBaseExt)\n const isTestnet = useRecoilValue(NetworkStore.isTestnet)\n\n const terraWhiteList = useRecoilValue(ContractStore.terraWhiteList)\n const ethWhiteList = useRecoilValue(ContractStore.ethWhiteList)\n const bscWhiteList = useRecoilValue(ContractStore.bscWhiteList)\n const hmyWhiteList = useRecoilValue(ContractStore.hmyWhiteList)\n\n const getScannerLink = ({\n address,\n type,\n }: {\n address: string\n type: 'tx' | 'address'\n }): string => {\n if (fromBlockChain === BlockChainType.terra && terraExt) {\n return `${FINDER}/${terraExt.chainID}/${type}/${address}`\n } else if (etherBaseExt) {\n let subdomain = ''\n\n if (fromBlockChain === BlockChainType.bsc) {\n subdomain = isTestnet ? 'testnet.' : ''\n return `https://${subdomain}bscscan.com/${type}/${address}`\n } else if (fromBlockChain === BlockChainType.hmy) {\n subdomain = isTestnet ? 'testnet.' : ''\n return `https://explorer.${subdomain}harmony.one/#/${type}/${address}`\n }\n\n subdomain = isTestnet ? `${etherBaseExt.name}.` : ''\n return `https://${subdomain}etherscan.io/${type}/${address}`\n }\n return ''\n }\n\n const getTokenAddress = (\n blockChain: BlockChainType,\n tokenAddress: string\n ): string => {\n switch (blockChain) {\n case BlockChainType.terra:\n return terraWhiteList[tokenAddress]\n case BlockChainType.ethereum:\n return ethWhiteList[tokenAddress]\n case BlockChainType.bsc:\n return bscWhiteList[tokenAddress]\n case BlockChainType.hmy:\n return hmyWhiteList[tokenAddress]\n default:\n return terraWhiteList[tokenAddress]\n }\n }\n\n const fromTokenAddress = useMemo(\n () => asset && getTokenAddress(fromBlockChain, asset.terraToken),\n [asset]\n )\n const toTokenAddress = useMemo(\n () => asset && getTokenAddress(toBlockChain, asset.terraToken),\n [asset]\n )\n\n return {\n getScannerLink,\n fromTokenAddress,\n toTokenAddress,\n }\n}\n\nexport default useNetwork\n","import { AssetNativeDenomEnum } from './asset'\n\nexport enum BlockChainType {\n terra = 'terra',\n ethereum = 'ethereum',\n bsc = 'bsc',\n hmy = 'harmony',\n osmo = 'osmosis',\n scrt = 'secret',\n //cosmos = 'cosmos',\n //cro = 'cronos',\n}\n\nexport type ShuttleNetwork =\n | BlockChainType.ethereum\n | BlockChainType.bsc\n | BlockChainType.hmy\n\nexport type IbcNetwork = BlockChainType.osmo | BlockChainType.scrt\n//| BlockChainType.cosmos\n//| BlockChainType.cro\n\nexport function isIbcNetwork(network: BlockChainType): boolean {\n return [\n BlockChainType.osmo,\n BlockChainType.scrt,\n // BlockChainType.cosmos,\n // BlockChainType.cro,\n ].includes(network)\n}\n\nexport const ibcChannels: Record = {\n [BlockChainType.osmo]: 'channel-1',\n [BlockChainType.scrt]: 'channel-16',\n //[BlockChainType.cosmos]: 'channel-2',\n //[BlockChainType.cro]: 'channel-22',\n}\n\nexport const ibcPrefix: Record = {\n [BlockChainType.osmo]: 'osmo1',\n [BlockChainType.scrt]: 'secret1',\n //[BlockChainType.cosmos]: 'cosmos1',\n //[BlockChainType.cro]: 'cro1',\n}\n\nexport const allowedCoins: Record = {\n [BlockChainType.osmo]: [\n AssetNativeDenomEnum.uusd,\n AssetNativeDenomEnum.uluna,\n AssetNativeDenomEnum.ukrw,\n 'ibc/0471F1C4E7AFD3F07702BEF6DC365268D64570F7C1FDC98EA6098DD6DE59817B',\n ],\n [BlockChainType.scrt]: [\n AssetNativeDenomEnum.uusd,\n AssetNativeDenomEnum.uluna,\n 'ibc/EB2CED20AB0466F18BE49285E56B31306D4C60438A022EA995BA65D5E3CF7E09',\n ],\n //[BlockChainType.cosmos]: ['uusd', 'uluna'],\n //[BlockChainType.cro]: ['uusd', 'uluna'],\n}\n\nexport interface ExtTerraNetwork {\n name: TerraNetworkEnum\n chainID: string\n mantle: string\n lcd: string\n fcd: string\n walletconnectID: number\n}\n\nexport interface LocalTerraNetwork extends ExtTerraNetwork {\n shuttle: Record\n}\n\nexport enum TerraNetworkEnum {\n mainnet = 'mainnet',\n testnet = 'testnet',\n}\n\nexport enum TerraAssetsPathEnum {\n station_maintenamce = '/station/maintenance.json',\n\n chains = '/chains.json',\n\n cw20_pairs = '/cw20/pairs.json',\n cw20_tokens = '/cw20/tokens.json',\n\n shuttle_eth = '/shuttle/eth.json',\n shuttle_bsc = '/shuttle/bsc.json',\n shuttle_hmy = '/shuttle/hmy.json',\n\n ibc_tokens = '/ibc/tokens.json',\n}\n","import { atom } from 'recoil'\nimport { RequestTxResultType } from 'types/send'\n\nexport enum ProcessStatus {\n Input, // input what will user do\n Confirm, // check what will user do\n Submit, // requst aprove from extension or wallets(coinbase/walletconnect)\n Pending, // waiting to finish tx on blockchain\n Done,\n Failed, // done but failed\n}\n\nconst sendProcessStatus = atom({\n key: 'sendProcessStatus',\n default: ProcessStatus.Input,\n})\n\nconst requestTxResult = atom({\n key: 'requestTxResult',\n default: { success: false },\n})\n\nconst waitForReceiptError = atom({\n key: 'waitForReceiptError',\n default: '',\n})\n\nexport default {\n sendProcessStatus,\n requestTxResult,\n waitForReceiptError,\n}\n","export default __webpack_public_path__ + \"static/media/loading.2890af3c.gif\";","export default __webpack_public_path__ + \"static/media/failed.1ac7e8c1.gif\";","export default __webpack_public_path__ + \"static/media/complete.3a4baf18.gif\";","import { useRecoilValue } from 'recoil'\n\nimport NetworkStore from 'store/NetworkStore'\n\nconst useMantle = (): {\n fetchQuery: ({\n query,\n variables,\n }: {\n query: string\n variables?: string\n }) => Promise | undefined\n} => {\n const terraLocal = useRecoilValue(NetworkStore.terraLocal)\n\n const fetchQuery = ({\n query,\n variables,\n }: {\n query: string\n variables?: string\n }): Promise | undefined =>\n terraLocal\n ? fetch(terraLocal.mantle, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query, variables }),\n })\n .then((res) => res.json())\n .then((res) => res.data)\n : undefined\n\n return {\n fetchQuery,\n }\n}\n\nexport default useMantle\n","import { useRecoilValue } from 'recoil'\nimport _ from 'lodash'\n\nimport { UTIL } from 'consts'\n\nimport AuthStore from 'store/AuthStore'\n\nimport useMantle from './useMantle'\nimport { BalanceListType } from 'types/asset'\n\ninterface Query {\n token: string\n contract: string\n msg: object\n}\n\nconst stringify = (msg: object): string =>\n JSON.stringify(msg).replace(/\"/g, '\\\\\"')\n\nconst bankBalanceQuery = `\n query($address: String) {\n BankBalancesAddress(Address: $address) {\n Result {\n Amount\n Denom\n }\n }\n }\n`\n\nconst alias = ({ token, contract, msg }: Query): string =>\n `${token}: WasmContractsContractAddressStore(\n ContractAddress: \"${contract}\"\n QueryMsg: \"${stringify(msg)}\"\n ) {\n Height\n Result\n }`\n\nconst getTokenBalanceQuery = (queries: Query[]): string => `\nquery {\n ${queries.map(alias)}\n}\n`\n\nconst useTerraBalance = (): {\n getTerraBalances: ({\n terraWhiteList,\n }: {\n terraWhiteList: {\n token: string\n }[]\n }) => Promise\n} => {\n const loginUser = useRecoilValue(AuthStore.loginUser)\n const { fetchQuery } = useMantle()\n\n const getTerraTokenBalances = async ({\n terraWhiteList,\n }: {\n terraWhiteList: { token: string }[]\n }): Promise => {\n const aliasResult = getTokenBalanceQuery(\n Object.values(terraWhiteList).map(({ token }) => ({\n token,\n contract: token,\n msg: { balance: { address: loginUser.address } },\n }))\n )\n\n const fetchResult: Record<\n string,\n { Height: string; Result: string }\n > = await fetchQuery({\n query: aliasResult,\n })\n\n if (_.some(fetchResult)) {\n const list: BalanceListType = {}\n _.forEach(fetchResult, (x, key) => {\n if (x) {\n const res = UTIL.jsonTryParse<{ balance: string }>(x.Result)\n if (res) list[key] = res.balance\n }\n })\n return list\n } else {\n return {}\n }\n }\n\n const getTerraBankBalances = async (): Promise => {\n const fetchResult = await fetchQuery({\n query: bankBalanceQuery,\n variables: JSON.stringify({ address: loginUser.address }),\n })\n const resultList: {\n Amount: string\n Denom: string\n }[] = fetchResult?.BankBalancesAddress.Result || []\n\n if (_.some(resultList)) {\n const list: BalanceListType = {}\n _.forEach(resultList, (x) => {\n list[x.Denom] = x.Amount\n })\n return list\n } else {\n return {}\n }\n }\n\n const getTerraBalances = async ({\n terraWhiteList,\n }: {\n terraWhiteList: { token: string }[]\n }): Promise => {\n const bank = await getTerraBankBalances()\n const token = await getTerraTokenBalances({ terraWhiteList })\n return {\n ...bank,\n ...token,\n }\n }\n\n return { getTerraBalances }\n}\n\nexport default useTerraBalance\n","import { useRecoilValue } from 'recoil'\nimport _ from 'lodash'\n\nimport AuthStore from 'store/AuthStore'\n\nimport { WhiteListType, BalanceListType } from 'types/asset'\n\nimport useEtherBaseContract from './useEtherBaseContract'\n\nconst useEtherBaseBalance = (): {\n getEtherBalances: ({\n whiteList,\n }: {\n whiteList: WhiteListType\n }) => Promise\n} => {\n const { getEtherBaseContract } = useEtherBaseContract()\n const loginUser = useRecoilValue(AuthStore.loginUser)\n const getEtherBalance = async ({\n token,\n userAddress,\n }: {\n token: string\n userAddress: string\n }): Promise => {\n const contract = getEtherBaseContract({ token })\n\n if (contract) {\n const fn = contract['balanceOf']\n const balance = await fn?.(userAddress)\n return balance?.toString() ?? '0'\n }\n return ''\n }\n\n const getEtherBalances = async ({\n whiteList,\n }: {\n whiteList: WhiteListType\n }): Promise => {\n const userAddress = loginUser.address\n const list: BalanceListType = {}\n await Promise.all(\n _.map(whiteList, async (token) => {\n const balance = await getEtherBalance({\n token,\n userAddress,\n })\n list[token] = balance\n })\n )\n return list\n }\n return {\n getEtherBalances,\n }\n}\n\nexport default useEtherBaseBalance\n","import { useRecoilValue, useSetRecoilState } from 'recoil'\nimport _ from 'lodash'\nimport BigNumber from 'bignumber.js'\n\nimport { ASSET, NETWORK } from 'consts'\nimport AuthStore from 'store/AuthStore'\nimport SendStore from 'store/SendStore'\n\nimport { AssetType, WhiteListType, BalanceListType } from 'types/asset'\nimport {\n BlockChainType,\n isIbcNetwork,\n allowedCoins,\n IbcNetwork,\n} from 'types/network'\n\nimport useTerraBalance from './useTerraBalance'\nimport useEtherBaseBalance from './useEtherBaseBalance'\nimport ContractStore from 'store/ContractStore'\n\nconst useAsset = (): {\n getAssetList: () => Promise\n formatBalance: (balance: string | BigNumber) => string\n} => {\n const isLoggedIn = useRecoilValue(AuthStore.isLoggedIn)\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n const toBlockChain = useRecoilValue(SendStore.toBlockChain)\n\n const assetList = useRecoilValue(ContractStore.assetList)\n const terraWhiteList = useRecoilValue(ContractStore.terraWhiteList)\n const ethWhiteList = useRecoilValue(ContractStore.ethWhiteList)\n const bscWhiteList = useRecoilValue(ContractStore.bscWhiteList)\n const hmyWhiteList = useRecoilValue(ContractStore.hmyWhiteList)\n\n const setAssetList = useSetRecoilState(SendStore.loginUserAssetList)\n\n const { getTerraBalances } = useTerraBalance()\n const { getEtherBalances } = useEtherBaseBalance()\n\n const setBalanceToAssetList = ({\n assetList,\n whiteList,\n balanceList,\n }: {\n assetList: AssetType[]\n whiteList: WhiteListType\n balanceList: BalanceListType\n }): AssetType[] => {\n if (_.some(balanceList)) {\n return _.reduce(\n assetList,\n (arr, asset) => {\n const tokenAddress = whiteList[asset.terraToken]\n return tokenAddress\n ? [\n ...arr,\n {\n ...asset,\n balance: balanceList[tokenAddress],\n },\n ]\n : arr\n },\n []\n )\n }\n return assetList\n }\n\n const getAssetList = async (): Promise => {\n let whiteList: WhiteListType = {}\n let balanceList: BalanceListType = {}\n if (isLoggedIn) {\n if (fromBlockChain === BlockChainType.terra) {\n whiteList = terraWhiteList\n balanceList = await getTerraBalances({\n terraWhiteList: _.map(whiteList, (token) => ({ token })),\n })\n } else if (NETWORK.isEtherBaseBlockChain(fromBlockChain)) {\n if (fromBlockChain === BlockChainType.ethereum) {\n whiteList = ethWhiteList\n } else if (fromBlockChain === BlockChainType.bsc) {\n whiteList = bscWhiteList\n } else if (fromBlockChain === BlockChainType.hmy) {\n whiteList = hmyWhiteList\n }\n balanceList = await getEtherBalances({ whiteList })\n }\n }\n\n const fromList = setBalanceToAssetList({\n assetList,\n whiteList,\n balanceList,\n })\n\n if (\n fromBlockChain !== toBlockChain &&\n NETWORK.isEtherBaseBlockChain(toBlockChain)\n ) {\n let toWhiteList = bscWhiteList\n if (toBlockChain === BlockChainType.ethereum) {\n toWhiteList = ethWhiteList\n } else if (toBlockChain === BlockChainType.hmy) {\n toWhiteList = hmyWhiteList\n }\n\n const pairList = _.map(fromList, (item) => {\n const disabled = _.isEmpty(toWhiteList[item.terraToken])\n return {\n ...item,\n disabled,\n }\n }).filter((item) => !item.disabled)\n setAssetList(pairList)\n } else if (\n fromBlockChain === BlockChainType.terra &&\n isIbcNetwork(toBlockChain)\n ) {\n const allowed = allowedCoins[toBlockChain as IbcNetwork] as string[]\n const filteredList = fromList.filter((item) =>\n allowed.includes(item.terraToken)\n )\n setAssetList(filteredList)\n } else {\n setAssetList(fromList)\n }\n }\n\n const formatBalance = (balance: string | BigNumber): string => {\n if (balance) {\n const bnBalance =\n typeof balance === 'string' ? new BigNumber(balance) : balance\n\n return fromBlockChain === BlockChainType.terra\n ? bnBalance.div(ASSET.TERRA_DECIMAL).dp(6).toString(10)\n : bnBalance\n .div(ASSET.ETHER_BASE_DECIMAL / ASSET.TERRA_DECIMAL)\n .integerValue(BigNumber.ROUND_DOWN)\n .div(ASSET.TERRA_DECIMAL)\n .dp(6)\n .toString(10)\n }\n\n return ''\n }\n\n return {\n getAssetList,\n formatBalance,\n }\n}\n\nexport default useAsset\n","import { useRecoilValue } from 'recoil'\nimport { AccAddress } from '@terra-money/terra.js'\nimport { ethers } from 'ethers'\nimport _ from 'lodash'\nimport BigNumber from 'bignumber.js'\nimport { Bech32Address } from '@keplr-wallet/cosmos';\n\nimport SendStore from 'store/SendStore'\n\nimport { BlockChainType, isIbcNetwork, ibcPrefix, IbcNetwork } from 'types/network'\nimport { ValidateItemResultType, ValidateResultType } from 'types/send'\n\nimport useAsset from './useAsset'\nimport { NETWORK } from 'consts'\nimport ContractStore from 'store/ContractStore'\n\nconst useSendValidate = (): {\n validateFee: () => ValidateItemResultType\n validateSendData: () => ValidateResultType\n} => {\n const { formatBalance } = useAsset()\n const allTokenAddress = useRecoilValue(ContractStore.allTokenAddress)\n\n // Send Data\n const asset = useRecoilValue(SendStore.asset)\n const toAddress = useRecoilValue(SendStore.toAddress)\n const amount = useRecoilValue(SendStore.amount)\n const memo = useRecoilValue(SendStore.memo)\n const toBlockChain = useRecoilValue(SendStore.toBlockChain)\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n\n const assetList = useRecoilValue(SendStore.loginUserAssetList)\n const feeDenom = useRecoilValue(SendStore.feeDenom)\n\n const gasFee = useRecoilValue(SendStore.gasFee)\n const tax = useRecoilValue(SendStore.tax)\n\n const validateFee = (): ValidateItemResultType => {\n if (fromBlockChain === BlockChainType.terra) {\n const sendAmount = new BigNumber(amount)\n const selectedAssetAmount = new BigNumber(\n assetList.find((x) => x.terraToken === asset?.terraToken)?.balance ||\n '0'\n )\n const gasFeeIfSameDenomWithSendAsset =\n asset?.terraToken === feeDenom ? gasFee : new BigNumber(0)\n const taxAmount = new BigNumber(tax?.amount.toString() || 0)\n\n if (\n selectedAssetAmount.isLessThan(\n taxAmount.plus(sendAmount).plus(gasFeeIfSameDenomWithSendAsset)\n )\n ) {\n return {\n isValid: false,\n errorMessage: 'Insufficient balance',\n }\n }\n }\n\n return { isValid: true }\n }\n\n const validateAsset = (): ValidateItemResultType => {\n if (asset?.disabled) {\n return {\n isValid: false,\n errorMessage: `${asset.symbol} is not available on ${NETWORK.blockChainName[toBlockChain]}`,\n }\n }\n\n return { isValid: true }\n }\n\n const validateMemo = (): ValidateItemResultType => {\n if (_.isEmpty(memo)) {\n return { isValid: true, errorMessage: '' }\n }\n\n if (_.size(memo) >= 256) {\n return {\n isValid: false,\n errorMessage: 'Memo must be shorter than 256 bytes.',\n }\n }\n\n return { isValid: true }\n }\n\n const validateToAddress = (): ValidateItemResultType => {\n if (_.isEmpty(toAddress)) {\n return { isValid: false, errorMessage: '' }\n }\n\n if (allTokenAddress.includes(toAddress.trim())) {\n return {\n isValid: false,\n errorMessage: `${toAddress} is not a user address.\\nDouble check the address above.`,\n }\n }\n\n let validAddress = false;\n\n if (toBlockChain === BlockChainType.terra) {\n validAddress = AccAddress.validate(toAddress)\n } else if (\n isIbcNetwork(toBlockChain)\n ) {\n if (toAddress.startsWith(ibcPrefix[toBlockChain as IbcNetwork])) {\n try {\n Bech32Address.validate(toAddress)\n validAddress = true;\n } catch (error) {}\n }\n } else {\n validAddress = ethers.utils.isAddress(toAddress)\n }\n\n if (false === validAddress) {\n return { isValid: false, errorMessage: 'Invalid address' }\n }\n\n return { isValid: true }\n }\n\n const validateAmount = (): ValidateItemResultType => {\n if (_.isEmpty(amount)) {\n return { isValid: false, errorMessage: '' }\n }\n\n const bnAmount = new BigNumber(amount)\n\n if (_.isNaN(bnAmount) || bnAmount.isNegative() || bnAmount.isZero()) {\n return { isValid: false, errorMessage: 'Amount must be greater than 0' }\n }\n\n const rebalanceDecimal = fromBlockChain === BlockChainType.terra ? 1 : 1e12\n\n if (false === bnAmount.div(rebalanceDecimal).isInteger()) {\n return {\n isValid: false,\n errorMessage: `Amount must be within 6 decimal points`,\n }\n }\n\n const selectedAssetAmount = new BigNumber(\n assetList.find((x) => x.terraToken === asset?.terraToken)?.balance || '0'\n )\n if (selectedAssetAmount.isLessThanOrEqualTo(0)) {\n return {\n isValid: false,\n errorMessage: 'Insufficient balance',\n }\n }\n\n if (bnAmount.isGreaterThan(selectedAssetAmount)) {\n return {\n isValid: false,\n errorMessage: `Amount must be between 0 and ${formatBalance(\n selectedAssetAmount.toString()\n )}`,\n }\n }\n\n return { isValid: true }\n }\n\n const validateSendData = (): ValidateResultType => {\n const toAddressValidResult = validateToAddress()\n const amountValidResult = validateAmount()\n const memoValidResult = validateMemo()\n const assetValidResult = validateAsset()\n\n return {\n isValid: _.every(\n [\n toAddressValidResult,\n amountValidResult,\n memoValidResult,\n assetValidResult,\n ],\n (x) => x.isValid\n ),\n errorMessage: {\n toAddress: toAddressValidResult.errorMessage,\n amount: amountValidResult.errorMessage,\n memo: memoValidResult.errorMessage,\n asset: assetValidResult.errorMessage,\n },\n }\n }\n\n return {\n validateFee,\n validateSendData,\n }\n}\n\nexport default useSendValidate\n","import { AnchorHTMLAttributes, ReactElement } from 'react'\nimport styled from 'styled-components'\n\nconst StyledA = styled.a`\n color: #5493f7;\n :hover {\n opacity: 1;\n }\n`\n\nexport type Props = AnchorHTMLAttributes\nconst ExtLink = ({ children, ...attrs }: Props): ReactElement => (\n \n {children}\n \n)\n\nexport default ExtLink\n","import styled from 'styled-components'\n\nconst StyledView = styled.div`\n display: flex;\n flex-direction: column;\n`\n\nexport default StyledView\n","import { HTMLAttributes, ReactElement } from 'react'\nimport styled from 'styled-components'\n\nimport { COLOR } from 'consts'\nimport View from './View'\n\nconst StyledText = styled(View)`\n color: ${COLOR.text};\n`\n\nconst Text = (props: HTMLAttributes): ReactElement => {\n return \n}\n\nexport default Text\n","import { COLOR } from 'consts'\nimport { ButtonHTMLAttributes, ReactElement } from 'react'\nimport styled from 'styled-components'\n\nconst StyledContainer = styled.div`\n width: 100%;\n`\n\nconst StyledDefaultButton = styled.button`\n padding: 16px 8px;\n width: 100%;\n background-color: ${COLOR.primary};\n color: ${COLOR.white};\n font-size: 14px;\n text-align: center;\n border-radius: 27px;\n border-style: none;\n box-sizing: border-box;\n user-select: none;\n font-weight: 500;\n\n cursor: pointer;\n :hover {\n background-color: ${COLOR.primary};\n opacity: 0.8;\n }\n :disabled {\n opacity: 0.3;\n pointer-events: none;\n }\n`\n\nexport type ButtonProps = ButtonHTMLAttributes\n\nconst Button = (props: ButtonProps): ReactElement => {\n const { ...rest } = props\n\n return (\n \n \n \n )\n}\n\nexport default Button\n","import { ReactElement, HTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\nconst StyledContainer = styled.div`\n width: 100%;\n margin: auto;\n`\n\nconst Container = (props: HTMLAttributes): ReactElement => {\n return \n}\n\nexport default Container\n","import styled from 'styled-components'\nimport View from './View'\n\nconst StyledRow = styled(View)`\n flex-direction: row;\n`\n\nexport default StyledRow\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\n\ntype FormImageProps = {\n src: string\n size?: number\n style?: React.CSSProperties\n}\n\nconst StyledFormImage = styled.div`\n display: inline-block;\n background-image: url(${(props): string => props.src});\n background-size: contain;\n background-position: center;\n background-repeat: no-repeat;\n height: ${(props): string => (props.size ? `${props.size}px` : '100%')};\n width: ${(props): string => (props.size ? `${props.size}px` : '100%')};\n`\n\nconst FormImage = (props: FormImageProps): ReactElement => {\n return \n}\n\nexport default FormImage\n","import { ReactElement, useState } from 'react'\nimport styled from 'styled-components'\nimport useClipboard from 'react-use-clipboard'\nimport { Check } from 'react-bootstrap-icons'\n\nimport { COLOR, NETWORK } from 'consts'\nimport copyClipboardPng from 'images/copy_clipboard.png'\n\nimport Row from './Row'\nimport Text from './Text'\nimport View from './View'\nimport FormImage from './FormImage'\nimport { BlockChainType } from 'types/network'\n\nconst StyledContainer = styled(Row)`\n cursor: pointer;\n padding: 3px 8px;\n border-radius: 10px;\n background-color: #202020;\n align-items: center;\n width: auto;\n`\n\nconst CopyTokenAddressButton = ({\n blockChain,\n value,\n}: {\n blockChain: BlockChainType\n value: string\n}): ReactElement => {\n const [isCopied, setIsCopied] = useState(false)\n const [, setCopied] = useClipboard(value)\n\n return (\n {\n if (isCopied) {\n return\n }\n setCopied()\n setIsCopied(true)\n setTimeout(() => {\n setIsCopied(false)\n }, 1500)\n }}\n >\n \n {isCopied ? (\n \n ) : (\n \n )}\n \n \n {NETWORK.blockChainName[blockChain]}\n \n \n )\n}\n\nexport default CopyTokenAddressButton\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkBAMAAAATLoWrAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAYUExURUdwTHd3d3V1dXNzc3R0dHR0dHd3d3Nzc5ALcnQAAAAHdFJOUwAkbZK54BuhJsg0AAAAZklEQVQoz2NgoAiwCcIATIQxvBwGAqFCLHCR8lKoEHuJEhSolAtAhYphRjDhEmIsVxgVwidUagwFJuUJECH0sAcKsbnDhRyhQujRilXICRZlSjBJRFSXF0CFRDGFGOBpRFCAosQGAJzPRDnTsVdMAAAAAElFTkSuQmCC\"","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilValue } from 'recoil'\n\nimport { Text, View } from 'components'\nimport SendProcessStore, { ProcessStatus } from 'store/SendProcessStore'\nimport FormImage from 'components/FormImage'\nimport btn_back from 'images/btn_back.png'\n\nconst StyledContainer = styled(View)`\n position: relative;\n align-items: center;\n`\n\nconst StyledFormTitle = styled(Text)`\n margin-bottom: 42px;\n height: 24px;\n font-size: 20px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.31px;\n justify-content: center;\n color: #ffffff;\n`\n\nconst FormTitleText: Record = {\n [ProcessStatus.Input]: 'Send',\n [ProcessStatus.Confirm]: 'Confirm',\n [ProcessStatus.Submit]: 'Confirm',\n [ProcessStatus.Pending]: 'Confirm',\n [ProcessStatus.Done]: 'Complete',\n [ProcessStatus.Failed]: 'Failed',\n}\n\nconst FormTitle = ({\n onClickGoBackToSendInputButton,\n}: {\n onClickGoBackToSendInputButton: () => void\n}): ReactElement => {\n const status = useRecoilValue(SendProcessStore.sendProcessStatus)\n const GoBackButton = (): ReactElement => {\n return (\n \n \n \n )\n }\n return (\n \n {status === ProcessStatus.Confirm && }\n {FormTitleText[status]}\n \n )\n}\n\nexport default FormTitle\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAA2CAYAAADQzyn5AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAABAAAANgAAAAA78FPAAAABCElEQVRYCe2ZUQ6DIBBETT/s0b1ReyM5Bp1J3IQQQVJ2a9IMyQYL6usOI6IuS3DJOa+IDbEj0rG9hmIBeSJeiLpsYWCQWlD+iRQCvoDGgAegBPtKPQh9cz83qQWFAmWRvN95Cxr2JgeTWPJK3r4Cg0bire/n06Cg/bFr9WpMbf476v8wEte9Z0vQMlnfTGkwnH0rCSfb/tADnE5g1hQDBfhBeKfkTt9cF1K7Tep7zEW9kPXIUiZmvAW366lRS/a5a7o+WoZrGM2aZbjaMnO/ZThzVqOW4eYMVh8twzWMZs00nP/76kHZfV+i2tgPwJPt615fwOPAzKQDj5G6lA9w+xjCRyUGHyDWD5R2EWZAk+3xAAAAAElFTkSuQmCC\"","import { ReactElement } from 'react'\nimport styled from 'styled-components'\n\nconst StyledLable = styled.label`\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.37px;\n color: #a3a3a3;\n font-size: 12px;\n pointer-events: none;\n`\n\nconst FormLabel = ({ title }: { title: string }): ReactElement => {\n return {title}\n}\n\nexport default FormLabel\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { COLOR } from 'consts'\n\nimport Text from './Text'\n\nconst StyledText = styled(Text)`\n color: ${COLOR.red};\n word-break: break-all;\n white-space: pre-wrap;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.28px;\n padding-top: 5px;\n margin-bottom: 8px;\n`\n\nconst FormErrorMessage = ({\n errorMessage,\n style,\n}: {\n errorMessage?: string\n style?: React.CSSProperties\n}): ReactElement => {\n return (\n <>{errorMessage && {errorMessage}}\n )\n}\n\nexport default FormErrorMessage\n","import { InputHTMLAttributes, LabelHTMLAttributes, ReactElement } from 'react'\nimport styled from 'styled-components'\n\nimport { COLOR } from 'consts'\n\nconst StyledContainer = styled.div`\n position: relative;\n display: flex;\n flex: 1;\n`\n\nconst StyledInput = styled.input`\n flex: 1;\n padding-top: 12px;\n padding-bottom: 6px;\n border: none;\n border-radius: 0;\n padding-left: 0;\n font-size: 16px;\n color: ${COLOR.text};\n border-bottom: 1px solid ${COLOR.darkGray2};\n background-color: transparent;\n :focus {\n outline: none;\n }\n\n :focus ~ label,\n :not(:placeholder-shown) ~ label {\n top: -15px;\n font-size: 12px;\n letter-spacing: -0.28px;\n }\n`\n\nconst StyledLable = styled.label`\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.37px;\n color: #a3a3a3;\n font-size: 16px;\n position: absolute;\n pointer-events: none;\n top: 10px;\n transition: 0.2s ease all;\n -moz-transition: 0.2s ease all;\n -webkit-transition: 0.2s ease all;\n`\n\nconst FormLabelInput = ({\n inputProps,\n labelProps,\n}: {\n inputProps: InputHTMLAttributes\n labelProps: LabelHTMLAttributes\n}): ReactElement => {\n return (\n \n {\n currentTarget.blur()\n }}\n />\n \n \n )\n}\n\nexport default FormLabelInput\n","import _ from 'lodash'\nimport BigNumber from 'bignumber.js'\nimport { useRecoilValue } from 'recoil'\n\nimport { ASSET, UTIL } from 'consts'\n\nimport { AssetNativeDenomEnum } from 'types/asset'\n\nimport ContractStore, { ShuttleUusdPairType } from 'store/ContractStore'\n\nimport useMantle from './useMantle'\nimport SendStore from 'store/SendStore'\nimport { BlockChainType } from 'types/network'\n\nconst OracleDenomsExchangeRates = `\nquery {\n OracleDenomsExchangeRates {\n Height\n Result {\n Amount\n Denom\n }\n }\n }\n `\n\nconst getTerraMAssetPairContract = (\n addressList: ShuttleUusdPairType\n): string => {\n const mapped = _.map(\n addressList,\n (pairContractAddress, tokenAddress) =>\n `${tokenAddress}: WasmContractsContractAddressStore(\n ContractAddress: \"${pairContractAddress}\"\n QueryMsg: \"{\\\\\"pool\\\\\":{}}\"\n ) {\n Height\n Result\n }`\n )\n\n return `\n query {\n ${mapped}\n }\n`\n}\n\ninterface AssetToken {\n amount: string\n info: {\n token: { contract_addr: string }\n }\n}\n\ninterface NativeToken {\n amount: string\n info: {\n native_token: { denom: string }\n }\n}\n\nconst useShuttle = (): {\n getTerraShuttleFee: ({\n denom,\n amount,\n }: {\n denom: string\n amount: BigNumber\n }) => Promise\n} => {\n const { fetchQuery } = useMantle()\n const shuttleUusdPairs = useRecoilValue(ContractStore.shuttleUusdPairs)\n const etherVaultTokenList = useRecoilValue(ContractStore.etherVaultTokenList)\n const toBlockChain = useRecoilValue(SendStore.toBlockChain)\n const asset = useRecoilValue(SendStore.asset)\n\n const getTerraDenomShuttleFee = async ({\n denom,\n amount,\n }: {\n denom: string\n amount: BigNumber\n }): Promise => {\n const minUst = new BigNumber(ASSET.TERRA_DECIMAL)\n const zeroDotOnePerAmount = amount.times(0.001).dp(0)\n\n if (denom === AssetNativeDenomEnum.uusd) {\n return zeroDotOnePerAmount.isGreaterThan(minUst)\n ? zeroDotOnePerAmount\n : minUst\n }\n\n const fetchResult = await fetchQuery({\n query: OracleDenomsExchangeRates,\n })\n\n const denomLunaPriceList: {\n Amount: string\n Denom: string\n }[] = fetchResult?.OracleDenomsExchangeRates.Result || []\n\n if (_.some(denomLunaPriceList)) {\n const uusdLunaPrice = new BigNumber(\n denomLunaPriceList.find((x) => x.Denom === AssetNativeDenomEnum.uusd)\n ?.Amount || 1\n )\n const targetLunaPrice =\n denom === AssetNativeDenomEnum.uluna\n ? new BigNumber(1)\n : new BigNumber(\n denomLunaPriceList.find((x) => x.Denom === denom)?.Amount || 1\n )\n const oneUstValueTargetPrice = targetLunaPrice\n .div(uusdLunaPrice)\n .times(ASSET.TERRA_DECIMAL)\n .dp(0)\n\n return zeroDotOnePerAmount.isGreaterThan(oneUstValueTargetPrice)\n ? zeroDotOnePerAmount\n : oneUstValueTargetPrice\n }\n return new BigNumber(0)\n }\n\n const getTerraCW20TokenShuttleFee = async ({\n contractAddress,\n amount,\n }: {\n contractAddress: string\n amount: BigNumber\n }): Promise => {\n const query = getTerraMAssetPairContract(shuttleUusdPairs)\n const zeroDotOnePerAmount = amount.times(0.001)\n\n const etherVaultToken = etherVaultTokenList[asset?.terraToken || '']\n if (etherVaultToken && toBlockChain === BlockChainType.ethereum) {\n const tokenPrice = await etherVaultToken.getPricePerUst()\n const minimumPrice = UTIL.toBignumber('1')\n .div(tokenPrice)\n .multipliedBy(ASSET.TERRA_DECIMAL)\n .dp(0)\n\n return tokenPrice.isEqualTo(0) ||\n zeroDotOnePerAmount.isGreaterThan(minimumPrice)\n ? zeroDotOnePerAmount\n : minimumPrice\n }\n\n const fetchResult: Record<\n string,\n {\n Result: string\n }\n > = await fetchQuery({\n query,\n })\n\n const assets =\n (fetchResult &&\n UTIL.jsonTryParse<{ assets: (NativeToken | AssetToken)[] }>(\n fetchResult[contractAddress]?.Result\n )?.assets) ||\n []\n\n if (_.some(assets)) {\n const uusd = new BigNumber(\n assets.find(({ info }) => 'native_token' in info)?.amount ?? '1'\n )\n const token = new BigNumber(\n assets.find(({ info }) => 'token' in info)?.amount ?? '0'\n )\n const oneUstValueTargetPrice = token\n .div(uusd)\n .times(ASSET.TERRA_DECIMAL)\n .dp(0)\n\n return zeroDotOnePerAmount.isGreaterThan(oneUstValueTargetPrice)\n ? zeroDotOnePerAmount\n : oneUstValueTargetPrice\n }\n return new BigNumber(0)\n }\n\n // at least 1*\n const getTerraShuttleFee = async ({\n denom,\n amount,\n }: {\n denom: string\n amount: BigNumber\n }): Promise => {\n return UTIL.isNativeDenom(denom)\n ? getTerraDenomShuttleFee({ denom, amount })\n : getTerraCW20TokenShuttleFee({ contractAddress: denom, amount })\n }\n\n return {\n getTerraShuttleFee,\n }\n}\n\nexport default useShuttle\n","import { ReactElement, useState } from 'react'\nimport Modal from 'react-modal'\nimport styled from 'styled-components'\nimport { X } from 'react-bootstrap-icons'\n\nimport { COLOR, STYLE } from 'consts'\n\nconst StyledModal = styled(Modal)`\n width: 550px;\n outline: 0;\n margin: auto;\n background-color: ${COLOR.darkGray2};\n border-radius: 32px;\n overflow: hidden;\n @media ${STYLE.media.mobile} {\n border-radius: 0;\n border-top-left-radius: 20px;\n border-top-right-radius: 20px;\n margin-bottom: 0;\n }\n`\n\nconst StyledModalHeader = styled.div`\n position: relative;\n text-align: center;\n padding-top: 28px;\n padding-bottom: 35px;\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.25px;\n justify-content: center;\n @media ${STYLE.media.mobile} {\n padding-bottom: 26px;\n }\n`\n\nconst StyledModalHeaderClose = styled.a`\n position: absolute;\n top: 15px;\n right: 15px;\n display: inline-block;\n padding: 10px;\n cursor: pointer;\n color: ${COLOR.text};\n :hover {\n color: ${COLOR.primary};\n text-decoration: none;\n }\n`\n\nModal.setAppElement('#root')\n\nconst DefaultModal = ({\n isOpen,\n close,\n children,\n onRequestClose,\n header,\n}: {\n isOpen: boolean\n close?: () => void\n children: ReactElement\n onRequestClose?: () => void\n header?: ReactElement\n}): ReactElement => {\n return (\n \n \n {header}\n {close && (\n \n \n \n )}\n \n {children}\n \n )\n}\n\nexport default DefaultModal\n\nexport type ModalProps = {\n isOpen: boolean\n open: () => void\n close: () => void\n}\n\nexport const useModal = (): ModalProps => {\n const [isOpen, setIsOpen] = useState(false)\n return {\n isOpen,\n open: (): void => setIsOpen(true),\n close: (): void => setIsOpen(false),\n }\n}\n","import { atom } from 'recoil'\n\nexport enum SelectWalletModalType {\n selectWallet,\n terraExtInstall,\n bscInstall,\n}\n\nconst isVisibleModalType = atom({\n key: 'isVisibleModalType',\n default: undefined,\n})\n\nexport default { isVisibleModalType }\n","import { InputHTMLAttributes, ReactElement } from 'react'\nimport styled from 'styled-components'\n\nimport { COLOR, STYLE } from 'consts'\n\nconst StyledContainer = styled.div`\n display: flex;\n flex: 1;\n`\n\nconst StyledInput = styled.input`\n flex: 1;\n padding: 12px 0;\n border: none;\n font-size: 14px;\n border-radius: ${STYLE.css.borderRadius};\n color: ${COLOR.text};\n background-color: ${COLOR.darkGray2};\n :focus {\n outline: none;\n }\n`\n\nconst FormInput = (\n props: InputHTMLAttributes\n): ReactElement => {\n return (\n \n \n \n )\n}\n\nexport default FormInput\n","import { ReactElement, useEffect, useRef, useState } from 'react'\nimport _ from 'lodash'\nimport { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'\nimport styled from 'styled-components'\nimport { CaretDownFill } from 'react-bootstrap-icons'\n\nimport { COLOR, STYLE } from 'consts'\n\nimport { AssetType } from 'types/asset'\n\nimport { Text, View, Row } from 'components'\nimport DefaultModal from 'components/Modal'\nimport FormInput from 'components/FormInput'\nimport FormImage from 'components/FormImage'\n\nimport useAsset from 'hooks/useAsset'\nimport AuthStore from 'store/AuthStore'\nimport SendStore from 'store/SendStore'\n\nconst StyledContainer = styled.div`\n padding: 0 25px 40px;\n background-color: ${COLOR.darkGray2};\n @media ${STYLE.media.mobile} {\n padding: 0 24px 20px;\n }\n`\n\nconst StyledAssetItemBox = styled.div`\n padding: 5px 0;\n height: 500px;\n max-height: 60vh;\n overflow-y: scroll;\n background-color: ${COLOR.darkGray};\n border-radius: ${STYLE.css.borderRadius};\n`\n\nconst StyledAssetItem = styled.div`\n position: relative;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n padding: 10px 20px;\n line-height: 16px;\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n :last-child {\n border-bottom: 0;\n }\n`\n\nconst StyledSelectAssetButton = styled.div`\n cursor: pointer;\n border-bottom: 2px solid ${COLOR.darkGray2};\n padding: 12px 0 6px;\n font-size: 14px;\n font-weight: 500;\n :hover {\n opacity: 0.8;\n }\n`\n\nconst StyledIconBox = styled(View)`\n flex: 0 0 8%;\n align-self: center;\n margin-top: 3px;\n margin-bottom: 3px;\n padding-right: 10px;\n`\n\nconst AssetItem = ({\n asset,\n setShowModal,\n onChangeAmount,\n}: {\n asset: AssetType\n setShowModal: (value: boolean) => void\n onChangeAmount: ({ value }: { value: string }) => void\n}): ReactElement => {\n const [oriAsset, setAsset] = useRecoilState(SendStore.asset)\n const isLoggedIn = useRecoilValue(AuthStore.isLoggedIn)\n\n const { formatBalance } = useAsset()\n\n return (\n {\n if (oriAsset !== asset) {\n onChangeAmount({ value: '' })\n }\n setAsset(asset)\n setShowModal(false)\n }}\n >\n \n \n \n \n \n \n \n {asset.symbol}\n \n \n {asset.name}\n \n \n \n {isLoggedIn && (\n \n \n {asset.balance ? formatBalance(asset.balance) : '0'}{' '}\n \n \n )}\n \n \n )\n}\n\nconst SelectAssetButton = ({\n asset,\n setShowModal,\n}: {\n asset?: AssetType\n setShowModal: (value: boolean) => void\n}): ReactElement => {\n const { formatBalance } = useAsset()\n const isLoggedIn = useRecoilValue(AuthStore.isLoggedIn)\n\n return (\n {\n setShowModal(true)\n }}\n >\n {asset && (\n \n \n \n {asset.symbol}\n \n \n {isLoggedIn && (\n \n Available {asset.balance ? formatBalance(asset.balance) : '0'}\n \n )}\n \n \n \n )}\n \n )\n}\n\nconst AssetList = ({\n selectedAsset,\n onChangeAmount,\n}: {\n selectedAsset?: AssetType\n onChangeAmount: ({ value }: { value: string }) => void\n}): ReactElement => {\n const scrollRef = useRef(null)\n\n const assetList = useRecoilValue(SendStore.loginUserAssetList)\n const setAsset = useSetRecoilState(SendStore.asset)\n const [showModal, setShowModal] = useState(false)\n const [inputFilter, setInputFilter] = useState('')\n\n const filteredAssetList = assetList.filter((x) => {\n const inputFilterLower = inputFilter.toLowerCase()\n return inputFilterLower\n ? x.name.toLowerCase().includes(inputFilterLower) ||\n x.symbol.toLowerCase().includes(inputFilterLower)\n : true\n })\n\n useEffect(() => {\n if (showModal) {\n setInputFilter('')\n scrollRef.current?.scrollTo({ top: 200, behavior: 'smooth' })\n }\n }, [showModal])\n\n useEffect(() => {\n if (_.some(assetList)) {\n if (selectedAsset) {\n setAsset(\n assetList.find((x) => x.terraToken === selectedAsset.terraToken) ||\n assetList[0]\n )\n } else {\n setAsset(assetList[0])\n }\n }\n }, [assetList])\n\n return (\n <>\n \n {\n setShowModal(false)\n },\n }}\n header={Select Asset}\n >\n \n \n {\n setInputFilter(value)\n }}\n maxLength={30}\n placeholder={'Search'}\n style={{ marginLeft: 24 }}\n />\n \n\n {\n const index = selectedAsset\n ? filteredAssetList.indexOf(selectedAsset)\n : 0\n scrollRef.current?.scrollTo({\n top: index * 45,\n behavior: 'smooth',\n })\n }}\n >\n {_.some(filteredAssetList) ? (\n _.map(filteredAssetList, (asset, index) => (\n \n ))\n ) : (\n \n {`\"${inputFilter}\" does not exist`}{' '}\n \n )}\n \n \n \n \n )\n}\n\nexport default AssetList\n","import { ReactElement } from 'react'\nimport { useRecoilValue } from 'recoil'\n\nimport SendStore from 'store/SendStore'\nimport { Text, View, Row, CopyTokenAddressButton } from 'components'\n\nimport useNetwork from 'hooks/useNetwork'\n\nconst CopyTokenAddress = (): ReactElement => {\n const asset = useRecoilValue(SendStore.asset)\n const toBlockChain = useRecoilValue(SendStore.toBlockChain)\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n\n const { fromTokenAddress, toTokenAddress } = useNetwork()\n\n return (\n <>\n {asset && (fromTokenAddress || toTokenAddress) && (\n \n {`Copy ${asset.symbol} token address`}\n {fromTokenAddress && (\n \n \n \n )}\n {toTokenAddress && toBlockChain !== fromBlockChain && (\n \n \n \n )}\n \n )}\n \n )\n}\n\nexport default CopyTokenAddress\n","import { ReactElement } from 'react'\nimport _ from 'lodash'\nimport styled from 'styled-components'\nimport { Dropdown } from 'react-bootstrap'\nimport { CaretDownFill } from 'react-bootstrap-icons'\n\nimport { COLOR, STYLE } from 'consts'\nimport Text from './Text'\n\ntype FormSelectProps = {\n selectedValue: T\n optionList: { value: T; label: string; isDisabled?: boolean }[]\n onSelect: (value: T) => void\n size?: 'sm' | 'lg'\n containerStyle?: React.CSSProperties\n menuContainerStyle?: React.CSSProperties\n selectedTextStyle?: React.CSSProperties\n}\n\nconst StyledDropdown = styled(Dropdown)`\n position: relative;\n`\n\nconst StyledDropdownItem = styled(StyledDropdown.Item)`\n border-top: solid 1px #292929;\n padding: 8px 10px;\n font-size: 13px;\n :hover {\n background-color: #323842;\n }\n :first-child {\n border-top: 0;\n }\n`\n\nconst StyledDropdownToggle = styled(StyledDropdown.Toggle)`\n cursor: pointer;\n height: 100%;\n padding: 13px 12px 12px 15px;\n border-width: 0;\n border-radius: 10px;\n box-shadow: 0 12px 7px -7px rgba(0, 0, 0, 0.34);\n background-color: ${COLOR.darkGray2};\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.25px;\n color: #e9e9e9;\n ::after {\n display: none;\n }\n :hover {\n background-color: #494e59;\n }\n :focus {\n box-shadow: none !important;\n outline: none;\n }\n`\n\nconst StyledDropdownMenu = styled(StyledDropdown.Menu)`\n z-index: 1;\n background-color: ${COLOR.darkGray};\n margin-top: 5;\n border: 0;\n width: 100%;\n padding: 0;\n border-radius: 10px;\n box-shadow: 0 12px 7px -7px rgba(0, 0, 0, 0.34);\n background-color: #2e2e2e;\n transform: translate(0px, 0px) !important;\n a {\n display: block;\n color: ${COLOR.white};\n padding: 12px;\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.25px;\n border-radius: ${STYLE.css.borderRadius};\n text-decoration: none;\n :hover {\n color: ${COLOR.white};\n background-color: rgba(85, 146, 247, 0.1);\n }\n }\n`\n\nconst FormSelect = ({\n selectedValue,\n optionList,\n onSelect,\n size,\n containerStyle,\n menuContainerStyle,\n selectedTextStyle,\n}: FormSelectProps): ReactElement => {\n return (\n \n \n \n {optionList.find((x) => x.value === selectedValue)?.label}\n \n \n \n \n {_.map(optionList, (option, i) => (\n {\n if (option.isDisabled) {\n return\n }\n onSelect(option.value)\n }}\n >\n \n {option.label}\n \n \n ))}\n \n \n )\n}\n\nexport default FormSelect\n","import { ReactElement, useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'\nimport _ from 'lodash'\n\nimport { ASSET, COLOR, NETWORK, UTIL } from 'consts'\n\nimport { BlockChainType } from 'types/network'\nimport { ValidateItemResultType } from 'types/send'\nimport { AssetNativeDenomEnum, AssetSymbolEnum } from 'types/asset'\n\nimport { Text, View, Row } from 'components'\nimport FormLabel from 'components/FormLabel'\nimport FormSelect from 'components/FormSelect'\nimport FormErrorMessage from 'components/FormErrorMessage'\n\nimport useAsset from 'hooks/useAsset'\n\nimport AuthStore from 'store/AuthStore'\nimport SendStore from 'store/SendStore'\n\nconst StyledFormSection = styled(View)`\n margin-bottom: 40px;\n`\n\nconst FormFeeInfo = ({\n feeValidationResult,\n}: {\n feeValidationResult: ValidateItemResultType\n}): ReactElement => {\n const isLoggedIn = useRecoilValue(AuthStore.isLoggedIn)\n\n // Send Data\n const asset = useRecoilValue(SendStore.asset)\n const toBlockChain = useRecoilValue(SendStore.toBlockChain)\n\n // Computed data from Send data\n const gasFeeList = useRecoilValue(SendStore.gasFeeList)\n const [gasFee, setGasFee] = useRecoilState(SendStore.gasFee)\n const setFee = useSetRecoilState(SendStore.fee)\n const tax = useRecoilValue(SendStore.tax)\n const [feeDenom, setFeeDenom] = useRecoilState(\n SendStore.feeDenom\n )\n const shuttleFee = useRecoilValue(SendStore.shuttleFee)\n const amountAfterShuttleFee = useRecoilValue(SendStore.amountAfterShuttleFee)\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n const validationResult = useRecoilValue(SendStore.validationResult)\n\n const assetList = useRecoilValue(SendStore.loginUserAssetList)\n\n const { formatBalance } = useAsset()\n\n const [optionList, setOptionList] = useState<\n {\n label: AssetSymbolEnum\n value: AssetNativeDenomEnum\n isDisabled?: boolean\n }[]\n >([])\n\n const setStdFee = (props: { feeDenom: AssetNativeDenomEnum }): void => {\n const stdFee = gasFeeList.find((x) => x.denom === props.feeDenom)?.fee\n const value = stdFee?.amount\n .toArray()\n .find((x) => x.denom === feeDenom)\n ?.amount.toString()\n\n setGasFee(UTIL.toBignumber(value))\n setFee(stdFee)\n }\n\n const getDefaultOptionList = (): {\n label: AssetSymbolEnum\n value: AssetNativeDenomEnum\n isDisabled: boolean\n }[] => {\n return _.map(gasFeeList, ({ denom, fee }) => {\n let isDisabled = true\n if (fee) {\n const ownedAmount = UTIL.toBignumber(\n assetList.find((x) => x.terraToken === denom)?.balance\n )\n\n const feeAmount = UTIL.toBignumber(\n fee.amount.toArray()[0].amount.toString()\n )\n\n isDisabled = ownedAmount.isLessThan(feeAmount)\n }\n\n return {\n label: ASSET.symbolOfDenom[denom],\n value: denom,\n isDisabled,\n }\n })\n }\n\n useEffect(() => {\n setStdFee({ feeDenom })\n }, [feeDenom])\n\n // disable feeDenom what has no balance\n useEffect(() => {\n if (assetList.length > 0) {\n const defaultOptionList = getDefaultOptionList()\n\n setOptionList(defaultOptionList)\n\n const selected = defaultOptionList.find((x) => x.value === feeDenom)\n const selectable = defaultOptionList.find((x) => x.isDisabled === false)\n if (selected?.isDisabled && selectable) {\n setFeeDenom(selectable.value)\n setStdFee({ feeDenom: selectable.value })\n } else {\n setStdFee({ feeDenom })\n }\n }\n }, [gasFeeList])\n\n return (\n <>\n {isLoggedIn &&\n fromBlockChain === BlockChainType.terra &&\n validationResult.isValid && (\n \n \n\n \n {tax && (\n \n \n \n Tax\n \n \n \n \n {formatBalance(tax.amount.toString())} {asset?.symbol}\n \n \n \n )}\n\n \n \n \n GAS Fee\n \n \n \n \n {formatBalance(gasFee)}\n \n {\n setFeeDenom(value)\n }}\n containerStyle={{\n width: 52,\n height: 26,\n borderRadius: 3,\n padding: '6px 5px 5px 8px',\n }}\n selectedTextStyle={{\n fontSize: 12,\n fontWeight: 'normal',\n letterSpacing: -0.19,\n }}\n menuContainerStyle={{\n borderRadius: 3,\n }}\n />\n \n \n \n \n \n\n {NETWORK.isEtherBaseBlockChain(toBlockChain) && (\n <>\n \n \n \n Shuttle fee (estimated)\n \n \n \n \n {`${formatBalance(shuttleFee)} ${asset?.symbol}`}\n \n \n \n \n \n \n Amount after Shuttle fee (estimated){' '}\n \n \n \n \n {`${formatBalance(amountAfterShuttleFee)} ${\n asset?.symbol\n }`}\n \n \n \n \n )}\n \n \n )}\n \n )\n}\n\nexport default FormFeeInfo\n","import { ReactElement, useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilValue } from 'recoil'\n\nimport cautionPng from 'images/caution.png'\n\nimport { BlockChainType } from 'types/network'\n\nimport SendStore from 'store/SendStore'\n\nimport { Text } from 'components'\n\nimport FormImage from 'components/FormImage'\n\nconst StyledWarningInfo = styled.div`\n display: flex;\n border-radius: 4px;\n padding: 16px 20px;\n margin-bottom: 40px;\n background-color: #eda24d26;\n white-space: pre-wrap;\n font-size: 12px;\n`\n\nconst StyledWarningInfoText = styled(Text)`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: normal;\n color: #cccccc;\n`\n\nconst WarningInfo = (): ReactElement => {\n const toBlockChain = useRecoilValue(SendStore.toBlockChain)\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n const [infoText, setInfoText] = useState('')\n\n useEffect(() => {\n if (\n BlockChainType.terra === fromBlockChain &&\n fromBlockChain === toBlockChain\n ) {\n setInfoText(\n 'For Terra to Terra transfers, if the Terra address at the receiving end is an exchange address, the transaction will require a “memo”'\n )\n } else if (fromBlockChain !== toBlockChain) {\n setInfoText(\"Don't use exchange addresses for cross-chain transfers\")\n }\n\n return (): void => {\n setInfoText('')\n }\n }, [toBlockChain, fromBlockChain])\n\n return infoText ? (\n \n
\n \n
\n {infoText}\n
\n ) : (\n <>\n )\n}\n\nexport default WarningInfo\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAqCAMAAADCkShIAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABCUExURUdwTO6kTe6jTe+kTvCoUO6kTf+rV/WkUu6jTe2kTfCmT++mUO2kTu2jTf///++tYPTHk/K7fO2mUv348vfYs/vs2vrhUUQAAAANdFJOUwCMeWQn8QsYrt5SPcfkebfJAAABAUlEQVRIx92VRxaDMAwFAZuOZOr9rxoHiItcENv87PI02JImpCj+N237qrzpALrmBaDrNcGvH+DMwL5QfwE991Il3Cl59RJMJAuYLDBx6gU4EYyN1S5Qt7wV2DwuYwSSkbcCmz4PVFfVqo5jvokqu4JfxxsiqrtvyehY6Xqcn/seIAakJbQd+0BSQiMdAVISOtIRICHhlAamJ+koEJPQky4AIhL60n0Xt2QlJNItG+55CYl0q/5kJazgMVVUOnOCWugRnoQdfdyOeFCii0hngnRKnoThzywcqydhGXY4Ix2rI6GMzWRVsW9l6oD8aF8AZfxVlM7th+h55bVw/gI5OUs/hXgwTgvYLmEAAAAASUVORK5CYII=\"","import { ReactElement, useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'\nimport _ from 'lodash'\nimport { useDebouncedCallback } from 'use-debounce'\nimport BigNumber from 'bignumber.js'\nimport { ArrowClockwise } from 'react-bootstrap-icons'\n\nimport { ASSET, COLOR, NETWORK } from 'consts'\n\nimport { BlockChainType } from 'types/network'\nimport { ValidateItemResultType } from 'types/send'\nimport { AssetNativeDenomEnum } from 'types/asset'\n\nimport { Text, Row } from 'components'\nimport FormLabel from 'components/FormLabel'\nimport FormErrorMessage from 'components/FormErrorMessage'\nimport FormLabelInput from 'components/FormLabelInput'\n\nimport useSend from 'hooks/useSend'\nimport useShuttle from 'hooks/useShuttle'\nimport useSendValidate from 'hooks/useSendValidate'\nimport useAsset from 'hooks/useAsset'\n\nimport AuthStore from 'store/AuthStore'\nimport SendStore from 'store/SendStore'\n\nimport AssetList from './AssetList'\nimport CopyTokenAddress from './CopyTokenAddress'\nimport FormFeeInfo from './FormFeeInfo'\nimport WarningInfo from './WarningInfo'\n\nconst StyledContainer = styled.div``\n\nconst StyledFormSection = styled.div`\n margin-bottom: 40px;\n`\n\nconst StyledMaxButton = styled.div`\n position: absolute;\n top: 50%;\n margin-top: -13px;\n right: 0;\n background-color: ${COLOR.darkGray2};\n font-size: 12px;\n border-radius: 5px;\n padding: 0 10px;\n line-height: 24px;\n height: 26px;\n\n cursor: pointer;\n :hover {\n background-color: #323842;\n }\n`\n\nconst StyledRefreshButton = styled.div<{ refreshing: boolean }>`\n display: flex;\n align-items: center;\n color: ${COLOR.primary};\n font-size: 12px;\n font-weight: bold;\n opacity: ${({ refreshing }): number => (refreshing ? 0.5 : 1)};\n cursor: ${({ refreshing }): string => (refreshing ? 'default' : 'pointer')};\n user-select: none;\n`\n\nconst RefreshButton = (): ReactElement => {\n const isLoggedIn = useRecoilValue(AuthStore.isLoggedIn)\n const { getAssetList } = useAsset()\n const [refreshing, setRefreshing] = useState(false)\n const dbcRefresh = useDebouncedCallback(() => {\n setRefreshing(true)\n getAssetList().finally((): void => {\n setTimeout(() => {\n setRefreshing(false)\n }, 500)\n })\n }, 300)\n\n return (\n <>\n {isLoggedIn && (\n {\n dbcRefresh.callback()\n }}\n refreshing={refreshing}\n >\n \n \n {refreshing ? 'REFRESHING...' : 'REFRESH'}\n \n \n )}\n \n )\n}\n\nconst SendForm = ({\n feeValidationResult,\n}: {\n feeValidationResult: ValidateItemResultType\n}): ReactElement => {\n const loginUser = useRecoilValue(AuthStore.loginUser)\n const isLoggedIn = useRecoilValue(AuthStore.isLoggedIn)\n\n // Send Data\n const asset = useRecoilValue(SendStore.asset)\n const [toAddress, setToAddress] = useRecoilState(SendStore.toAddress)\n const [amount, setAmount] = useRecoilState(SendStore.amount)\n const [memo, setMemo] = useRecoilState(SendStore.memo)\n const toBlockChain = useRecoilValue(SendStore.toBlockChain)\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n\n // Computed data from Send data\n const setTax = useSetRecoilState(SendStore.tax)\n const setGasFeeList = useSetRecoilState(SendStore.gasFeeList)\n const feeDenom = useRecoilValue(SendStore.feeDenom)\n const setShuttleFee = useSetRecoilState(SendStore.shuttleFee)\n const setAmountAfterShuttleFee = useSetRecoilState(\n SendStore.amountAfterShuttleFee\n )\n\n const [validationResult, setValidationResult] = useRecoilState(\n SendStore.validationResult\n )\n\n const [inputAmount, setInputAmount] = useState('')\n\n const { getTerraShuttleFee } = useShuttle()\n const { formatBalance, getAssetList } = useAsset()\n const { getTerraFeeList, getTerraSendTax } = useSend()\n const { validateSendData } = useSendValidate()\n\n const onChangeToAddress = ({ value }: { value: string }): void => {\n setToAddress(value)\n }\n\n const onChangeAmount = ({ value }: { value: string }): void => {\n if (_.isEmpty(value)) {\n setInputAmount('')\n setAmount('')\n return\n }\n\n if (false === _.isNaN(_.toNumber(value))) {\n setInputAmount(value)\n const decimalSize = new BigNumber(\n fromBlockChain === 'terra'\n ? ASSET.TERRA_DECIMAL\n : ASSET.ETHER_BASE_DECIMAL\n )\n setAmount(new BigNumber(value).times(decimalSize).toString(10))\n }\n }\n\n const onChangeMemo = ({ value }: { value: string }): void => {\n setMemo(value)\n }\n\n const onClickMaxButton = async (): Promise => {\n const assetAmount = new BigNumber(asset?.balance || 0)\n const terraTax = await getTerraSendTax({\n denom: asset?.terraToken as AssetNativeDenomEnum,\n feeDenom,\n amount: assetAmount.toString(10),\n })\n const taxAmount = new BigNumber(terraTax?.amount.toString() || 0)\n\n onChangeAmount({ value: formatBalance(assetAmount.minus(taxAmount)) })\n }\n\n const setTerraShuttleFee = async (): Promise => {\n // get terra shutte Fee Info\n if (NETWORK.isEtherBaseBlockChain(toBlockChain)) {\n const sendAmount = new BigNumber(amount)\n if (sendAmount.isGreaterThan(0)) {\n getTerraShuttleFee({\n denom: asset?.terraToken || '',\n amount: sendAmount,\n }).then((shuttleFee) => {\n setShuttleFee(shuttleFee)\n const computedAmount = sendAmount.minus(shuttleFee)\n setAmountAfterShuttleFee(\n computedAmount.isGreaterThan(0) ? computedAmount : new BigNumber(0)\n )\n })\n } else {\n setShuttleFee(new BigNumber(0))\n }\n }\n }\n\n // It's for Fee(gas), Tax and ShuttleFee\n const dbcGetFeeInfoWithValidation = useDebouncedCallback(async () => {\n const sendDataResult = validateSendData()\n setValidationResult(sendDataResult)\n\n const ableToGetFeeInfo =\n isLoggedIn &&\n fromBlockChain === BlockChainType.terra &&\n amount &&\n feeDenom &&\n toAddress\n\n if (asset?.terraToken && ableToGetFeeInfo) {\n if (sendDataResult.isValid) {\n // get terra Send Fee Info\n const terraFeeList = await getTerraFeeList()\n setGasFeeList(terraFeeList)\n }\n\n const terraTax = await getTerraSendTax({\n denom: asset?.terraToken as AssetNativeDenomEnum,\n feeDenom,\n amount,\n })\n setTax(terraTax)\n\n setTerraShuttleFee()\n }\n }, 300)\n\n //get terra send fee info\n useEffect(() => {\n dbcGetFeeInfoWithValidation.callback()\n return (): void => {\n dbcGetFeeInfoWithValidation.cancel()\n }\n }, [amount, toAddress, toBlockChain, memo, asset])\n\n useEffect(() => {\n onChangeAmount({ value: inputAmount })\n getAssetList().then((): void => {\n dbcGetFeeInfoWithValidation.callback()\n })\n }, [\n // to check decimal length by network\n loginUser,\n // to check if asset valid by network\n toBlockChain,\n ])\n\n return (\n \n \n \n \n \n \n\n \n \n \n \n\n \n
\n {\n onChangeAmount({ value })\n },\n }}\n labelProps={{ children: 'Amount' }}\n />\n Max\n
\n\n {isLoggedIn && (\n \n )}\n
\n\n \n {\n onChangeToAddress({ value })\n },\n }}\n labelProps={{ children: 'Destination Address' }}\n />\n \n \n\n {fromBlockChain === BlockChainType.terra &&\n toBlockChain === BlockChainType.terra && (\n \n {\n onChangeMemo({ value })\n },\n }}\n labelProps={{ children: 'Memo (optional)' }}\n />\n \n \n )}\n\n {/* only if from terra */}\n \n \n
\n )\n}\n\nexport default SendForm\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilValue } from 'recoil'\nimport { BoxArrowUpRight } from 'react-bootstrap-icons'\n\nimport { ASSET, UTIL, COLOR, NETWORK } from 'consts'\n\nimport { ExtLink, Text } from 'components'\nimport FormImage from 'components/FormImage'\n\nimport SendStore from 'store/SendStore'\n\nimport useAsset from 'hooks/useAsset'\n\nimport { BlockChainType } from 'types/network'\nimport { AssetNativeDenomEnum } from 'types/asset'\nimport SendProcessStore from 'store/SendProcessStore'\nimport useNetwork from 'hooks/useNetwork'\n\nconst StyledContainer = styled.div`\n padding-top: 20px;\n`\n\nconst StyledSection = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 0;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n word-break: break-all;\n`\n\nconst StyledSecH = styled.div`\n display: inline-block;\n color: ${COLOR.white};\n white-space: nowrap;\n opacity: 0.6;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.25;\n letter-spacing: -0.28px;\n`\n\nconst StyledSecD = styled.div`\n display: flex;\n align-items: center;\n text-align: right;\n padding-left: 10px;\n`\n\nconst StyledSecDText = styled(Text)<{ isError?: boolean }>`\n color: ${(props): string => (props.isError ? COLOR.red : COLOR.text)};\n font-size: 16px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: -0.37px;\n`\n\nconst StyledSecDText2 = styled(Text)`\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.19px;\n text-align: right;\n`\n\nconst StyledSpaceBetween = styled.div`\n width: 100%;\n justify-content: space-between;\n display: flex;\n align-items: center;\n`\n\nconst Confirm = (): ReactElement => {\n const { formatBalance } = useAsset()\n\n // Send Data\n const asset = useRecoilValue(SendStore.asset)\n const toAddress = useRecoilValue(SendStore.toAddress)\n const amount = useRecoilValue(SendStore.amount)\n const memo = useRecoilValue(SendStore.memo)\n const toBlockChain = useRecoilValue(SendStore.toBlockChain)\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n\n // Computed data from Send data\n const gasFee = useRecoilValue(SendStore.gasFee)\n const tax = useRecoilValue(SendStore.tax)\n const feeDenom = useRecoilValue(SendStore.feeDenom)\n const shuttleFee = useRecoilValue(SendStore.shuttleFee)\n const amountAfterShuttleFee = useRecoilValue(SendStore.amountAfterShuttleFee)\n\n const requestTxResult = useRecoilValue(SendProcessStore.requestTxResult)\n\n const { getScannerLink } = useNetwork()\n\n return (\n \n \n Asset\n \n \n {asset?.symbol}\n \n \n\n {fromBlockChain === BlockChainType.terra &&\n toBlockChain === BlockChainType.terra && (\n \n Memo\n \n {memo}\n \n \n )}\n \n Destination Address\n \n {UTIL.truncate(toAddress, [10, 10])}\n \n \n\n {fromBlockChain === BlockChainType.terra && (\n \n {tax && (\n \n Tax\n \n \n {formatBalance(tax.amount.toString())} {asset?.symbol}\n \n \n \n )}\n \n GAS Fee\n \n \n {`${formatBalance(gasFee)} ${ASSET.symbolOfDenom[feeDenom]}`}\n \n \n \n\n {shuttleFee && NETWORK.isEtherBaseBlockChain(toBlockChain) && (\n \n Shuttle fee (estimated)\n \n \n {`${formatBalance(shuttleFee)} ${asset?.symbol}`}\n \n \n \n )}\n \n )}\n\n \n {fromBlockChain === BlockChainType.terra &&\n NETWORK.isEtherBaseBlockChain(toBlockChain) ? (\n \n After Shuttle Fee (estimated)\n \n \n {`${formatBalance(amountAfterShuttleFee)} ${asset?.symbol}`}\n \n \n \n ) : (\n \n Receive amount\n \n {`${formatBalance(amount)} ${\n asset?.symbol\n }`}\n \n \n )}\n \n\n {requestTxResult?.success && (\n \n TX\n \n \n {\n \n
{UTIL.truncate(requestTxResult.hash, [15, 15])}
\n \n \n }\n
\n
\n
\n )}\n
\n )\n}\n\nexport default Confirm\n","import { ReactElement, useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'\nimport _ from 'lodash'\nimport { BoxArrowUpRight } from 'react-bootstrap-icons'\n\nimport { UTIL, NETWORK, COLOR } from 'consts'\n\nimport { ExtLink, Text } from 'components'\n\nimport SendStore from 'store/SendStore'\n\nimport useAsset from 'hooks/useAsset'\n\nimport SendProcessStore from 'store/SendProcessStore'\nimport useNetwork from 'hooks/useNetwork'\nimport AuthStore from 'store/AuthStore'\nimport FormImage from 'components/FormImage'\nimport { BlockChainType } from 'types/network'\n\nconst StyledContainer = styled.div`\n padding-top: 20px;\n padding-bottom: 40px;\n`\n\nconst StyledSection = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding: 16px 0;\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n word-break: break-all;\n`\n\nconst StyledSecH = styled.div`\n display: inline-block;\n color: ${COLOR.white};\n white-space: nowrap;\n opacity: 0.6;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.25;\n letter-spacing: -0.19px;\n`\n\nconst StyledSecD = styled.div`\n display: inline-block;\n text-align: right;\n padding-left: 10px;\n`\n\nconst StyledSecDText = styled(Text)<{ isError?: boolean }>`\n color: ${(props): string => (props.isError ? COLOR.red : COLOR.text)};\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.19px;\n text-align: right;\n`\n\nconst StyledInfoText = styled(Text)`\n white-space: pre-wrap;\n text-align: center;\n display: block;\n margin-bottom: 46px;\n font-size: 12px;\n color: ${COLOR.skyGray};\n`\n\nconst StyledAmountText = styled(Text)<{ isError?: boolean }>`\n color: ${(props): string => (props.isError ? COLOR.red : COLOR.text)};\n`\nconst Finish = (): ReactElement => {\n const { formatBalance } = useAsset()\n const loginUser = useRecoilValue(AuthStore.loginUser)\n\n // Send Data\n const asset = useRecoilValue(SendStore.asset)\n const [toAddress, setToAddress] = useRecoilState(SendStore.toAddress)\n const [amount, setAmount] = useRecoilState(SendStore.amount)\n const setMemo = useSetRecoilState(SendStore.memo)\n const toBlockChain = useRecoilValue(SendStore.toBlockChain)\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n\n const [requestTxResult, setRequestTxResult] = useRecoilState(\n SendProcessStore.requestTxResult\n )\n const [waitForReceiptError, setWaitForReceiptError] = useRecoilState(\n SendProcessStore.waitForReceiptError\n )\n const amountAfterShuttleFee = useRecoilValue(SendStore.amountAfterShuttleFee)\n\n const { getScannerLink } = useNetwork()\n\n const [displayAmount] = useState(amount)\n const [displayToAddress] = useState(toAddress)\n const [displayRequestTxResult] = useState(requestTxResult)\n const [displayErrorMessage] = useState(waitForReceiptError)\n\n useEffect(() => {\n setToAddress('')\n setAmount('')\n setMemo('')\n setRequestTxResult({ success: false })\n setWaitForReceiptError('')\n }, [])\n\n return (\n \n {_.some(displayErrorMessage) ? (\n \n {displayErrorMessage}\n \n ) : (\n \n {`Transferring ${asset?.symbol} from ${NETWORK.blockChainName[fromBlockChain]} Network to ${NETWORK.blockChainName[toBlockChain]} Network.\\nTransaction will be submitted via ${loginUser.walletType}`}\n \n )}\n\n \n \n \n \n {formatBalance(displayAmount)} {asset?.symbol}\n \n \n {fromBlockChain === BlockChainType.terra &&\n NETWORK.isEtherBaseBlockChain(toBlockChain) && (\n \n \n {`After Shuttle Fee : (estimated) ${formatBalance(\n amountAfterShuttleFee\n )} ${asset?.symbol}`}\n \n \n )}\n \n \n Destination Address\n \n \n {UTIL.truncate(displayToAddress, [10, 10])}\n \n \n \n\n {displayRequestTxResult?.success && (\n \n TX\n \n \n {\n \n
\n {UTIL.truncate(displayRequestTxResult.hash, [10, 10])}\n
\n \n \n }\n
\n
\n
\n )}\n
\n )\n}\n\nexport default Finish\n","import { ReactElement } from 'react'\nimport { Switch, Route } from 'react-router-dom'\n\nimport SendPage from 'pages/Send'\n\nexport enum PathEnum {\n default = '',\n sendComplete = 'sendComplete',\n}\n\nconst SwitchPages = (): ReactElement => {\n return (\n \n \n \n \n \n )\n}\nexport default SwitchPages\n","import { useSetRecoilState } from 'recoil'\n\nimport SelectWalletStore, {\n SelectWalletModalType,\n} from 'store/SelectWalletStore'\n\nconst useSelectWallet = (): {\n open: () => void\n closeModal: () => void\n} => {\n const setIsVisibleModalType = useSetRecoilState(\n SelectWalletStore.isVisibleModalType\n )\n\n const open = async (): Promise => {\n setIsVisibleModalType(SelectWalletModalType.selectWallet)\n }\n\n const closeModal = (): void => {\n setIsVisibleModalType(undefined)\n }\n\n return {\n open,\n closeModal,\n }\n}\n\nexport default useSelectWallet\n","import useMantle from './useMantle'\n\ninterface FeeAmount {\n Amount: string\n Denom: string\n}\ninterface TxLog {\n Events: TxEvent[]\n}\ninterface TxEvent {\n Attributes: Attribute[]\n Type: string\n}\ninterface Attribute {\n Key: string\n Value: string\n}\ninterface TxInfo {\n Success: boolean\n RawLog: string\n TxHash: string\n Tx: {\n Fee: { Amount: FeeAmount[] }\n Memo: string\n }\n Logs: TxLog[]\n}\n\nconst useTerraTxInfo = (): {\n getTxInfos: ({ hash }: { hash: string }) => Promise\n} => {\n const txInfosQuery = `\nquery($hash: String) {\n TxInfos(TxHash: $hash) {\n Height\n TxHash\n Success\n RawLog\n Tx {\n Fee {\n Amount {\n Amount\n Denom\n }\n }\n Memo\n }\n Logs {\n Events {\n Type\n Attributes {\n Key\n Value\n }\n }\n }\n }\n}\n`\n const { fetchQuery } = useMantle()\n\n const getTxInfos = async ({ hash }: { hash: string }): Promise => {\n const fetchResult: { TxInfos: TxInfo[] } = await fetchQuery({\n query: txInfosQuery,\n variables: JSON.stringify({ hash }),\n })\n if (fetchResult && fetchResult.TxInfos) {\n return fetchResult.TxInfos\n }\n return []\n }\n\n return {\n getTxInfos,\n }\n}\n\nexport default useTerraTxInfo\n","import { ReactElement, useState } from 'react'\nimport { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'\nimport _ from 'lodash'\nimport { CircularProgress } from '@material-ui/core'\n\nimport { COLOR } from 'consts'\nimport { BlockChainType } from 'types/network'\nimport { RequestTxResultType } from 'types/send'\n\nimport { Button } from 'components'\nimport SendStore from 'store/SendStore'\nimport SendProcessStore, { ProcessStatus } from 'store/SendProcessStore'\nimport FormErrorMessage from 'components/FormErrorMessage'\nimport useSend from 'hooks/useSend'\nimport useTerraTxInfo from 'hooks/useTerraTxInfo'\n\nconst SubmitButton = (): ReactElement => {\n const [status, setStatus] = useRecoilState(SendProcessStore.sendProcessStatus)\n\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n const setRequestTxResult = useSetRecoilState(SendProcessStore.requestTxResult)\n const setWaitForReceiptError = useSetRecoilState(\n SendProcessStore.waitForReceiptError\n )\n\n const [errorMessage, setErrorMessage] = useState('')\n\n const { submitRequestTx, waitForEtherBaseTransaction } = useSend()\n const { getTxInfos } = useTerraTxInfo()\n\n const loading = [ProcessStatus.Pending, ProcessStatus.Submit].includes(status)\n\n const waitForReceipt = async ({\n submitResult,\n }: {\n submitResult: RequestTxResultType\n }): Promise => {\n if (submitResult.success) {\n setStatus(ProcessStatus.Pending)\n if (fromBlockChain === BlockChainType.terra) {\n const waitReceipt = setInterval(async () => {\n try {\n const txInfos = await getTxInfos({\n hash: submitResult.hash,\n })\n if (_.some(txInfos)) {\n setStatus(ProcessStatus.Done)\n clearInterval(waitReceipt)\n }\n } catch (error) {\n setWaitForReceiptError(_.toString(error))\n setStatus(ProcessStatus.Failed)\n }\n }, 500)\n } else {\n try {\n await waitForEtherBaseTransaction({\n hash: submitResult.hash,\n })\n setStatus(ProcessStatus.Done)\n } catch (error) {\n setWaitForReceiptError(_.toString(error))\n setStatus(ProcessStatus.Failed)\n }\n }\n } else {\n setErrorMessage(submitResult.errorMessage || '')\n }\n }\n\n const onClickSubmitButton = async (): Promise => {\n setErrorMessage('')\n setStatus(ProcessStatus.Submit)\n\n const submitResult = await submitRequestTx()\n\n setRequestTxResult(submitResult)\n\n setStatus(ProcessStatus.Confirm)\n return waitForReceipt({ submitResult })\n }\n\n const IfLoadingText = (): ReactElement => {\n return loading ? (\n \n ) : (\n <>Confirm\n )\n }\n\n return (\n <>\n \n \n \n )\n}\n\nexport default SubmitButton\n","import { ReactElement, useState } from 'react'\nimport { useRecoilValue, useSetRecoilState } from 'recoil'\nimport { Lock } from 'react-bootstrap-icons'\nimport { CircularProgress } from '@material-ui/core'\n\nimport { COLOR } from 'consts'\n\nimport { BlockChainType } from 'types/network'\nimport { RequestTxResultType, ValidateItemResultType } from 'types/send'\nimport useSend from 'hooks/useSend'\n\nimport { Button, Row } from 'components'\n\nimport SendStore from 'store/SendStore'\nimport SendProcessStore, { ProcessStatus } from 'store/SendProcessStore'\nimport FormErrorMessage from 'components/FormErrorMessage'\n\nconst NextOrApproveButton = ({\n feeValidationResult,\n}: {\n feeValidationResult: ValidateItemResultType\n}): ReactElement => {\n const setStatus = useSetRecoilState(SendProcessStore.sendProcessStatus)\n\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n const validationResult = useRecoilValue(SendStore.validationResult)\n const amount = useRecoilValue(SendStore.amount)\n\n const [waitingForApprove, setWaitingForApprove] = useState(false)\n const [approveResult, setApproveResult] = useState()\n const { allowanceOfSelectedAsset, approveTxFromEtherBase } = useSend()\n\n const ableButton =\n fromBlockChain === BlockChainType.terra\n ? validationResult.isValid && feeValidationResult.isValid\n : validationResult.isValid\n\n const onClickApproveTxFromEtherBase = async (): Promise => {\n setWaitingForApprove(true)\n setApproveResult(undefined)\n const res = await approveTxFromEtherBase()\n setApproveResult(res)\n setWaitingForApprove(false)\n }\n\n const onClickSendNextButton = async (): Promise => {\n setStatus(ProcessStatus.Confirm)\n }\n\n if (\n allowanceOfSelectedAsset.isNeedApprove &&\n allowanceOfSelectedAsset.allowance.isLessThan(amount)\n ) {\n return (\n <>\n \n {waitingForApprove ? (\n \n ) : (\n \n Unlock token to send\n \n )}\n \n {false === approveResult?.success && (\n \n )}\n \n )\n }\n\n return (\n \n )\n}\n\nexport default NextOrApproveButton\n","import { ReactElement } from 'react'\nimport { useRecoilValue } from 'recoil'\n\nimport { ValidateItemResultType } from 'types/send'\n\nimport { Button } from 'components'\nimport useSelectWallet from 'hooks/useSelectWallet'\n\nimport AuthStore from 'store/AuthStore'\nimport SendProcessStore, { ProcessStatus } from 'store/SendProcessStore'\n\nimport SubmitButton from './SubmitButton'\nimport NextOrApproveButton from './NextOrApproveButton'\n\nconst SendFormButton = ({\n feeValidationResult,\n}: {\n feeValidationResult: ValidateItemResultType\n}): ReactElement => {\n const selectWallet = useSelectWallet()\n const isLoggedIn = useRecoilValue(AuthStore.isLoggedIn)\n const status = useRecoilValue(SendProcessStore.sendProcessStatus)\n\n if (isLoggedIn) {\n return status === ProcessStatus.Input ? (\n \n ) : (\n \n )\n }\n\n return \n}\n\nexport default SendFormButton\n","export default __webpack_public_path__ + \"static/media/electric.a10e8745.gif\";","import { useRecoilState, useSetRecoilState } from 'recoil'\nimport { Network } from '@ethersproject/networks'\nimport _ from 'lodash'\n\nimport { NETWORK } from 'consts'\n\nimport SendStore from 'store/SendStore'\nimport AuthStore, { initLoginUser } from 'store/AuthStore'\nimport NetworkStore from 'store/NetworkStore'\n\nimport terraService from 'services/terraService'\n\nimport { User } from 'types/auth'\nimport { BlockChainType, LocalTerraNetwork } from 'types/network'\nimport { WalletEnum } from 'types/wallet'\nimport SendProcessStore, { ProcessStatus } from 'store/SendProcessStore'\nimport useTerraNetwork from './useTerraNetwork'\n\nconst useAuth = (): {\n login: ({ user }: { user: User }) => Promise\n logout: () => void\n getLoginStorage: () => {\n lastFromBlockChain?: BlockChainType\n lastWalletType?: WalletEnum\n }\n setLoginStorage: (props?: {\n blockChain: BlockChainType\n walletType: WalletEnum\n }) => void\n} => {\n const { getTerraNetworkByName, getTerraNetworkByWalletconnectID } =\n useTerraNetwork()\n\n const setLoginUser = useSetRecoilState(AuthStore.loginUser)\n const setEtherBaseExt = useSetRecoilState(NetworkStore.etherBaseExt)\n const setTerraExt = useSetRecoilState(NetworkStore.terraExt)\n const setTerraLocal = useSetRecoilState(NetworkStore.terraLocal)\n const setIsVisibleNotSupportNetworkModal = useSetRecoilState(\n NetworkStore.isVisibleNotSupportNetworkModal\n )\n const setTriedNotSupportNetwork = useSetRecoilState(\n NetworkStore.triedNotSupportNetwork\n )\n\n const [fromBlockChain, setFromBlockChain] = useRecoilState(\n SendStore.fromBlockChain\n )\n const setStatus = useSetRecoilState(SendProcessStore.sendProcessStatus)\n\n const checkIsValidEtherNetwork = ({\n network,\n }: {\n network?: Network\n }): boolean => {\n if (network) {\n const { ETH_CHAINID } = NETWORK\n return [\n ETH_CHAINID.ETH_MAIN,\n ETH_CHAINID.ETH_ROPSTEN,\n ETH_CHAINID.BSC_MAIN,\n ETH_CHAINID.BSC_TEST,\n ETH_CHAINID.HMY_MAIN,\n ETH_CHAINID.HMY_TEST,\n ].includes(network.chainId)\n }\n\n return false\n }\n\n const login = async ({ user }: { user: User }): Promise => {\n if (fromBlockChain === BlockChainType.terra) {\n let localNetwork: LocalTerraNetwork | undefined\n let name = ''\n let chainId: string | number = ''\n if (user.walletType === WalletEnum.TerraWalletConnect) {\n const walletConneceId = user.terraWalletConnect?.chainId\n chainId = walletConneceId || ''\n localNetwork = _.isNumber(walletConneceId)\n ? getTerraNetworkByWalletconnectID(walletConneceId)\n : undefined\n setTerraExt(localNetwork)\n } else {\n const extNet = await terraService.info()\n name = extNet.name\n chainId = extNet.chainID\n setTerraExt(extNet)\n localNetwork = getTerraNetworkByName(extNet.name)\n }\n\n if (!localNetwork) {\n setIsVisibleNotSupportNetworkModal(true)\n setTriedNotSupportNetwork({\n blockChain: BlockChainType.terra,\n name,\n chainId,\n })\n return\n }\n\n setTerraLocal(localNetwork)\n setLoginStorage({\n blockChain: BlockChainType.terra,\n walletType: user.walletType,\n })\n }\n // ethereum, bsc, hmy are ethereum base blockchain\n else {\n const network = await user.provider?.getNetwork()\n const isValidEtherNetwork = checkIsValidEtherNetwork({ network })\n if (network && isValidEtherNetwork) {\n const { ETH_CHAINID } = NETWORK\n\n let reSelectFromBlockChain = BlockChainType.bsc\n if (\n [ETH_CHAINID.ETH_MAIN, ETH_CHAINID.ETH_ROPSTEN].includes(\n network.chainId\n )\n ) {\n reSelectFromBlockChain = BlockChainType.ethereum\n } else if (\n [ETH_CHAINID.HMY_MAIN, ETH_CHAINID.HMY_TEST].includes(network.chainId)\n ) {\n reSelectFromBlockChain = BlockChainType.hmy\n }\n\n setFromBlockChain(reSelectFromBlockChain)\n setEtherBaseExt(network)\n\n setLoginStorage({\n blockChain: reSelectFromBlockChain,\n walletType: user.walletType,\n })\n } else {\n setIsVisibleNotSupportNetworkModal(true)\n network &&\n setTriedNotSupportNetwork({\n blockChain: BlockChainType.ethereum,\n name: network.name,\n chainId: network.chainId,\n })\n return\n }\n }\n // DON'T MOVE\n // set user have to be after set network info\n setLoginUser(user)\n }\n\n enum LocalStorageKey {\n lastFromBlockChain = 'lastFromBlockChain',\n lastWalletType = 'lastWalletType',\n }\n\n const setLoginStorage = (props?: {\n blockChain: BlockChainType\n walletType: WalletEnum\n }): void => {\n localStorage.setItem(\n LocalStorageKey.lastFromBlockChain,\n props?.blockChain || ''\n )\n localStorage.setItem(\n LocalStorageKey.lastWalletType,\n props?.walletType || ''\n )\n }\n\n const getLoginStorage = (): {\n lastFromBlockChain?: BlockChainType\n lastWalletType?: WalletEnum\n } => {\n return {\n lastFromBlockChain: localStorage.getItem(\n LocalStorageKey.lastFromBlockChain\n ) as BlockChainType,\n lastWalletType: localStorage.getItem(\n LocalStorageKey.lastWalletType\n ) as WalletEnum,\n }\n }\n\n const logout = (): void => {\n setLoginUser((user) => {\n user.terraWalletConnect?.killSession()\n return initLoginUser\n })\n setStatus(ProcessStatus.Input)\n setEtherBaseExt(undefined)\n setTerraExt(undefined)\n setLoginStorage()\n }\n\n return { login, logout, getLoginStorage, setLoginStorage }\n}\n\nexport default useAuth\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\n\nimport { NETWORK } from 'consts'\n\nimport { BlockChainType } from 'types/network'\n\nimport { Text } from 'components'\nimport FormSelect from 'components/FormSelect'\nimport FormImage from 'components/FormImage'\nimport { useRecoilValue } from 'recoil'\nimport SendProcessStore, { ProcessStatus } from 'store/SendProcessStore'\n\nconst StyledContainer = styled.div`\n width: 128px;\n margin: auto;\n position: relative;\n`\n\nconst StyledCircle = styled.div`\n height: 128px;\n border-radius: 100px;\n border: 1px solid #4abcf0;\n box-shadow: 0 2px 4px 0 rgba(104, 99, 254, 0.3),\n 0 -1px 4px 0 rgba(119, 232, 255, 0.5);\n justify-content: center;\n align-items: flex-start;\n display: flex;\n`\n\nconst StyledLabel = styled(Text)`\n padding-top: 6px;\n font-size: 10px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: normal;\n color: #727e8b;\n justify-content: center;\n`\n\nconst StyledBlockChainLabel = styled(Text)`\n padding-top: 6px;\n font-size: 14px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: normal;\n color: #e9e9e9;\n justify-content: center;\n`\n\nconst SelectBlockChain = ({\n blockChain,\n setBlockChain,\n optionList,\n label,\n}: {\n blockChain: BlockChainType\n setBlockChain: (value: BlockChainType) => void\n optionList: {\n value: BlockChainType\n label: string\n isDisabled?: boolean\n }[]\n label: string\n}): ReactElement => {\n const status = useRecoilValue(SendProcessStore.sendProcessStatus)\n return (\n \n \n
\n \n
\n {status === ProcessStatus.Input ? (\n {label}\n ) : (\n \n {NETWORK.blockChainName[blockChain]}\n \n )}\n
\n
\n
\n\n {status === ProcessStatus.Input && (\n
\n {setBlockChain && (\n \n )}\n
\n )}\n
\n )\n}\n\nexport default SelectBlockChain\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilState } from 'recoil'\nimport electric from 'images/electric.gif'\n\nimport { NETWORK } from 'consts'\n\nimport { BlockChainType } from 'types/network'\n\nimport useAuth from 'hooks/useAuth'\n\nimport SendStore from 'store/SendStore'\n\nimport SelectBlockChain from '../../components/SelectBlockChain'\nimport FormImage from 'components/FormImage'\n\nconst StyledNetworkBox = styled.div`\n display: flex;\n align-items: center;\n padding: 0 50px;\n\n @media (max-width: 575px) {\n padding: 0;\n }\n`\n\nconst BlockChainNetwork = (): ReactElement => {\n const { logout } = useAuth()\n const [toBlockChain, setToBlockChain] = useRecoilState(SendStore.toBlockChain)\n\n const [fromBlockChain, setFromBlockChain] = useRecoilState(\n SendStore.fromBlockChain\n )\n\n return (\n \n {\n logout()\n setFromBlockChain(value)\n },\n optionList: [\n {\n label: NETWORK.blockChainName[BlockChainType.terra],\n value: BlockChainType.terra,\n isDisabled: fromBlockChain === BlockChainType.terra,\n },\n {\n label: NETWORK.blockChainName[BlockChainType.ethereum],\n value: BlockChainType.ethereum,\n isDisabled: fromBlockChain === BlockChainType.ethereum,\n },\n {\n label: NETWORK.blockChainName[BlockChainType.bsc],\n value: BlockChainType.bsc,\n isDisabled: fromBlockChain === BlockChainType.bsc,\n },\n {\n label: NETWORK.blockChainName[BlockChainType.hmy],\n value: BlockChainType.hmy,\n isDisabled: fromBlockChain === BlockChainType.hmy,\n },\n ],\n label: 'FROM',\n }}\n />\n\n \n\n \n \n )\n}\n\nexport default BlockChainNetwork\n","import { ReactElement } from 'react'\nimport { useSetRecoilState } from 'recoil'\n\nimport { Button } from 'components'\n\nimport SendProcessStore, { ProcessStatus } from 'store/SendProcessStore'\n\nconst FinishButton = (): ReactElement => {\n const setStatus = useSetRecoilState(SendProcessStore.sendProcessStatus)\n\n const onClickHomeButton = async (): Promise => {\n setStatus(ProcessStatus.Input)\n }\n\n return \n}\n\nexport default FinishButton\n","import { ReactElement, useCallback, useEffect, useRef, useState } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilState, useRecoilValue } from 'recoil'\nimport _ from 'lodash'\n\nimport loading from 'images/loading.gif'\nimport failed from 'images/failed.gif'\nimport complete from 'images/complete.gif'\n\nimport { COLOR, NETWORK, STYLE } from 'consts'\n\nimport SendProcessStore, { ProcessStatus } from 'store/SendProcessStore'\n\nimport useSendValidate from 'hooks/useSendValidate'\n\nimport { Container } from 'components'\nimport FormTitle from './FormTitle'\nimport SendForm from './SendForm'\nimport Confirm from './Confirm'\nimport Finish from './Finish'\nimport SendFormButton from './SendFormButton'\nimport BlockChainNetwork from './BlockChainNetwork'\nimport FormImage from 'components/FormImage'\nimport FinishButton from './FinishButton'\nimport AuthStore from 'store/AuthStore'\nimport useAuth from 'hooks/useAuth'\nimport SendStore from 'store/SendStore'\nimport useSelectWallet from 'hooks/useSelectWallet'\nimport { BlockChainType } from 'types/network'\n\nconst StyledProcessCircle = styled.div`\n height: 128px;\n width: 128px;\n margin: auto;\n border-radius: 100px;\n border: 1px solid #4abcf0;\n box-shadow: 0 2px 4px 0 rgba(15, 15, 24, 0.3),\n 0 -1px 4px 0 rgba(119, 232, 255, 0.5);\n align-items: center;\n justify-content: center;\n`\n\nconst StyledContainer = styled(Container)`\n max-width: 640px;\n padding: 0;\n height: 100%;\n @media ${STYLE.media.mobile} {\n width: 100vw;\n overflow-x: hidden;\n }\n`\n\nconst StyledForm = styled.div`\n background-color: ${COLOR.black};\n padding: 60px;\n border-radius: 1em;\n @media ${STYLE.media.mobile} {\n border-radius: 0;\n padding: 38px 24px 20px;\n }\n`\n\nconst Send = (): ReactElement => {\n const formScrollView = useRef(null)\n\n const [status, setStatus] = useRecoilState(SendProcessStore.sendProcessStatus)\n const isLoggedIn = useRecoilValue(AuthStore.isLoggedIn)\n const { getLoginStorage } = useAuth()\n const [initPage, setInitPage] = useState(false)\n const [toBlockChain, setToBlockChain] = useRecoilState(SendStore.toBlockChain)\n const [fromBlockChain, setFromBlockChain] = useRecoilState(\n SendStore.fromBlockChain\n )\n\n const { validateFee } = useSendValidate()\n const feeValidationResult = validateFee()\n\n const renderProcessStatus = useCallback((): ReactElement => {\n switch (status) {\n case ProcessStatus.Done:\n return (\n \n \n \n )\n case ProcessStatus.Failed:\n return (\n \n \n \n )\n case ProcessStatus.Pending:\n return (\n \n \n \n )\n default:\n return (\n
\n \n
\n )\n }\n }, [status])\n\n const onClickGoBackToSendInputButton = async (): Promise => {\n setStatus(ProcessStatus.Input)\n }\n\n const selectWallet = useSelectWallet()\n\n useEffect(() => {\n setInitPage(true)\n const { lastFromBlockChain } = getLoginStorage()\n\n if (false === isLoggedIn && lastFromBlockChain) {\n // default network is terra\n if (lastFromBlockChain === BlockChainType.terra) {\n selectWallet.open()\n } else {\n setFromBlockChain(lastFromBlockChain)\n }\n }\n }, [])\n\n useEffect(() => {\n if (initPage) {\n if (false === isLoggedIn) {\n selectWallet.open()\n }\n\n if (\n NETWORK.isEtherBaseBlockChain(fromBlockChain) &&\n fromBlockChain !== toBlockChain\n ) {\n setToBlockChain(BlockChainType.terra)\n }\n }\n }, [fromBlockChain])\n\n useEffect(() => {\n const scroll = formScrollView.current\n if (scroll) {\n if (status === ProcessStatus.Input) {\n scroll.scrollTo({ left: 0, behavior: 'smooth' })\n } else if (status === ProcessStatus.Confirm) {\n scroll.scrollTo({ left: 600, behavior: 'smooth' })\n }\n }\n }, [status])\n\n return (\n \n \n {/* FormTitle */}\n \n\n {/* Select From, To Blockchain Network */}\n
{renderProcessStatus()}
\n\n {[ProcessStatus.Done, ProcessStatus.Failed].includes(status) ? (\n <>\n \n \n \n ) : (\n <>\n \n
\n \n
\n
\n \n
\n \n\n {[\n ProcessStatus.Input,\n ProcessStatus.Submit,\n ProcessStatus.Confirm,\n ].includes(status) && (\n \n )}\n \n )}\n
\n
\n )\n}\n\nexport default Send\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAilBMVEUAAAA7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfw7mfzyoBq5AAAALXRSTlMAaVv69kJ4TvTxNxyZiNHXVRQPBOLcrIFkpXVfKLnoxr6zko9uSzEtRSQLyjuzSKnRAAACdklEQVRo3u3W23KCMBCA4QCiURFQKXIQz1Vru+//em1n7Kx1ibukXvQi/63gNyQ7EOVyuVwul+v/Ngu9fb5OstUqS9b53gtnzwbSKAFSEqVPgy51E4ChoKkvTyCWkYaH6Wj5R+KYg6D8qOwblyCsHFsS80qDOF3NrTbjHTr1brE1dQ861qu7LlUEFkWdlmy2Aas2M7kxjcGyeCqe3AQM6XhbRlG5jTUYSsZC46X99l06vrko3SXQ1otIubQZq8lJkU6TFdBiCXIGUlLMDUNYJECSbMsb3DU8IEGZw/B+vZQkD36VT5lRzOG27E11VnSh2ApNDb4C7zkpQaeMzhaf/zMp0qmPiSFW4qn8HUEMiYKGUEFDXhqsZ53eqc16anEMmqsnd9xuzkrUR9N8KFHnzfaobhoNAYJUCQp7AL1Qtt4Aw9Ev4ztfsb1+GV/Kq3Q+UQk1gEwZBNeD40BmAOgQVwAV3kCFN77X9mpgNWfIlBrgRrkamPd4J7EgZd+wqGQAMsWHu/zHBpYpDbyCBlV4A7RakHsPjMEoB3LZQqkJ3Nc3fGFohSL1yUUTpUSKB4Y8gWH6oU8MVmH/iv60IIZIWVCDe8hrFTyswitNC88rfWDqMwbmcRvGK9Tw+AHaG7bLsPB7g8EoUetOGuYkMhi8smsz2pQdY2A+sFX8wOErx1Lx8KltDFR4AxXe4BVqyBT5Z5wa/IsZP82Wis8/NRq8whiocAavUIMq1gYeYLDA5w8weACyU4IB/9RoyBXOQIUYckVTg1e0yCAHfTzCMwd9PMLbKL2QX1tqyBU0OIUacgUNTiGGuGWZC+8c5eVSuVwul8vl+kd9ArZfnuxgt1IdAAAAAElFTkSuQmCC\"","export default __webpack_public_path__ + \"static/media/CoinbaseWallet.098d24ab.png\";","import { ComponentType, ReactElement, SVGAttributes } from 'react'\n\nimport { COLOR } from 'consts'\n\nimport TerraPng from 'images/Terra.png'\nimport BinancePng from 'images/BinanceChain.png'\nimport MetamaskPng from 'images/Metamask.png'\nimport WalletConnectPng from 'images/WalletConnect.png'\nimport CoinbaseWalletPng from 'images/CoinbaseWallet.png'\nimport { WalletEnum } from 'types/wallet'\nimport FormImage from './FormImage'\n\ninterface IconProps extends SVGAttributes {\n color?: string\n size?: string | number\n}\n\nconst walletLogo: Record> = {\n [WalletEnum.TerraExtension]: TerraPng,\n [WalletEnum.Binance]: BinancePng,\n [WalletEnum.MetaMask]: MetamaskPng,\n [WalletEnum.WalletConnect]: WalletConnectPng,\n [WalletEnum.TerraWalletConnect]: WalletConnectPng,\n [WalletEnum.CoinbaseWallet]: CoinbaseWalletPng,\n}\n\nconst WalletLogo = ({\n walleEnum,\n size = 24,\n style,\n}: {\n walleEnum: WalletEnum\n size?: number\n style?: React.CSSProperties\n}): ReactElement => {\n const Logo = walletLogo[walleEnum]\n\n return typeof Logo === 'string' ? (\n \n ) : (\n \n )\n}\n\nexport default WalletLogo\n","export default \"data:image/png;base64,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\"","import React, { ReactElement, useState } from 'react'\nimport styled, { keyframes } from 'styled-components'\nimport { useRecoilValue } from 'recoil'\nimport { isBrowser, isMobile } from 'react-device-detect'\nimport ClickAwayListener from 'react-click-away-listener'\n\nimport { COLOR, UTIL, STYLE } from 'consts'\n\nimport { Container, Text, View, Row } from 'components'\n\nimport useAuth from 'hooks/useAuth'\nimport useSelectWallet from 'hooks/useSelectWallet'\n\nimport AuthStore from 'store/AuthStore'\nimport NetworkStore from 'store/NetworkStore'\n\nimport bridgeLogo from 'images/bridge_logo.png'\nimport testnetLabel from 'images/testnet_label.png'\nimport WalletLogo from 'components/WalletLogo'\nimport FormImage from 'components/FormImage'\nimport SendStore from 'store/SendStore'\nimport { BlockChainType } from 'types'\n\nconst StyledContainer = styled(Container)`\n position: relative;\n`\nconst StyledNavContainer = styled(Container)`\n max-width: 640px;\n`\n\nconst StyledNav = styled(View)`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n padding-top: 47px;\n padding-bottom: 19px;\n @media ${STYLE.media.mobile} {\n padding: 20px 24px;\n }\n`\n\nconst StyledLogo = styled(Text)`\n font-size: 0;\n img {\n width: 120px;\n height: 30px;\n }\n @media ${STYLE.media.mobile} {\n img {\n width: 104px;\n height: 26px;\n }\n }\n`\n\nconst StyledAddress = styled(Text)`\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.19px;\n`\n\nconst StyledConnectWallet = styled(View)`\n border-radius: 30px;\n background-color: ${COLOR.primary};\n font-size: 13px;\n padding: 8px 16px;\n cursor: pointer;\n white-space: nowrap;\n :hover {\n opacity: 0.8;\n }\n`\nconst StyledLoginUserInfoBox = styled(Row)`\n align-items: center;\n border-radius: ${STYLE.css.borderRadius};\n border: solid 1px ${COLOR.terraSky};\n font-size: 12px;\n padding: 8px 12px;\n cursor: pointer;\n :hover {\n opacity: 0.8;\n }\n`\n\nconst StyledDropdown = styled(View)`\n position: relative;\n`\n\nconst dropdownKeyframes = keyframes`\n 0% {\n opacity: 0;\n margin-bottom: 0;\n }\n \n 100% {\n margin-bottom: -40px;\n opacity: 1;\n }\n`\n\nconst StyledDropdownMenu = styled(View)`\n position: absolute;\n cursor: pointer;\n bottom: 0;\n height: 40px;\n margin-bottom: -40px;\n justify-content: center;\n animation: ${dropdownKeyframes} 0.3s ease;\n background-color: #484848;\n border-radius: ${STYLE.css.borderRadius};\n width: 100%;\n padding: 0;\n text-align: center;\n :hover {\n opacity: 0.8;\n }\n a {\n display: block;\n color: ${COLOR.white};\n padding: 12px;\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.25px;\n border-radius: ${STYLE.css.borderRadius};\n text-decoration: none;\n :hover {\n color: ${COLOR.white};\n background-color: rgba(85, 146, 247, 0.1);\n }\n }\n`\n\nconst StyledConnectedText = styled(Text)`\n font-size: 12px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.19px;\n color: ${COLOR.terraSky};\n`\n\nconst StyledTestnetLabel = styled(View)`\n position: absolute;\n top: 0;\n right: 0;\n`\n\nconst LoginUserInfo = (): ReactElement => {\n const isTestnet = useRecoilValue(NetworkStore.isTestnet)\n const terraLocal = useRecoilValue(NetworkStore.terraLocal)\n const loginUser = useRecoilValue(AuthStore.loginUser)\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n const etherBaseExt = useRecoilValue(NetworkStore.etherBaseExt)\n const [isOpen, setIsOpen] = useState(false)\n\n const { logout } = useAuth()\n\n return (\n {\n setIsOpen(false)\n }}\n >\n \n setIsOpen(!isOpen)}>\n \n {UTIL.truncate(loginUser.address)}\n\n {isBrowser && (\n <>\n \n \n {isTestnet ? (\n <>\n \n {fromBlockChain === BlockChainType.terra\n ? `Connected to ${terraLocal.name.toUpperCase()}`\n : `Connected to ${\n etherBaseExt?.name.toUpperCase() || 'TESTNET'\n }`}\n \n \n ) : (\n Connected\n )}\n \n \n )}\n \n\n {isOpen && (\n \n Disconnect\n \n )}\n \n \n )\n}\n\nconst Header = (): ReactElement => {\n const selectWallet = useSelectWallet()\n const isLoggedIn = useRecoilValue(AuthStore.isLoggedIn)\n const isTestnet = useRecoilValue(NetworkStore.isTestnet)\n\n return (\n \n \n \n \n \"\"\n \n {isLoggedIn ? (\n \n ) : (\n \n \n Connect Wallet\n \n \n )}\n \n \n\n {isMobile && isTestnet && (\n \n \n \n )}\n \n )\n}\n\nexport default Header\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAAA8CAYAAABYfzddAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDQ2MCwgMjAyMC8wNS8xMi0xNjowNDoxNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDIxRUFCODM3ODBGMTFFQkFENDE5NUY0RERFMDBGMDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDIxRUFCODQ3ODBGMTFFQkFENDE5NUY0RERFMDBGMDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEMjFFQUI4MTc4MEYxMUVCQUQ0MTk1RjREREUwMEYwOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMjFFQUI4Mjc4MEYxMUVCQUQ0MTk1RjREREUwMEYwOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvouRTkAAAsCSURBVHja7F17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\"","export default \"data:image/png;base64,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\"","import { ReactElement } from 'react'\nimport styled from 'styled-components'\n\nimport { STYLE } from 'consts'\n\nimport { ExtLink, Text, Row, View, Container } from 'components'\n\nconst StyledContainer = styled(Container)`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n max-width: 640px;\n padding: 28px 0;\n opacity: 0.5;\n @media ${STYLE.media.mobile} {\n width: auto;\n margin-top: 0;\n padding: 24px;\n }\n`\n\nconst StyledText = styled(Text)`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.22px;\n`\n\nconst Footer = (): ReactElement => {\n const community = [\n {\n href: `https://docs.mirror.finance/user-guide/terra-bridge`,\n title: 'DOCS',\n },\n {\n href: `https://github.com/terra-project/bridge-web-app`,\n title: 'Github',\n },\n ]\n return (\n \n \n \n © Terraform Labs.\n \n \n {community.map(\n ({ href, title }) =>\n href && (\n \n \n {title}\n \n \n )\n )}\n \n \n \n )\n}\n\nexport default Footer\n","import { createElement, ReactElement } from 'react'\nimport { IQRCodeModal, IQRCodeModalOptions } from '@walletconnect/types'\nimport QRCode from 'qrcode.react'\nimport { render } from 'react-dom'\nimport styled, { keyframes } from 'styled-components'\nimport { isBrowser } from 'react-device-detect'\n\nexport class TerraWalletconnectQrcodeModal implements IQRCodeModal {\n modalContainer: HTMLDivElement | null = null\n\n private callback: (() => void) | null = null\n\n setCloseCallback = (callback: () => void): void => {\n this.callback = callback\n }\n\n open = (uri: string, _qrcodeModalOptions?: IQRCodeModalOptions): void => {\n const modalContainer = window.document.createElement('div')\n\n const query = encodeURIComponent(\n `action=walletconnect_connect&payload=${btoa(JSON.stringify({ uri }))}`\n )\n\n const value = `https://terrastation.page.link/?link=https://terra.money?${query}&apn=money.terra.station&ibi=money.terra.station&isi=1548434735`\n\n const modal = createElement(TerraQRCodeModal, {\n value,\n onClose: () => {\n if (this.callback) {\n this.callback()\n this.callback = null\n }\n this.close()\n },\n })\n\n render(modal, modalContainer)\n if (isBrowser) {\n window.document.querySelector('body')?.appendChild(modalContainer)\n } else {\n window.location.href = value\n }\n\n this.modalContainer = modalContainer\n }\n\n close = (): void => {\n if (this.modalContainer) {\n this.modalContainer.parentElement?.removeChild(this.modalContainer)\n }\n\n this.callback = null\n }\n}\n\nconst TerraQRCodeModalBase = ({\n value,\n className,\n onClose,\n}: {\n value: string\n className?: string\n onClose: () => void\n}): ReactElement => {\n return isBrowser ? (\n
\n
\n
\n \n
\n
\n ) : (\n <>\n )\n}\n\nconst modalEnter = keyframes`\n 0% {\n opacity: 0;\n }\n\n 100% {\n opacity: 1;\n }\n`\n\nconst figureEnter = keyframes`\n 0% {\n opacity: 0;\n transform: scale(0.4);\n }\n\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n`\n\nconst TerraQRCodeModal = styled(TerraQRCodeModalBase)`\n position: fixed;\n z-index: 100000;\n\n left: 0;\n top: 0;\n width: 100vw;\n height: 100vh;\n\n display: grid;\n place-content: center;\n\n > div {\n position: fixed;\n z-index: -1;\n\n left: 0;\n top: 0;\n width: 100vw;\n height: 100vh;\n background-color: rgba(0, 0, 0, 0.3);\n\n animation: ${modalEnter} 0.2s ease-in-out;\n }\n\n > figure {\n padding: 30px;\n\n border-radius: 25px;\n\n background-color: #ffffff;\n box-shadow: 0 4px 18px 3px rgba(0, 0, 0, 0.43);\n\n animation: ${figureEnter} 0.2s ease-in-out;\n }\n`\n","import { IWalletConnectOptions, IPushServerOptions } from '@walletconnect/types'\nimport * as cryptoLib from '@walletconnect/iso-crypto'\nimport { TerraWalletconnectQrcodeModal } from 'components/WalletConnectQrCodeModal'\n\nimport Connector from 'packages/walletconnect/core'\n\nexport class WalletConnect extends Connector {\n constructor(\n connectorOpts: IWalletConnectOptions,\n pushServerOpts?: IPushServerOptions\n ) {\n super({\n cryptoLib,\n connectorOpts,\n pushServerOpts,\n })\n }\n}\n\nconst connect = async (): Promise => {\n // bridge url\n const bridge = 'https://walletconnect.terra.dev/'\n\n // create new connector\n const connector = new WalletConnect({\n bridge,\n qrcodeModal: new TerraWalletconnectQrcodeModal(),\n })\n\n // check if already connected\n if (!connector.connected) {\n // create new session\n await connector.createSession()\n }\n\n return connector\n}\n\nexport default { connect }\n","/* eslint-disable */\nimport {\n IConnector,\n IConnectorOpts,\n ICryptoLib,\n ITransportLib,\n ISessionStorage,\n IEncryptionPayload,\n ISocketMessage,\n ISessionStatus,\n ISessionError,\n IJsonRpcResponseSuccess,\n IJsonRpcResponseError,\n IJsonRpcRequest,\n ITxData,\n IClientMeta,\n IParseURIResult,\n ISessionParams,\n IUpdateChainParams,\n IRequestOptions,\n IInternalRequestOptions,\n ICreateSessionOptions,\n IQRCodeModal,\n IPushSubscription,\n IPushServerOptions,\n IWalletConnectSession,\n IQRCodeModalOptions,\n} from '@walletconnect/types'\nimport {\n parsePersonalSign,\n parseTransactionData,\n convertArrayBufferToHex,\n convertHexToArrayBuffer,\n getClientMeta,\n payloadId,\n uuid,\n formatRpcError,\n parseWalletConnectUri,\n convertNumberToHex,\n isJsonRpcResponseSuccess,\n isJsonRpcResponseError,\n isSilentPayload,\n getLocal,\n signingMethods,\n mobileLinkChoiceKey,\n isMobile,\n removeLocal,\n} from '@walletconnect/utils'\nimport {\n ERROR_SESSION_CONNECTED,\n ERROR_SESSION_DISCONNECTED,\n ERROR_SESSION_REJECTED,\n ERROR_MISSING_JSON_RPC,\n ERROR_MISSING_RESULT,\n ERROR_MISSING_ERROR,\n ERROR_MISSING_METHOD,\n ERROR_MISSING_ID,\n ERROR_INVALID_RESPONSE,\n ERROR_INVALID_URI,\n ERROR_MISSING_REQUIRED,\n ERROR_QRCODE_MODAL_NOT_PROVIDED,\n ERROR_QRCODE_MODAL_USER_CLOSED,\n} from '@walletconnect/core/dist/cjs/errors'\nimport EventManager from '@walletconnect/core/dist/cjs/events'\nimport SessionStorage from '@walletconnect/core/dist/cjs/storage'\n\nimport CustomTransport from '../socket-transport'\n\n// -- Connector ------------------------------------------------------------ //\n\nclass Connector implements IConnector {\n public readonly protocol = 'wc'\n public readonly version = 1\n\n // -- connection ----------------------------------------------------- //\n\n private _bridge = ''\n private _key: ArrayBuffer | null = null\n\n // -- client ----------------------------------------------------- //\n\n private _clientId = ''\n private _clientMeta: IClientMeta | null = null\n\n // -- peer ----------------------------------------------------- //\n\n private _peerId = ''\n private _peerMeta: IClientMeta | null = null\n\n // -- handshake ----------------------------------------------------- //\n\n private _handshakeId = 0\n private _handshakeTopic = ''\n\n // -- session ----------------------------------------------------- //\n\n private _connected = false\n private _accounts: string[] = []\n private _chainId = 0\n private _networkId = 0\n private _rpcUrl = ''\n\n // -- controllers ----------------------------------------------------- //\n\n private _cryptoLib: ICryptoLib\n private _transport: ITransportLib\n private _eventManager: EventManager = new EventManager()\n private _sessionStorage: ISessionStorage | undefined\n\n // -- qrcodeModal ----------------------------------------------------- //\n\n private _qrcodeModal: IQRCodeModal | undefined\n private _qrcodeModalOptions: IQRCodeModalOptions | undefined\n\n // -- constructor ----------------------------------------------------- //\n\n constructor(opts: IConnectorOpts) {\n this._clientMeta = getClientMeta() || opts.connectorOpts.clientMeta || null\n this._cryptoLib = opts.cryptoLib\n this._sessionStorage = opts.sessionStorage || new SessionStorage()\n this._qrcodeModal = opts.connectorOpts.qrcodeModal\n this._qrcodeModalOptions = opts.connectorOpts.qrcodeModalOptions\n\n if (\n !opts.connectorOpts.bridge &&\n !opts.connectorOpts.uri &&\n !opts.connectorOpts.session\n ) {\n throw new Error(ERROR_MISSING_REQUIRED)\n }\n\n if (opts.connectorOpts.bridge) {\n this.bridge = opts.connectorOpts.bridge\n }\n\n if (opts.connectorOpts.uri) {\n this.uri = opts.connectorOpts.uri\n }\n\n const session = opts.connectorOpts.session || this._getStorageSession()\n\n if (session) {\n this.session = session\n }\n\n if (this.handshakeId) {\n this._subscribeToSessionResponse(\n this.handshakeId,\n 'Session request rejected'\n )\n }\n\n this._transport = new CustomTransport({\n protocol: this.protocol,\n version: this.version,\n url: this.bridge,\n subscriptions: [this.clientId],\n })\n\n this._subscribeToInternalEvents()\n this._initTransport()\n\n if (opts.connectorOpts.uri) {\n this._subscribeToSessionRequest()\n }\n\n if (opts.pushServerOpts) {\n this._registerPushServer(opts.pushServerOpts)\n }\n }\n\n // -- setters / getters ----------------------------------------------- //\n\n set bridge(value: string) {\n if (!value) {\n return\n }\n this._bridge = value\n }\n\n get bridge() {\n return this._bridge\n }\n\n set key(value: string) {\n if (!value) {\n return\n }\n const key: ArrayBuffer = convertHexToArrayBuffer(value)\n this._key = key\n }\n\n get key(): string {\n if (this._key) {\n const key: string = convertArrayBufferToHex(this._key, true)\n return key\n }\n return ''\n }\n\n set clientId(value: string) {\n if (!value) {\n return\n }\n this._clientId = value\n }\n\n get clientId() {\n let clientId: string | null = this._clientId\n if (!clientId) {\n clientId = this._clientId = uuid()\n }\n\n return this._clientId\n }\n\n set peerId(value) {\n if (!value) {\n return\n }\n this._peerId = value\n }\n\n get peerId() {\n return this._peerId\n }\n\n set clientMeta(value) {\n // empty\n }\n\n get clientMeta() {\n let clientMeta: IClientMeta | null = this._clientMeta\n if (!clientMeta) {\n clientMeta = this._clientMeta = getClientMeta()\n }\n return clientMeta\n }\n\n set peerMeta(value) {\n this._peerMeta = value\n }\n\n get peerMeta() {\n const peerMeta: IClientMeta | null = this._peerMeta\n return peerMeta\n }\n\n set handshakeTopic(value) {\n if (!value) {\n return\n }\n this._handshakeTopic = value\n }\n\n get handshakeTopic() {\n return this._handshakeTopic\n }\n\n set handshakeId(value) {\n if (!value) {\n return\n }\n this._handshakeId = value\n }\n\n get handshakeId() {\n return this._handshakeId\n }\n\n get uri() {\n const _uri = this._formatUri()\n return _uri\n }\n\n set uri(value) {\n if (!value) {\n return\n }\n const { handshakeTopic, bridge, key } = this._parseUri(value)\n this.handshakeTopic = handshakeTopic\n this.bridge = bridge\n this.key = key\n }\n\n set chainId(value) {\n this._chainId = value\n }\n\n get chainId() {\n const chainId: number | null = this._chainId\n return chainId\n }\n\n set networkId(value) {\n this._networkId = value\n }\n\n get networkId() {\n const networkId: number | null = this._networkId\n return networkId\n }\n\n set accounts(value) {\n this._accounts = value\n }\n\n get accounts() {\n const accounts: string[] | null = this._accounts\n return accounts\n }\n\n set rpcUrl(value) {\n this._rpcUrl = value\n }\n\n get rpcUrl() {\n const rpcUrl: string | null = this._rpcUrl\n return rpcUrl\n }\n\n set connected(value) {\n // empty\n }\n\n get connected() {\n return this._connected\n }\n\n set pending(value) {\n // empty\n }\n\n get pending() {\n return !!this._handshakeTopic\n }\n\n get session() {\n return {\n connected: this.connected,\n accounts: this.accounts,\n chainId: this.chainId,\n bridge: this.bridge,\n key: this.key,\n clientId: this.clientId,\n clientMeta: this.clientMeta,\n peerId: this.peerId,\n peerMeta: this.peerMeta,\n handshakeId: this.handshakeId,\n handshakeTopic: this.handshakeTopic,\n }\n }\n\n set session(value) {\n if (!value) {\n return\n }\n this._connected = value.connected\n this.accounts = value.accounts\n this.chainId = value.chainId\n this.bridge = value.bridge\n this.key = value.key\n this.clientId = value.clientId\n this.clientMeta = value.clientMeta\n this.peerId = value.peerId\n this.peerMeta = value.peerMeta\n this.handshakeId = value.handshakeId\n this.handshakeTopic = value.handshakeTopic\n }\n\n // -- public ---------------------------------------------------------- //\n\n public on(\n event: string,\n callback: (error: Error | null, payload: any | null) => void\n ): void {\n const eventEmitter = {\n event,\n callback,\n }\n this._eventManager.subscribe(eventEmitter)\n }\n\n public async createInstantRequest(\n instantRequest: Partial\n ): Promise {\n this._key = await this._generateKey()\n\n const request: IJsonRpcRequest = this._formatRequest({\n method: 'wc_instantRequest',\n params: [\n {\n peerId: this.clientId,\n peerMeta: this.clientMeta,\n request: this._formatRequest(instantRequest),\n },\n ],\n })\n\n this.handshakeId = request.id\n this.handshakeTopic = uuid()\n\n this._eventManager.trigger({\n event: 'display_uri',\n params: [this.uri],\n })\n\n this.on('modal_closed', () => {\n throw new Error(ERROR_QRCODE_MODAL_USER_CLOSED)\n })\n\n const endInstantRequest = () => {\n this.killSession()\n }\n\n try {\n const result = await this._sendCallRequest(request)\n\n if (result) {\n endInstantRequest()\n }\n\n return result\n } catch (error) {\n endInstantRequest()\n throw error\n }\n }\n\n public async connect(opts?: ICreateSessionOptions): Promise {\n if (!this._qrcodeModal) {\n throw new Error(ERROR_QRCODE_MODAL_NOT_PROVIDED)\n }\n\n if (this.connected) {\n return {\n chainId: this.chainId,\n accounts: this.accounts,\n }\n }\n\n await this.createSession(opts)\n\n return new Promise(async (resolve, reject) => {\n this.on('modal_closed', () =>\n reject(new Error(ERROR_QRCODE_MODAL_USER_CLOSED))\n )\n\n this.on('connect', (error, payload) => {\n if (error) {\n return reject(error)\n }\n\n resolve(payload.params[0])\n })\n })\n }\n\n public async createSession(opts?: ICreateSessionOptions): Promise {\n if (this._connected) {\n throw new Error(ERROR_SESSION_CONNECTED)\n }\n\n if (this.pending) {\n return\n }\n\n this._key = await this._generateKey()\n\n const request: IJsonRpcRequest = this._formatRequest({\n method: 'wc_sessionRequest',\n params: [\n {\n peerId: this.clientId,\n peerMeta: this.clientMeta,\n chainId: opts && opts.chainId ? opts.chainId : null,\n },\n ],\n })\n\n this.handshakeId = request.id\n this.handshakeTopic = uuid()\n\n this._sendSessionRequest(request, 'Session update rejected', {\n topic: this.handshakeTopic,\n })\n\n this._eventManager.trigger({\n event: 'display_uri',\n params: [this.uri],\n })\n }\n\n public approveSession(sessionStatus: ISessionStatus) {\n if (this._connected) {\n throw new Error(ERROR_SESSION_CONNECTED)\n }\n\n this.chainId = sessionStatus.chainId\n this.accounts = sessionStatus.accounts\n this.networkId = sessionStatus.networkId || 0\n this.rpcUrl = sessionStatus.rpcUrl || ''\n\n const sessionParams: ISessionParams = {\n approved: true,\n chainId: this.chainId,\n networkId: this.networkId,\n accounts: this.accounts,\n rpcUrl: this.rpcUrl,\n peerId: this.clientId,\n peerMeta: this.clientMeta,\n }\n\n const response = {\n id: this.handshakeId,\n jsonrpc: '2.0',\n result: sessionParams,\n }\n\n this._sendResponse(response)\n\n this._connected = true\n this._setStorageSession()\n this._eventManager.trigger({\n event: 'connect',\n params: [\n {\n peerId: this.peerId,\n peerMeta: this.peerMeta,\n chainId: this.chainId,\n accounts: this.accounts,\n },\n ],\n })\n }\n\n public rejectSession(sessionError?: ISessionError) {\n if (this._connected) {\n throw new Error(ERROR_SESSION_CONNECTED)\n }\n\n const message =\n sessionError && sessionError.message\n ? sessionError.message\n : ERROR_SESSION_REJECTED\n\n const response = this._formatResponse({\n id: this.handshakeId,\n error: { message },\n })\n\n this._sendResponse(response)\n\n this._connected = false\n this._eventManager.trigger({\n event: 'disconnect',\n params: [{ message }],\n })\n this._removeStorageSession()\n }\n\n public updateSession(sessionStatus: ISessionStatus) {\n if (!this._connected) {\n throw new Error(ERROR_SESSION_DISCONNECTED)\n }\n\n this.chainId = sessionStatus.chainId\n this.accounts = sessionStatus.accounts\n this.networkId = sessionStatus.networkId || 0\n this.rpcUrl = sessionStatus.rpcUrl || ''\n\n const sessionParams: ISessionParams = {\n approved: true,\n chainId: this.chainId,\n networkId: this.networkId,\n accounts: this.accounts,\n rpcUrl: this.rpcUrl,\n }\n\n const request = this._formatRequest({\n method: 'wc_sessionUpdate',\n params: [sessionParams],\n })\n\n this._sendSessionRequest(request, 'Session update rejected')\n\n this._eventManager.trigger({\n event: 'session_update',\n params: [\n {\n chainId: this.chainId,\n accounts: this.accounts,\n },\n ],\n })\n\n this._manageStorageSession()\n }\n\n public async killSession(sessionError?: ISessionError) {\n const message = sessionError ? sessionError.message : 'Session Disconnected'\n\n const sessionParams: ISessionParams = {\n approved: false,\n chainId: null,\n networkId: null,\n accounts: null,\n }\n\n const request = this._formatRequest({\n method: 'wc_sessionUpdate',\n params: [sessionParams],\n })\n\n await this._sendRequest(request)\n\n this._handleSessionDisconnect(message)\n }\n\n public async sendTransaction(tx: ITxData) {\n if (!this._connected) {\n throw new Error(ERROR_SESSION_DISCONNECTED)\n }\n\n const parsedTx = parseTransactionData(tx)\n\n const request = this._formatRequest({\n method: 'eth_sendTransaction',\n params: [parsedTx],\n })\n\n const result = await this._sendCallRequest(request)\n return result\n }\n\n public async signTransaction(tx: ITxData) {\n if (!this._connected) {\n throw new Error(ERROR_SESSION_DISCONNECTED)\n }\n\n const parsedTx = parseTransactionData(tx)\n\n const request = this._formatRequest({\n method: 'eth_signTransaction',\n params: [parsedTx],\n })\n\n const result = await this._sendCallRequest(request)\n return result\n }\n\n public async signMessage(params: any[]) {\n if (!this._connected) {\n throw new Error(ERROR_SESSION_DISCONNECTED)\n }\n\n const request = this._formatRequest({\n method: 'eth_sign',\n params,\n })\n\n const result = await this._sendCallRequest(request)\n return result\n }\n\n public async signPersonalMessage(params: any[]) {\n if (!this._connected) {\n throw new Error(ERROR_SESSION_DISCONNECTED)\n }\n\n params = parsePersonalSign(params)\n\n const request = this._formatRequest({\n method: 'personal_sign',\n params,\n })\n\n const result = await this._sendCallRequest(request)\n return result\n }\n\n public async signTypedData(params: any[]) {\n if (!this._connected) {\n throw new Error(ERROR_SESSION_DISCONNECTED)\n }\n\n const request = this._formatRequest({\n method: 'eth_signTypedData',\n params,\n })\n\n const result = await this._sendCallRequest(request)\n return result\n }\n\n public async updateChain(chainParams: IUpdateChainParams) {\n if (!this._connected) {\n throw new Error('Session currently disconnected')\n }\n\n const request = this._formatRequest({\n method: 'wallet_updateChain',\n params: [chainParams],\n })\n\n const result = await this._sendCallRequest(request)\n return result\n }\n\n public unsafeSend(\n request: IJsonRpcRequest,\n options?: IRequestOptions\n ): Promise {\n this._sendRequest(request, options)\n\n return new Promise((resolve, reject) => {\n this._subscribeToResponse(\n request.id,\n (error: Error | null, payload: any | null) => {\n if (error) {\n reject(error)\n return\n }\n if (!payload) {\n throw new Error(ERROR_MISSING_JSON_RPC)\n }\n resolve(payload)\n }\n )\n })\n }\n\n public async sendCustomRequest(\n request: Partial,\n options?: IRequestOptions\n ) {\n if (!this._connected) {\n throw new Error(ERROR_SESSION_DISCONNECTED)\n }\n\n switch (request.method) {\n case 'eth_accounts':\n return this.accounts\n case 'eth_chainId':\n return convertNumberToHex(this.chainId)\n case 'eth_sendTransaction':\n case 'eth_signTransaction':\n if (request.params) {\n request.params[0] = parseTransactionData(request.params[0])\n }\n break\n case 'personal_sign':\n if (request.params) {\n request.params = parsePersonalSign(request.params)\n }\n break\n default:\n break\n }\n\n const formattedRequest = this._formatRequest(request)\n\n const result = await this._sendCallRequest(formattedRequest, options)\n return result\n }\n\n public approveRequest(response: Partial) {\n if (isJsonRpcResponseSuccess(response)) {\n const formattedResponse = this._formatResponse(response)\n this._sendResponse(formattedResponse)\n } else {\n throw new Error(ERROR_MISSING_RESULT)\n }\n }\n\n public rejectRequest(response: Partial) {\n if (isJsonRpcResponseError(response)) {\n const formattedResponse = this._formatResponse(response)\n this._sendResponse(formattedResponse)\n } else {\n throw new Error(ERROR_MISSING_ERROR)\n }\n }\n\n // -- private --------------------------------------------------------- //\n\n protected async _sendRequest(\n request: Partial,\n options?: Partial\n ) {\n const callRequest: IJsonRpcRequest = this._formatRequest(request)\n\n const encryptionPayload: IEncryptionPayload | null = await this._encrypt(\n callRequest\n )\n\n const topic: string =\n typeof options?.topic !== 'undefined' ? options.topic : this.peerId\n const payload: string = JSON.stringify(encryptionPayload)\n const silent =\n typeof options?.forcePushNotification !== 'undefined'\n ? !options.forcePushNotification\n : isSilentPayload(callRequest)\n\n this._transport.send(payload, topic, silent)\n }\n\n protected async _sendResponse(\n response: IJsonRpcResponseSuccess | IJsonRpcResponseError\n ) {\n const encryptionPayload: IEncryptionPayload | null = await this._encrypt(\n response\n )\n\n const topic: string = this.peerId\n const payload: string = JSON.stringify(encryptionPayload)\n const silent = true\n\n this._transport.send(payload, topic, silent)\n }\n\n protected async _sendSessionRequest(\n request: IJsonRpcRequest,\n errorMsg: string,\n options?: IInternalRequestOptions\n ) {\n this._sendRequest(request, options)\n this._subscribeToSessionResponse(request.id, errorMsg)\n }\n\n protected _sendCallRequest(\n request: IJsonRpcRequest,\n options?: IRequestOptions\n ): Promise {\n this._sendRequest(request, options)\n\n this._eventManager.trigger({\n event: 'call_request_sent',\n params: [{ request, options }],\n })\n\n if (isMobile() && signingMethods.includes(request.method)) {\n const mobileLinkUrl = getLocal(mobileLinkChoiceKey)\n if (mobileLinkUrl) {\n window.location.href = mobileLinkUrl.href\n }\n }\n return this._subscribeToCallResponse(request.id)\n }\n\n protected _formatRequest(request: Partial): IJsonRpcRequest {\n if (typeof request.method === 'undefined') {\n throw new Error(ERROR_MISSING_METHOD)\n }\n const formattedRequest: IJsonRpcRequest = {\n id: typeof request.id === 'undefined' ? payloadId() : request.id,\n jsonrpc: '2.0',\n method: request.method,\n params: typeof request.params === 'undefined' ? [] : request.params,\n }\n return formattedRequest\n }\n\n protected _formatResponse(\n response: Partial\n ): IJsonRpcResponseSuccess | IJsonRpcResponseError {\n if (typeof response.id === 'undefined') {\n throw new Error(ERROR_MISSING_ID)\n }\n\n const baseResponse = { id: response.id, jsonrpc: '2.0' }\n\n if (isJsonRpcResponseError(response)) {\n const error = formatRpcError(response.error)\n\n const errorResponse: IJsonRpcResponseError = {\n ...baseResponse,\n ...response,\n error,\n }\n return errorResponse\n } else if (isJsonRpcResponseSuccess(response)) {\n const successResponse: IJsonRpcResponseSuccess = {\n ...baseResponse,\n ...response,\n }\n\n return successResponse\n }\n\n throw new Error(ERROR_INVALID_RESPONSE)\n }\n\n private _handleSessionDisconnect(errorMsg?: string) {\n const message = errorMsg || 'Session Disconnected'\n if (!this._connected) {\n if (this._qrcodeModal) {\n this._qrcodeModal.close()\n }\n removeLocal(mobileLinkChoiceKey)\n }\n if (this._connected) {\n this._connected = false\n }\n if (this._handshakeId) {\n this._handshakeId = 0\n }\n if (this._handshakeTopic) {\n this._handshakeTopic = ''\n }\n this._eventManager.trigger({\n event: 'disconnect',\n params: [{ message }],\n })\n this._removeStorageSession()\n this._transport.close()\n }\n\n private _handleSessionResponse(\n errorMsg: string,\n sessionParams?: ISessionParams\n ) {\n if (sessionParams) {\n if (sessionParams.approved) {\n if (!this._connected) {\n this._connected = true\n\n if (sessionParams.chainId) {\n this.chainId = sessionParams.chainId\n }\n\n if (sessionParams.accounts) {\n this.accounts = sessionParams.accounts\n }\n\n if (sessionParams.peerId && !this.peerId) {\n this.peerId = sessionParams.peerId\n }\n\n if (sessionParams.peerMeta && !this.peerMeta) {\n this.peerMeta = sessionParams.peerMeta\n }\n\n this._eventManager.trigger({\n event: 'connect',\n params: [\n {\n peerId: this.peerId,\n peerMeta: this.peerMeta,\n chainId: this.chainId,\n accounts: this.accounts,\n },\n ],\n })\n } else {\n if (sessionParams.chainId) {\n this.chainId = sessionParams.chainId\n }\n if (sessionParams.accounts) {\n this.accounts = sessionParams.accounts\n }\n\n this._eventManager.trigger({\n event: 'session_update',\n params: [\n {\n chainId: this.chainId,\n accounts: this.accounts,\n },\n ],\n })\n }\n\n this._manageStorageSession()\n } else {\n this._handleSessionDisconnect(errorMsg)\n }\n } else {\n this._handleSessionDisconnect(errorMsg)\n }\n }\n\n private async _handleIncomingMessages(socketMessage: ISocketMessage) {\n const activeTopics = [this.clientId, this.handshakeTopic]\n\n if (!activeTopics.includes(socketMessage.topic)) {\n return\n }\n\n let encryptionPayload: IEncryptionPayload\n try {\n encryptionPayload = JSON.parse(socketMessage.payload)\n } catch (error) {\n return\n }\n\n const payload:\n | IJsonRpcRequest\n | IJsonRpcResponseSuccess\n | IJsonRpcResponseError\n | null = await this._decrypt(encryptionPayload)\n\n if (payload) {\n this._eventManager.trigger(payload)\n }\n }\n\n private _subscribeToSessionRequest() {\n this._transport.subscribe(this.handshakeTopic)\n }\n\n private _subscribeToResponse(\n id: number,\n callback: (error: Error | null, payload: any | null) => void\n ) {\n this.on(`response:${id}`, callback)\n }\n\n private _subscribeToSessionResponse(id: number, errorMsg: string) {\n this._subscribeToResponse(id, (error, payload) => {\n if (error) {\n this._handleSessionResponse(error.message)\n return\n }\n if (payload.result) {\n this._handleSessionResponse(errorMsg, payload.result)\n } else if (payload.error && payload.error.message) {\n this._handleSessionResponse(payload.error.message)\n } else {\n this._handleSessionResponse(errorMsg)\n }\n })\n }\n\n private _subscribeToCallResponse(id: number): Promise {\n return new Promise((resolve, reject) => {\n this._subscribeToResponse(id, (error, payload) => {\n if (error) {\n reject(error)\n return\n }\n if (payload.result) {\n resolve(payload.result)\n } else if (payload.error && payload.error.message) {\n reject(new Error(payload.error.message))\n } else {\n reject(new Error(ERROR_INVALID_RESPONSE))\n }\n })\n })\n }\n\n private _subscribeToInternalEvents() {\n this.on('display_uri', () => {\n if (this._qrcodeModal) {\n this._qrcodeModal.open(\n this.uri,\n () => {\n this._eventManager.trigger({\n event: 'modal_closed',\n params: [],\n })\n },\n this._qrcodeModalOptions\n )\n }\n })\n\n this.on('connect', () => {\n if (this._qrcodeModal) {\n this._qrcodeModal.close()\n }\n })\n\n this.on('wc_sessionRequest', (error, payload) => {\n if (error) {\n this._eventManager.trigger({\n event: 'error',\n params: [\n {\n code: 'SESSION_REQUEST_ERROR',\n message: error.toString(),\n },\n ],\n })\n }\n this.handshakeId = payload.id\n this.peerId = payload.params[0].peerId\n this.peerMeta = payload.params[0].peerMeta\n\n const internalPayload = {\n ...payload,\n method: 'session_request',\n }\n this._eventManager.trigger(internalPayload)\n })\n\n this.on('wc_sessionUpdate', (error, payload) => {\n if (error) {\n this._handleSessionResponse(error.message)\n }\n this._handleSessionResponse('Session disconnected', payload.params[0])\n })\n }\n\n private _initTransport() {\n this._transport.on('message', (socketMessage: ISocketMessage) =>\n this._handleIncomingMessages(socketMessage)\n )\n\n this._transport.on('open', () =>\n this._eventManager.trigger({ event: 'transport_open', params: [] })\n )\n\n this._transport.on('close', () =>\n this._eventManager.trigger({ event: 'transport_close', params: [] })\n )\n\n this._transport.on('error', () =>\n this._eventManager.trigger({\n event: 'transport_error',\n params: ['Websocket connection failed'],\n })\n )\n\n this._transport.open()\n }\n\n // -- uri ------------------------------------------------------------- //\n\n private _formatUri() {\n const protocol = this.protocol\n const handshakeTopic = this.handshakeTopic\n const version = this.version\n const bridge = encodeURIComponent(this.bridge)\n const key = this.key\n const uri = `${protocol}:${handshakeTopic}@${version}?bridge=${bridge}&key=${key}`\n return uri\n }\n\n private _parseUri(uri: string) {\n const result: IParseURIResult = parseWalletConnectUri(uri)\n\n if (result.protocol === this.protocol) {\n if (!result.handshakeTopic) {\n throw Error('Invalid or missing handshakeTopic parameter value')\n }\n const handshakeTopic = result.handshakeTopic\n\n if (!result.bridge) {\n throw Error('Invalid or missing bridge url parameter value')\n }\n const bridge = decodeURIComponent(result.bridge)\n\n if (!result.key) {\n throw Error('Invalid or missing key parameter value')\n }\n const key = result.key\n\n return { handshakeTopic, bridge, key }\n } else {\n throw new Error(ERROR_INVALID_URI)\n }\n }\n\n // -- crypto ---------------------------------------------------------- //\n\n private async _generateKey(): Promise {\n if (this._cryptoLib) {\n const result = await this._cryptoLib.generateKey()\n return result\n }\n return null\n }\n\n private async _encrypt(\n data: IJsonRpcRequest | IJsonRpcResponseSuccess | IJsonRpcResponseError\n ): Promise {\n const key: ArrayBuffer | null = this._key\n if (this._cryptoLib && key) {\n const result: IEncryptionPayload = await this._cryptoLib.encrypt(\n data,\n key\n )\n return result\n }\n return null\n }\n\n private async _decrypt(\n payload: IEncryptionPayload\n ): Promise<\n IJsonRpcRequest | IJsonRpcResponseSuccess | IJsonRpcResponseError | null\n > {\n const key: ArrayBuffer | null = this._key\n if (this._cryptoLib && key) {\n const result:\n | IJsonRpcRequest\n | IJsonRpcResponseSuccess\n | IJsonRpcResponseError\n | null = await this._cryptoLib.decrypt(payload, key)\n return result\n }\n return null\n }\n\n // -- sessionStorage --------------------------------------------------------- //\n\n private _getStorageSession() {\n let result: IWalletConnectSession | null = null\n if (this._sessionStorage) {\n result = this._sessionStorage.getSession()\n }\n return result\n }\n\n private _setStorageSession() {\n if (this._sessionStorage) {\n this._sessionStorage.setSession(this.session)\n }\n }\n\n private _removeStorageSession() {\n if (this._sessionStorage) {\n this._sessionStorage.removeSession()\n }\n }\n\n private _manageStorageSession() {\n if (this._connected) {\n this._setStorageSession()\n } else {\n this._removeStorageSession()\n }\n }\n\n // -- pushServer ------------------------------------------------------------- //\n\n private _registerPushServer(pushServerOpts: IPushServerOptions) {\n if (!pushServerOpts.url || typeof pushServerOpts.url !== 'string') {\n throw Error('Invalid or missing pushServerOpts.url parameter value')\n }\n\n if (!pushServerOpts.type || typeof pushServerOpts.type !== 'string') {\n throw Error('Invalid or missing pushServerOpts.type parameter value')\n }\n\n if (!pushServerOpts.token || typeof pushServerOpts.token !== 'string') {\n throw Error('Invalid or missing pushServerOpts.token parameter value')\n }\n\n const pushSubscription: IPushSubscription = {\n bridge: this.bridge,\n topic: this.clientId,\n type: pushServerOpts.type,\n token: pushServerOpts.token,\n peerName: '',\n language: pushServerOpts.language || '',\n }\n\n this.on('connect', async (error: Error | null, payload: any) => {\n if (error) {\n throw error\n }\n\n if (pushServerOpts.peerMeta) {\n const peerName = payload.params[0].peerMeta.name\n pushSubscription.peerName = peerName\n }\n\n try {\n const response = await fetch(`${pushServerOpts.url}/new`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(pushSubscription),\n })\n\n const json = await response.json()\n if (!json.success) {\n throw Error('Failed to register in Push Server')\n }\n } catch (error) {\n throw Error('Failed to register in Push Server')\n }\n })\n }\n}\nexport default Connector\n","import WalletConnectProvider from '@walletconnect/web3-provider'\n\nimport { NETWORK } from 'consts'\n\nconst connect = async (): Promise<{\n address: string\n provider: WalletConnectProvider\n}> => {\n const provider = new WalletConnectProvider({\n infuraId: NETWORK.INFURAID,\n })\n const [address] = await provider.enable()\n\n return { address, provider }\n}\nexport default { connect }\n","import { WalletLinkConnector } from '@web3-react/walletlink-connector'\n\nimport { NETWORK } from 'consts'\n\nconst connect = async (): Promise<{\n address: string\n provider: any\n}> => {\n const connector = new WalletLinkConnector({\n // url: `https://ropsten.infura.io/v3/${NETWORK.INFURAID}`,\n url: `https://mainnet.infura.io/v3/${NETWORK.INFURAID}`,\n appName: 'bridge',\n })\n const { account, provider } = await connector.activate()\n const address = account || ''\n return { address, provider }\n}\nexport default { connect }\n","import MetaMaskOnboarding from '@metamask/onboarding'\n\nif (window.ethereum) {\n window.ethereum.autoRefreshOnNetworkChange = false\n}\n\nconst checkInstalled = (): boolean => {\n return MetaMaskOnboarding.isMetaMaskInstalled()\n}\n\nconst connect = async (): Promise<{\n address: string\n provider: any\n}> => {\n const method = 'eth_requestAccounts'\n const accounts = await window.ethereum?.request({ method })\n const address = (accounts && accounts[0]) || ''\n\n const provider = window.ethereum\n return { address, provider }\n}\n\nconst install = (): void => {\n const metamask = new MetaMaskOnboarding()\n metamask.startOnboarding()\n}\n\nexport default { connect, checkInstalled, install }\n","import { BscConnector } from '@binance-chain/bsc-connector'\nimport _ from 'lodash'\n\nconst checkInstalled = (): boolean => {\n return _.some(window.BinanceChain)\n}\n\nconst connect = async (): Promise<{\n address: string\n provider: any\n}> => {\n const connector = new BscConnector({ supportedChainIds: [56, 97] })\n\n const { account, provider } = await connector.activate()\n const address = account || ''\n return { address, provider }\n}\nexport default { connect, checkInstalled }\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { COLOR, STYLE } from 'consts'\nimport { InfoCircle } from 'react-bootstrap-icons'\n\nimport Button from 'components/Button'\nimport { WalletEnum, WalletSupportBrowser, WalletTitle } from 'types/wallet'\nimport WalletLogo from 'components/WalletLogo'\nimport { Text } from 'components'\n\nconst StyledWalletButton = styled(Button)`\n border-radius: ${STYLE.css.borderRadius};\n padding: 16px;\n margin: 8px 0px;\n border: 1px solid #1e2026;\n transition: all 0.3s ease 0s;\n background: ${COLOR.darkGray};\n color: ${COLOR.white};\n overflow: hidden;\n\n :hover {\n border-color: ${COLOR.terraSky};\n background: ${COLOR.darkGray};\n }\n`\n\nconst StyledButtonContents = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n`\n\nconst StyledErrorMessage = styled(Text)`\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: -0.28px;\n`\n\nconst WalletButton = ({\n wallet,\n onClick,\n}: {\n wallet: WalletEnum\n onClick: () => void\n}): ReactElement => {\n const { isSupport, errorMessage } = WalletSupportBrowser[wallet]\n return (\n \n \n
\n {WalletTitle[wallet]}\n {false === isSupport && (\n
\n \n {errorMessage}\n
\n )}\n
\n \n
\n
\n )\n}\n\nexport default WalletButton\n","import { ReactElement, useEffect } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilState, useRecoilValue } from 'recoil'\nimport { ethers } from 'ethers'\n\nimport useAuth from 'hooks/useAuth'\nimport Text from 'components/Text'\nimport DefaultModal from 'components/Modal'\n\nimport terraWalletConnectService from 'services/terraWalletConnectService'\nimport terraService from 'services/terraService'\nimport walletConnectService from 'services/walletConnectService'\nimport coinBaseService from 'services/coinBaseService'\nimport metaMaskService from 'services/metaMaskService'\nimport bscService from 'services/bscService'\n\nimport SelectWalletStore, {\n SelectWalletModalType,\n} from 'store/SelectWalletStore'\nimport SendStore from 'store/SendStore'\n\nimport { WalletEnum } from 'types/wallet'\nimport { BlockChainType } from 'types/network'\n\nimport WalletButton from './WalletButton'\n\nconst StyledContainer = styled.div`\n padding: 0 25px 40px;\n`\n\nconst SelectEtherBaseWalletModal = (): ReactElement => {\n const { login, logout, getLoginStorage, setLoginStorage } = useAuth()\n const fromBlockChain = useRecoilValue(SendStore.fromBlockChain)\n\n const [isVisibleModalType, setIsVisibleModalType] = useRecoilState(\n SelectWalletStore.isVisibleModalType\n )\n\n const onClickTerraExtension = async (): Promise => {\n const terraExtInstalled = terraService.checkInstalled()\n if (terraExtInstalled) {\n const result = await terraService.connect()\n\n await login({\n user: {\n address: result.address,\n walletType: WalletEnum.TerraExtension,\n },\n })\n } else {\n setIsVisibleModalType(SelectWalletModalType.terraExtInstall)\n }\n }\n\n const onClickTerraWalletConnect = async (): Promise => {\n try {\n const connector = await terraWalletConnectService.connect()\n connector.on('disconnect', (): void => {\n logout()\n })\n\n if (connector.connected) {\n login({\n user: {\n address: connector.accounts[0],\n terraWalletConnect: connector,\n walletType: WalletEnum.TerraWalletConnect,\n },\n })\n } else {\n connector.on('connect', (error, payload) => {\n if (error) {\n throw error\n }\n const address = payload.params[0].accounts[0]\n login({\n user: {\n address,\n terraWalletConnect: connector,\n walletType: WalletEnum.TerraWalletConnect,\n },\n })\n })\n }\n } catch (e) {\n // if user close connect modal then error\n console.log(e)\n }\n }\n const onClickBinanceChain = async (): Promise => {\n if (bscService.checkInstalled()) {\n const { address, provider } = await bscService.connect()\n await login({\n user: {\n address,\n provider: new ethers.providers.Web3Provider(provider),\n walletType: WalletEnum.Binance,\n },\n })\n } else {\n setIsVisibleModalType(SelectWalletModalType.bscInstall)\n }\n }\n\n const onClickMetamask = async (): Promise => {\n if (metaMaskService.checkInstalled()) {\n const { address, provider } = await metaMaskService.connect()\n\n await login({\n user: {\n address,\n provider: new ethers.providers.Web3Provider(provider),\n walletType: WalletEnum.MetaMask,\n },\n })\n } else {\n metaMaskService.install()\n }\n }\n\n const onClickWalletConnect = async (): Promise => {\n try {\n const { address, provider } = await walletConnectService.connect()\n provider.on('disconnect', () => {\n logout()\n })\n await login({\n user: {\n address,\n provider: new ethers.providers.Web3Provider(provider),\n walletType: WalletEnum.WalletConnect,\n },\n })\n } catch (e) {\n // if user close connect modal then error\n console.log(e)\n }\n }\n\n const onClickCoinbase = async (): Promise => {\n try {\n const { address, provider } = await coinBaseService.connect()\n await login({\n user: {\n address,\n provider: new ethers.providers.Web3Provider(provider),\n walletType: WalletEnum.CoinbaseWallet,\n },\n })\n } catch (e) {\n // if user close connect modal then error\n console.log(e)\n }\n }\n\n const onClickWallet = (wallet: WalletEnum): void => {\n switch (wallet) {\n case WalletEnum.Binance:\n onClickBinanceChain()\n break\n case WalletEnum.MetaMask:\n onClickMetamask()\n break\n case WalletEnum.CoinbaseWallet:\n onClickCoinbase()\n break\n case WalletEnum.WalletConnect:\n onClickWalletConnect()\n break\n case WalletEnum.TerraExtension:\n onClickTerraExtension()\n break\n case WalletEnum.TerraWalletConnect:\n onClickTerraWalletConnect()\n break\n }\n }\n\n let buttons = [WalletEnum.TerraExtension, WalletEnum.TerraWalletConnect]\n if (\n fromBlockChain === BlockChainType.ethereum ||\n fromBlockChain === BlockChainType.hmy\n ) {\n buttons = [\n WalletEnum.MetaMask,\n WalletEnum.WalletConnect,\n WalletEnum.CoinbaseWallet,\n ]\n } else if (fromBlockChain === BlockChainType.bsc) {\n buttons = [WalletEnum.Binance, WalletEnum.MetaMask]\n }\n\n useEffect(() => {\n const { lastWalletType } = getLoginStorage()\n if (\n isVisibleModalType === SelectWalletModalType.selectWallet &&\n lastWalletType\n ) {\n onClickWallet(lastWalletType)\n setLoginStorage()\n setIsVisibleModalType(undefined)\n }\n }, [isVisibleModalType])\n\n return (\n {\n setIsVisibleModalType(undefined)\n },\n }}\n header={Connect Wallet}\n >\n \n {buttons.map((wallet, i) => (\n {\n setIsVisibleModalType(undefined)\n onClickWallet(wallet)\n }}\n wallet={wallet}\n />\n ))}\n \n \n )\n}\n\nexport default SelectEtherBaseWalletModal\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilState } from 'recoil'\n\nimport { NETWORK } from 'consts'\n\nimport { Text } from 'components'\nimport Button from 'components/Button'\nimport DefaultModal from 'components/Modal'\nimport ExtLink from 'components/ExtLink'\n\nimport SelectWalletStore, {\n SelectWalletModalType,\n} from 'store/SelectWalletStore'\n\nconst StyledContainer = styled.div`\n padding: 0 30px 30px;\n`\n\nconst TerraExtensionDownModal = (): ReactElement => {\n const handleInstalled = (): void => {\n window.location.reload()\n }\n\n const [isVisibleModalType, setIsVisibleModalType] = useRecoilState(\n SelectWalletStore.isVisibleModalType\n )\n return (\n {\n setIsVisibleModalType(undefined)\n },\n }}\n >\n \n {!navigator.userAgent.includes('Chrome') ? (\n
\n \n {'Bridge currently\\nonly supports desktop Chrome'}\n \n
\n \n \n Download Chrome\n \n \n
\n ) : (\n <>\n
\n \n \n Download Terra Station Extension\n \n \n
\n {'to connect your wallet'}\n
\n
\n \n \n )}\n
\n \n )\n}\n\nexport default TerraExtensionDownModal\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilState } from 'recoil'\n\nimport { NETWORK } from 'consts'\n\nimport { Text } from 'components'\nimport Button from 'components/Button'\nimport DefaultModal from 'components/Modal'\nimport ExtLink from 'components/ExtLink'\n\nimport SelectWalletStore, {\n SelectWalletModalType,\n} from 'store/SelectWalletStore'\n\nconst StyledContainer = styled.div`\n padding: 0 30px 30px;\n`\n\nconst BscExtensionDownModal = (): ReactElement => {\n const handleInstalled = (): void => {\n window.location.reload()\n }\n\n const [isVisibleModalType, setIsVisibleModalType] = useRecoilState(\n SelectWalletStore.isVisibleModalType\n )\n return (\n {\n setIsVisibleModalType(undefined)\n },\n }}\n >\n \n {!navigator.userAgent.includes('Chrome') ? (\n
\n \n {'Bridge currently\\nonly supports desktop Chrome'}\n \n
\n \n \n Download Chrome\n \n \n
\n ) : (\n <>\n
\n \n \n Download BSC Extension\n \n \n
\n {'to connect your wallet'}\n
\n
\n \n \n )}\n
\n \n )\n}\n\nexport default BscExtensionDownModal\n","import { ReactElement } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilState, useRecoilValue } from 'recoil'\n\nimport { COLOR } from 'consts'\nimport { Text } from 'components'\nimport DefaultModal from 'components/Modal'\n\nimport NetworkStore from 'store/NetworkStore'\nimport { BlockChainType } from 'types'\n\nconst StyledContainer = styled.div`\n padding: 20px;\n`\n\nconst StyledTitle = styled(Text)`\n display: block;\n font-size: 24;\n font-weight: 500;\n color: ${COLOR.skyGray};\n font-size: 14px;\n`\n\nconst StyledInfoText = styled(Text)`\n display: block;\n font-size: 14px;\n`\n\nconst NotSupportNetworkModal = (): ReactElement => {\n const [isVisibleModal, setIsVisibleModal] = useRecoilState(\n NetworkStore.isVisibleNotSupportNetworkModal\n )\n const network = useRecoilValue(NetworkStore.triedNotSupportNetwork)\n return (\n {\n setIsVisibleModal(false)\n },\n }}\n header={\n UNSUPPORTED NETWORK\n }\n >\n \n {network && (\n <>\n
\n Your network\n Name : {network.name}\n Chain ID : {network.chainId}\n
\n {network.blockChain === BlockChainType.ethereum ? (\n
\n Supported networks\n Ethereum Mainnet. Chain ID : 1\n \n Ethereum Testnet Ropsten. Chain ID : 3\n \n \n Binance Smart Chain Mainnet. Chain ID : 56{' '}\n \n \n Binance Smart Chain Testnet. Chain ID : 97\n \n
\n ) : (\n
\n Supported networks\n Terra Mainnet\n Terra Testnet Bombay\n
\n )}\n \n )}\n
\n \n )\n}\n\nexport default NotSupportNetworkModal\n","import { ReactElement, useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { useRecoilValue } from 'recoil'\nimport _ from 'lodash'\n\nimport { COLOR } from 'consts'\nimport { Button, Text, Container } from 'components'\nimport NetworkStore from 'store/NetworkStore'\nimport ContractStore from 'store/ContractStore'\n\nimport { ExclamationCircle } from 'react-bootstrap-icons'\n\nconst StyledBg = styled.div`\n position: absolute;\n z-index: 10;\n top: 0;\n background-color: #000000cc;\n width: 100%;\n height: 100%;\n padding: 20px;\n display: flex;\n align-items: center;\n`\n\nconst StyledContainer = styled(Container)`\n background-color: ${COLOR.darkGray};\n max-width: 640px;\n padding: 40px;\n border-radius: 1em;\n @media (max-width: 1199px) {\n padding: 40px;\n }\n @media (max-width: 575px) {\n border-radius: 0;\n padding: 20px;\n }\n`\n\nconst StyledTitle = styled(Text)`\n display: block;\n font-size: 24;\n font-weight: 400;\n color: ${COLOR.red};\n font-size: 18px;\n text-align: center;\n`\n\nconst StyledInfoText = styled(Text)`\n display: block;\n font-size: 14px;\n word-break: break-all;\n white-space: pre-wrap;\n padding: 10px 20px 0;\n text-align: center;\n`\n\nconst RefreshButton = ({ isOnline }: { isOnline: boolean }): ReactElement => (\n <>\n {isOnline && (\n {\n window.location.reload()\n }}\n style={{ marginTop: 40 }}\n >\n Refresh\n \n )}\n \n)\n\nconst NetworkErrorScreen = (): ReactElement => {\n const isTestnet = useRecoilValue(NetworkStore.isTestnet)\n const shuttlePairs = useRecoilValue(ContractStore.initOnlyShuttlePairs)\n const terraWhiteList = useRecoilValue(ContractStore.initOnlyTerraWhiteList)\n const ethWhiteList = useRecoilValue(ContractStore.initOnlyEthWhiteList)\n const bscWhiteList = useRecoilValue(ContractStore.initOnlyBscWhiteList)\n const hmyWhiteList = useRecoilValue(ContractStore.initOnlyHmyWhiteList)\n\n const [isOnline, setIsOnline] = useState(window.navigator.onLine)\n const [showError, setShowError] = useState(false)\n const [title, setTitle] = useState('')\n const [content, setContent] = useState()\n\n const onOffline = (): void => {\n setIsOnline(false)\n setShowError(true)\n setTitle('No internet connection')\n setContent('Please check your internet connection and try again.')\n }\n\n const onOnline = (): void => {\n setIsOnline(true)\n setShowError(false)\n }\n\n const checkIfServerAvailable = async (): Promise<{\n success: boolean\n errorMessage?: string\n }> => {\n try {\n _.forEach(\n [\n { name: 'Shuttle Pairs Json', value: shuttlePairs },\n { name: 'Terra Whitelist Json', value: terraWhiteList },\n { name: 'Ethereum Whitelist Json', value: ethWhiteList },\n { name: 'BSC Whitelist Json', value: bscWhiteList },\n { name: 'Harmony Whitelist Json', value: hmyWhiteList },\n ],\n (item) => {\n if (_.isEmpty(item.value)) {\n throw new Error(`\"${item.name}\" data does not exist.`)\n }\n }\n )\n } catch (error) {\n return {\n success: false,\n errorMessage: _.toString(error),\n }\n }\n\n return {\n success: true,\n }\n }\n\n useEffect(() => {\n if (isOnline) {\n setShowError(false)\n checkIfServerAvailable().then((res) => {\n if (false === res.success) {\n setShowError(true)\n setTitle('Oops! An error occurred.')\n setContent(res?.errorMessage)\n }\n })\n } else {\n onOffline()\n }\n }, [isOnline, isTestnet])\n\n useEffect(() => {\n window.addEventListener('offline', onOffline)\n window.addEventListener('online', onOnline)\n return (): void => {\n window.removeEventListener('offline', onOffline)\n window.removeEventListener('online', onOnline)\n }\n }, [])\n\n return showError ? (\n \n \n
\n \n
\n {title}\n {content}\n \n
\n
\n ) : (\n <>\n )\n}\n\nexport default NetworkErrorScreen\n","import React, { ReactElement, useState } from 'react'\nimport styled from 'styled-components'\n\nimport maintenancePng from 'images/maintenance.png'\n\nimport { COLOR } from 'consts'\n\nimport { Text, View } from 'components'\n\nimport useTerraAssets from 'hooks/useTerraAssets'\nimport { TerraAssetsPathEnum } from 'types'\nimport { useRecoilValue } from 'recoil'\nimport NetworkStore from 'store/NetworkStore'\nimport FormImage from 'components/FormImage'\n\nconst StyledBg = styled.div`\n position: fixed;\n z-index: 10;\n top: 0;\n background-color: ${COLOR.darkGray};\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n`\nconst StyledContainer = styled(View)`\n margin: auto;\n align-items: center;\n max-width: 640px;\n padding: 40px;\n border-radius: 1em;\n @media (max-width: 1199px) {\n padding: 40px;\n }\n @media (max-width: 575px) {\n border-radius: 0;\n padding: 20px;\n }\n`\n\nconst StyledTitle = styled(Text)`\n font-size: 24px;\n font-weight: 500;\n margin-bottom: 16px;\n @media (max-width: 575px) {\n margin-bottom: 8px;\n }\n`\n\nconst StyledDesc = styled(Text)`\n font-size: 16px;\n margin-bottom: 28px;\n @media (max-width: 575px) {\n margin-bottom: 20px;\n }\n`\n\nconst StyledEnterAnyway = styled(Text)`\n cursor: pointer;\n color: ${COLOR.primary};\n text-decoration: underline;\n`\n\nconst UnderMaintenance = (): ReactElement => {\n const terraLocal = useRecoilValue(NetworkStore.terraLocal)\n\n const [hideMaintenance, setHideMaintenance] = useState(false)\n const hide = (): void => setHideMaintenance(true)\n\n const { data: maintenance } = useTerraAssets<{\n mainnet: boolean\n testnet: boolean\n }>({\n path: TerraAssetsPathEnum.station_maintenamce,\n })\n\n const isUnderMaintenance = maintenance?.[terraLocal.name]\n\n if (isUnderMaintenance && false === hideMaintenance) {\n return (\n \n \n \n \n \n Under Maintenance\n We will be back on Columbus-5 soon.\n Enter anyway\n \n \n )\n }\n return \n}\n\nexport default UnderMaintenance\n","export default \"data:image/png;base64,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\"","import { NETWORK } from 'consts'\nimport { useSetRecoilState } from 'recoil'\nimport _ from 'lodash'\n\nimport ContractStore from 'store/ContractStore'\nimport {\n AssetNativeDenomEnum,\n AssetSymbolEnum,\n AssetType,\n TerraAssetsPathEnum,\n} from 'types'\n\nconst defaultList: AssetType[] = [\n {\n symbol: AssetSymbolEnum.Luna,\n name: 'Luna',\n logoURI: 'https://assets.terra.money/icon/60/Luna.png',\n terraToken: AssetNativeDenomEnum.uluna,\n },\n {\n symbol: AssetSymbolEnum.UST,\n name: 'Terra USD',\n logoURI: 'https://assets.terra.money/icon/60/UST.png',\n terraToken: AssetNativeDenomEnum.uusd,\n },\n {\n symbol: AssetSymbolEnum.KRT,\n name: 'Terra KRW',\n logoURI: 'https://assets.terra.money/icon/60/KRT.png',\n terraToken: AssetNativeDenomEnum.ukrw,\n },\n {\n symbol: AssetSymbolEnum.SDT,\n name: 'Terra SDR',\n logoURI: 'https://assets.terra.money/icon/60/SDT.png',\n terraToken: AssetNativeDenomEnum.usdr,\n },\n {\n symbol: AssetSymbolEnum.MNT,\n name: 'Terra MNT',\n logoURI: 'https://assets.terra.money/icon/60/MNT.png',\n terraToken: AssetNativeDenomEnum.umnt,\n },\n]\n\ntype ShuttlePairType = Record<'mainnet' | 'testnet', Record>\n\ntype TerraWhiteListType = Record<\n 'mainnet' | 'testnet',\n Record<\n string,\n {\n protocol: string\n symbol: string\n name?: string\n token: string\n icon: string\n }\n >\n>\n\ntype TerraIbcListType = Record<\n 'mainnet' | 'testnet',\n Record<\n string,\n {\n denom: string\n path: string\n base_denom: string\n symbol: string\n name: string\n icon: string\n }\n >\n>\n\nconst useApp = (): {\n initApp: () => Promise\n} => {\n const setAssetList = useSetRecoilState(ContractStore.initOnlyAssetList)\n const setShuttlePairs = useSetRecoilState(ContractStore.initOnlyShuttlePairs)\n const setTerraWhiteList = useSetRecoilState(\n ContractStore.initOnlyTerraWhiteList\n )\n const setEthWhiteList = useSetRecoilState(ContractStore.initOnlyEthWhiteList)\n const setBscWhiteList = useSetRecoilState(ContractStore.initOnlyBscWhiteList)\n const setHmyWhiteList = useSetRecoilState(ContractStore.initOnlyHmyWhiteList)\n const setIbcWhiteList = useSetRecoilState(ContractStore.initOnlyIbcWhiteList)\n\n const fetchAssets = async (path: TerraAssetsPathEnum): Promise => {\n return (await fetch(`${NETWORK.TERRA_ASSETS_URL}${path}`)).json()\n }\n\n const getContractAddress = async (): Promise => {\n try {\n const fetchPairJson: ShuttlePairType = await fetchAssets(\n TerraAssetsPathEnum.cw20_pairs\n )\n const formattedPairJson = _.reduce<\n ShuttlePairType,\n Record>\n >(\n fetchPairJson,\n (result, pairs, network) => {\n const val = _.reduce<\n Record,\n Record\n >(\n pairs,\n (obj, arr, tokenAddress) => {\n obj[arr[1]] = tokenAddress\n return obj\n },\n {}\n )\n result[network] = val\n return result\n },\n {}\n )\n setShuttlePairs(formattedPairJson)\n\n const terraListJson: TerraWhiteListType = await fetchAssets(\n TerraAssetsPathEnum.cw20_tokens\n )\n const ibcListJson: TerraIbcListType = await fetchAssets(\n TerraAssetsPathEnum.ibc_tokens\n )\n\n const tokenList = _.reduce<\n TerraWhiteListType,\n Record\n >(\n terraListJson,\n (result, pairs, network) => {\n const val: AssetType[] = _.map(pairs, (item) => {\n return {\n symbol: item.symbol as AssetSymbolEnum,\n name: item.name || item.protocol,\n logoURI: item.icon,\n terraToken: item.token,\n }\n })\n // TODO remove hard coding - disable bETH\n .filter(({ terraToken }) => {\n return (\n terraToken !== 'terra1dzhzukyezv0etz22ud940z7adyv7xgcjkahuun' &&\n terraToken !== 'terra19mkj9nec6e3y5754tlnuz4vem7lzh4n0lc2s3l'\n )\n })\n\n result[network] = defaultList.concat(val)\n return result\n },\n {}\n )\n\n const assetList = _.reduce>(\n ibcListJson,\n (result, pairs, network) => {\n const val: AssetType[] = _.map(pairs, (item) => {\n return {\n symbol: item.symbol as AssetSymbolEnum,\n name: item.name,\n logoURI: item.icon,\n terraToken: item.denom,\n }\n })\n result[network] = tokenList[network].concat(val)\n return result\n },\n {}\n )\n setAssetList(assetList)\n\n const formattedTerraListJson = _.reduce<\n any,\n Record>\n >(\n assetList,\n (result, pairs, network) => {\n const val = _.reduce<{ terraToken: string }, Record>(\n pairs,\n (obj, { terraToken }) => {\n obj[terraToken] = terraToken\n return obj\n },\n {\n [AssetNativeDenomEnum.uluna]: AssetNativeDenomEnum.uluna,\n [AssetNativeDenomEnum.uusd]: AssetNativeDenomEnum.uusd,\n [AssetNativeDenomEnum.ukrw]: AssetNativeDenomEnum.ukrw,\n [AssetNativeDenomEnum.usdr]: AssetNativeDenomEnum.usdr,\n [AssetNativeDenomEnum.umnt]: AssetNativeDenomEnum.umnt,\n }\n )\n result[network] = val\n return result\n },\n {}\n )\n setTerraWhiteList(formattedTerraListJson)\n\n const ethListJson = await fetchAssets(TerraAssetsPathEnum.shuttle_eth)\n setEthWhiteList(ethListJson)\n\n const bscListJson = await fetchAssets(TerraAssetsPathEnum.shuttle_bsc)\n setBscWhiteList(bscListJson)\n\n const hmyListJson = await fetchAssets(TerraAssetsPathEnum.shuttle_hmy)\n setHmyWhiteList(hmyListJson)\n const ibcTokensJson = await fetchAssets(TerraAssetsPathEnum.ibc_tokens)\n setIbcWhiteList(ibcTokensJson)\n } catch {}\n }\n\n const initApp = async (): Promise => {\n return getContractAddress()\n }\n\n return {\n initApp,\n }\n}\n\nexport default useApp\n","import { ReactElement, useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { BrowserRouter } from 'react-router-dom'\nimport routes from 'routes'\nimport { QueryClient, QueryClientProvider } from 'react-query'\n\nimport Header from 'components/layouts/Header'\nimport Footer from 'components/layouts/Footer'\nimport SelectWalletModal from './SelectWalletModal'\nimport TerraExtensionDownModal from './TerraExtensionDownModal'\nimport BscExtensionDownModal from './BscExtensionDownModal'\nimport NotSupportNetworkModal from './NotSupportNetworkModal'\nimport NetworkErrorScreen from './NetworkErrorScreen'\nimport UnderMaintenance from './UnderMaintenance'\n\nimport useApp from './useApp'\n\nconst queryClient = new QueryClient()\n\nconst StyledContainer = styled.div`\n color: white;\n min-height: 100%;\n`\n\nconst App = (): ReactElement => {\n const [initComplete, setInitComplete] = useState(false)\n\n const { initApp } = useApp()\n useEffect(() => {\n initApp().then(() => {\n setInitComplete(true)\n })\n }, [])\n\n return (\n \n \n {initComplete && (\n <>\n \n
\n {routes()}\n