├── .env.production ├── .eslintrc.json ├── .gitattributes ├── .gitignore ├── .prettierrc ├── .yarnrc ├── LICENSE ├── README.md ├── config ├── env.js ├── getHttpsConfig.js ├── jest │ ├── cssTransform.js │ └── fileTransform.js ├── modules.js ├── paths.js ├── pnpTs.js ├── webpack.config.js └── webpackDevServer.config.js ├── cypress.json ├── cypress ├── integration │ ├── add-liquidity.test.ts │ ├── landing.test.ts │ ├── lists.test.ts │ ├── migrate-v1.test.ts │ ├── pool.test.ts │ ├── remove-liquidity.test.ts │ ├── send.test.ts │ ├── swap.test.ts │ └── token-warning.ts ├── support │ ├── commands.d.ts │ ├── commands.js │ └── index.js └── tsconfig.json ├── npminstall-debug.log ├── package.json ├── public ├── 451.html ├── favicon.ico ├── fonts │ ├── Manrope1.woff2 │ ├── Manrope2.woff2 │ ├── Manrope3.woff2 │ ├── Manrope4.woff2 │ └── fonts.css ├── images │ ├── 192x192_App_Icon.png │ └── 512x512_App_Icon.png ├── index.html ├── locales │ ├── en.json │ └── zh-CN.json ├── logo.png ├── lucid.js └── manifest.json ├── scripts ├── build.js ├── start.js └── test.js ├── src ├── assets │ ├── images │ │ ├── BNB.svg │ │ ├── BitKeep.jpg │ │ ├── BitKeep.png │ │ ├── BitKeep.svg │ │ ├── Coin98.png │ │ ├── GnosisSafe.svg │ │ ├── HT.png │ │ ├── OKT.png │ │ ├── OKX.png │ │ ├── TERRA.png │ │ ├── TPT.jpg │ │ ├── TWT.png │ │ ├── XDEFI.png │ │ ├── arrow-down-blue.svg │ │ ├── arrow-down-grey.svg │ │ ├── arrow-right-white.png │ │ ├── arrow-right.svg │ │ ├── blue-loader.svg │ │ ├── circle-grey.svg │ │ ├── circle.svg │ │ ├── clover.png │ │ ├── clv.png │ │ ├── coin │ │ │ ├── any │ │ │ │ ├── ANY.svg │ │ │ │ ├── anyDAI.png │ │ │ │ ├── anyDOPE.png │ │ │ │ ├── anyETH.svg │ │ │ │ ├── anyHGET.png │ │ │ │ ├── anyHYVE.png │ │ │ │ ├── anyMIM.png │ │ │ │ ├── anyUSDC.png │ │ │ │ ├── anyXDEX.png │ │ │ │ └── anysSPELL.png │ │ │ └── source │ │ │ │ ├── ADA.png │ │ │ │ ├── ALGO.png │ │ │ │ ├── ANY.svg │ │ │ │ ├── APT.png │ │ │ │ ├── ARB.png │ │ │ │ ├── ARBITRUM.png │ │ │ │ ├── ASTR.png │ │ │ │ ├── AURORA.png │ │ │ │ ├── AVAX.png │ │ │ │ ├── BAS.svg │ │ │ │ ├── BASEGOERLI.svg │ │ │ │ ├── BCH.svg │ │ │ │ ├── BIT.jpg │ │ │ │ ├── BLOCK.png │ │ │ │ ├── BNB.svg │ │ │ │ ├── BOBABEAM.svg │ │ │ │ ├── BRISE.png │ │ │ │ ├── BTC.png │ │ │ │ ├── BTT.png │ │ │ │ ├── BitKeep.svg │ │ │ │ ├── CANTO.png │ │ │ │ ├── CELO.png │ │ │ │ ├── CFX.png │ │ │ │ ├── CKB.png │ │ │ │ ├── CLV.svg │ │ │ │ ├── CMP.png │ │ │ │ ├── COLX.png │ │ │ │ ├── CORE.svg │ │ │ │ ├── CRAB.png │ │ │ │ ├── CRO.png │ │ │ │ ├── CUBE.png │ │ │ │ ├── DAI.png │ │ │ │ ├── DATE.svg │ │ │ │ ├── DCORE.svg │ │ │ │ ├── DEP.png │ │ │ │ ├── DND.png │ │ │ │ ├── DOPE.png │ │ │ │ ├── DXT.png │ │ │ │ ├── EKTA.png │ │ │ │ ├── ETC.png │ │ │ │ ├── ETH.svg │ │ │ │ ├── ETHW.png │ │ │ │ ├── EVMOS.png │ │ │ │ ├── FANTOMANIMALS.png │ │ │ │ ├── FITFI.png │ │ │ │ ├── FLOW.png │ │ │ │ ├── FRA.jpg │ │ │ │ ├── FSN.svg │ │ │ │ ├── FTM.png │ │ │ │ ├── FUSE.png │ │ │ │ ├── GLMR.png │ │ │ │ ├── GNO.png │ │ │ │ ├── GT.png │ │ │ │ ├── HGET.png │ │ │ │ ├── HOO.png │ │ │ │ ├── HPB.png │ │ │ │ ├── HT.png │ │ │ │ ├── HYVE.png │ │ │ │ ├── IOTA.png │ │ │ │ ├── IOTX.png │ │ │ │ ├── JEWEL.png │ │ │ │ ├── KAI.png │ │ │ │ ├── KAVA.png │ │ │ │ ├── KCC.svg │ │ │ │ ├── KCS.svg │ │ │ │ ├── KEK.png │ │ │ │ ├── KLAY.png │ │ │ │ ├── LTC.png │ │ │ │ ├── LUNA.png │ │ │ │ ├── MATIC.png │ │ │ │ ├── METIS.png │ │ │ │ ├── MIM.png │ │ │ │ ├── MINT.png │ │ │ │ ├── MINTME.png │ │ │ │ ├── MOVR.png │ │ │ │ ├── MULTI.png │ │ │ │ ├── NAHMII3.png │ │ │ │ ├── NAS.png │ │ │ │ ├── NEAR.png │ │ │ │ ├── NEON.png │ │ │ │ ├── NOVA.png │ │ │ │ ├── OETH.png │ │ │ │ ├── OKT.png │ │ │ │ ├── OMAX.png │ │ │ │ ├── ONE.png │ │ │ │ ├── ONT.png │ │ │ │ ├── ONUS.png │ │ │ │ ├── OPTIMISM.png │ │ │ │ ├── PFSC.svg │ │ │ │ ├── PLQ.png │ │ │ │ ├── PolygonzkEVM.png │ │ │ │ ├── RBTC.png │ │ │ │ ├── REDLC.png │ │ │ │ ├── REEF.png │ │ │ │ ├── REI.png │ │ │ │ ├── RON.png │ │ │ │ ├── ROSE.png │ │ │ │ ├── RPG.png │ │ │ │ ├── SAMA.png │ │ │ │ ├── SDN.png │ │ │ │ ├── SEI.png │ │ │ │ ├── SHM.jpg │ │ │ │ ├── SMR.png │ │ │ │ ├── SOL.png │ │ │ │ ├── SYS.png │ │ │ │ ├── TERRA.png │ │ │ │ ├── TLOS.png │ │ │ │ ├── TOMO.png │ │ │ │ ├── TRO.png │ │ │ │ ├── TRX.png │ │ │ │ ├── TST.png │ │ │ │ ├── TT.png │ │ │ │ ├── USDC.png │ │ │ │ ├── USDT.png │ │ │ │ ├── UST.png │ │ │ │ ├── VLX.png │ │ │ │ ├── WDOGE.svg │ │ │ │ ├── WEMIX.png │ │ │ │ ├── WETH.svg │ │ │ │ ├── XANA.png │ │ │ │ ├── XDEX.png │ │ │ │ ├── XETA.png │ │ │ │ ├── XLM.png │ │ │ │ ├── XRP.png │ │ │ │ ├── ZBC.png │ │ │ │ ├── ZKR.svg │ │ │ │ ├── milkADA.svg │ │ │ │ ├── sSPELL.png │ │ │ │ ├── scroll.png │ │ │ │ ├── xDAI.png │ │ │ │ └── zkSync.png │ │ ├── coinbaseWalletIcon.svg │ │ ├── dropdown-blue.svg │ │ ├── dropdown.svg │ │ ├── dropup-blue.svg │ │ ├── ethereum-logo.png │ │ ├── fortmaticIcon.png │ │ ├── icon │ │ │ ├── Next.svg │ │ │ ├── Previous.svg │ │ │ ├── add-2-black.svg │ │ │ ├── add-2-purpl.svg │ │ │ ├── add-2.svg │ │ │ ├── add-fff.svg │ │ │ ├── add-white.svg │ │ │ ├── add.svg │ │ │ ├── address.svg │ │ │ ├── any-illustration.svg │ │ │ ├── any-purpl.svg │ │ │ ├── any.svg │ │ │ ├── anyIcon.svg │ │ │ ├── application-purpl.svg │ │ │ ├── application.svg │ │ │ ├── arrowDown.svg │ │ │ ├── arrowRighr-purple.svg │ │ │ ├── arrowRight.svg │ │ │ ├── arrowTopRight.png │ │ │ ├── arrowTopRight.svg │ │ │ ├── bridge-gray.svg │ │ │ ├── bridge-purpl.svg │ │ │ ├── bridge-white-btn.svg │ │ │ ├── bridge-white.svg │ │ │ ├── bridge.svg │ │ │ ├── bulb.svg │ │ │ ├── check.svg │ │ │ ├── code-white.svg │ │ │ ├── code.svg │ │ │ ├── coingecko-white.png │ │ │ ├── coingecko.png │ │ │ ├── coinmarketcap-white.png │ │ │ ├── coinmarketcap.png │ │ │ ├── create-exchange-purpl.svg │ │ │ ├── create-exchange-white.svg │ │ │ ├── create-exchange.svg │ │ │ ├── day.svg │ │ │ ├── deposit-purple.svg │ │ │ ├── deposit.svg │ │ │ ├── documents-purpl.svg │ │ │ ├── documents.svg │ │ │ ├── done.svg │ │ │ ├── edit.svg │ │ │ ├── explorer-purpl.png │ │ │ ├── explorer.png │ │ │ ├── explorer.svg │ │ │ ├── github-white.png │ │ │ ├── github.png │ │ │ ├── graph-up.svg │ │ │ ├── inventory.svg │ │ │ ├── markets-purpl.svg │ │ │ ├── markets.svg │ │ │ ├── medium-white.svg │ │ │ ├── medium.svg │ │ │ ├── mint-black.svg │ │ │ ├── mint.svg │ │ │ ├── network-purpl.svg │ │ │ ├── network-white.svg │ │ │ ├── network.svg │ │ │ ├── night.svg │ │ │ ├── no-coin.svg │ │ │ ├── paste.svg │ │ │ ├── path.svg │ │ │ ├── pool-purpl.svg │ │ │ ├── pool.svg │ │ │ ├── remove-black.svg │ │ │ ├── remove-purpl.svg │ │ │ ├── remove-white.svg │ │ │ ├── remove.svg │ │ │ ├── revert.svg │ │ │ ├── router.svg │ │ │ ├── schedule.svg │ │ │ ├── search.svg │ │ │ ├── send-purpl.svg │ │ │ ├── send-white.svg │ │ │ ├── send.svg │ │ │ ├── slippage.svg │ │ │ ├── swap-purpl.svg │ │ │ ├── swap-purple.svg │ │ │ ├── swap-white.svg │ │ │ ├── swap.svg │ │ │ ├── telegram-white.svg │ │ │ ├── telegram.svg │ │ │ ├── twitter-white.svg │ │ │ ├── twitter.svg │ │ │ ├── unlock.svg │ │ │ ├── unlockBlack.svg │ │ │ ├── wallet.svg │ │ │ ├── warning.svg │ │ │ ├── week.svg │ │ │ ├── withdraw-purple.svg │ │ │ └── withdraw.svg │ │ ├── link.svg │ │ ├── magnifying-glass.svg │ │ ├── menu.svg │ │ ├── metamask.png │ │ ├── metamask.svg │ │ ├── plus-blue.svg │ │ ├── plus-grey.svg │ │ ├── portisIcon.png │ │ ├── question-mark.svg │ │ ├── question.svg │ │ ├── spinner.svg │ │ ├── tally.png │ │ ├── trustWallet.png │ │ ├── walletConnectIcon.svg │ │ └── x.svg │ └── svg │ │ ├── QR.svg │ │ ├── active │ │ ├── logo.png │ │ ├── logo_color.png │ │ └── logo_white.png │ │ ├── lightcircle.svg │ │ ├── logo.png │ │ ├── logo.svg │ │ ├── logo_color.png │ │ ├── logo_white.png │ │ └── logo_white.svg ├── components │ ├── AccountDetails │ │ ├── Copy.tsx │ │ ├── NoWalletTxList.tsx │ │ ├── Transaction.tsx │ │ └── index.tsx │ ├── AddressInputPanel │ │ └── index.tsx │ ├── Button │ │ └── index.tsx │ ├── Card │ │ └── index.tsx │ ├── Column │ │ └── index.tsx │ ├── CrossChainPanel │ │ ├── hooks.ts │ │ ├── reminder.tsx │ │ └── selectChainID.tsx │ ├── CrossChainPanelV2 │ │ ├── CrossChainButton.tsx │ │ ├── CrossChainTip.tsx │ │ ├── confirmModal.tsx │ │ ├── crossChainBTC.tsx │ │ ├── crossChainEVM.tsx │ │ ├── crossChainNonEVM.tsx │ │ ├── errorTip.tsx │ │ ├── hooks.ts │ │ ├── index.tsx │ │ ├── reminder.tsx │ │ ├── routerList.tsx │ │ ├── selectChainID.tsx │ │ ├── txnsDtilsModal.tsx │ │ ├── txnsErrorTipModal.tsx │ │ └── txnsListModal.tsx │ ├── CrossChainTitle │ │ └── index.tsx │ ├── CurrencySelect │ │ ├── CommonBases.tsx │ │ ├── CurrencyList.tsx │ │ ├── searchModal.tsx │ │ ├── selectCurrency.tsx │ │ └── styleds.tsx │ ├── Farming │ │ ├── common.ts │ │ └── index.tsx │ ├── GasSwap │ │ ├── chainlist.ts │ │ ├── crossChainEVM.tsx │ │ ├── index.tsx │ │ └── styleds.tsx │ ├── Header │ │ ├── NavList.tsx │ │ ├── NavListTop.tsx │ │ ├── Polling.tsx │ │ ├── SelectNetwork.tsx │ │ ├── URLWarning.tsx │ │ ├── index.tsx │ │ └── nav.js │ ├── Identicon │ │ └── index.tsx │ ├── Lazyload │ │ ├── LazyImage.tsx │ │ ├── LazyList.tsx │ │ ├── Lazyload.tsx │ │ ├── LazyloadService.ts │ │ └── Loading.tsx │ ├── LiquidityPool │ │ └── index.tsx │ ├── ListLogo │ │ └── index.tsx │ ├── Loader │ │ └── index.tsx │ ├── Logo │ │ └── index.tsx │ ├── Modal │ │ ├── ModalContent.tsx │ │ └── index.tsx │ ├── ModalViews │ │ └── index.tsx │ ├── NonApprove │ │ ├── empty.json │ │ ├── hooks.ts │ │ ├── index.tsx │ │ └── queryIsNeedNonApprove.tsx │ ├── NumericalInput │ │ └── index.tsx │ ├── Popover │ │ └── index.tsx │ ├── Popups │ │ ├── ListUpdatePopup.tsx │ │ ├── PopupItem.tsx │ │ ├── TransactionPopup.tsx │ │ └── index.tsx │ ├── QRcode │ │ └── index.tsx │ ├── QuestionHelper │ │ └── index.tsx │ ├── Row │ │ └── index.tsx │ ├── SearchModal │ │ ├── SortButton.tsx │ │ ├── filtering.ts │ │ ├── sorting.ts │ │ └── styleds.tsx │ ├── Settings │ │ ├── ModeSetting.tsx │ │ ├── index.tsx │ │ └── interfaceSetting.tsx │ ├── SwapIcon │ │ └── index.tsx │ ├── Title │ │ └── index.tsx │ ├── Toggle │ │ └── index.tsx │ ├── TokenLogo │ │ └── index.tsx │ ├── TokenWarningModal │ │ └── index.tsx │ ├── Tooltip │ │ └── index.tsx │ ├── Transaction │ │ ├── details.tsx │ │ ├── txModal.tsx │ │ └── txnsProgress.tsx │ ├── TransactionSettings │ │ └── index.tsx │ ├── WalletModal │ │ ├── Option.tsx │ │ ├── PendingView.tsx │ │ └── index.tsx │ ├── WarningTip │ │ └── index.tsx │ ├── Web3ReactManager │ │ └── index.tsx │ ├── Web3Status │ │ └── index.tsx │ └── swap │ │ └── styleds.tsx ├── config │ ├── chainConfig │ │ ├── apt.js │ │ ├── arbitrum.js │ │ ├── astar.js │ │ ├── atom.js │ │ ├── aurora.js │ │ ├── avax.js │ │ ├── bas.js │ │ ├── bch.js │ │ ├── bit.ts │ │ ├── block.js │ │ ├── bobabeam.js │ │ ├── brise.ts │ │ ├── bsc.js │ │ ├── btc.js │ │ ├── btt.js │ │ ├── canto.ts │ │ ├── cardano.js │ │ ├── celo.js │ │ ├── cfx.js │ │ ├── chainId.ts │ │ ├── ckb.ts │ │ ├── clv.js │ │ ├── cmp.js │ │ ├── colx.js │ │ ├── crab.js │ │ ├── cro.js │ │ ├── cube.js │ │ ├── dnd.ts │ │ ├── doge.js │ │ ├── dxt.ts │ │ ├── ekta.ts │ │ ├── etc.js │ │ ├── eth.js │ │ ├── ethw.ts │ │ ├── evmos.js │ │ ├── fitfi.js │ │ ├── flow.js │ │ ├── fra.ts │ │ ├── fsn.js │ │ ├── ftm.js │ │ ├── fuse.js │ │ ├── goerli.js │ │ ├── gt.js │ │ ├── hoo.js │ │ ├── hpb.ts │ │ ├── ht.ts │ │ ├── index.ts │ │ ├── intain.js │ │ ├── iota.js │ │ ├── iotex.js │ │ ├── jewel.js │ │ ├── kai.js │ │ ├── kava.js │ │ ├── kcc.js │ │ ├── kek.ts │ │ ├── klay.js │ │ ├── ltc.js │ │ ├── matic.js │ │ ├── methods.js │ │ ├── metis.js │ │ ├── milkada.js │ │ ├── milkalgo.ts │ │ ├── mint.ts │ │ ├── mintme.js │ │ ├── moonbeam.js │ │ ├── movr.js │ │ ├── nahmii3.ts │ │ ├── nas.js │ │ ├── near.js │ │ ├── neon.ts │ │ ├── nova.js │ │ ├── oeth.js │ │ ├── okt.js │ │ ├── omax.ts │ │ ├── omgx.js │ │ ├── one.js │ │ ├── ont.js │ │ ├── onus.ts │ │ ├── optimism.js │ │ ├── pft.js │ │ ├── plq.ts │ │ ├── polygonzkevm.ts │ │ ├── rbtc.js │ │ ├── redlc.ts │ │ ├── reef.ts │ │ ├── rei.js │ │ ├── ron.js │ │ ├── rose.js │ │ ├── rpg.js │ │ ├── sama.ts │ │ ├── scroll.ts │ │ ├── sdn.js │ │ ├── shm.ts │ │ ├── smr.ts │ │ ├── sol.js │ │ ├── sys.js │ │ ├── terra.js │ │ ├── tlos.js │ │ ├── tomo.js │ │ ├── trx.js │ │ ├── tst.ts │ │ ├── tt.js │ │ ├── twemix.ts │ │ ├── vlx.js │ │ ├── xana.ts │ │ ├── xdai.js │ │ ├── xlm.js │ │ ├── xrp.js │ │ ├── zbc.ts │ │ └── zksync.ts │ ├── constant.ts │ ├── farmlist.ts │ ├── index.ts │ ├── status.ts │ └── tools │ │ ├── getUrlParams.ts │ │ └── methods.ts ├── connectors │ ├── NetworkConnector.ts │ ├── bitkeep │ │ └── index.ts │ ├── gnosis-safe │ │ ├── hooks.ts │ │ └── index.ts │ ├── index.ts │ ├── tally │ │ └── index.ts │ └── xdefi │ │ └── index.ts ├── constants │ ├── abis │ │ ├── anycall.json │ │ ├── bridge │ │ │ ├── RouterAction.json │ │ │ ├── RouterConfig.json │ │ │ ├── RouterSwapAction.json │ │ │ ├── RouterSwapActionV2.json │ │ │ ├── anycallNFT721.json │ │ │ ├── erc1155.json │ │ │ ├── erc1155.ts │ │ │ ├── erc721.json │ │ │ ├── erc721.ts │ │ │ ├── nft.json │ │ │ ├── swapBTCABI.json │ │ │ └── swapETHABI.json │ │ ├── client.json │ │ ├── ens-public-resolver.json │ │ ├── ens-registrar.json │ │ ├── erc20.json │ │ ├── erc20.ts │ │ ├── erc20_bytes32.json │ │ ├── farm │ │ │ └── MasterChef.json │ │ ├── migrator.json │ │ ├── migrator.ts │ │ ├── swapMULTIABI.json │ │ ├── swapMULTIABI.ts │ │ ├── v2_factory.json │ │ ├── veMULTI.json │ │ ├── veMULTI.ts │ │ ├── veMULTIReward.json │ │ ├── veMULTIReward.ts │ │ ├── veshare.json │ │ ├── veshare.ts │ │ └── weth.json │ ├── index.ts │ ├── lists.ts │ ├── multicall │ │ ├── abi.json │ │ └── index.ts │ └── v1 │ │ ├── index.ts │ │ ├── v1_exchange.json │ │ └── v1_factory.json ├── data │ └── Allowances.ts ├── hooks │ ├── Tokens.ts │ ├── index.ts │ ├── useActiveReact.ts │ ├── useAllBalances.ts │ ├── useApproveCallback.ts │ ├── useBridgeCallback.ts │ ├── useContract.ts │ ├── useCopyClipboard.ts │ ├── useDebounce.ts │ ├── useENS.ts │ ├── useENSAddress.ts │ ├── useENSContentHash.ts │ ├── useENSName.ts │ ├── useFetchListCallback.ts │ ├── useHttpLocations.ts │ ├── useInterval.ts │ ├── useIsWindowVisible.ts │ ├── useNFTApproveCallback.ts │ ├── useNFTCallback.ts │ ├── useOnClickOutside.tsx │ ├── useParsedQueryString.ts │ ├── usePools │ │ ├── evm.ts │ │ └── index.ts │ ├── usePrevious.ts │ ├── useTerraBalance.ts │ ├── useToggledVersion.ts │ ├── useWallet.ts │ └── useWrapCallback.ts ├── i18n.ts ├── index.tsx ├── nonevm │ ├── allowances │ │ └── index.ts │ ├── apt │ │ ├── actions.ts │ │ ├── index.ts │ │ ├── reducer.ts │ │ └── updater.ts │ ├── atom │ │ ├── actions.ts │ │ ├── index.ts │ │ ├── reducer.ts │ │ ├── updater.ts │ │ └── walletConfig.ts │ ├── btc │ │ ├── actions.ts │ │ ├── index.ts │ │ ├── reducer.ts │ │ └── updater.ts │ ├── cardano │ │ ├── actions.ts │ │ ├── index.ts │ │ ├── reducer.ts │ │ └── updater.ts │ ├── flow │ │ ├── actions.ts │ │ ├── index.ts │ │ ├── reducer.ts │ │ └── updater.ts │ ├── getHash │ │ └── index.ts │ ├── hooks │ │ ├── actions.ts │ │ ├── index.ts │ │ └── reducer.ts │ ├── index.ts │ ├── nas │ │ ├── index.ts │ │ └── updater.ts │ ├── near │ │ ├── WalletSelectorContext.tsx │ │ ├── config.ts │ │ └── index.ts │ ├── pools │ │ └── index.ts │ ├── reef │ │ ├── abi.json │ │ ├── actions.ts │ │ ├── index.ts │ │ ├── reducer.ts │ │ └── updater.ts │ ├── solana │ │ ├── actions.ts │ │ ├── index.ts │ │ ├── reducer.ts │ │ ├── router.json │ │ └── updater.ts │ ├── stellar │ │ ├── actions.ts │ │ ├── index.ts │ │ └── reducer.ts │ ├── temp │ │ ├── actions.ts │ │ ├── index.ts │ │ ├── reducer.ts │ │ └── updater.ts │ ├── terra │ │ ├── currency.ts │ │ └── index.ts │ ├── trx │ │ ├── abi copy.json │ │ ├── abi.json │ │ ├── actions.ts │ │ ├── crosschainABI.ts │ │ ├── index.ts │ │ ├── reducer.ts │ │ └── updater.ts │ ├── updater.tsx │ └── xrp │ │ └── index.ts ├── pages │ ├── App.tsx │ ├── AppBody.tsx │ ├── AppContainer.tsx │ ├── CroseNFT │ │ ├── index.tsx │ │ ├── selectChainId.tsx │ │ └── selectCurrency.tsx │ ├── CrossChain │ │ └── reminder.tsx │ ├── Dashboard │ │ ├── index.tsx │ │ └── styleds.ts │ ├── Farms │ │ ├── ANYFarming.tsx │ │ ├── FarmsList.tsx │ │ └── NoanyFarming.tsx │ ├── History │ │ ├── details.tsx │ │ ├── hooks.ts │ │ └── index.tsx │ ├── MergeCrossChainV2 │ │ └── index.tsx │ ├── Pools │ │ ├── index.tsx │ │ ├── morePool.tsx │ │ ├── poolList.tsx │ │ └── poolTip.tsx │ ├── SwapMULTI │ │ └── index.tsx │ ├── Test │ │ └── index.tsx │ ├── Vest │ │ ├── create.tsx │ │ ├── data.ts │ │ ├── hooks.ts │ │ ├── index.tsx │ │ ├── lockAmount.tsx │ │ ├── lockDuration.tsx │ │ ├── manger.tsx │ │ ├── style.ts │ │ ├── veshare.ts │ │ └── vestingInfo.tsx │ └── styled.ts ├── react-app-env.d.ts ├── state │ ├── application │ │ ├── actions.ts │ │ ├── hooks.ts │ │ ├── reducer.ts │ │ └── updater.ts │ ├── burn │ │ ├── actions.ts │ │ ├── hooks.ts │ │ └── reducer.ts │ ├── global │ │ └── actions.ts │ ├── index.ts │ ├── lists │ │ ├── actions.ts │ │ ├── hooks.ts │ │ ├── reducer.test.ts │ │ ├── reducer.ts │ │ └── updater.ts │ ├── multicall │ │ ├── actions.test.ts │ │ ├── actions.ts │ │ ├── hooks.ts │ │ ├── reducer.test.ts │ │ ├── reducer.ts │ │ ├── updater.test.ts │ │ └── updater.tsx │ ├── nft │ │ ├── actions.ts │ │ ├── hooks.ts │ │ └── reducer.ts │ ├── pools │ │ ├── actions.ts │ │ ├── hooks.ts │ │ └── reducer.ts │ ├── rpc │ │ ├── actions.ts │ │ ├── hooks.ts │ │ ├── reducer.ts │ │ └── updater.tsx │ ├── swap │ │ ├── actions.ts │ │ ├── hooks.test.ts │ │ ├── hooks.ts │ │ ├── reducer.test.ts │ │ └── reducer.ts │ ├── transactions │ │ ├── actions.ts │ │ ├── hooks.tsx │ │ ├── reducer.ts │ │ ├── updater.test.ts │ │ └── updater.tsx │ ├── updaters.tsx │ ├── user │ │ ├── actions.ts │ │ ├── hooks.tsx │ │ ├── reducer.test.ts │ │ ├── reducer.ts │ │ └── updater.tsx │ └── wallet │ │ ├── actions.ts │ │ ├── hooks.ts │ │ ├── reducer.ts │ │ └── updater.ts ├── theme │ ├── DarkModeQueryParamReader.tsx │ ├── components.tsx │ ├── index.tsx │ └── styled.d.ts └── utils │ ├── bridge │ ├── getBalanceV2.ts │ ├── register.ts │ └── type.ts │ ├── chunkArray.test.ts │ ├── chunkArray.ts │ ├── contenthashToUri.test.skip.ts │ ├── contenthashToUri.ts │ ├── formatBignumber │ ├── fraction.ts │ └── index.ts │ ├── getLibrary.ts │ ├── getNFTimage.ts │ ├── index.test.ts │ ├── index.ts │ ├── indexedDB │ ├── config.ts │ ├── index.ts │ └── tokenlist.ts │ ├── isAddress │ ├── BTC.ts │ └── index.ts │ ├── isZero.ts │ ├── listVersionLabel.ts │ ├── parseENSAddress.test.ts │ ├── parseENSAddress.ts │ ├── resolveENSContentHash.ts │ ├── retry.test.ts │ ├── retry.ts │ ├── tools │ ├── axios.ts │ ├── getPrice.ts │ ├── multicall.js │ ├── tools.ts │ ├── useBatchData.js │ └── web3UtilsV2.js │ ├── uriToHttp.test.ts │ └── uriToHttp.ts ├── tsconfig.json └── yarn.lock /.env.production: -------------------------------------------------------------------------------- 1 | REACT_APP_CHAIN_ID="1" 2 | REACT_APP_NETWORK_URL="https://mainnet.infura.io/v3/099fc58e0de9451d80b18d7c74caa7c1" 3 | REACT_APP_PORTIS_ID="c0e2bf01-4b08-4fd5-ac7b-8e26b58cd236" 4 | REACT_APP_FORTMATIC_KEY="pk_live_F937DF033A1666BF" 5 | REACT_APP_GOOGLE_ANALYTICS_ID="UA-128182339-4" 6 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "@typescript-eslint/parser", 3 | "parserOptions": { 4 | "ecmaVersion": 2020, 5 | "sourceType": "module", 6 | "ecmaFeatures": { 7 | // Allows for the parsing of JSX 8 | "jsx": true 9 | } 10 | }, 11 | "ignorePatterns": [ 12 | "node_modules/**/*" 13 | ], 14 | "settings": { 15 | "react": { 16 | "version": "detect" 17 | } 18 | }, 19 | "extends": [ 20 | "plugin:react/recommended", 21 | "plugin:@typescript-eslint/recommended", 22 | "prettier/@typescript-eslint", 23 | "plugin:prettier/recommended" 24 | ], 25 | "rules": { 26 | "@typescript-eslint/explicit-function-return-type": "off", 27 | "prettier/prettier": "off", 28 | "@typescript-eslint/no-explicit-any": "off", 29 | "@typescript-eslint/no-var-requires": 0 30 | } 31 | } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /node_modules- 6 | 7 | # testing 8 | /coverage 9 | 10 | # production 11 | /build 12 | /swap 13 | /anyswapv2 14 | /crossbridge 15 | /stable 16 | /anyswapExchange_test 17 | /arb 18 | /deploy 19 | /router 20 | /sushi 21 | /oec 22 | /l2 23 | /movr 24 | /app 25 | /multichain 26 | /conflux 27 | /test 28 | *.zip 29 | 30 | # misc 31 | .DS_Store 32 | .env 33 | .env.local 34 | .env copy 35 | .env.development.local 36 | .env.test.local 37 | .env.production.local 38 | 39 | /.netlify 40 | 41 | npm-debug.log* 42 | yarn-debug.log* 43 | yarn-error.log* 44 | 45 | notes.txt 46 | .idea/ 47 | 48 | .vscode/ 49 | 50 | package-lock.json 51 | 52 | cypress/videos 53 | cypress/screenshots 54 | cypress/fixtures/example.json 55 | 56 | *.zip 57 | /swap 58 | src/components/NonApprove/nonApproveList.json 59 | yarn.lock 60 | .yarn/install-state.gz 61 | .yarnrc.yml 62 | yarn.lock 63 | npminstall-debug.log 64 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "printWidth": 120 5 | } 6 | -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | ignore-scripts true 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Multichain Crosschain 2 | 3 | ## Development 4 | 5 | ### Add Non Approve List 6 | 7 | - Create new file named `nonApproveList.json` in `src/components/NonApprove` folder 8 | - Manually populate with 9 | ``` 10 | {} 11 | ``` 12 | ### Configuring the environment 13 | 14 | - Copy env file to create a local env 15 | 16 | `cp .env.production .env.local ` 17 | 18 | To have the interface default to a different network when a wallet is not connected: 19 | 20 | 1. Make a copy of `.env` named `.env.local` 21 | 2. Change `REACT_APP_NETWORK_ID` to `"{YOUR_NETWORK_ID}"` 22 | 3. Change `REACT_APP_NETWORK_URL` to e.g. `"https://{YOUR_NETWORK_ID}.infura.io/v3/{YOUR_INFURA_KEY}"` 23 | 24 | ### Install Dependencies 25 | 26 | ```bash 27 | yarn 28 | ``` 29 | 30 | ### Run 31 | 32 | ```bash 33 | yarn start 34 | ``` 35 | 36 | -------------------------------------------------------------------------------- /config/jest/cssTransform.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // This is a custom Jest transformer turning style imports into empty objects. 4 | // http://facebook.github.io/jest/docs/en/webpack.html 5 | 6 | module.exports = { 7 | process() { 8 | return 'module.exports = {};'; 9 | }, 10 | getCacheKey() { 11 | // The output is always the same. 12 | return 'cssTransform'; 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /config/pnpTs.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { resolveModuleName } = require('ts-pnp'); 4 | 5 | exports.resolveModuleName = ( 6 | typescript, 7 | moduleName, 8 | containingFile, 9 | compilerOptions, 10 | resolutionHost 11 | ) => { 12 | return resolveModuleName( 13 | moduleName, 14 | containingFile, 15 | compilerOptions, 16 | resolutionHost, 17 | typescript.resolveModuleName 18 | ); 19 | }; 20 | 21 | exports.resolveTypeReferenceDirective = ( 22 | typescript, 23 | moduleName, 24 | containingFile, 25 | compilerOptions, 26 | resolutionHost 27 | ) => { 28 | return resolveModuleName( 29 | moduleName, 30 | containingFile, 31 | compilerOptions, 32 | resolutionHost, 33 | typescript.resolveTypeReferenceDirective 34 | ); 35 | }; 36 | -------------------------------------------------------------------------------- /cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "baseUrl": "http://localhost:3006", 3 | "pluginsFile": false, 4 | "fixturesFolder": false, 5 | "supportFile": "cypress/support/index.js", 6 | "video": false, 7 | "defaultCommandTimeout": 10000 8 | } 9 | -------------------------------------------------------------------------------- /cypress/integration/landing.test.ts: -------------------------------------------------------------------------------- 1 | import { TEST_ADDRESS_NEVER_USE_SHORTENED } from '../support/commands' 2 | 3 | describe('Landing Page', () => { 4 | beforeEach(() => cy.visit('/')) 5 | it('loads swap page', () => { 6 | cy.get('#swap-page') 7 | }) 8 | 9 | it('redirects to url /swap', () => { 10 | cy.url().should('include', '/swap') 11 | }) 12 | 13 | it('allows navigation to pool', () => { 14 | cy.get('#pool-nav-link').click() 15 | cy.url().should('include', '/pool') 16 | }) 17 | 18 | it('is connected', () => { 19 | cy.get('#web3-status-connected').click() 20 | cy.get('#web3-account-identifier-row').contains(TEST_ADDRESS_NEVER_USE_SHORTENED) 21 | }) 22 | }) 23 | -------------------------------------------------------------------------------- /cypress/integration/lists.test.ts: -------------------------------------------------------------------------------- 1 | describe('Lists', () => { 2 | beforeEach(() => { 3 | cy.visit('/swap') 4 | }) 5 | 6 | it('defaults to uniswap list', () => { 7 | cy.get('#swap-currency-output .open-currency-select-button').click() 8 | cy.get('#currency-search-selected-list-name').should('contain', 'Uniswap') 9 | }) 10 | 11 | it('change list', () => { 12 | cy.get('#swap-currency-output .open-currency-select-button').click() 13 | cy.get('#currency-search-change-list-button').click() 14 | cy.get('#list-row-tokens-1inch-eth .select-button').click() 15 | cy.get('#currency-search-selected-list-name').should('contain', '1inch') 16 | cy.get('#currency-search-change-list-button').click() 17 | cy.get('#list-row-tokens-uniswap-eth .select-button').click() 18 | cy.get('#currency-search-selected-list-name').should('contain', 'Uniswap') 19 | }) 20 | }) 21 | -------------------------------------------------------------------------------- /cypress/integration/migrate-v1.test.ts: -------------------------------------------------------------------------------- 1 | describe('Migrate V1 Liquidity', () => { 2 | describe('Remove V1 liquidity', () => { 3 | it('renders the correct page', () => { 4 | cy.visit('/remove/v1/0x93bB63aFe1E0180d0eF100D774B473034fd60C36') 5 | cy.get('#remove-v1-exchange').should('contain', 'MKR/ETH') 6 | }) 7 | }) 8 | }) 9 | -------------------------------------------------------------------------------- /cypress/integration/pool.test.ts: -------------------------------------------------------------------------------- 1 | describe('Pool', () => { 2 | beforeEach(() => cy.visit('/pool')) 3 | it('add liquidity links to /add/ETH', () => { 4 | cy.get('#join-pool-button').click() 5 | cy.url().should('contain', '/add/ETH') 6 | }) 7 | 8 | it('import pool links to /import', () => { 9 | cy.get('#import-pool-link').click() 10 | cy.url().should('contain', '/find') 11 | }) 12 | }) 13 | -------------------------------------------------------------------------------- /cypress/integration/send.test.ts: -------------------------------------------------------------------------------- 1 | describe('Send', () => { 2 | it('should redirect', () => { 3 | cy.visit('/send') 4 | cy.url().should('include', '/swap') 5 | }) 6 | 7 | it('should redirect with url params', () => { 8 | cy.visit('/send?outputCurrency=ETH&recipient=bob.argent.xyz') 9 | cy.url().should('contain', '/swap?outputCurrency=ETH&recipient=bob.argent.xyz') 10 | }) 11 | }) 12 | -------------------------------------------------------------------------------- /cypress/integration/token-warning.ts: -------------------------------------------------------------------------------- 1 | describe('Warning', () => { 2 | beforeEach(() => { 3 | cy.visit('/swap?outputCurrency=0x0a40f26d74274b7f22b28556a27b35d97ce08e0a') 4 | }) 5 | 6 | it('Check that warning is displayed', () => { 7 | cy.get('.token-warning-container').should('be.visible') 8 | }) 9 | 10 | it('Check that warning hides after button dismissal', () => { 11 | cy.get('.token-dismiss-button').should('be.disabled') 12 | cy.get('.understand-checkbox').click() 13 | cy.get('.token-dismiss-button').should('not.be.disabled') 14 | cy.get('.token-dismiss-button').click() 15 | cy.get('.token-warning-container').should('not.be.visible') 16 | }) 17 | }) 18 | -------------------------------------------------------------------------------- /cypress/support/commands.d.ts: -------------------------------------------------------------------------------- 1 | export const TEST_ADDRESS_NEVER_USE: string 2 | 3 | export const TEST_ADDRESS_NEVER_USE_SHORTENED: string 4 | 5 | // declare namespace Cypress { 6 | // // eslint-disable-next-line @typescript-eslint/class-name-casing 7 | // interface cy { 8 | // additionalCommands(): void 9 | // } 10 | // } 11 | -------------------------------------------------------------------------------- /cypress/support/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This file is processed and loaded automatically before your test files. 3 | // 4 | // You can read more here: 5 | // https://on.cypress.io/configuration 6 | // *********************************************************** 7 | 8 | // Import commands.ts using ES2015 syntax: 9 | import './commands' 10 | -------------------------------------------------------------------------------- /cypress/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strict": true, 4 | "baseUrl": "../node_modules", 5 | "target": "es5", 6 | "lib": ["es5", "dom"], 7 | "types": ["cypress"] 8 | }, 9 | "include": ["**/*.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /public/451.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Unavailable For Legal Reasons 6 | 7 | 8 |

Unavailable For Legal Reasons

9 | 10 | 11 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/public/favicon.ico -------------------------------------------------------------------------------- /public/fonts/Manrope1.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/public/fonts/Manrope1.woff2 -------------------------------------------------------------------------------- /public/fonts/Manrope2.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/public/fonts/Manrope2.woff2 -------------------------------------------------------------------------------- /public/fonts/Manrope3.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/public/fonts/Manrope3.woff2 -------------------------------------------------------------------------------- /public/fonts/Manrope4.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/public/fonts/Manrope4.woff2 -------------------------------------------------------------------------------- /public/fonts/fonts.css: -------------------------------------------------------------------------------- 1 | /* cyrillic */ 2 | @font-face { 3 | font-family: 'Manrope'; 4 | font-style: normal; 5 | font-weight: 400; 6 | src: url('./Manrope1.woff2') format('woff2'); 7 | unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 8 | } 9 | /* greek */ 10 | @font-face { 11 | font-family: 'Manrope'; 12 | font-style: normal; 13 | font-weight: 400; 14 | src: url('./Manrope2.woff2') format('woff2'); 15 | unicode-range: U+0370-03FF; 16 | } 17 | /* latin-ext */ 18 | @font-face { 19 | font-family: 'Manrope'; 20 | font-style: normal; 21 | font-weight: 400; 22 | src: url('./Manrope3.woff2') format('woff2'); 23 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 24 | } 25 | /* latin */ 26 | @font-face { 27 | font-family: 'Manrope'; 28 | font-style: normal; 29 | font-weight: 400; 30 | src: url('./Manrope4.woff2') format('woff2'); 31 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 32 | } -------------------------------------------------------------------------------- /public/images/192x192_App_Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/public/images/192x192_App_Icon.png -------------------------------------------------------------------------------- /public/images/512x512_App_Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/public/images/512x512_App_Icon.png -------------------------------------------------------------------------------- /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/public/logo.png -------------------------------------------------------------------------------- /public/lucid.js: -------------------------------------------------------------------------------- 1 | import { Lucid, Blockfrost, Data } from "https://unpkg.com/lucid-cardano@0.9.4/web/mod.js" 2 | // https://github.com/spacebudz/lucid 3 | async function lucid() { 4 | // testnet 5 | // const lucid = await Lucid.new( 6 | // new Blockfrost("https://cardano-preview.blockfrost.io/api/v0", "preview9uMuq0VQk9n6lJkqGUWPo2t5PsRvqFfu"), 7 | // "Preview", 8 | // ); 9 | 10 | const lucid = await Lucid.new( 11 | new Blockfrost("https://cardano-mainnet.blockfrost.io/api/v0/", "mainnet14x6BHJn5rIuSOwGZL8m70MzqPyA5XUV") 12 | ); 13 | try { 14 | window.lucid = lucid; 15 | window.lucid.data = Data; 16 | if(localStorage.getItem("lucid") === "true") { 17 | const api = await window.cardano.eternl.enable(); 18 | window.lucid.selectWallet(api); 19 | } 20 | } catch (error) { 21 | console.log(error) 22 | } 23 | 24 | } 25 | if(window.cardano && window.cardano.eternl) { 26 | lucid(); 27 | } 28 | -------------------------------------------------------------------------------- /src/assets/images/BNB.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/BitKeep.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/BitKeep.jpg -------------------------------------------------------------------------------- /src/assets/images/BitKeep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/BitKeep.png -------------------------------------------------------------------------------- /src/assets/images/BitKeep.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/Coin98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/Coin98.png -------------------------------------------------------------------------------- /src/assets/images/GnosisSafe.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/HT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/HT.png -------------------------------------------------------------------------------- /src/assets/images/OKT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/OKT.png -------------------------------------------------------------------------------- /src/assets/images/OKX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/OKX.png -------------------------------------------------------------------------------- /src/assets/images/TERRA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/TERRA.png -------------------------------------------------------------------------------- /src/assets/images/TPT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/TPT.jpg -------------------------------------------------------------------------------- /src/assets/images/TWT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/TWT.png -------------------------------------------------------------------------------- /src/assets/images/XDEFI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/XDEFI.png -------------------------------------------------------------------------------- /src/assets/images/arrow-down-blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/arrow-down-grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/arrow-right-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/arrow-right-white.png -------------------------------------------------------------------------------- /src/assets/images/arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/blue-loader.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/circle-grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/clover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/clover.png -------------------------------------------------------------------------------- /src/assets/images/clv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/clv.png -------------------------------------------------------------------------------- /src/assets/images/coin/any/ANY.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/coin/any/anyDAI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/any/anyDAI.png -------------------------------------------------------------------------------- /src/assets/images/coin/any/anyDOPE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/any/anyDOPE.png -------------------------------------------------------------------------------- /src/assets/images/coin/any/anyETH.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/images/coin/any/anyHGET.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/any/anyHGET.png -------------------------------------------------------------------------------- /src/assets/images/coin/any/anyHYVE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/any/anyHYVE.png -------------------------------------------------------------------------------- /src/assets/images/coin/any/anyMIM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/any/anyMIM.png -------------------------------------------------------------------------------- /src/assets/images/coin/any/anyUSDC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/any/anyUSDC.png -------------------------------------------------------------------------------- /src/assets/images/coin/any/anyXDEX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/any/anyXDEX.png -------------------------------------------------------------------------------- /src/assets/images/coin/any/anysSPELL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/any/anysSPELL.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ADA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ADA.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ALGO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ALGO.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ANY.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/coin/source/APT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/APT.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ARB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ARB.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ARBITRUM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ARBITRUM.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ASTR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ASTR.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/AURORA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/AURORA.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/AVAX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/AVAX.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/BAS.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/coin/source/BIT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/BIT.jpg -------------------------------------------------------------------------------- /src/assets/images/coin/source/BLOCK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/BLOCK.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/BNB.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/coin/source/BRISE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/BRISE.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/BTC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/BTC.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/BTT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/BTT.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/BitKeep.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/coin/source/CANTO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/CANTO.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/CELO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/CELO.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/CFX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/CFX.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/CKB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/CKB.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/CLV.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/images/coin/source/CMP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/CMP.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/COLX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/COLX.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/CORE.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/coin/source/CRAB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/CRAB.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/CRO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/CRO.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/CUBE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/CUBE.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/DAI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/DAI.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/DATE.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/coin/source/DCORE.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/coin/source/DEP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/DEP.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/DND.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/DND.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/DOPE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/DOPE.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/DXT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/DXT.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/EKTA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/EKTA.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ETC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ETC.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ETH.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/images/coin/source/ETHW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ETHW.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/EVMOS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/EVMOS.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/FANTOMANIMALS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/FANTOMANIMALS.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/FITFI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/FITFI.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/FLOW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/FLOW.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/FRA.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/FRA.jpg -------------------------------------------------------------------------------- /src/assets/images/coin/source/FTM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/FTM.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/FUSE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/FUSE.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/GLMR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/GLMR.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/GNO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/GNO.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/GT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/GT.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/HGET.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/HGET.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/HOO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/HOO.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/HPB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/HPB.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/HT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/HT.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/HYVE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/HYVE.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/IOTA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/IOTA.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/IOTX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/IOTX.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/JEWEL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/JEWEL.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/KAI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/KAI.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/KAVA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/KAVA.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/KEK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/KEK.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/KLAY.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/KLAY.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/LTC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/LTC.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/LUNA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/LUNA.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/MATIC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/MATIC.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/METIS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/METIS.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/MIM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/MIM.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/MINT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/MINT.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/MINTME.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/MINTME.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/MOVR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/MOVR.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/MULTI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/MULTI.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/NAHMII3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/NAHMII3.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/NAS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/NAS.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/NEAR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/NEAR.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/NEON.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/NEON.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/NOVA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/NOVA.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/OETH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/OETH.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/OKT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/OKT.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/OMAX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/OMAX.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ONE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ONE.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ONT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ONT.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ONUS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ONUS.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/OPTIMISM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/OPTIMISM.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/PLQ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/PLQ.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/PolygonzkEVM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/PolygonzkEVM.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/RBTC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/RBTC.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/REDLC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/REDLC.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/REEF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/REEF.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/REI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/REI.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/RON.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/RON.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ROSE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ROSE.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/RPG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/RPG.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/SAMA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/SAMA.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/SDN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/SDN.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/SEI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/SEI.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/SHM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/SHM.jpg -------------------------------------------------------------------------------- /src/assets/images/coin/source/SMR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/SMR.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/SOL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/SOL.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/SYS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/SYS.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/TERRA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/TERRA.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/TLOS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/TLOS.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/TOMO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/TOMO.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/TRO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/TRO.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/TRX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/TRX.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/TST.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/TST.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/TT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/TT.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/USDC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/USDC.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/USDT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/USDT.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/UST.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/UST.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/VLX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/VLX.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/WEMIX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/WEMIX.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/WETH.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/images/coin/source/XANA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/XANA.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/XDEX.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/XDEX.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/XETA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/XETA.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/XLM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/XLM.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/XRP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/XRP.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/ZBC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/ZBC.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/milkADA.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/coin/source/sSPELL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/sSPELL.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/scroll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/scroll.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/xDAI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/xDAI.png -------------------------------------------------------------------------------- /src/assets/images/coin/source/zkSync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/coin/source/zkSync.png -------------------------------------------------------------------------------- /src/assets/images/dropdown-blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/dropdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/dropup-blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/ethereum-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/ethereum-logo.png -------------------------------------------------------------------------------- /src/assets/images/fortmaticIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/fortmaticIcon.png -------------------------------------------------------------------------------- /src/assets/images/icon/Next.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/Previous.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/add-2-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/add-2-purpl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/add-2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/add-fff.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/add-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/address.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/any-purpl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/any.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/arrowDown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/arrowRighr-purple.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/arrowRight.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/arrowTopRight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/icon/arrowTopRight.png -------------------------------------------------------------------------------- /src/assets/images/icon/arrowTopRight.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/bridge-gray.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/bridge-purpl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/bridge-white-btn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/bridge-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/bridge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/bulb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/coingecko-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/icon/coingecko-white.png -------------------------------------------------------------------------------- /src/assets/images/icon/coingecko.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/icon/coingecko.png -------------------------------------------------------------------------------- /src/assets/images/icon/coinmarketcap-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/icon/coinmarketcap-white.png -------------------------------------------------------------------------------- /src/assets/images/icon/coinmarketcap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/icon/coinmarketcap.png -------------------------------------------------------------------------------- /src/assets/images/icon/create-exchange-purpl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/create-exchange-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/create-exchange.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/deposit-purple.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/deposit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/documents-purpl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/documents.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/done.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/explorer-purpl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/icon/explorer-purpl.png -------------------------------------------------------------------------------- /src/assets/images/icon/explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/icon/explorer.png -------------------------------------------------------------------------------- /src/assets/images/icon/explorer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icon/github-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/icon/github-white.png -------------------------------------------------------------------------------- /src/assets/images/icon/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/icon/github.png -------------------------------------------------------------------------------- /src/assets/images/icon/graph-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/inventory.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/markets-purpl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/markets.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/medium-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/medium.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/assets/images/icon/paste.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/path.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/assets/images/icon/remove-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/remove-purpl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/remove-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/remove.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/schedule.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/slippage.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/swap-purpl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/swap-purple.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/swap-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/swap.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/telegram-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/telegram.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/unlock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/unlockBlack.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/wallet.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/warning.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/week.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/withdraw-purple.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/icon/withdraw.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/images/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/images/metamask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/metamask.png -------------------------------------------------------------------------------- /src/assets/images/plus-blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/plus-grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/portisIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/portisIcon.png -------------------------------------------------------------------------------- /src/assets/images/question-mark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/question.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/spinner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/assets/images/tally.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/tally.png -------------------------------------------------------------------------------- /src/assets/images/trustWallet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/images/trustWallet.png -------------------------------------------------------------------------------- /src/assets/images/x.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/QR.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/svg/active/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/svg/active/logo.png -------------------------------------------------------------------------------- /src/assets/svg/active/logo_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/svg/active/logo_color.png -------------------------------------------------------------------------------- /src/assets/svg/active/logo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/svg/active/logo_white.png -------------------------------------------------------------------------------- /src/assets/svg/lightcircle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Path 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/svg/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/svg/logo.png -------------------------------------------------------------------------------- /src/assets/svg/logo_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/svg/logo_color.png -------------------------------------------------------------------------------- /src/assets/svg/logo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anyswap/anyswap-crosschain/c7ff9a4dfaab274fac7e33c5f95ff58cfef5f545/src/assets/svg/logo_white.png -------------------------------------------------------------------------------- /src/components/Column/index.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | const Column = styled.div` 4 | display: flex; 5 | flex-direction: column; 6 | justify-content: flex-start; 7 | ` 8 | export const ColumnCenter = styled(Column)` 9 | width: 100%; 10 | align-items: center; 11 | ` 12 | 13 | export const AutoColumn = styled.div<{ 14 | gap?: 'sm' | 'md' | 'lg' | string 15 | justify?: 'stretch' | 'center' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'space-between' 16 | }>` 17 | display: grid; 18 | grid-auto-rows: auto; 19 | grid-row-gap: ${({ gap }) => (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap}; 20 | justify-items: ${({ justify }) => justify && justify}; 21 | // ${({ theme }) => theme.mediaWidth.upToMedium` 22 | // width: 320px; 23 | // `}; 24 | ` 25 | 26 | export default Column 27 | -------------------------------------------------------------------------------- /src/components/CrossChainPanelV2/errorTip.tsx: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import styled from "styled-components" 3 | 4 | const ErrorTipBox = styled.div` 5 | ${({ theme }) => theme.flexC}; 6 | width: 100%; 7 | margin-top: 10px; 8 | .txt { 9 | dispaly:inline-block; 10 | // width: 100%; 11 | // max-width: 300px; 12 | // border: 1px solid ${({ theme }) => theme.birdgeStateBorder}; 13 | // background: ${({ theme }) => theme.birdgeStateBg}; 14 | border: 1px solid ${({ theme }) => theme.birdgeStateBorder2}; 15 | background: ${({ theme }) => theme.birdgeStateBg2}; 16 | color: ${({ theme }) => theme.red1}; 17 | // color: ${({ theme }) => theme.textColor}; 18 | padding: 8px 12px; 19 | border-radius: 10px; 20 | text-align:center; 21 | font-size:14px; 22 | } 23 | ` 24 | 25 | export default function ErrorTip ({ 26 | errorTip 27 | }: { 28 | errorTip:any 29 | }) { 30 | if (!errorTip) return (<>) 31 | return ( 32 | <> 33 | { 34 | errorTip ? ( 35 | 36 |
{errorTip.tip}
37 |
38 | ) : '' 39 | } 40 | 41 | ) 42 | } -------------------------------------------------------------------------------- /src/components/CrossChainTitle/index.tsx: -------------------------------------------------------------------------------- 1 | // import React, { useMemo } from 'react' 2 | import React from 'react' 3 | import styled from 'styled-components' 4 | // import { useTranslation } from 'react-i18next' 5 | 6 | import Title from '../Title' 7 | 8 | const TitleBox = styled.div` 9 | display: block; 10 | width:100%; 11 | ${({ theme }) => theme.mediaWidth.upToMedium` 12 | display:none; 13 | `} 14 | ` 15 | 16 | export default function CrossChain() { 17 | return ( 18 | 19 | 22 | 23 | 24 | ) 25 | } -------------------------------------------------------------------------------- /src/components/GasSwap/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import AppBody from '../../pages/AppBody' 3 | import CrossChainEVM from './crossChainEVM' 4 | 5 | const Index = () => { 6 | return ( 7 | 8 | 9 | 10 | ) 11 | } 12 | 13 | export default Index 14 | -------------------------------------------------------------------------------- /src/components/Lazyload/Lazyload.tsx: -------------------------------------------------------------------------------- 1 | import React, { Suspense } from 'react'; 2 | import Loading from './Loading'; 3 | 4 | export default function (loader: any) { 5 | const OtherComponent = React.lazy(loader); 6 | return function MyComponent(props: any) { 7 | const duration = props.duration || 0; 8 | return ( 9 | }> 10 | 11 | 12 | ); 13 | }; 14 | } -------------------------------------------------------------------------------- /src/components/Lazyload/Loading.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect } from 'react' 2 | import { useTranslation } from 'react-i18next' 3 | import styled from 'styled-components' 4 | 5 | const Tips = styled.div` 6 | line-height: 56px; 7 | padding-top: 120px; 8 | text-align: center; 9 | font-size: 16px; 10 | font-weight: 600; 11 | ` 12 | 13 | const Loading = ({ duration = -1 }: { duration?: number }) => { 14 | const [show, setShow] = useState(duration < 0); 15 | 16 | useEffect(() => { 17 | let timeHandler: any; 18 | let cancel = () => { 19 | // 20 | }; 21 | if (duration) { 22 | timeHandler = setTimeout(() => setShow(true), duration) 23 | cancel = () => { 24 | clearTimeout(timeHandler); 25 | } 26 | } 27 | return cancel; 28 | }, []) 29 | 30 | const { t } = useTranslation(); 31 | return show ? { t('Loading') }... : null; 32 | }; 33 | 34 | export default Loading; 35 | -------------------------------------------------------------------------------- /src/components/ListLogo/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | import useHttpLocations from '../../hooks/useHttpLocations' 4 | 5 | import Logo from '../Logo' 6 | 7 | const StyledListLogo = styled(Logo)<{ size: string }>` 8 | width: ${({ size }) => size}; 9 | height: ${({ size }) => size}; 10 | ` 11 | 12 | export default function ListLogo({ 13 | logoURI, 14 | style, 15 | size = '24px', 16 | alt 17 | }: { 18 | logoURI: string 19 | size?: string 20 | style?: React.CSSProperties 21 | alt?: string 22 | }) { 23 | const srcs: string[] = useHttpLocations(logoURI) 24 | 25 | return 26 | } 27 | -------------------------------------------------------------------------------- /src/components/Logo/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import { HelpCircle } from 'react-feather' 3 | import { ImageProps } from 'rebass' 4 | 5 | const BAD_SRCS: { [tokenAddress: string]: true } = {} 6 | 7 | export interface LogoProps extends Pick { 8 | srcs: string[] 9 | } 10 | 11 | /** 12 | * Renders an image by sequentially trying a list of URIs, and then eventually a fallback triangle alert 13 | */ 14 | export default function Logo({ srcs, alt, ...rest }: LogoProps) { 15 | const [, refresh] = useState(0) 16 | // console.log(srcs) 17 | // console.log(BAD_SRCS) 18 | const src: string | undefined = srcs.find(src => !BAD_SRCS[src]) 19 | 20 | if (src) { 21 | return ( 22 | {alt} { 27 | if (src) BAD_SRCS[src] = true 28 | refresh(i => i + 1) 29 | }} 30 | /> 31 | ) 32 | } 33 | 34 | return 35 | } 36 | -------------------------------------------------------------------------------- /src/components/NonApprove/empty.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /src/components/QRcode/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | import QRCode from 'qrcode.react' 4 | import { useDarkModeManager } from '../../state/user/hooks' 5 | 6 | const QRCodeWrapper = styled.div` 7 | ${({ theme }) => theme.flexColumnNoWrap}; 8 | align-items: center; 9 | justify-content: center; 10 | border-radius: 0.75rem; 11 | margin-bottom: 1.25rem; 12 | ` 13 | 14 | export default function QRcode({ 15 | uri = '', 16 | size 17 | }: { 18 | uri?: any 19 | size?: any 20 | }) { 21 | const [isDark] = useDarkModeManager() 22 | return ( 23 | 24 | {uri && ( 25 | 26 | )} 27 | 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /src/components/Row/index.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | import { Box } from 'rebass/styled-components' 3 | 4 | const Row = styled(Box)<{ align?: string; padding?: string; border?: string; borderRadius?: string }>` 5 | width: 100%; 6 | display: flex; 7 | padding: 0; 8 | align-items: ${({ align }) => (align ? align : 'center')}; 9 | padding: ${({ padding }) => padding}; 10 | border: ${({ border }) => border}; 11 | border-radius: ${({ borderRadius }) => borderRadius}; 12 | ` 13 | 14 | export const RowBetween = styled(Row)` 15 | justify-content: space-between; 16 | ` 17 | 18 | export const RowFlat = styled.div` 19 | display: flex; 20 | align-items: flex-end; 21 | ` 22 | 23 | export const AutoRow = styled(Row)<{ gap?: string; justify?: string }>` 24 | flex-wrap: wrap; 25 | margin: ${({ gap }) => gap && `-${gap}`}; 26 | justify-content: ${({ justify }) => justify && justify}; 27 | position:relative; 28 | & > * { 29 | margin: ${({ gap }) => gap} !important; 30 | } 31 | ` 32 | 33 | export const RowFixed = styled(Row)<{ gap?: string; justify?: string }>` 34 | width: fit-content; 35 | margin: ${({ gap }) => gap && `-${gap}`}; 36 | ` 37 | 38 | export default Row 39 | -------------------------------------------------------------------------------- /src/components/SearchModal/SortButton.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Text } from 'rebass' 3 | import styled from 'styled-components' 4 | import { RowFixed } from '../Row' 5 | 6 | export const FilterWrapper = styled(RowFixed)` 7 | padding: 8px; 8 | background-color: ${({ theme }) => theme.bg2}; 9 | color: ${({ theme }) => theme.text1}; 10 | border-radius: 8px; 11 | user-select: none; 12 | & > * { 13 | user-select: none; 14 | } 15 | :hover { 16 | cursor: pointer; 17 | } 18 | ` 19 | 20 | export default function SortButton({ 21 | toggleSortOrder, 22 | ascending 23 | }: { 24 | toggleSortOrder: () => void 25 | ascending: boolean 26 | }) { 27 | return ( 28 | 29 | 30 | {ascending ? '↑' : '↓'} 31 | 32 | 33 | ) 34 | } 35 | -------------------------------------------------------------------------------- /src/components/SearchModal/filtering.ts: -------------------------------------------------------------------------------- 1 | import { isAddress } from '../../utils' 2 | 3 | export function filterTokens(tokens: any[], search: string): any[] { 4 | if (search.length === 0) return tokens 5 | 6 | const searchingAddress = isAddress(search) 7 | 8 | if (searchingAddress) { 9 | return tokens.filter(token => token.address === searchingAddress) 10 | } 11 | 12 | const lowerSearchParts = search 13 | .toLowerCase() 14 | .split(/\s+/) 15 | .filter(s => s.length > 0) 16 | 17 | if (lowerSearchParts.length === 0) { 18 | return tokens 19 | } 20 | 21 | const matchesSearch = (s: string): boolean => { 22 | const sParts = s 23 | .toLowerCase() 24 | .split(/\s+/) 25 | .filter(s => s.length > 0) 26 | 27 | return lowerSearchParts.every(p => p.length === 0 || sParts.some(sp => sp.startsWith(p) || sp.endsWith(p))) 28 | } 29 | 30 | return tokens.filter(token => { 31 | const { symbol, name } = token 32 | 33 | return (symbol && matchesSearch(symbol)) || (name && matchesSearch(name)) 34 | }) 35 | } 36 | -------------------------------------------------------------------------------- /src/components/SwapIcon/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | 4 | // import config from '../../config' 5 | const SwapIconBox = styled.div` 6 | ${({ theme }) => theme.flexRowNoWrap} 7 | justify-content: center; 8 | align-items: center; 9 | width: 32px; 10 | height: 26px; 11 | object-fit: contain; 12 | border-radius: 6px; 13 | margin: 0px auto; 14 | cursor: pointer; 15 | background: ${({ theme }) => theme.swapBg}; 16 | ` 17 | 18 | interface SwapIcon { 19 | iconUrl: string 20 | onClick: () => void 21 | } 22 | export default function SwapIcon({ iconUrl, onClick }: SwapIcon) { 23 | return ( 24 | { 26 | onClick() 27 | }} 28 | > 29 | 30 | 31 | ) 32 | } 33 | -------------------------------------------------------------------------------- /src/components/Tooltip/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useCallback, useState } from 'react' 2 | import styled from 'styled-components' 3 | import Popover, { PopoverProps } from '../Popover' 4 | 5 | const TooltipContainer = styled.div` 6 | width: 228px; 7 | padding: 0.6rem 1rem; 8 | line-height: 150%; 9 | font-weight: 400; 10 | ` 11 | 12 | interface TooltipProps extends Omit { 13 | text: string 14 | } 15 | 16 | export default function Tooltip({ text, ...rest }: TooltipProps) { 17 | return {text}} {...rest} /> 18 | } 19 | 20 | export function MouseoverTooltip({ children, ...rest }: Omit) { 21 | const [show, setShow] = useState(false) 22 | const open = useCallback(() => setShow(true), [setShow]) 23 | const close = useCallback(() => setShow(false), [setShow]) 24 | return ( 25 | 26 |
27 | {children} 28 |
29 |
30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /src/config/chainConfig/block.js: -------------------------------------------------------------------------------- 1 | 2 | import {VERSION, USE_VERSION} from '../constant' 3 | import {ChainId} from './chainId' 4 | 5 | export const BLOCK_MAINNET = '' 6 | export const BLOCK_MAIN_CHAINID = ChainId.BLOCK 7 | export const BLOCK_MAIN_EXPLORER = '' 8 | 9 | const symbol = 'BLOCK' 10 | 11 | const bridgeToken = { 12 | [VERSION.V1]: { 13 | bridgeInitToken: '', 14 | bridgeInitChain: '' 15 | } 16 | } 17 | 18 | export default { 19 | [BLOCK_MAIN_CHAINID]: { 20 | ...bridgeToken[USE_VERSION], 21 | multicalToken: '', 22 | v1FactoryToken: '', 23 | v2FactoryToken: '', 24 | nodeRpc: BLOCK_MAINNET, 25 | nodeRpcList: [], 26 | chainID: BLOCK_MAIN_CHAINID, 27 | lookHash: BLOCK_MAIN_EXPLORER + '/tx/', 28 | lookAddr: BLOCK_MAIN_EXPLORER + '/address/', 29 | lookBlock: BLOCK_MAIN_EXPLORER + '/block/', 30 | explorer: BLOCK_MAIN_EXPLORER, 31 | symbol: symbol, 32 | name: 'Blocknet', 33 | networkName: 'Blocknet mainnet', 34 | type: 'main', 35 | label: BLOCK_MAIN_CHAINID, 36 | chainType: 'NOWALLET' 37 | }, 38 | } -------------------------------------------------------------------------------- /src/config/chainConfig/colx.js: -------------------------------------------------------------------------------- 1 | import {VERSION, USE_VERSION} from '../constant' 2 | import {ChainId} from './chainId' 3 | 4 | export const COLX_MAINNET = '' 5 | export const COLX_MAIN_CHAINID = ChainId.COLX 6 | export const COLX_MAIN_EXPLORER = '' 7 | 8 | const symbol = 'COLX' 9 | 10 | const bridgeToken = { 11 | [VERSION.V1]: { 12 | bridgeInitToken: '', 13 | bridgeInitChain: '' 14 | } 15 | } 16 | 17 | export default { 18 | [COLX_MAIN_CHAINID]: { 19 | ...bridgeToken[USE_VERSION], 20 | multicalToken: '', 21 | v1FactoryToken: '', 22 | v2FactoryToken: '', 23 | nodeRpc: COLX_MAINNET, 24 | nodeRpcList: [], 25 | chainID: COLX_MAIN_CHAINID, 26 | lookHash: COLX_MAIN_EXPLORER + '/tx/', 27 | lookAddr: COLX_MAIN_EXPLORER + '/address/', 28 | lookBlock: COLX_MAIN_EXPLORER + '/block/', 29 | explorer: COLX_MAIN_EXPLORER, 30 | symbol: symbol, 31 | name: 'ColossusXT', 32 | networkName: 'ColossusXT mainnet', 33 | type: 'main', 34 | label: COLX_MAIN_CHAINID, 35 | chainType: 'NOWALLET' 36 | }, 37 | } -------------------------------------------------------------------------------- /src/config/chainConfig/ltc.js: -------------------------------------------------------------------------------- 1 | import {VERSION, USE_VERSION} from '../constant' 2 | import {ChainId} from './chainId' 3 | 4 | export const LTC_MAINNET = '' 5 | export const LTC_MAIN_CHAINID = ChainId.LTC 6 | export const LTC_MAIN_EXPLORER = '' 7 | 8 | const symbol = 'LTC' 9 | 10 | const bridgeToken = { 11 | [VERSION.V1]: { 12 | bridgeInitToken: '', 13 | bridgeInitChain: '' 14 | } 15 | } 16 | 17 | export default { 18 | [LTC_MAIN_CHAINID]: { 19 | ...bridgeToken[USE_VERSION], 20 | multicalToken: '', 21 | v1FactoryToken: '', 22 | v2FactoryToken: '', 23 | nodeRpc: LTC_MAINNET, 24 | nodeRpcList: [], 25 | chainID: LTC_MAIN_CHAINID, 26 | lookHash: LTC_MAIN_EXPLORER + '/tx/', 27 | lookAddr: LTC_MAIN_EXPLORER + '/address/', 28 | lookBlock: LTC_MAIN_EXPLORER + '/block/', 29 | explorer: LTC_MAIN_EXPLORER, 30 | symbol: symbol, 31 | name: 'Litecoin', 32 | networkName: 'Litecoin mainnet', 33 | type: 'main', 34 | label: LTC_MAIN_CHAINID, 35 | chainType: 'NOWALLET' 36 | }, 37 | } -------------------------------------------------------------------------------- /src/config/chainConfig/nas.js: -------------------------------------------------------------------------------- 1 | 2 | import {VERSION, USE_VERSION} from '../constant' 3 | import {ChainId} from './chainId' 4 | 5 | export const NAS_MAINNET = '' 6 | export const NAS_MAIN_CHAINID = ChainId.NAS 7 | export const NAS_MAIN_EXPLORER = 'https://explorer.nebulas.io/#' 8 | 9 | const symbol = 'NAS' 10 | 11 | const bridgeToken = { 12 | [VERSION.V1]: { 13 | bridgeInitToken: '', 14 | bridgeInitChain: '' 15 | } 16 | } 17 | 18 | export default { 19 | [NAS_MAIN_CHAINID]: { 20 | ...bridgeToken[USE_VERSION], 21 | multicalToken: '', 22 | v1FactoryToken: '', 23 | v2FactoryToken: '', 24 | nodeRpc: NAS_MAINNET, 25 | nodeRpcList: [], 26 | chainID: NAS_MAIN_CHAINID, 27 | lookHash: NAS_MAIN_EXPLORER + '/tx/', 28 | lookAddr: NAS_MAIN_EXPLORER + '/address/', 29 | lookBlock: NAS_MAIN_EXPLORER + '/block/', 30 | explorer: NAS_MAIN_EXPLORER, 31 | symbol: symbol, 32 | name: 'Nebulas', 33 | networkName: 'Nebulas mainnet', 34 | networkLogo: 'NAS', 35 | type: 'main', 36 | label: NAS_MAIN_CHAINID, 37 | chainType: NAS_MAIN_CHAINID 38 | }, 39 | } -------------------------------------------------------------------------------- /src/config/chainConfig/terra.js: -------------------------------------------------------------------------------- 1 | import {VERSION, USE_VERSION} from '../constant' 2 | import {ChainId} from './chainId' 3 | 4 | export const TERRA_MAINNET = '' 5 | export const TERRA_MAIN_CHAINID = ChainId.TERRA 6 | export const TERRA_MAIN_EXPLORER = 'https://finder.terra.money/classic' 7 | 8 | const symbol = 'LUNA' 9 | 10 | const bridgeToken = { 11 | [VERSION.V1]: { 12 | bridgeInitToken: '', 13 | bridgeInitChain: '' 14 | } 15 | } 16 | 17 | export default { 18 | [TERRA_MAIN_CHAINID]: { 19 | ...bridgeToken[USE_VERSION], 20 | multicalToken: '', 21 | v1FactoryToken: '', 22 | v2FactoryToken: '', 23 | nodeRpc: TERRA_MAINNET, 24 | nodeRpcList: [], 25 | chainID: TERRA_MAIN_CHAINID, 26 | lookHash: TERRA_MAIN_EXPLORER + '/tx/', 27 | lookAddr: TERRA_MAIN_EXPLORER + '/address/', 28 | lookBlock: TERRA_MAIN_EXPLORER + '/block/', 29 | explorer: TERRA_MAIN_EXPLORER, 30 | symbol: symbol, 31 | name: 'Terra classic', 32 | networkName: 'Terra classic mainnet', 33 | networkLogo: 'TERRA', 34 | type: 'main', 35 | label: TERRA_MAIN_CHAINID, 36 | chainType: TERRA_MAIN_CHAINID 37 | }, 38 | } -------------------------------------------------------------------------------- /src/config/status.ts: -------------------------------------------------------------------------------- 1 | export enum Status { 2 | Pending = "Pending", 3 | Success = "Success", 4 | Failure = "Failure", 5 | Null = "Null", 6 | Confirming = "Confirming", 7 | Crosschaining = "Routing", 8 | Timeout = "Timeout", 9 | BigAmount = "Big Amount", 10 | } 11 | 12 | export function getStatus (status:any, confirmations?:any) { 13 | let statusType = Status.Confirming 14 | if ([0, 5].includes(status)) { 15 | statusType = Status.Confirming 16 | } else if ([7, 8].includes(status)) { 17 | statusType = Status.Crosschaining 18 | } else if ([9, 10].includes(status)) { 19 | if ( 20 | status === 10 21 | || (confirmations && confirmations > 0) 22 | ) { 23 | statusType = Status.Success 24 | } else { 25 | statusType = Status.Crosschaining 26 | } 27 | } else if ([1,2, 4, 6, 3, 16, 11, 14, 20].includes(status)) { 28 | statusType = Status.Failure 29 | } 30 | // else if ([].includes(status)) { 31 | // statusType = Status.Timeout 32 | // } 33 | else if ([12].includes(status)) { 34 | statusType = Status.BigAmount 35 | } 36 | return statusType 37 | } 38 | 39 | export const END_STATUS = [1, 3, 10, 16,-2, -3] -------------------------------------------------------------------------------- /src/constants/abis/bridge/erc1155.ts: -------------------------------------------------------------------------------- 1 | import { Interface } from '@ethersproject/abi' 2 | import ERC1155_ABI from './erc1155.json' 3 | 4 | const ERC1155_INTERFACE:any = new Interface(ERC1155_ABI) 5 | 6 | 7 | export default ERC1155_INTERFACE 8 | export { ERC1155_ABI } 9 | -------------------------------------------------------------------------------- /src/constants/abis/bridge/erc721.ts: -------------------------------------------------------------------------------- 1 | import { Interface } from '@ethersproject/abi' 2 | import ERC721_ABI from './erc721.json' 3 | 4 | const ERC721_INTERFACE = new Interface(ERC721_ABI) 5 | 6 | 7 | export default ERC721_INTERFACE 8 | export { ERC721_ABI } 9 | -------------------------------------------------------------------------------- /src/constants/abis/erc20.ts: -------------------------------------------------------------------------------- 1 | import { Interface } from '@ethersproject/abi' 2 | import ERC20_ABI from './erc20.json' 3 | import ERC20_BYTES32_ABI from './erc20_bytes32.json' 4 | 5 | const ERC20_INTERFACE = new Interface(ERC20_ABI) 6 | 7 | const ERC20_BYTES32_INTERFACE = new Interface(ERC20_BYTES32_ABI) 8 | 9 | export default ERC20_INTERFACE 10 | export { ERC20_ABI, ERC20_BYTES32_INTERFACE, ERC20_BYTES32_ABI } 11 | -------------------------------------------------------------------------------- /src/constants/abis/erc20_bytes32.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "constant": true, 4 | "inputs": [], 5 | "name": "name", 6 | "outputs": [ 7 | { 8 | "name": "", 9 | "type": "bytes32" 10 | } 11 | ], 12 | "payable": false, 13 | "stateMutability": "view", 14 | "type": "function" 15 | }, 16 | { 17 | "constant": true, 18 | "inputs": [], 19 | "name": "symbol", 20 | "outputs": [ 21 | { 22 | "name": "", 23 | "type": "bytes32" 24 | } 25 | ], 26 | "payable": false, 27 | "stateMutability": "view", 28 | "type": "function" 29 | } 30 | ] 31 | -------------------------------------------------------------------------------- /src/constants/abis/migrator.ts: -------------------------------------------------------------------------------- 1 | import MIGRATOR_ABI from './migrator.json' 2 | 3 | const MIGRATOR_ADDRESS = '0x16D4F26C15f3658ec65B1126ff27DD3dF2a2996b' 4 | 5 | export { MIGRATOR_ADDRESS, MIGRATOR_ABI } 6 | -------------------------------------------------------------------------------- /src/constants/abis/swapMULTIABI.ts: -------------------------------------------------------------------------------- 1 | import { Interface } from '@ethersproject/abi' 2 | import swapMULTIABI from './swapMULTIABI.json' 3 | 4 | const SWAP_MULTI_INTERFACE = new Interface(swapMULTIABI) 5 | 6 | export default SWAP_MULTI_INTERFACE 7 | export { SWAP_MULTI_INTERFACE, swapMULTIABI } 8 | -------------------------------------------------------------------------------- /src/constants/abis/veMULTI.ts: -------------------------------------------------------------------------------- 1 | import { Interface } from '@ethersproject/abi' 2 | import veMULTI from './veMULTI.json' 3 | 4 | const VE_MULTI_INTERFACE = new Interface(veMULTI) 5 | 6 | export default VE_MULTI_INTERFACE 7 | export { VE_MULTI_INTERFACE, veMULTI } 8 | -------------------------------------------------------------------------------- /src/constants/abis/veMULTIReward.ts: -------------------------------------------------------------------------------- 1 | import { Interface } from '@ethersproject/abi' 2 | import veMULTIReward from './veMULTIReward.json' 3 | 4 | const VE_MULTI_REWARD_INTERFACE = new Interface(veMULTIReward) 5 | 6 | export default VE_MULTI_REWARD_INTERFACE 7 | export { veMULTIReward, VE_MULTI_REWARD_INTERFACE } 8 | -------------------------------------------------------------------------------- /src/constants/abis/veshare.ts: -------------------------------------------------------------------------------- 1 | import { Interface } from '@ethersproject/abi' 2 | import veshare from './veshare.json' 3 | 4 | const VE_SHARE_INTERFACE = new Interface(veshare) 5 | 6 | export default VE_SHARE_INTERFACE 7 | export { veshare, VE_SHARE_INTERFACE } 8 | -------------------------------------------------------------------------------- /src/constants/lists.ts: -------------------------------------------------------------------------------- 1 | 2 | export const DEFAULT_TOKEN_LIST_URL = '' 3 | 4 | export const DEFAULT_LIST_OF_LISTS: string[] = [ 5 | DEFAULT_TOKEN_LIST_URL, 6 | // 't2crtokens.eth', // kleros 7 | // 'tokens.1inch.eth', // 1inch 8 | // 'synths.snx.eth', 9 | // 'tokenlist.dharma.eth', 10 | // 'defi.cmc.eth', 11 | // 'erc20.cmc.eth', 12 | // 'stablecoin.cmc.eth', 13 | // 'tokenlist.zerion.eth', 14 | // 'tokenlist.aave.eth', 15 | // 'https://tokens.coingecko.com/uniswap/all.json', 16 | // 'https://app.tryroll.com/tokens.json', 17 | // 'https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json', 18 | // 'https://defiprime.com/defiprime.tokenlist.json', 19 | // 'https://umaproject.org/uma.tokenlist.json' 20 | ] 21 | -------------------------------------------------------------------------------- /src/constants/multicall/index.ts: -------------------------------------------------------------------------------- 1 | 2 | import MULTICALL_ABI from './abi.json' 3 | export { MULTICALL_ABI } -------------------------------------------------------------------------------- /src/constants/v1/index.ts: -------------------------------------------------------------------------------- 1 | import { Interface } from '@ethersproject/abi' 2 | 3 | import V1_EXCHANGE_ABI from './v1_exchange.json' 4 | import V1_FACTORY_ABI from './v1_factory.json' 5 | 6 | const V1_FACTORY_INTERFACE = new Interface(V1_FACTORY_ABI) 7 | const V1_EXCHANGE_INTERFACE = new Interface(V1_EXCHANGE_ABI) 8 | 9 | export { V1_FACTORY_INTERFACE, V1_FACTORY_ABI, V1_EXCHANGE_INTERFACE, V1_EXCHANGE_ABI } 10 | -------------------------------------------------------------------------------- /src/hooks/useCopyClipboard.ts: -------------------------------------------------------------------------------- 1 | import copy from 'copy-to-clipboard' 2 | import { useCallback, useEffect, useState } from 'react' 3 | 4 | export default function useCopyClipboard(timeout = 500): [boolean, (toCopy: string) => void] { 5 | const [isCopied, setIsCopied] = useState(false) 6 | 7 | const staticCopy = useCallback(text => { 8 | const didCopy = copy(text) 9 | setIsCopied(didCopy) 10 | }, []) 11 | 12 | useEffect(() => { 13 | if (isCopied) { 14 | const hide = setTimeout(() => { 15 | setIsCopied(false) 16 | }, timeout) 17 | 18 | return () => { 19 | clearTimeout(hide) 20 | } 21 | } 22 | return undefined 23 | }, [isCopied, setIsCopied, timeout]) 24 | 25 | return [isCopied, staticCopy] 26 | } 27 | -------------------------------------------------------------------------------- /src/hooks/useDebounce.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react' 2 | 3 | // modified from https://usehooks.com/useDebounce/ 4 | export default function useDebounce(value: T, delay: number): T { 5 | const [debouncedValue, setDebouncedValue] = useState(value) 6 | 7 | useEffect(() => { 8 | // 延迟后更新被取消的值 9 | const handler = setTimeout(() => { 10 | setDebouncedValue(value) 11 | }, delay) 12 | 13 | // 如果值更改,则取消超时(延迟更改或卸载时也是如此) 14 | // 这就是我们如何防止当值在延迟时间内发生变化时,debdoff值的更新。超时被清除并重新启动。 15 | return () => { 16 | clearTimeout(handler) 17 | } 18 | }, [value, delay]) 19 | 20 | return debouncedValue 21 | } 22 | -------------------------------------------------------------------------------- /src/hooks/useENS.ts: -------------------------------------------------------------------------------- 1 | import { isAddress } from '../utils' 2 | import useENSAddress from './useENSAddress' 3 | import useENSName from './useENSName' 4 | 5 | /** 6 | * Given a name or address, does a lookup to resolve to an address and name 7 | * @param nameOrAddress ENS name or address 8 | */ 9 | export default function useENS( 10 | nameOrAddress?: string | null 11 | ): { loading: boolean; address: string | null; name: string | null } { 12 | const validated = isAddress(nameOrAddress) 13 | const reverseLookup = useENSName(validated ? validated : undefined) 14 | const lookup = useENSAddress(nameOrAddress) 15 | 16 | return { 17 | loading: reverseLookup.loading || lookup.loading, 18 | address: validated ? validated : lookup.address, 19 | name: reverseLookup.ENSName ? reverseLookup.ENSName : !validated && lookup.address ? nameOrAddress || null : null 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/hooks/useHttpLocations.ts: -------------------------------------------------------------------------------- 1 | import { useMemo } from 'react' 2 | import contenthashToUri from '../utils/contenthashToUri' 3 | import { parseENSAddress } from '../utils/parseENSAddress' 4 | import uriToHttp from '../utils/uriToHttp' 5 | import useENSContentHash from './useENSContentHash' 6 | 7 | export default function useHttpLocations(uri: string | undefined): string[] { 8 | const ens = useMemo(() => (uri ? parseENSAddress(uri) : undefined), [uri]) 9 | const resolvedContentHash = useENSContentHash(ens?.ensName) 10 | return useMemo(() => { 11 | if (ens) { 12 | return resolvedContentHash.contenthash ? uriToHttp(contenthashToUri(resolvedContentHash.contenthash)) : [] 13 | } else { 14 | return uri ? uriToHttp(uri) : [] 15 | } 16 | }, [ens, resolvedContentHash.contenthash, uri]) 17 | } 18 | -------------------------------------------------------------------------------- /src/hooks/useInterval.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useRef } from 'react' 2 | 3 | export default function useInterval(callback: () => void, delay: null | number, leading = true) { 4 | const savedCallback = useRef<() => void>() 5 | 6 | // 记住最新的回调。 7 | useEffect(() => { 8 | savedCallback.current = callback 9 | }, [callback]) 10 | 11 | // 设置间隔。 12 | useEffect(() => { 13 | function tick() { 14 | const current = savedCallback.current 15 | current && current() 16 | } 17 | 18 | if (delay !== null) { 19 | if (leading) tick() 20 | const id = setInterval(tick, delay) 21 | return () => clearInterval(id) 22 | } 23 | return undefined 24 | }, [delay, leading]) 25 | } 26 | -------------------------------------------------------------------------------- /src/hooks/useIsWindowVisible.ts: -------------------------------------------------------------------------------- 1 | import { useCallback, useEffect, useState } from 'react' 2 | 3 | const VISIBILITY_STATE_SUPPORTED = 'visibilityState' in document 4 | 5 | function isWindowVisible() { 6 | return !VISIBILITY_STATE_SUPPORTED || document.visibilityState !== 'hidden' 7 | } 8 | 9 | /** 10 | * 返回当前窗口对用户是否可见。 11 | */ 12 | export default function useIsWindowVisible(): boolean { 13 | const [focused, setFocused] = useState(isWindowVisible()) 14 | const listener = useCallback(() => { 15 | setFocused(isWindowVisible()) 16 | }, [setFocused]) 17 | 18 | useEffect(() => { 19 | if (!VISIBILITY_STATE_SUPPORTED) return undefined 20 | 21 | document.addEventListener('visibilitychange', listener) 22 | return () => { 23 | document.removeEventListener('visibilitychange', listener) 24 | } 25 | }, [listener]) 26 | 27 | return focused 28 | } 29 | -------------------------------------------------------------------------------- /src/hooks/useOnClickOutside.tsx: -------------------------------------------------------------------------------- 1 | import { RefObject, useEffect, useRef } from 'react' 2 | 3 | export function useOnClickOutside( 4 | node: RefObject, 5 | handler: undefined | (() => void) 6 | ) { 7 | const handlerRef = useRef void)>(handler) 8 | useEffect(() => { 9 | handlerRef.current = handler 10 | }, [handler]) 11 | 12 | useEffect(() => { 13 | const handleClickOutside = (e: MouseEvent) => { 14 | if (node.current?.contains(e.target as Node) ?? false) { 15 | return 16 | } 17 | if (handlerRef.current) handlerRef.current() 18 | } 19 | 20 | document.addEventListener('mousedown', handleClickOutside) 21 | 22 | return () => { 23 | document.removeEventListener('mousedown', handleClickOutside) 24 | } 25 | }, [node]) 26 | } 27 | -------------------------------------------------------------------------------- /src/hooks/useParsedQueryString.ts: -------------------------------------------------------------------------------- 1 | import { parse, ParsedQs } from 'qs' 2 | import { useMemo } from 'react' 3 | import { useLocation } from 'react-router-dom' 4 | 5 | export default function useParsedQueryString(): ParsedQs { 6 | const { search } = useLocation() 7 | return useMemo( 8 | () => (search && search.length > 1 ? parse(search, { parseArrays: false, ignoreQueryPrefix: true }) : {}), 9 | [search] 10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /src/hooks/usePrevious.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useRef } from 'react' 2 | 3 | // modified from https://usehooks.com/usePrevious/ 4 | export default function usePrevious(value: T) { 5 | // The ref object is a generic container whose current property is mutable ... 6 | // ... and can hold any value, similar to an instance property on a class 7 | const ref = useRef() 8 | 9 | // Store current value in ref 10 | useEffect(() => { 11 | ref.current = value 12 | }, [value]) // Only re-run if value changes 13 | 14 | // Return previous value (happens before update in useEffect above) 15 | return ref.current 16 | } 17 | -------------------------------------------------------------------------------- /src/hooks/useToggledVersion.ts: -------------------------------------------------------------------------------- 1 | import useParsedQueryString from './useParsedQueryString' 2 | 3 | export enum Version { 4 | v1 = 'v1', 5 | v2 = 'v2' 6 | } 7 | 8 | export const DEFAULT_VERSION: Version = Version.v2 9 | 10 | export default function useToggledVersion(): Version { 11 | const { use } = useParsedQueryString() 12 | if (!use || typeof use !== 'string') return Version.v2 13 | if (use.toLowerCase() === 'v1') return Version.v1 14 | return DEFAULT_VERSION 15 | } 16 | -------------------------------------------------------------------------------- /src/hooks/useWrapCallback.ts: -------------------------------------------------------------------------------- 1 | 2 | export enum WrapType { 3 | NOT_APPLICABLE, 4 | WRAP, 5 | UNWRAP, 6 | NOCONNECT 7 | } 8 | -------------------------------------------------------------------------------- /src/i18n.ts: -------------------------------------------------------------------------------- 1 | import i18next from 'i18next' 2 | import { initReactI18next } from 'react-i18next' 3 | import XHR from 'i18next-xhr-backend' 4 | import LanguageDetector from 'i18next-browser-languagedetector' 5 | 6 | i18next 7 | .use(XHR) 8 | .use(LanguageDetector) 9 | .use(initReactI18next) 10 | .init({ 11 | backend: { 12 | loadPath: `./locales/{{lng}}.json` 13 | }, 14 | react: { 15 | useSuspense: true 16 | }, 17 | fallbackLng: 'en', 18 | preload: ['en'], 19 | keySeparator: false, 20 | interpolation: { escapeValue: false } 21 | }) 22 | 23 | export default i18next 24 | -------------------------------------------------------------------------------- /src/nonevm/apt/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const aptBalanceList = createAction<{ list: any }>('apt/aptBalanceList') 4 | export const aptApproveList = createAction<{ token: any, result: any }>('apt/aptApproveList') -------------------------------------------------------------------------------- /src/nonevm/apt/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { aptBalanceList, aptApproveList } from './actions' 3 | 4 | export interface BurnState { 5 | readonly aptBalanceList: any 6 | readonly aptApproveList: any 7 | } 8 | 9 | const initialState: BurnState = { 10 | aptBalanceList: {}, 11 | aptApproveList: {}, 12 | } 13 | 14 | export default createReducer(initialState, builder => 15 | builder 16 | .addCase(aptBalanceList, (state, { payload: { list } }) => { 17 | // console.log(list) 18 | state.aptBalanceList = list 19 | }) 20 | .addCase(aptApproveList, (state, { payload: { token, result } }) => { 21 | // state.trxApproveList = list 22 | if (!state.aptApproveList) state.aptApproveList = {} 23 | state.aptApproveList[token] = result 24 | }) 25 | ) -------------------------------------------------------------------------------- /src/nonevm/atom/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const atomBalanceList = createAction<{ list: any }>('atom/atomBalanceList') 4 | export const atomApproveList = createAction<{ token: any, result: any }>('atom/atomApproveList') 5 | -------------------------------------------------------------------------------- /src/nonevm/atom/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { atomBalanceList, atomApproveList } from './actions' 3 | 4 | export interface BurnState { 5 | readonly atomBalanceList: any 6 | readonly atomApproveList: any 7 | } 8 | 9 | const initialState: BurnState = { 10 | atomBalanceList: {}, 11 | atomApproveList: {}, 12 | } 13 | 14 | export default createReducer(initialState, builder => 15 | builder 16 | .addCase(atomBalanceList, (state, { payload: { list } }) => { 17 | state.atomBalanceList = list 18 | }) 19 | .addCase(atomApproveList, (state, { payload: { token, result } }) => { 20 | // state.trxApproveList = list 21 | if (!state.atomApproveList) state.atomApproveList = {} 22 | state.atomApproveList[token] = result 23 | }) 24 | ) 25 | -------------------------------------------------------------------------------- /src/nonevm/btc/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const btcBalanceList = createAction<{ list: any }>('btc/btcBalanceList') -------------------------------------------------------------------------------- /src/nonevm/btc/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { btcBalanceList } from './actions' 3 | 4 | export interface BurnState { 5 | readonly btcBalanceList: any 6 | } 7 | 8 | const initialState: BurnState = { 9 | btcBalanceList: {}, 10 | } 11 | 12 | export default createReducer(initialState, builder => 13 | builder 14 | .addCase(btcBalanceList, (state, { payload: { list } }) => { 15 | // console.log(list) 16 | state.btcBalanceList = list 17 | }) 18 | ) -------------------------------------------------------------------------------- /src/nonevm/cardano/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const adaAddress = createAction<{ address: any }>('ada/adaAddress') 4 | export const adaBalanceList = createAction<{ list: any }>('ada/adaBalanceList') 5 | -------------------------------------------------------------------------------- /src/nonevm/cardano/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { adaAddress, adaBalanceList } from './actions' 3 | 4 | export interface BurnState { 5 | readonly adaAddress: any 6 | readonly adaBalanceList: any 7 | // readonly adaWallet: any 8 | } 9 | 10 | const initialState: BurnState = { 11 | adaAddress: '', 12 | adaBalanceList: {}, 13 | // adaWallet: '', 14 | } 15 | 16 | export default createReducer(initialState, builder => 17 | builder 18 | .addCase(adaAddress, (state, { payload: { address } }) => { 19 | state.adaAddress = address 20 | }) 21 | .addCase(adaBalanceList, (state, { payload: { list } }) => { 22 | state.adaBalanceList = list 23 | }) 24 | ) 25 | -------------------------------------------------------------------------------- /src/nonevm/flow/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const flowAddress = createAction<{ address: any }>('flow/flowAddress') 4 | export const flowBalanceList = createAction<{ list: any }>('flow/flowBalanceList') 5 | -------------------------------------------------------------------------------- /src/nonevm/flow/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { flowAddress, flowBalanceList } from './actions' 3 | 4 | export interface BurnState { 5 | readonly flowAddress: any 6 | readonly flowBalanceList: any 7 | // readonly adaWallet: any 8 | } 9 | 10 | const initialState: BurnState = { 11 | flowAddress: '', 12 | flowBalanceList: {}, 13 | // adaWallet: '', 14 | } 15 | 16 | export default createReducer(initialState, builder => 17 | builder 18 | .addCase(flowAddress, (state, { payload: { address } }) => { 19 | state.flowAddress = address 20 | }) 21 | .addCase(flowBalanceList, (state, { payload: { list } }) => { 22 | state.flowBalanceList = list 23 | }) 24 | ) 25 | -------------------------------------------------------------------------------- /src/nonevm/hooks/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const nonevmAddress = createAction<{ chainId: any, account: any }>('nonevm/nonevmAddress') 4 | export const nonevmBalanceList = createAction<{ list: any }>('nonevm/nonevmBalanceList') 5 | export const approveList = createAction<{ chainId: any, account:any, token:any, spender:any, allowance:any}>('nonevm/approveList') 6 | -------------------------------------------------------------------------------- /src/nonevm/hooks/index.ts: -------------------------------------------------------------------------------- 1 | import { useCallback } from 'react' 2 | import { 3 | useDispatch, 4 | useSelector 5 | } from 'react-redux' 6 | import { 7 | AppState, 8 | AppDispatch 9 | } from '../../state' 10 | import {approveList} from './actions' 11 | 12 | export function useNonevmAddress (chainId:any) { 13 | const account:any = useSelector(state => state.nonevm.nonevmAddress) 14 | // console.log(account) 15 | // console.log(chainId) 16 | return { 17 | nonevmAccount: account?.[chainId]?.account ?? undefined 18 | } 19 | } 20 | 21 | export function useApproveState () { 22 | // const allowanceList:any = useSelector(state => state.nonevm.approveList) 23 | const dispatch = useDispatch() 24 | const setApprovalState = useCallback(({chainId, account, token, spender, allowance}) => { 25 | if (chainId && account && token && spender) { 26 | dispatch(approveList({ 27 | chainId, account, token, spender, allowance 28 | })) 29 | } 30 | }, []) 31 | 32 | return { 33 | setApprovalState 34 | } 35 | } -------------------------------------------------------------------------------- /src/nonevm/hooks/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { approveList, nonevmAddress } from './actions' 3 | 4 | export interface BurnState { 5 | readonly approveList: any 6 | readonly nonevmAddress: any 7 | } 8 | 9 | const initialState: BurnState = { 10 | approveList: {}, 11 | nonevmAddress: {}, 12 | } 13 | 14 | export default createReducer(initialState, builder => 15 | builder 16 | .addCase(approveList, (state, { payload: { chainId, account, token, spender, allowance } }) => { 17 | if (!state.approveList) state.approveList = {} 18 | if (!state.approveList[chainId]) state.approveList[chainId] = {} 19 | if (!state.approveList[chainId][account]) state.approveList[chainId][account] = {} 20 | if (!state.approveList[chainId][account][token]) state.approveList[chainId][account][token] = {} 21 | state.approveList[chainId][account][token][spender] = { 22 | allowance 23 | } 24 | }) 25 | .addCase(nonevmAddress, (state, { payload: { chainId, account} }) => { 26 | if (!state.nonevmAddress) state.nonevmAddress = {} 27 | state.nonevmAddress[chainId] = {account} 28 | }) 29 | ) 30 | -------------------------------------------------------------------------------- /src/nonevm/index.ts: -------------------------------------------------------------------------------- 1 | import xlm from './stellar/reducer' 2 | import trx from './trx/reducer' 3 | import ada from './cardano/reducer' 4 | import flow from './flow/reducer' 5 | import nonevm from './hooks/reducer' 6 | import temp from './temp/reducer' 7 | import sol from './solana/reducer' 8 | import apt from './apt/reducer' 9 | import btc from './btc/reducer' 10 | import atom from './atom/reducer' 11 | import reef from './reef/reducer' 12 | export default { 13 | xlm, 14 | trx, 15 | ada, 16 | flow, 17 | nonevm, 18 | temp, 19 | sol, 20 | apt, 21 | btc, 22 | atom, 23 | reef 24 | } -------------------------------------------------------------------------------- /src/nonevm/nas/updater.ts: -------------------------------------------------------------------------------- 1 | 2 | import { useCallback, useEffect } from 'react' 3 | import { useActiveReact } from '../../hooks/useActiveReact' 4 | 5 | import { ChainId } from '../../config/chainConfig/chainId' 6 | import {useNasLogin} from './index' 7 | 8 | export default function Updater(): null { 9 | const { chainId } = useActiveReact() 10 | 11 | const {loginNas} = useNasLogin() 12 | 13 | const getNasAddress = useCallback(() => { 14 | if ([ChainId.NAS].includes(chainId)) { 15 | // console.log(111) 16 | loginNas(chainId, 1) 17 | } 18 | }, [chainId]) 19 | 20 | useEffect(() => { 21 | getNasAddress() 22 | }, [chainId]) 23 | 24 | return null 25 | } 26 | -------------------------------------------------------------------------------- /src/nonevm/reef/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const reefBalanceList = createAction<{ list: any }>('reef/reefBalanceList') 4 | export const reefApproveList = createAction<{ token: any, result: any }>('reef/reefApproveList') 5 | export const reefEvmAddress = createAction<{ address: any}>('reef/reefEvmAddress') -------------------------------------------------------------------------------- /src/nonevm/reef/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { reefBalanceList, reefApproveList, reefEvmAddress } from './actions' 3 | 4 | export interface BurnState { 5 | readonly reefBalanceList: any 6 | readonly reefApproveList: any 7 | readonly reefEvmAddress: any 8 | } 9 | 10 | const initialState: BurnState = { 11 | reefBalanceList: {}, 12 | reefApproveList: {}, 13 | reefEvmAddress: '', 14 | } 15 | 16 | export default createReducer(initialState, builder => 17 | builder 18 | .addCase(reefBalanceList, (state, { payload: { list } }) => { 19 | state.reefBalanceList = list 20 | }) 21 | .addCase(reefEvmAddress, (state, { payload: { address } }) => { 22 | // console.log('reefEvmAddress', address) 23 | state.reefEvmAddress = address 24 | }) 25 | .addCase(reefApproveList, (state, { payload: { token, result } }) => { 26 | // state.trxApproveList = list 27 | if (!state.reefApproveList) state.reefApproveList = {} 28 | state.reefApproveList[token] = result 29 | }) 30 | ) 31 | -------------------------------------------------------------------------------- /src/nonevm/solana/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const solAddress = createAction<{ address: any }>('sol/solAddress') 4 | export const solBalanceList = createAction<{ list: any }>('sol/solBalanceList') 5 | export const solApproveList = createAction<{ token: any, result: any }>('sol/solApproveList') 6 | -------------------------------------------------------------------------------- /src/nonevm/solana/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { solAddress, solBalanceList, solApproveList } from './actions' 3 | 4 | export interface BurnState { 5 | readonly solAddress: any 6 | readonly solBalanceList: any 7 | readonly solApproveList: any 8 | } 9 | 10 | const initialState: BurnState = { 11 | solAddress: '', 12 | solBalanceList: {}, 13 | solApproveList: {}, 14 | } 15 | 16 | export default createReducer(initialState, builder => 17 | builder 18 | .addCase(solAddress, (state, { payload: { address } }) => { 19 | state.solAddress = address 20 | }) 21 | .addCase(solBalanceList, (state, { payload: { list } }) => { 22 | state.solBalanceList = list 23 | }) 24 | .addCase(solApproveList, (state, { payload: { token, result } }) => { 25 | // state.trxApproveList = list 26 | if (!state.solApproveList) state.solApproveList = {} 27 | state.solApproveList[token] = result 28 | }) 29 | ) 30 | -------------------------------------------------------------------------------- /src/nonevm/stellar/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const xlmAddress = createAction<{ address: any }>('xlm/xlmAddress') 4 | export const balanceList = createAction<{ list: any }>('xlm/balanceList') 5 | -------------------------------------------------------------------------------- /src/nonevm/stellar/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { xlmAddress, balanceList } from './actions' 3 | 4 | export interface BurnState { 5 | readonly xlmAddress: any 6 | readonly balanceList: any 7 | } 8 | 9 | const initialState: BurnState = { 10 | xlmAddress: '', 11 | balanceList: {}, 12 | } 13 | 14 | export default createReducer(initialState, builder => 15 | builder 16 | .addCase(xlmAddress, (state, { payload: { address } }) => { 17 | state.xlmAddress = address 18 | }) 19 | .addCase(balanceList, (state, { payload: { list } }) => { 20 | state.balanceList = list 21 | }) 22 | ) 23 | -------------------------------------------------------------------------------- /src/nonevm/temp/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const tempAddress = createAction<{ address: any }>('temp/tempAddress') 4 | export const tempBalanceList = createAction<{ list: any }>('temp/tempBalanceList') 5 | export const tempApproveList = createAction<{ token: any, result: any }>('temp/tempApproveList') 6 | -------------------------------------------------------------------------------- /src/nonevm/temp/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { tempAddress, tempBalanceList, tempApproveList } from './actions' 3 | 4 | export interface BurnState { 5 | readonly tempAddress: any 6 | readonly tempBalanceList: any 7 | readonly tempApproveList: any 8 | } 9 | 10 | const initialState: BurnState = { 11 | tempAddress: '', 12 | tempBalanceList: {}, 13 | tempApproveList: {}, 14 | } 15 | 16 | export default createReducer(initialState, builder => 17 | builder 18 | .addCase(tempAddress, (state, { payload: { address } }) => { 19 | state.tempAddress = address 20 | }) 21 | .addCase(tempBalanceList, (state, { payload: { list } }) => { 22 | state.tempBalanceList = list 23 | }) 24 | .addCase(tempApproveList, (state, { payload: { token, result } }) => { 25 | // state.trxApproveList = list 26 | if (!state.tempApproveList) state.tempApproveList = {} 27 | state.tempApproveList[token] = result 28 | }) 29 | ) 30 | -------------------------------------------------------------------------------- /src/nonevm/temp/updater.ts: -------------------------------------------------------------------------------- 1 | 2 | import { useCallback, useEffect } from 'react' 3 | import { useActiveReact } from '../../hooks/useActiveReact' 4 | 5 | import {useLoginTemp} from './index' 6 | 7 | export default function Updater(): null { 8 | const { chainId } = useActiveReact() 9 | 10 | const {loginTemp} = useLoginTemp() 11 | 12 | const getTempAddress = useCallback(() => { 13 | loginTemp() 14 | }, [chainId]) 15 | 16 | useEffect(() => { 17 | getTempAddress() 18 | }, [chainId]) 19 | 20 | return null 21 | } 22 | -------------------------------------------------------------------------------- /src/nonevm/trx/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const trxAddress = createAction<{ address: any }>('trx/trxAddress') 4 | export const trxBalanceList = createAction<{ list: any }>('trx/trxBalanceList') 5 | export const trxApproveList = createAction<{ token: any, result: any }>('trx/trxApproveList') 6 | -------------------------------------------------------------------------------- /src/nonevm/trx/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { trxAddress, trxBalanceList,trxApproveList } from './actions' 3 | 4 | export interface BurnState { 5 | readonly trxAddress: any 6 | readonly trxBalanceList: any 7 | readonly trxApproveList: any 8 | } 9 | 10 | const initialState: BurnState = { 11 | trxAddress: '', 12 | trxBalanceList: {}, 13 | trxApproveList: {}, 14 | } 15 | 16 | export default createReducer(initialState, builder => 17 | builder 18 | .addCase(trxAddress, (state, { payload: { address } }) => { 19 | state.trxAddress = address 20 | }) 21 | .addCase(trxBalanceList, (state, { payload: { list } }) => { 22 | state.trxBalanceList = list 23 | }) 24 | .addCase(trxApproveList, (state, { payload: { token, result } }) => { 25 | // state.trxApproveList = list 26 | if (!state.trxApproveList) state.trxApproveList = {} 27 | state.trxApproveList[token] = result 28 | }) 29 | ) 30 | -------------------------------------------------------------------------------- /src/pages/AppBody.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | 4 | export const BodyWrapper = styled.div` 5 | position: relative; 6 | width: 100%; 7 | height: 100%; 8 | padding: 2.5rem 70px; 9 | overflow:auto; 10 | margin:auto; 11 | ${({ theme }) => theme.mediaWidth.upToMedium` 12 | padding: 0rem 0px; 13 | `}; 14 | ` 15 | 16 | const BodyContent = styled.div` 17 | width: 100%; 18 | height: 100%; 19 | padding: 0rem 0px; 20 | overflow: auto; 21 | ${({ theme }) => theme.mediaWidth.upToMedium` 22 | overflow:auto; 23 | padding: 0px; 24 | left:0; 25 | bottom:65px; 26 | `}; 27 | ` 28 | 29 | /** 30 | * The styled container element that wraps the content of most pages and the tabs. 31 | */ 32 | export default function AppBody({ children }: { children: React.ReactNode }) { 33 | return ( 34 | 35 | {children} 36 | 37 | ) 38 | } 39 | -------------------------------------------------------------------------------- /src/pages/History/hooks.ts: -------------------------------------------------------------------------------- 1 | export function getSymbol (pairid:any) { 2 | if (pairid === 'any') { 3 | return pairid.toUpperCase() 4 | } 5 | // const pairid = row.pairid ? row.pairid.replace('v2', '').replace('v3', '').replace('v4', '').replace('v5', '').replace('v6', '').replace('any', '').toUpperCase() : (obj ? obj.symbol : '') 6 | 7 | // console.log(row.pairid) 8 | const symbol = pairid ? pairid.replace(/v[0-9]+$/, '').replace('any', '').toUpperCase() : '' 9 | return symbol 10 | } 11 | 12 | const txnsType = ['swapout'] 13 | 14 | export function getFromChainId (tx:any) { 15 | if (tx?.fromChainID) { 16 | return tx?.fromChainID 17 | } else if (!txnsType.includes(tx?.historyType)) { 18 | return tx?.srcChainID 19 | } else { 20 | return tx?.destChainID 21 | } 22 | } 23 | 24 | export function getToChainId (tx:any) { 25 | if (tx?.toChainID) { 26 | return tx?.toChainID 27 | } else if (!txnsType.includes(tx?.historyType)) { 28 | return tx?.destChainID 29 | } else { 30 | return tx?.srcChainID 31 | } 32 | } -------------------------------------------------------------------------------- /src/pages/Test/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { ButtonLight } from '../../components/Button' 4 | 5 | import AppBody from '../AppBody' 6 | 7 | import { 8 | getTokenlist, 9 | // setTokenlist 10 | } from '../../utils/indexedDB' 11 | 12 | // import { 13 | // // useLogin, 14 | // useNearSendTxns 15 | // } from '../../hooks/near' 16 | 17 | 18 | 19 | export default function TestWarpper () { 20 | 21 | // const {execute: sendNearTxns} = useNearSendTxns('1', 'dwinter.testnet') 22 | return ( 23 | <> 24 | 25 | { 26 | // if (sendNearTxns) sendNearTxns() 27 | getTokenlist('56') 28 | }}>test 29 | { 30 | // if (sendNearTxns) sendNearTxns() 31 | // setTokenlist('56', {name: 'test'}) 32 | }}>test1 33 | 34 | 35 | ) 36 | } -------------------------------------------------------------------------------- /src/state/burn/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export enum Field { 4 | LIQUIDITY_PERCENT = 'LIQUIDITY_PERCENT', 5 | LIQUIDITY = 'LIQUIDITY', 6 | CURRENCY_A = 'CURRENCY_A', 7 | CURRENCY_B = 'CURRENCY_B' 8 | } 9 | 10 | export const typeInput = createAction<{ field: Field; typedValue: string }>('burn/typeInputBurn') 11 | -------------------------------------------------------------------------------- /src/state/burn/hooks.ts: -------------------------------------------------------------------------------- 1 | import { useCallback } from 'react' 2 | import { useDispatch, useSelector } from 'react-redux' 3 | import { AppDispatch, AppState } from '../index' 4 | import { Field, typeInput } from './actions' 5 | 6 | export function useBurnState(): AppState['burn'] { 7 | return useSelector(state => state.burn) 8 | } 9 | 10 | export function useBurnActionHandlers(): { 11 | onUserInput: (field: Field, typedValue: string) => void 12 | } { 13 | const dispatch = useDispatch() 14 | 15 | const onUserInput = useCallback( 16 | (field: Field, typedValue: string) => { 17 | dispatch(typeInput({ field, typedValue })) 18 | }, 19 | [dispatch] 20 | ) 21 | 22 | return { 23 | onUserInput 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/state/burn/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { Field, typeInput } from './actions' 3 | 4 | export interface BurnState { 5 | readonly independentField: Field 6 | readonly typedValue: string 7 | } 8 | 9 | const initialState: BurnState = { 10 | independentField: Field.LIQUIDITY_PERCENT, 11 | typedValue: '0' 12 | } 13 | 14 | export default createReducer(initialState, builder => 15 | builder.addCase(typeInput, (state, { payload: { field, typedValue } }) => { 16 | return { 17 | ...state, 18 | independentField: field, 19 | typedValue 20 | } 21 | }) 22 | ) 23 | -------------------------------------------------------------------------------- /src/state/global/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | // fired once when the app reloads but before the app renders 4 | // allows any updates to be applied to store data loaded from localStorage 5 | export const updateVersion = createAction('global/updateVersion') 6 | -------------------------------------------------------------------------------- /src/state/nft/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const nftlist = createAction<{ chainId: any; tokenList: any, version:any }>('nft/nftlist') 4 | export const nftlistinfo = createAction<{ chainId: any; tokenList: any}>('nft/nftlistinfo') 5 | export const updateNftlistTime = createAction<{}>('nft/updateNftlistTime') 6 | -------------------------------------------------------------------------------- /src/state/nft/reducer.ts: -------------------------------------------------------------------------------- 1 | import { createReducer } from '@reduxjs/toolkit' 2 | import { nftlist, nftlistinfo, updateNftlistTime } from './actions' 3 | 4 | export interface BurnState { 5 | readonly nftlist: any 6 | readonly nftlistinfo: any 7 | readonly updateNftlistTime: any 8 | } 9 | 10 | const initialState: BurnState = { 11 | nftlist: {}, 12 | nftlistinfo: {}, 13 | updateNftlistTime: '' 14 | } 15 | 16 | export default createReducer(initialState, builder => 17 | builder 18 | .addCase(nftlist, (state, { payload: { chainId, tokenList, version } }) => { 19 | state.nftlist= { 20 | [chainId]: {tokenList, timestamp: Date.now(), version} 21 | } 22 | }) 23 | .addCase(nftlistinfo, (state, { payload: { chainId, tokenList } }) => { 24 | state.nftlistinfo= { 25 | [chainId]: {tokenList, timestamp: Date.now()} 26 | } 27 | }) 28 | .addCase(updateNftlistTime, (state, { payload: { } }) => { 29 | state.updateNftlistTime = Date.now() 30 | }) 31 | ) 32 | -------------------------------------------------------------------------------- /src/state/pools/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | // export const poolLiquidity = createAction<{poolLiquidity:any}>('pools/liquidity') 4 | export const poolList = createAction<{chainId:any, tokenList:any, version:any}>('pools/poolList') 5 | export const updatePoollistTime = createAction<{}>('lists/updatePoollistTime') -------------------------------------------------------------------------------- /src/state/rpc/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const rpclist = createAction<{ chainId: any; rpclist: any }>('rpc/rpclist') 4 | -------------------------------------------------------------------------------- /src/state/rpc/hooks.ts: -------------------------------------------------------------------------------- 1 | // import { useCallback, useEffect, useState, useMemo } from 'react' 2 | // import { useDispatch, useSelector } from 'react-redux' 3 | // import { AppDispatch, AppState } from '../index' 4 | import { useSelector } from 'react-redux' 5 | import { AppState } from '../index' 6 | // import { rpclist } from './actions' 7 | 8 | import { useActiveReact } from '../../hooks/useActiveReact' 9 | 10 | export function useRpcState(): any { 11 | const { chainId } = useActiveReact() 12 | const list:any = useSelector(state => state.rpc.rpclist) 13 | if (!chainId || !list[chainId]) return {} 14 | 15 | return list[chainId] 16 | } 17 | -------------------------------------------------------------------------------- /src/state/swap/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export enum Field { 4 | INPUT = 'INPUT', 5 | OUTPUT = 'OUTPUT' 6 | } 7 | 8 | export const selectCurrency = createAction<{ 9 | field: Field; 10 | currencyId: string, 11 | decimals: number, 12 | symbol: string, 13 | name: string, 14 | chainId: any 15 | }>('swap/selectCurrency') 16 | export const switchCurrencies = createAction('swap/switchCurrencies') 17 | export const typeInput = createAction<{ field: Field; typedValue: string }>('swap/typeInput') 18 | export const replaceSwapState = createAction<{ 19 | field: Field 20 | typedValue: string 21 | inputCurrencyId?: string 22 | outputCurrencyId?: string 23 | recipient: string | null 24 | decimals?: number, 25 | symbol?: string, 26 | name?: string, 27 | chainId?: any 28 | }>('swap/replaceSwapState') 29 | export const setRecipient = createAction<{ recipient: string | null }>('swap/setRecipient') 30 | -------------------------------------------------------------------------------- /src/state/updaters.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ApplicationUpdater from './application/updater' 3 | import ListsUpdater from './lists/updater' 4 | import MulticallUpdater from './multicall/updater' 5 | import TransactionUpdater from './transactions/updater' 6 | import UserUpdater from './user/updater' 7 | // import PoolsUpdater from './pools/updater' 8 | import WalletUpdater from './wallet/updater' 9 | 10 | import NonevmUpdater from '../nonevm/updater' 11 | // import RpcUpdater from './rpc/updater' 12 | 13 | export function Updaters() { 14 | return ( 15 | <> 16 | 17 | 18 | {/* */} 19 | 20 | 21 | 22 | 23 | 24 | {/* */} 25 | {/* */} 26 | 27 | ) 28 | } -------------------------------------------------------------------------------- /src/state/wallet/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | 3 | export const WALLET_VIEWS = { 4 | OPTIONS: 'options', 5 | OPTIONS_SECONDARY: 'options_secondary', 6 | ACCOUNT: 'account', 7 | PENDING: 'pending' 8 | } 9 | 10 | export const tokenBalanceList = createAction<{chainId: any, tokenList:any, account:any}>('wallet/tokenBalanceList') 11 | export const walletViews = createAction<{type: any}>('wallet/walletViews') 12 | export const updateTokenBalance = createAction<{chainId: any, token:any, account:any, balance:string, decimals:number}>('wallet/updateTokenBalance') -------------------------------------------------------------------------------- /src/theme/DarkModeQueryParamReader.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react' 2 | import { useDispatch } from 'react-redux' 3 | import { RouteComponentProps } from 'react-router-dom' 4 | import { parse } from 'qs' 5 | import { AppDispatch } from '../state' 6 | import { updateUserDarkMode } from '../state/user/actions' 7 | 8 | export default function DarkModeQueryParamReader({ location: { search } }: RouteComponentProps): null { 9 | const dispatch = useDispatch() 10 | 11 | useEffect(() => { 12 | if (!search) return 13 | if (search.length < 2) return 14 | 15 | const parsed = parse(search, { 16 | parseArrays: false, 17 | ignoreQueryPrefix: true 18 | }) 19 | 20 | const theme = parsed.theme 21 | 22 | if (typeof theme !== 'string') return 23 | 24 | if (theme.toLowerCase() === 'light') { 25 | dispatch(updateUserDarkMode({ userDarkMode: false })) 26 | } else if (theme.toLowerCase() === 'dark') { 27 | dispatch(updateUserDarkMode({ userDarkMode: true })) 28 | } 29 | }, [dispatch, search]) 30 | 31 | return null 32 | } 33 | -------------------------------------------------------------------------------- /src/utils/bridge/type.ts: -------------------------------------------------------------------------------- 1 | // 获取合约配置 2 | export const CROSSCHAINBRIDGE = 'CROSSCHAINBRIDGE' -------------------------------------------------------------------------------- /src/utils/chunkArray.test.ts: -------------------------------------------------------------------------------- 1 | import chunkArray from './chunkArray' 2 | 3 | describe('#chunkArray', () => { 4 | it('size 1', () => { 5 | expect(chunkArray([1, 2, 3], 1)).toEqual([[1], [2], [3]]) 6 | }) 7 | it('size 0 throws', () => { 8 | expect(() => chunkArray([1, 2, 3], 0)).toThrow('maxChunkSize must be gte 1') 9 | }) 10 | it('size gte items', () => { 11 | expect(chunkArray([1, 2, 3], 3)).toEqual([[1, 2, 3]]) 12 | expect(chunkArray([1, 2, 3], 4)).toEqual([[1, 2, 3]]) 13 | }) 14 | it('size exact half', () => { 15 | expect(chunkArray([1, 2, 3, 4], 2)).toEqual([ 16 | [1, 2], 17 | [3, 4] 18 | ]) 19 | }) 20 | it('evenly distributes', () => { 21 | const chunked = chunkArray([...Array(100).keys()], 40) 22 | 23 | expect(chunked).toEqual([ 24 | [...Array(34).keys()], 25 | [...Array(34).keys()].map(i => i + 34), 26 | [...Array(32).keys()].map(i => i + 68) 27 | ]) 28 | 29 | expect(chunked[0][0]).toEqual(0) 30 | expect(chunked[2][31]).toEqual(99) 31 | }) 32 | }) 33 | -------------------------------------------------------------------------------- /src/utils/chunkArray.ts: -------------------------------------------------------------------------------- 1 | // chunks array into chunks of maximum size 2 | // evenly distributes items among the chunks 3 | export default function chunkArray(items: T[], maxChunkSize: number): T[][] { 4 | if (maxChunkSize < 1) throw new Error('maxChunkSize must be gte 1') 5 | if (items.length <= maxChunkSize) return [items] 6 | 7 | const numChunks: number = Math.ceil(items.length / maxChunkSize) 8 | const chunkSize = Math.ceil(items.length / numChunks) 9 | 10 | return [...Array(numChunks).keys()].map(ix => items.slice(ix * chunkSize, ix * chunkSize + chunkSize)) 11 | } 12 | -------------------------------------------------------------------------------- /src/utils/contenthashToUri.test.skip.ts: -------------------------------------------------------------------------------- 1 | import contenthashToUri, { hexToUint8Array } from './contenthashToUri' 2 | 3 | // this test is skipped for now because importing CID results in 4 | // TypeError: TextDecoder is not a constructor 5 | 6 | describe('#contenthashToUri', () => { 7 | it('1inch.tokens.eth contenthash', () => { 8 | expect(contenthashToUri('0xe3010170122013e051d1cfff20606de36845d4fe28deb9861a319a5bc8596fa4e610e8803918')).toEqual( 9 | 'ipfs://QmPgEqyV3m8SB52BS2j2mJpu9zGprhj2BGCHtRiiw2fdM1' 10 | ) 11 | }) 12 | it('uniswap.eth contenthash', () => { 13 | expect(contenthashToUri('0xe5010170000f6170702e756e69737761702e6f7267')).toEqual('ipns://app.uniswap.org') 14 | }) 15 | }) 16 | 17 | describe('#hexToUint8Array', () => { 18 | it('common case', () => { 19 | expect(hexToUint8Array('0x010203fdfeff')).toEqual(new Uint8Array([1, 2, 3, 253, 254, 255])) 20 | }) 21 | }) 22 | -------------------------------------------------------------------------------- /src/utils/getLibrary.ts: -------------------------------------------------------------------------------- 1 | import { Web3Provider } from '@ethersproject/providers' 2 | 3 | export default function getLibrary(provider: any): any { 4 | if (provider) { 5 | const library = new Web3Provider(provider, 'any') 6 | library.pollingInterval = 3000 7 | return library 8 | } 9 | return '' 10 | } 11 | -------------------------------------------------------------------------------- /src/utils/indexedDB/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tokenlist' 2 | // export * from './poollist' 3 | export * from './config' -------------------------------------------------------------------------------- /src/utils/isZero.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns true if the string value is zero in hex 3 | * @param hexNumberString 4 | */ 5 | export default function isZero(hexNumberString: string) { 6 | return /^0x0*$/.test(hexNumberString) 7 | } 8 | -------------------------------------------------------------------------------- /src/utils/listVersionLabel.ts: -------------------------------------------------------------------------------- 1 | 2 | export default function listVersionLabel(version: any): string { 3 | return `v${version.major}.${version.minor}.${version.patch}` 4 | } 5 | -------------------------------------------------------------------------------- /src/utils/parseENSAddress.test.ts: -------------------------------------------------------------------------------- 1 | import { parseENSAddress } from './parseENSAddress' 2 | 3 | describe('parseENSAddress', () => { 4 | it('test cases', () => { 5 | expect(parseENSAddress('hello.eth')).toEqual({ ensName: 'hello.eth', ensPath: undefined }) 6 | expect(parseENSAddress('hello.eth/')).toEqual({ ensName: 'hello.eth', ensPath: '/' }) 7 | expect(parseENSAddress('hello.world.eth/')).toEqual({ ensName: 'hello.world.eth', ensPath: '/' }) 8 | expect(parseENSAddress('hello.world.eth/abcdef')).toEqual({ ensName: 'hello.world.eth', ensPath: '/abcdef' }) 9 | expect(parseENSAddress('abso.lutely')).toEqual(undefined) 10 | expect(parseENSAddress('abso.lutely.eth')).toEqual({ ensName: 'abso.lutely.eth', ensPath: undefined }) 11 | expect(parseENSAddress('eth')).toEqual(undefined) 12 | expect(parseENSAddress('eth/hello-world')).toEqual(undefined) 13 | }) 14 | }) 15 | -------------------------------------------------------------------------------- /src/utils/parseENSAddress.ts: -------------------------------------------------------------------------------- 1 | const ENS_NAME_REGEX = /^(([a-zA-Z0-9]+\.)+)eth(\/.*)?$/ 2 | 3 | export function parseENSAddress(ensAddress: string): { ensName: string; ensPath: string | undefined } | undefined { 4 | const match = ensAddress.match(ENS_NAME_REGEX) 5 | if (!match) return undefined 6 | return { ensName: `${match[1].toLowerCase()}eth`, ensPath: match[3] } 7 | } 8 | -------------------------------------------------------------------------------- /src/utils/uriToHttp.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Given a URI that may be ipfs, ipns, http, or https protocol, return the fetch-able http(s) URLs for the same content 3 | * @param uri to convert to fetch-able http url 4 | */ 5 | export default function uriToHttp(uri: string): string[] { 6 | const protocol = uri.split(':')[0].toLowerCase() 7 | switch (protocol) { 8 | case 'https': 9 | return [uri] 10 | case 'http': 11 | // return ['https' + uri.substr(4), uri] 12 | return [uri] 13 | case 'ipfs': 14 | const hash = uri.match(/^ipfs:(\/\/)?(.*)$/i)?.[2] 15 | return [`https://cloudflare-ipfs.com/ipfs/${hash}/`, `https://ipfs.io/ipfs/${hash}/`] 16 | case 'ipns': 17 | const name = uri.match(/^ipns:(\/\/)?(.*)$/i)?.[2] 18 | return [`https://cloudflare-ipfs.com/ipns/${name}/`, `https://ipfs.io/ipns/${name}/`] 19 | default: 20 | return [] 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "strict": true, 12 | "alwaysStrict": true, 13 | "strictNullChecks": true, 14 | "noUnusedLocals": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "noImplicitAny": true, 17 | "noImplicitThis": true, 18 | "noImplicitReturns": true, 19 | "moduleResolution": "node", 20 | "resolveJsonModule": true, 21 | "isolatedModules": true, 22 | "jsx": "preserve", 23 | "downlevelIteration": true, 24 | "allowSyntheticDefaultImports": true, 25 | "types": ["react-spring", "jest"] 26 | }, 27 | "exclude": ["node_modules", "cypress"], 28 | "include": ["./src/**/*.ts", "./src/**/*.tsx", "src/pages/Farms/FarmsList.tsx"] 29 | } 30 | --------------------------------------------------------------------------------