├── .env.example ├── .env.swp ├── .eslintrc.cjs ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.md │ ├── config.yml │ ├── feature-request.md │ └── feature-request2.md └── workflows │ ├── deploy_vercel.yml │ ├── lint.yml │ ├── preview_vercel.yml │ └── tests.yaml ├── .gitignore ├── .husky ├── _ │ └── .gitignore └── pre-commit ├── .prettierignore ├── .prettierrc ├── .yarn ├── patches │ ├── @sushiswap-sdk-npm-5.0.0-canary.7-f38ca71c99.patch │ ├── @uniswap-widgets-npm-2.59.0-6bf5828475.patch │ ├── @web3-onboard-core-npm-2.23.0-1e9c87f982.patch │ └── react-native-animatable-npm-1.4.0-8061fbfc78.patch ├── plugins │ └── @yarnpkg │ │ └── plugin-postinstall.cjs └── releases │ └── yarn-3.6.1.cjs ├── .yarnrc.yml ├── LICENSE ├── README.md ├── commitlint.config.js ├── crowdin.yml ├── cypress.json ├── dev-release ├── docs └── patch_reference.md ├── hotfix.sh ├── index.html ├── lingui.config.ts ├── linguifix.js ├── lint-staged.config.js ├── package.json ├── patch-package.sh ├── postcss.config.js ├── public ├── 451.html ├── android-icon-144x144.png ├── android-icon-192x192.png ├── android-icon-36x36.png ├── android-icon-48x48.png ├── android-icon-72x72.png ├── android-icon-96x96.png ├── apple-icon-114x114.png ├── apple-icon-120x120.png ├── apple-icon-144x144.png ├── apple-icon-152x152.png ├── apple-icon-180x180.png ├── apple-icon-57x57.png ├── apple-icon-60x60.png ├── apple-icon-72x72.png ├── apple-icon-76x76.png ├── apple-icon-precomposed.png ├── apple-icon.png ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon-96x96.png ├── favicon.ico ├── images │ ├── apple-touch-icon.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── logo-192x192.png │ ├── logo-512x512.png │ ├── oracles │ │ ├── chainlink.jpg │ │ ├── pegged.jpg │ │ └── sushiswap.jpg │ └── tokens │ │ ├── 1inch-square.jpg │ │ ├── 1up-square.jpg │ │ ├── aave-square.jpg │ │ ├── abyss-square.jpg │ │ ├── ada-square.jpg │ │ ├── addy-square.jpg │ │ ├── adx-square.jpg │ │ ├── akro-square.jpg │ │ ├── alcx-square.jpg │ │ ├── alpha-square.jpg │ │ ├── amp-square.jpg │ │ ├── ampl-square.jpg │ │ ├── ankr-square.jpg │ │ ├── ant-square.jpg │ │ ├── ast-square.jpg │ │ ├── auc-square.jpg │ │ ├── auction-square.jpg │ │ ├── auto-square.jpg │ │ ├── badger-square.jpg │ │ ├── balancer-square.jpg │ │ ├── band-square.jpg │ │ ├── bat-square.jpg │ │ ├── bch-square.jpg │ │ ├── bifi-square.jpg │ │ ├── bnb-square.jpg │ │ ├── bnt-square.jpg │ │ ├── bor-square.jpg │ │ ├── btc++-square.jpg │ │ ├── btc-square.jpg │ │ ├── btm-square.jpg │ │ ├── busd-square.jpg │ │ ├── bzrx-square.jpg │ │ ├── cake-square.jpg │ │ ├── cat-square.jpg │ │ ├── cel-square.jpg │ │ ├── coin-square.jpg │ │ ├── comp-square.jpg │ │ ├── cover-square.jpg │ │ ├── cream-square.jpg │ │ ├── cro-square.jpg │ │ ├── crv-square.jpg │ │ ├── cur-square.jpg │ │ ├── dai-square.jpg │ │ ├── data-square.jpg │ │ ├── dht-square.jpg │ │ ├── dmg-square.jpg │ │ ├── dnt-square.jpg │ │ ├── doge-square.jpg │ │ ├── dos-square.jpg │ │ ├── dot-square.jpg │ │ ├── dpi-square.jpg │ │ ├── dtop-square.jpg │ │ ├── dxd-square.jpg │ │ ├── enj-square.jpg │ │ ├── eos-square.jpg │ │ ├── eth-square.jpg │ │ ├── fil-square.jpg │ │ ├── frax-square.jpg │ │ ├── front-square.jpg │ │ ├── frx-square.jpg │ │ ├── ftm-square.jpg │ │ ├── ftx-square.jpg │ │ ├── fxs-square.jpg │ │ ├── grid-square.jpg │ │ ├── grt-square.jpg │ │ ├── gusd-square.jpg │ │ ├── heco-square.jpg │ │ ├── hegic-square.jpg │ │ ├── hot-square.jpg │ │ ├── husd-square.jpg │ │ ├── ibbtc-square.jpg │ │ ├── ice-square.jpg │ │ ├── idex-square.jpg │ │ ├── inj-square.jpg │ │ ├── iron-square.jpg │ │ ├── jrt-square.jpg │ │ ├── knc-square.jpg │ │ ├── kp3r-square.jpg │ │ ├── krill-square.jpg │ │ ├── lend-square.jpg │ │ ├── link-square.jpg │ │ ├── lon-square.jpg │ │ ├── lrc-square.jpg │ │ ├── ltc-square.jpg │ │ ├── mana-square.jpg │ │ ├── math-square.jpg │ │ ├── matic-square.jpg │ │ ├── mcb-square.jpg │ │ ├── mdx-square.jpg │ │ ├── mkr-square.jpg │ │ ├── mln-square.jpg │ │ ├── mta-square.jpg │ │ ├── nec-square.jpg │ │ ├── neo-square.jpg │ │ ├── nmr-square.jpg │ │ ├── nxm-square.jpg │ │ ├── ocean-square.jpg │ │ ├── ogn-square.jpg │ │ ├── okb-square.jpg │ │ ├── omg-square.jpg │ │ ├── ont-square.jpg │ │ ├── orn-square.jpg │ │ ├── oxt-square.jpg │ │ ├── pax-square.jpg │ │ ├── paxg-square.jpg │ │ ├── perp-square.jpg │ │ ├── pnt-square.jpg │ │ ├── polygon-square.jpg │ │ ├── rai-square.jpg │ │ ├── ramp-square.jpg │ │ ├── rari-square.jpg │ │ ├── rcn-square.jpg │ │ ├── ren-square.jpg │ │ ├── rendoge-square.jpg │ │ ├── repv2-square.jpg │ │ ├── rgt-square.jpg │ │ ├── rlc-square.jpg │ │ ├── rsr-square.jpg │ │ ├── rsv-square.jpg │ │ ├── rune-square.jpg │ │ ├── sai-square.png │ │ ├── sand-square.jpg │ │ ├── seth-square.jpg │ │ ├── sfi-square.jpg │ │ ├── snx-square.jpg │ │ ├── snx-square.png │ │ ├── srm-square.jpg │ │ ├── stake-square.jpg │ │ ├── stm-square.jpg │ │ ├── stx-square.jpg │ │ ├── susd-square.jpg │ │ ├── sushi-square.jpg │ │ ├── sxp-square.jpg │ │ ├── tkn-square.jpg │ │ ├── tomoe-square.jpg │ │ ├── trb-square.jpg │ │ ├── tru-square.jpg │ │ ├── try-square.jpg │ │ ├── tusd-square.jpg │ │ ├── udoo-square.jpg │ │ ├── uma-square.jpg │ │ ├── uni-square.jpg │ │ ├── unknown.png │ │ ├── usdc-square.jpg │ │ ├── usdk-square.jpg │ │ ├── usdt-square.jpg │ │ ├── ust-square.jpg │ │ ├── vai-square.jpg │ │ ├── waves-square.jpg │ │ ├── wfil-square.jpg │ │ ├── wnxm-square.jpg │ │ ├── wom-square.jpg │ │ ├── woofy-square.jpg │ │ ├── xio-square.jpg │ │ ├── xrp-square.jpg │ │ ├── xsushi-square.jpg │ │ ├── xtz-square.jpg │ │ ├── xvs-square.jpg │ │ ├── yfi-square.jpg │ │ ├── yfii-square.jpg │ │ ├── zec-square.jpg │ │ └── zrx-square.jpg ├── manifest.json ├── ms-icon-144x144.png ├── ms-icon-150x150.png ├── ms-icon-310x310.png ├── ms-icon-70x70.png └── service-worker.js ├── src ├── assets │ ├── animation │ │ ├── analytics.json │ │ ├── confirmation-popup-loader.json │ │ ├── confirmation-success.json │ │ ├── error-txn-rejected.json │ │ ├── loading-circle.json │ │ ├── network-switcher.json │ │ ├── receipt-printing.json │ │ ├── select-coin.json │ │ ├── settings-slider.json │ │ ├── staking-submitted.json │ │ ├── supply-submitted.json │ │ ├── swap-arrows.json │ │ ├── unstake-submitted.json │ │ ├── wallet.json │ │ └── withdraw-submitted.json │ ├── images │ │ ├── 2x-square.jpg │ │ ├── G$ Coin.png │ │ ├── aave-square.png │ │ ├── arrow-down-blue.svg │ │ ├── arrow-down-grey.svg │ │ ├── arrow-right-white.png │ │ ├── arrow-right.svg │ │ ├── arrow-up-right-blue.svg │ │ ├── avalanche-logo.png │ │ ├── binance-coin-logo.png │ │ ├── blue-loader.svg │ │ ├── burger.svg │ │ ├── celo-logo.png │ │ ├── chain-animated.gif │ │ ├── chef.svg │ │ ├── circle-grey.svg │ │ ├── circle.svg │ │ ├── claim │ │ │ ├── billyconfused.png │ │ │ ├── billygrin.png │ │ │ ├── billysmile.png │ │ │ ├── claim-footer-celebration.png │ │ │ ├── firstimer.png │ │ │ ├── howitworks.png │ │ │ └── maintance.png │ │ ├── coinbaseWalletIcon.svg │ │ ├── countries │ │ │ ├── ar-flag.png │ │ │ ├── ch-flag.png │ │ │ ├── de-flag.png │ │ │ ├── en-flag.png │ │ │ ├── es-flag.png │ │ │ ├── he-flag.png │ │ │ ├── it-flag.png │ │ │ ├── ro-flag.png │ │ │ ├── ru-flag.png │ │ │ ├── uk-flag.png │ │ │ └── vi-flag.png │ │ ├── cross.svg │ │ ├── discord-logo-new.png │ │ ├── discord.png │ │ ├── dropdown-blue.svg │ │ ├── dropdown.svg │ │ ├── dropup-blue.svg │ │ ├── error-triangle.svg │ │ ├── ethereum-logo.png │ │ ├── fantom-logo.png │ │ ├── fortmaticIcon.png │ │ ├── fuse-logo.png │ │ ├── goodreserve-logo.png │ │ ├── harmony-logo.png │ │ ├── link-blue.svg │ │ ├── link.svg │ │ ├── logo-dark.png │ │ ├── logo-mobile.png │ │ ├── logo.png │ │ ├── logo_primary_small.png │ │ ├── logosmall.png │ │ ├── magnifying-glass.svg │ │ ├── matic-logo.png │ │ ├── menu.svg │ │ ├── metamask.png │ │ ├── miso-logo.png │ │ ├── more-info.svg │ │ ├── noise.png │ │ ├── noise_original.png │ │ ├── okex-logo.png │ │ ├── placeholder.png │ │ ├── plus-blue.svg │ │ ├── plus-grey.svg │ │ ├── portisIcon.png │ │ ├── question-mark.svg │ │ ├── question.svg │ │ ├── sort-icon.svg │ │ ├── spinner.svg │ │ ├── telegram.png │ │ ├── token-list-logo.png │ │ ├── token-list │ │ │ ├── lists-dark.png │ │ │ └── lists-light.png │ │ ├── tokens │ │ │ ├── busd-logo.png │ │ │ ├── dext-logo.png │ │ │ ├── elk-logo.png │ │ │ ├── gd-logo.png │ │ │ ├── gdx-logo.png │ │ │ ├── good-logo.png │ │ │ ├── grt-logo.png │ │ │ ├── knc-logo.png │ │ │ ├── link-logo.png │ │ │ ├── om-logo.png │ │ │ ├── onefuse-logo.png │ │ │ └── sushi-logo.png │ │ ├── torusIcon.png │ │ ├── transaction-rejected.png │ │ ├── trustWallet.png │ │ ├── twitter.png │ │ ├── voltage-logo.png │ │ ├── vote.png │ │ ├── walletBalanceIcon.svg │ │ ├── walletConnectIcon.svg │ │ ├── x.svg │ │ └── xdai-logo.png │ ├── kashi │ │ ├── bento-background.jpg │ │ ├── bento-color.png │ │ ├── bento-empty-color.png │ │ ├── bento-illustration.png │ │ ├── bento-symbol.svg │ │ ├── bentobox-hero.jpg │ │ ├── bentobox-hero.png │ │ ├── bentobox-hero.svg │ │ ├── bentobox-logo.png │ │ ├── bentobox-logo.svg │ │ ├── borrow-graphic.png │ │ ├── brickwall.png │ │ ├── coming-soon.png │ │ ├── deposit-graphic.png │ │ ├── kashi-kanji-wires.png │ │ ├── kashi-neon.png │ │ ├── logo.png │ │ └── new-kashi-pattern-tile.png │ ├── networks │ │ ├── arbitrum-network.jpg │ │ ├── avalanche-network.jpg │ │ ├── bsc-network.jpg │ │ ├── celo-network.png │ │ ├── fantom-network.jpg │ │ ├── fuse-network.png │ │ ├── goerli-network.jpg │ │ ├── harmonyone-network.jpg │ │ ├── heco-network.jpg │ │ ├── kovan-network.jpg │ │ ├── mainnet-network.jpg │ │ ├── matic-network.jpg │ │ ├── moonbeam-network.jpg │ │ ├── okex-network.jpg │ │ ├── polygon-network.jpg │ │ ├── rinkeby-network.jpg │ │ ├── ropsten-network.jpg │ │ └── xdai-network.jpg │ ├── socials │ │ ├── GdLogo.png │ │ ├── Twitter-X.png │ │ ├── discord.png │ │ ├── discourse.png │ │ ├── facebook.png │ │ ├── instagram.png │ │ ├── linkedin.png │ │ ├── medium.png │ │ └── telegram.png │ └── svg │ │ ├── QR.svg │ │ ├── add.svg │ │ ├── claim.svg │ │ ├── donate.svg │ │ ├── double-bars.svg │ │ ├── library.svg │ │ ├── lightcircle.svg │ │ ├── logo.svg │ │ ├── logo_custom.svg │ │ ├── logo_hover.svg │ │ ├── logo_pink.svg │ │ ├── logo_primary_2023.svg │ │ ├── logo_white.svg │ │ ├── logo_white_2023.svg │ │ ├── logowide.svg │ │ ├── mm-icon.svg │ │ ├── swap.svg │ │ ├── tokenlist.svg │ │ ├── wordmark.svg │ │ ├── wordmark_pink.svg │ │ └── wordmark_white.svg ├── bignumber.d.ts ├── bootstrap.ts ├── components │ ├── AccountDetails │ │ ├── Copy.tsx │ │ ├── Transaction.tsx │ │ └── index.tsx │ ├── Alert.tsx │ ├── AppBar.tsx │ ├── AppNotice │ │ └── index.tsx │ ├── Badge.tsx │ ├── BlockNativeOnboard │ │ └── index.tsx │ ├── Blocklist │ │ └── index.tsx │ ├── Button.tsx │ ├── ButtonLegacy │ │ └── index.tsx │ ├── Card.tsx │ ├── CardLegacy │ │ └── index.tsx │ ├── Checkbox.tsx │ ├── ClaimRewards │ │ ├── components.tsx │ │ ├── index.tsx │ │ └── styled.tsx │ ├── Column │ │ └── index.tsx │ ├── CurrencyLogo │ │ └── index.tsx │ ├── Dots.tsx │ ├── DoubleLogo │ │ └── index.tsx │ ├── EmptyState.tsx │ ├── Faq │ │ ├── Faq.tsx │ │ └── copies.tsx │ ├── Gas │ │ └── index.tsx │ ├── Icon │ │ ├── Icon.tsx │ │ ├── createIcon.tsx │ │ └── index.tsx │ ├── Identicon │ │ └── index.tsx │ ├── LanguageSwitch │ │ └── index.tsx │ ├── Layout │ │ ├── MainPageContainer.tsx │ │ ├── MenuContainer.tsx │ │ └── PageLayout.tsx │ ├── Link.tsx │ ├── Liquidity │ │ ├── AdvancedLiquidityDetails.tsx │ │ ├── AdvancedLiquidityDetailsDropdown.tsx │ │ └── RemoveLiquidityReceiveDetails.tsx │ ├── Loader │ │ └── index.tsx │ ├── Logo │ │ └── index.tsx │ ├── Modal │ │ └── index.tsx │ ├── ModalHeader.tsx │ ├── NetworkModal │ │ └── index.tsx │ ├── NewsFeed │ │ └── index.tsx │ ├── Paper.tsx │ ├── Popover │ │ └── index.tsx │ ├── Popups │ │ ├── PopupItem.tsx │ │ ├── TransactionPopup.tsx │ │ └── index.tsx │ ├── PortfolioTableRow │ │ └── index.tsx │ ├── ProgressSteps │ │ └── index.tsx │ ├── QuestionHelper │ │ └── index.tsx │ ├── Row │ │ └── index.tsx │ ├── Savings │ │ ├── SavingsCard │ │ │ ├── SavingsCardRow │ │ │ │ └── index.tsx │ │ │ ├── SavingsCardTableMobile │ │ │ │ ├── SavingsCellsMobile.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── SavingsModal │ │ │ ├── SavingsModalButtons.tsx │ │ │ └── index.tsx │ │ └── SavingsStat │ │ │ └── SavingsMobileStat.tsx │ ├── Share │ │ └── index.tsx │ ├── ShareTransaction │ │ └── index.tsx │ ├── SideBar.tsx │ ├── Slider │ │ └── index.tsx │ ├── SplitPane.tsx │ ├── StyledMenu │ │ ├── ActionButton.tsx │ │ ├── Navbar.tsx │ │ ├── SubMenu.tsx │ │ └── index.tsx │ ├── Switch │ │ ├── index.tsx │ │ └── styled.tsx │ ├── Tooltip │ │ └── index.tsx │ ├── WalletBalance │ │ └── index.tsx │ ├── WalletChat │ │ └── index.tsx │ ├── WalletModal │ │ ├── Option.tsx │ │ └── index.tsx │ ├── Web3Network │ │ └── index.tsx │ ├── Web3ReactManager │ │ └── index.tsx │ ├── Web3Status │ │ └── index.tsx │ ├── Web3SupportedNetworks │ │ └── index.tsx │ ├── Withdraw │ │ ├── PercentInputControls │ │ │ ├── index.tsx │ │ │ └── styled.tsx │ │ ├── index.tsx │ │ └── styled.tsx │ ├── WithdrawRewards │ │ ├── index.tsx │ │ └── styled.tsx │ ├── gd │ │ ├── Button │ │ │ ├── ActionOrSwitchButton.tsx │ │ │ └── index.tsx │ │ ├── Card │ │ │ └── index.tsx │ │ ├── Placeholder │ │ │ └── index.tsx │ │ ├── Table │ │ │ └── index.tsx │ │ ├── Title │ │ │ └── index.tsx │ │ └── sushi │ │ │ ├── AsyncTokenIcon.tsx │ │ │ ├── Layout.tsx │ │ │ ├── ListHeaderWithSort.tsx │ │ │ ├── MarketHeader.tsx │ │ │ └── index.ts │ ├── index.ts │ └── swap │ │ └── confirmPriceImpactWithoutFee.ts ├── connectors │ └── index.ts ├── constants │ ├── abis │ │ ├── alcx-rewarder.json │ │ ├── argent-wallet-detector.json │ │ ├── argent-wallet-detector.ts │ │ ├── bar.json │ │ ├── bentobox.json │ │ ├── boring-helper.json │ │ ├── chainlink-oracle.json │ │ ├── complex-rewarder.json │ │ ├── compound-oracle.json │ │ ├── dashboard.json │ │ ├── dashboard2.json │ │ ├── ens-public-resolver.json │ │ ├── ens-registrar.json │ │ ├── erc20.json │ │ ├── erc20.ts │ │ ├── erc20_bytes32.json │ │ ├── factory.json │ │ ├── faucet.json │ │ ├── faucet.ts │ │ ├── kashipair.json │ │ ├── maker.json │ │ ├── masterchef.json │ │ ├── masterchefv2.json │ │ ├── migrator.json │ │ ├── migrator.ts │ │ ├── miniChefV2.json │ │ ├── pair.json │ │ ├── pegged-oracle.json │ │ ├── pending.json │ │ ├── router.json │ │ ├── saave.json │ │ ├── staking-rewards.ts │ │ ├── sushi.json │ │ ├── sushiswap-slp-oracle.json │ │ ├── sushiswapmultiswapper.json │ │ ├── swaave.json │ │ ├── swapper.json │ │ ├── timelock.json │ │ ├── univ2tosushi.json │ │ └── weth.json │ ├── addresses.ts │ ├── config.ts │ ├── fuseTokenMapping.ts │ ├── index.ts │ ├── lists.ts │ ├── multicall │ │ ├── abi.json │ │ └── index.ts │ ├── networks.ts │ ├── socials.ts │ ├── token-lists │ │ └── sushiswap-v2-unsupported.tokenlist.json │ └── v1 │ │ ├── index.ts │ │ ├── v1_exchange.json │ │ └── v1_factory.json ├── entities │ ├── BigNumberMath.ts │ ├── Fraction.ts │ └── index.ts ├── functions │ ├── balance.ts │ ├── block.ts │ ├── contract.ts │ ├── index.ts │ ├── styling.ts │ └── validate.ts ├── global.d.ts ├── hooks │ ├── useActiveOnboard.ts │ ├── useActiveWeb3React.ts │ ├── useCallbackOnFocus.ts │ ├── useClaiming.ts │ ├── useContract.ts │ ├── useCopyClipboard.ts │ ├── useDebounce.ts │ ├── useENSContentHash.ts │ ├── useENSName.ts │ ├── useFuse.ts │ ├── useG$.ts │ ├── useHasBalance.ts │ ├── useHttpLocations.ts │ ├── useInterval.ts │ ├── useIsWindowVisible.ts │ ├── useMetaMask.ts │ ├── useOnClickOutside.tsx │ ├── useParsedQueryString.ts │ ├── usePrevious.ts │ ├── usePromise.ts │ ├── useSearchAndSort.ts │ ├── useSendAnalyticsData.ts │ ├── useToggle.ts │ ├── useWeb3.tsx │ └── useWindowSize.ts ├── index.tsx ├── language │ ├── hooks │ │ └── index.tsx │ ├── index.tsx │ └── locales │ │ ├── af │ │ └── catalog.po │ │ ├── ar │ │ └── catalog.po │ │ ├── ca │ │ └── catalog.po │ │ ├── cs │ │ └── catalog.po │ │ ├── da │ │ └── catalog.po │ │ ├── de │ │ └── catalog.po │ │ ├── el │ │ └── catalog.po │ │ ├── en │ │ └── catalog.po │ │ ├── es-419 │ │ └── catalog.po │ │ ├── es-AR │ │ └── catalog.po │ │ ├── es │ │ └── catalog.po │ │ ├── fi │ │ └── catalog.po │ │ ├── fr │ │ └── catalog.po │ │ ├── he │ │ └── catalog.po │ │ ├── hi │ │ └── catalog.po │ │ ├── hu │ │ └── catalog.po │ │ ├── it │ │ └── catalog.po │ │ ├── ja │ │ └── catalog.po │ │ ├── ko │ │ └── catalog.po │ │ ├── nl │ │ └── catalog.po │ │ ├── no │ │ └── catalog.po │ │ ├── pl │ │ └── catalog.po │ │ ├── pt-BR │ │ └── catalog.po │ │ ├── pt │ │ └── catalog.po │ │ ├── ro │ │ └── catalog.po │ │ ├── ru │ │ └── catalog.po │ │ ├── sr │ │ └── catalog.po │ │ ├── sv │ │ └── catalog.po │ │ ├── tr │ │ └── catalog.po │ │ ├── uk │ │ └── catalog.po │ │ ├── vi │ │ └── catalog.po │ │ ├── zh-CN │ │ └── catalog.po │ │ ├── zh-TW │ │ └── catalog.po │ │ └── zh │ │ └── catalog.po ├── pages │ ├── App.tsx │ ├── gd │ │ ├── BuyGD │ │ │ └── index.tsx │ │ ├── Claim │ │ │ ├── Claim.tsx │ │ │ ├── ClaimBalance.tsx │ │ │ ├── OldClaim.tsx │ │ │ ├── index.tsx │ │ │ └── useDisabledClaimModal.tsx │ │ ├── DatastudioDashboard │ │ │ └── index.tsx │ │ ├── GoodId │ │ │ ├── GoodIdDetails.tsx │ │ │ ├── Onboard.tsx │ │ │ └── index.tsx │ │ ├── MicroBridge │ │ │ └── index.tsx │ │ ├── News │ │ │ └── index.tsx │ │ ├── Portfolio │ │ │ ├── index.tsx │ │ │ └── styled.ts │ │ ├── Stake │ │ │ ├── Savings │ │ │ │ ├── SavingsDepositMobile.tsx │ │ │ │ └── index.tsx │ │ │ ├── StakeDeposit │ │ │ │ ├── index.tsx │ │ │ │ └── styled.tsx │ │ │ ├── index.tsx │ │ │ └── styled.tsx │ │ └── Swap │ │ │ ├── SwapCelo │ │ │ ├── UniSwap.tsx │ │ │ └── celo-tokenlist.json │ │ │ ├── SwapConfirmModal │ │ │ ├── index.tsx │ │ │ └── styled.ts │ │ │ ├── SwapCore │ │ │ └── mentoReserve.tsx │ │ │ ├── SwapDescriptions │ │ │ ├── index.tsx │ │ │ └── styled.ts │ │ │ ├── SwapDetails │ │ │ ├── index.tsx │ │ │ └── styled.ts │ │ │ ├── SwapInfo │ │ │ ├── index.tsx │ │ │ └── styled.ts │ │ │ ├── SwapInput │ │ │ ├── index.tsx │ │ │ └── styled.ts │ │ │ ├── SwapRow │ │ │ ├── index.tsx │ │ │ └── styled.ts │ │ │ ├── SwapSettings │ │ │ ├── index.tsx │ │ │ └── styled.ts │ │ │ ├── SwapTokensModal │ │ │ ├── SwapTokensModalTokenRow │ │ │ │ ├── index.tsx │ │ │ │ └── styled.ts │ │ │ ├── index.tsx │ │ │ └── styled.ts │ │ │ ├── common.tsx │ │ │ ├── hooks.ts │ │ │ ├── index.tsx │ │ │ └── styled.ts │ └── routes │ │ └── redirects.tsx ├── react-app-env.d.ts ├── routes.tsx ├── serviceWorker.ts ├── state │ ├── application │ │ ├── actions.ts │ │ ├── hooks.ts │ │ ├── reducer.ts │ │ ├── types.ts │ │ └── updater.ts │ ├── global │ │ └── actions.ts │ ├── index.ts │ ├── multicall │ │ ├── actions.test.ts │ │ ├── actions.ts │ │ ├── hooks.ts │ │ ├── reducer.test.ts │ │ ├── reducer.ts │ │ ├── updater.test.ts │ │ └── updater.tsx │ ├── simpleapp │ │ └── simpleapp.tsx │ ├── swap │ │ ├── actions.ts │ │ ├── hooks.test.ts │ │ ├── hooks.ts │ │ ├── reducer.test.ts │ │ └── reducer.ts │ ├── transactions │ │ ├── actions.ts │ │ ├── hooks.tsx │ │ ├── reducer.test.ts │ │ ├── reducer.ts │ │ ├── updater.test.ts │ │ └── updater.tsx │ ├── user │ │ ├── actions.ts │ │ ├── hooks.tsx │ │ ├── reducer.test.ts │ │ ├── reducer.ts │ │ └── updater.tsx │ └── wallet │ │ └── hooks.ts ├── styles │ └── index.css ├── theme │ ├── components.tsx │ ├── index.tsx │ ├── nbtheme.tsx │ └── styled.d.ts ├── types │ ├── LPToken.ts │ ├── MetamaskError.ts │ └── WrappedTokenInfo.ts ├── utils │ ├── HttpsProvider.tsx │ ├── chunkArray.test.ts │ ├── chunkArray.ts │ ├── contenthashToUri.ts │ ├── currencyId.ts │ ├── env.ts │ ├── index.test.ts │ ├── index.ts │ ├── maxAmountSpend.ts │ ├── parseENSAddress.test.ts │ ├── parseENSAddress.ts │ ├── prices.test.ts │ ├── prices.ts │ ├── resolveENSContentHash.ts │ ├── retry.test.ts │ ├── retry.ts │ ├── screenSizes.ts │ ├── trades.ts │ ├── uriToHttp.test.ts │ ├── uriToHttp.ts │ ├── useDebouncedChangeHandler.tsx │ └── wrappedCurrency.ts └── vite-env.d.ts ├── tailwind.config.js ├── tsconfig.json ├── types └── @gooddollar │ └── goodprotocol │ └── releases │ └── deployment.d.ts ├── vercel.json ├── vite.config.ts └── yarn.lock /.env.example: -------------------------------------------------------------------------------- 1 | DISABLE_ESLINT_PLUGIN=true 2 | BROWSER=none 3 | REACT_APP_DATASTUDIO_DASHBOARD_URL= 4 | REACT_APP_NETWORK= 5 | REACT_APP_MAINNET_RPC= 6 | REACT_APP_FUSE_RPC= 7 | REACT_APP_CELO_RPC= 8 | REACT_APP_CELO_PHASE_1=1 9 | REACT_APP_CELO_PHASE_1=1 10 | REACT_APP_CELO_PHASE_1=1 11 | REACT_APP_GOOGLE_ANALYTICS_ID= 12 | 13 | { to be added to secrets } 14 | SHARED_ENV= 15 | #secret env currently includes: 16 | REACT_APP_INDICATIVE_KEY= -------------------------------------------------------------------------------- /.env.swp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/.env.swp -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report 3 | about: Describe an issue in the GoodDollar UI 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | --- 8 | 9 | **Bug Description** 10 | A clear and concise description of the bug. 11 | 12 | **Steps to Reproduce** 13 | 1. Go to ... 14 | 2. Click on ... 15 | ... 16 | 17 | **Expected Behavior** 18 | A clear and concise description of what you expected to happen. 19 | 20 | **Additional Context** 21 | Add any other context about the problem here (screenshots, whether the bug only occurs only in certain mobile/desktop/browser environments, etc.) 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Support 4 | url: https://discord.gg/zBdetjHe 5 | about: Please ask and answer questions here 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: Suggest an idea for improving the UX of the GoodDollar UI 4 | title: '' 5 | labels: 'improvement' 6 | assignees: '' 7 | --- 8 | 9 | **Is your feature request related to a problem? Please describe.** 10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 11 | 12 | **Describe the solution you'd like** 13 | A clear and concise description of what you want to happen. 14 | 15 | **Describe alternatives you've considered** 16 | A clear and concise description of any alternative solutions or features you've considered. 17 | 18 | **Additional context** 19 | Add any other context or screenshots about the feature request here. 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | 6 | #cache 7 | /.yarn/cache 8 | /.yarn/install-state.gz 9 | /.yalc/ 10 | dist 11 | .swc 12 | 13 | # testing 14 | /coverage 15 | 16 | # production 17 | /build 18 | 19 | # catalogs 20 | /src/language/locales/**/*.js 21 | 22 | # misc 23 | .DS_Store 24 | .env 25 | .env.local 26 | .env.development.local 27 | .env.staging.local 28 | .env.test.local 29 | .env.production.local 30 | 31 | /.netlify 32 | 33 | npm-debug.log* 34 | yarn-debug.log* 35 | yarn-error.log* 36 | 37 | .idea 38 | .vscode 39 | 40 | package-lock.json 41 | 42 | cypress/videos 43 | cypress/screenshots 44 | cypress/fixtures/example.json 45 | .vercel 46 | 47 | .eslintcache 48 | tsconfig.lint-staged.json 49 | 50 | analysis/index.html 51 | deploy.sh 52 | 53 | /playground 54 | 55 | .certs 56 | yalc.lock 57 | .continueignore 58 | analice.html 59 | e2e.log -------------------------------------------------------------------------------- /.husky/_/.gitignore: -------------------------------------------------------------------------------- 1 | * -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | yarn lingui 5 | yarn lint-staged 6 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignore all CSS files: 2 | *.css -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "printWidth": 120, 5 | "tabWidth": 4, 6 | "overrides": [ 7 | { 8 | "files": ["catalog.json"], 9 | "options": { 10 | "tabWidth": 2 11 | } 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | plugins: 4 | - path: .yarn/plugins/@yarnpkg/plugin-postinstall.cjs 5 | spec: "https://raw.githubusercontent.com/gravitywelluk/yarn-plugin-postinstall/master/bundles/%40yarnpkg/plugin-postinstall.js" 6 | 7 | yarnPath: .yarn/releases/yarn-3.6.1.cjs 8 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['@commitlint/config-conventional'] 3 | }; -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: /src/language/locales/en/catalog.po 3 | translation: /src/language/locales/%two_letters_code%/%original_file_name% 4 | -------------------------------------------------------------------------------- /cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "baseUrl": "http://localhost:3000", 3 | "pluginsFile": false, 4 | "fixturesFolder": false, 5 | "supportFile": "cypress/support/index.js", 6 | "video": false, 7 | "defaultCommandTimeout": 10000 8 | } 9 | -------------------------------------------------------------------------------- /docs/patch_reference.md: -------------------------------------------------------------------------------- 1 | # Patch References 2 | 3 | ## @sushiswap/sdk@5.0.0-canary.7 4 | 5 | - Adds CELO chain support. 6 | 7 | ## react-native-animatable@^1.4.0 8 | 9 | - `createAnimatableComponent.js` > `createAnimatableComponent.jsx`. 10 | 11 | ## @web3-onboard/core (applied from ^2.20.2) 12 | 13 | - Add CSS `part` pseudo-element for targeted mobile styling. 14 | 15 | ## @uniswap/widgets (applied from ^2.53.0) 16 | 17 | - Various UI fixes: 18 | - Fix height for warning modal. 19 | - Fix double hover selector in tokenlist. 20 | - Fix for modal on Safari. 21 | - Don't enforce permit2 when using minipay 22 | -------------------------------------------------------------------------------- /hotfix.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | git fetch 3 | if [ "$2" != "prod-only" ]; then 4 | git checkout staging 5 | git reset --hard origin/staging 6 | git cherry-pick $1 7 | git push 8 | fi 9 | if [[ "$2" == prod* ]]; then 10 | git checkout production 11 | git reset --hard origin/production 12 | git cherry-pick $1 13 | npm version patch 14 | git push --follow-tags 15 | fi 16 | git checkout master -------------------------------------------------------------------------------- /lingui.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | catalogs: [ 3 | { 4 | path: '/src/language/locales/{locale}/catalog', 5 | include: ['/src'], 6 | }, 7 | ], 8 | locales: [ 9 | 'af', 10 | 'ar', 11 | 'ca', 12 | 'cs', 13 | 'da', 14 | 'de', 15 | 'el', 16 | 'en', 17 | 'es-419', 18 | 'es', 19 | 'fi', 20 | 'fr', 21 | 'it', 22 | 'he', 23 | 'hi', 24 | 'hu', 25 | 'ja', 26 | 'nl', 27 | 'no', 28 | 'pl', 29 | 'pt', 30 | 'pt-BR', 31 | 'ro', 32 | 'ru', 33 | 'sr', 34 | 'sv', 35 | 'tr', 36 | 'uk', 37 | 'vi', 38 | 'zh', 39 | 'zh-CN', 40 | 'zh-TW', 41 | 'ko', 42 | ], 43 | } 44 | -------------------------------------------------------------------------------- /lint-staged.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'src/**/*.{js,jsx,ts,tsx}': ['eslint --no-ignore --max-warnings=0 --fix', () => 'tsc --noEmit'], 3 | } 4 | -------------------------------------------------------------------------------- /patch-package.sh: -------------------------------------------------------------------------------- 1 | mkdir tmp 2 | cd tmp 3 | npm init -y 4 | npm install --save "$1" 5 | rsync -av --exclude "node_modules" --delete "../node_modules/$1/" "./node_modules/$1/" 6 | npx patch-package "$1" 7 | mkdir -p ../patches 8 | mv ./patches/* ../patches/ 9 | cd .. 10 | rm -rf tmp -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | 'postcss-preset-env': { stage: 1 }, 5 | 'postcss-import': {} 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /public/451.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Unavailable For Legal Reasons 6 | 7 | 8 |

Unavailable For Legal Reasons

9 | 10 | 11 | -------------------------------------------------------------------------------- /public/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/android-icon-144x144.png -------------------------------------------------------------------------------- /public/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/android-icon-192x192.png -------------------------------------------------------------------------------- /public/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/android-icon-36x36.png -------------------------------------------------------------------------------- /public/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/android-icon-48x48.png -------------------------------------------------------------------------------- /public/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/android-icon-72x72.png -------------------------------------------------------------------------------- /public/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/android-icon-96x96.png -------------------------------------------------------------------------------- /public/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/apple-icon-114x114.png -------------------------------------------------------------------------------- /public/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/apple-icon-120x120.png -------------------------------------------------------------------------------- /public/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/apple-icon-144x144.png -------------------------------------------------------------------------------- /public/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/apple-icon-152x152.png -------------------------------------------------------------------------------- /public/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/apple-icon-180x180.png -------------------------------------------------------------------------------- /public/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/apple-icon-57x57.png -------------------------------------------------------------------------------- /public/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/apple-icon-60x60.png -------------------------------------------------------------------------------- /public/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/apple-icon-72x72.png -------------------------------------------------------------------------------- /public/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/apple-icon-76x76.png -------------------------------------------------------------------------------- /public/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/apple-icon-precomposed.png -------------------------------------------------------------------------------- /public/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/apple-icon.png -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/favicon-96x96.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/favicon.ico -------------------------------------------------------------------------------- /public/images/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/apple-touch-icon.png -------------------------------------------------------------------------------- /public/images/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/favicon-16x16.png -------------------------------------------------------------------------------- /public/images/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/favicon-32x32.png -------------------------------------------------------------------------------- /public/images/logo-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/logo-192x192.png -------------------------------------------------------------------------------- /public/images/logo-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/logo-512x512.png -------------------------------------------------------------------------------- /public/images/oracles/chainlink.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/oracles/chainlink.jpg -------------------------------------------------------------------------------- /public/images/oracles/pegged.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/oracles/pegged.jpg -------------------------------------------------------------------------------- /public/images/oracles/sushiswap.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/oracles/sushiswap.jpg -------------------------------------------------------------------------------- /public/images/tokens/1inch-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/1inch-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/1up-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/1up-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/aave-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/aave-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/abyss-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/abyss-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ada-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ada-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/addy-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/addy-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/adx-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/adx-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/akro-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/akro-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/alcx-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/alcx-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/alpha-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/alpha-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/amp-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/amp-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ampl-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ampl-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ankr-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ankr-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ant-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ant-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ast-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ast-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/auc-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/auc-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/auction-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/auction-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/auto-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/auto-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/badger-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/badger-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/balancer-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/balancer-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/band-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/band-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/bat-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/bat-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/bch-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/bch-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/bifi-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/bifi-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/bnb-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/bnb-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/bnt-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/bnt-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/bor-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/bor-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/btc++-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/btc++-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/btc-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/btc-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/btm-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/btm-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/busd-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/busd-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/bzrx-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/bzrx-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/cake-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/cake-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/cat-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/cat-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/cel-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/cel-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/coin-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/coin-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/comp-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/comp-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/cover-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/cover-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/cream-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/cream-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/cro-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/cro-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/crv-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/crv-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/cur-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/cur-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/dai-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/dai-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/data-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/data-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/dht-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/dht-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/dmg-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/dmg-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/dnt-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/dnt-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/doge-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/doge-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/dos-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/dos-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/dot-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/dot-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/dpi-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/dpi-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/dtop-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/dtop-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/dxd-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/dxd-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/enj-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/enj-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/eos-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/eos-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/eth-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/eth-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/fil-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/fil-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/frax-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/frax-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/front-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/front-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/frx-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/frx-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ftm-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ftm-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ftx-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ftx-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/fxs-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/fxs-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/grid-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/grid-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/grt-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/grt-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/gusd-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/gusd-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/heco-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/heco-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/hegic-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/hegic-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/hot-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/hot-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/husd-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/husd-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ibbtc-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ibbtc-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ice-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ice-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/idex-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/idex-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/inj-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/inj-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/iron-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/iron-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/jrt-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/jrt-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/knc-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/knc-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/kp3r-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/kp3r-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/krill-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/krill-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/lend-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/lend-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/link-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/link-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/lon-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/lon-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/lrc-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/lrc-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ltc-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ltc-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/mana-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/mana-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/math-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/math-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/matic-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/matic-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/mcb-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/mcb-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/mdx-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/mdx-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/mkr-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/mkr-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/mln-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/mln-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/mta-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/mta-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/nec-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/nec-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/neo-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/neo-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/nmr-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/nmr-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/nxm-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/nxm-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ocean-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ocean-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ogn-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ogn-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/okb-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/okb-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/omg-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/omg-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ont-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ont-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/orn-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/orn-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/oxt-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/oxt-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/pax-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/pax-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/paxg-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/paxg-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/perp-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/perp-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/pnt-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/pnt-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/polygon-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/polygon-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/rai-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/rai-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ramp-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ramp-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/rari-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/rari-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/rcn-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/rcn-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ren-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ren-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/rendoge-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/rendoge-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/repv2-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/repv2-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/rgt-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/rgt-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/rlc-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/rlc-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/rsr-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/rsr-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/rsv-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/rsv-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/rune-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/rune-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/sai-square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/sai-square.png -------------------------------------------------------------------------------- /public/images/tokens/sand-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/sand-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/seth-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/seth-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/sfi-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/sfi-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/snx-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/snx-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/snx-square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/snx-square.png -------------------------------------------------------------------------------- /public/images/tokens/srm-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/srm-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/stake-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/stake-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/stm-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/stm-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/stx-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/stx-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/susd-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/susd-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/sushi-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/sushi-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/sxp-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/sxp-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/tkn-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/tkn-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/tomoe-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/tomoe-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/trb-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/trb-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/tru-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/tru-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/try-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/try-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/tusd-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/tusd-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/udoo-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/udoo-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/uma-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/uma-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/uni-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/uni-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/unknown.png -------------------------------------------------------------------------------- /public/images/tokens/usdc-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/usdc-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/usdk-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/usdk-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/usdt-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/usdt-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/ust-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/ust-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/vai-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/vai-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/waves-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/waves-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/wfil-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/wfil-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/wnxm-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/wnxm-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/wom-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/wom-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/woofy-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/woofy-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/xio-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/xio-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/xrp-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/xrp-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/xsushi-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/xsushi-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/xtz-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/xtz-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/xvs-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/xvs-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/yfi-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/yfi-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/yfii-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/yfii-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/zec-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/zec-square.jpg -------------------------------------------------------------------------------- /public/images/tokens/zrx-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/images/tokens/zrx-square.jpg -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GoodDollar", 3 | "orientation": "portrait", 4 | "display": "standalone", 5 | "start_url": "/", 6 | "icons": [ 7 | { 8 | "src": "/android-icon-36x36.png", 9 | "sizes": "36x36", 10 | "type": "image/png", 11 | "density": "0.75" 12 | }, 13 | { 14 | "src": "/android-icon-48x48.png", 15 | "sizes": "48x48", 16 | "type": "image/png", 17 | "density": "1.0" 18 | }, 19 | { 20 | "src": "/android-icon-72x72.png", 21 | "sizes": "72x72", 22 | "type": "image/png", 23 | "density": "1.5" 24 | }, 25 | { 26 | "src": "/android-icon-96x96.png", 27 | "sizes": "96x96", 28 | "type": "image/png", 29 | "density": "2.0" 30 | }, 31 | { 32 | "src": "/android-icon-144x144.png", 33 | "sizes": "144x144", 34 | "type": "image/png", 35 | "density": "3.0" 36 | }, 37 | { 38 | "src": "/android-icon-192x192.png", 39 | "sizes": "192x192", 40 | "type": "image/png", 41 | "density": "4.0" 42 | } 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /public/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/ms-icon-144x144.png -------------------------------------------------------------------------------- /public/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/ms-icon-150x150.png -------------------------------------------------------------------------------- /public/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/ms-icon-310x310.png -------------------------------------------------------------------------------- /public/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/public/ms-icon-70x70.png -------------------------------------------------------------------------------- /src/assets/images/2x-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/2x-square.jpg -------------------------------------------------------------------------------- /src/assets/images/G$ Coin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/G$ Coin.png -------------------------------------------------------------------------------- /src/assets/images/aave-square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/aave-square.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/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/arrow-right-white.png -------------------------------------------------------------------------------- /src/assets/images/arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/arrow-up-right-blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/avalanche-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/avalanche-logo.png -------------------------------------------------------------------------------- /src/assets/images/binance-coin-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/binance-coin-logo.png -------------------------------------------------------------------------------- /src/assets/images/blue-loader.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/burger.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/celo-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/celo-logo.png -------------------------------------------------------------------------------- /src/assets/images/chain-animated.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/chain-animated.gif -------------------------------------------------------------------------------- /src/assets/images/circle-grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/claim/billyconfused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/claim/billyconfused.png -------------------------------------------------------------------------------- /src/assets/images/claim/billygrin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/claim/billygrin.png -------------------------------------------------------------------------------- /src/assets/images/claim/billysmile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/claim/billysmile.png -------------------------------------------------------------------------------- /src/assets/images/claim/claim-footer-celebration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/claim/claim-footer-celebration.png -------------------------------------------------------------------------------- /src/assets/images/claim/firstimer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/claim/firstimer.png -------------------------------------------------------------------------------- /src/assets/images/claim/howitworks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/claim/howitworks.png -------------------------------------------------------------------------------- /src/assets/images/claim/maintance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/claim/maintance.png -------------------------------------------------------------------------------- /src/assets/images/countries/ar-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/countries/ar-flag.png -------------------------------------------------------------------------------- /src/assets/images/countries/ch-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/countries/ch-flag.png -------------------------------------------------------------------------------- /src/assets/images/countries/de-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/countries/de-flag.png -------------------------------------------------------------------------------- /src/assets/images/countries/en-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/countries/en-flag.png -------------------------------------------------------------------------------- /src/assets/images/countries/es-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/countries/es-flag.png -------------------------------------------------------------------------------- /src/assets/images/countries/he-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/countries/he-flag.png -------------------------------------------------------------------------------- /src/assets/images/countries/it-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/countries/it-flag.png -------------------------------------------------------------------------------- /src/assets/images/countries/ro-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/countries/ro-flag.png -------------------------------------------------------------------------------- /src/assets/images/countries/ru-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/countries/ru-flag.png -------------------------------------------------------------------------------- /src/assets/images/countries/uk-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/countries/uk-flag.png -------------------------------------------------------------------------------- /src/assets/images/countries/vi-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/countries/vi-flag.png -------------------------------------------------------------------------------- /src/assets/images/cross.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/discord-logo-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/discord-logo-new.png -------------------------------------------------------------------------------- /src/assets/images/discord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/discord.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/error-triangle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/ethereum-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/ethereum-logo.png -------------------------------------------------------------------------------- /src/assets/images/fantom-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/fantom-logo.png -------------------------------------------------------------------------------- /src/assets/images/fortmaticIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/fortmaticIcon.png -------------------------------------------------------------------------------- /src/assets/images/fuse-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/fuse-logo.png -------------------------------------------------------------------------------- /src/assets/images/goodreserve-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/goodreserve-logo.png -------------------------------------------------------------------------------- /src/assets/images/harmony-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/harmony-logo.png -------------------------------------------------------------------------------- /src/assets/images/link-blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/logo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/logo-dark.png -------------------------------------------------------------------------------- /src/assets/images/logo-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/logo-mobile.png -------------------------------------------------------------------------------- /src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/logo.png -------------------------------------------------------------------------------- /src/assets/images/logo_primary_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/logo_primary_small.png -------------------------------------------------------------------------------- /src/assets/images/logosmall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/logosmall.png -------------------------------------------------------------------------------- /src/assets/images/matic-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/matic-logo.png -------------------------------------------------------------------------------- /src/assets/images/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/images/metamask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/metamask.png -------------------------------------------------------------------------------- /src/assets/images/miso-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/miso-logo.png -------------------------------------------------------------------------------- /src/assets/images/more-info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/noise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/noise.png -------------------------------------------------------------------------------- /src/assets/images/noise_original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/noise_original.png -------------------------------------------------------------------------------- /src/assets/images/okex-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/okex-logo.png -------------------------------------------------------------------------------- /src/assets/images/placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/placeholder.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/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/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/sort-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/spinner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/assets/images/telegram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/telegram.png -------------------------------------------------------------------------------- /src/assets/images/token-list-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/token-list-logo.png -------------------------------------------------------------------------------- /src/assets/images/token-list/lists-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/token-list/lists-dark.png -------------------------------------------------------------------------------- /src/assets/images/token-list/lists-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/token-list/lists-light.png -------------------------------------------------------------------------------- /src/assets/images/tokens/busd-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/busd-logo.png -------------------------------------------------------------------------------- /src/assets/images/tokens/dext-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/dext-logo.png -------------------------------------------------------------------------------- /src/assets/images/tokens/elk-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/elk-logo.png -------------------------------------------------------------------------------- /src/assets/images/tokens/gd-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/gd-logo.png -------------------------------------------------------------------------------- /src/assets/images/tokens/gdx-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/gdx-logo.png -------------------------------------------------------------------------------- /src/assets/images/tokens/good-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/good-logo.png -------------------------------------------------------------------------------- /src/assets/images/tokens/grt-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/grt-logo.png -------------------------------------------------------------------------------- /src/assets/images/tokens/knc-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/knc-logo.png -------------------------------------------------------------------------------- /src/assets/images/tokens/link-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/link-logo.png -------------------------------------------------------------------------------- /src/assets/images/tokens/om-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/om-logo.png -------------------------------------------------------------------------------- /src/assets/images/tokens/onefuse-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/onefuse-logo.png -------------------------------------------------------------------------------- /src/assets/images/tokens/sushi-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/tokens/sushi-logo.png -------------------------------------------------------------------------------- /src/assets/images/torusIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/torusIcon.png -------------------------------------------------------------------------------- /src/assets/images/transaction-rejected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/transaction-rejected.png -------------------------------------------------------------------------------- /src/assets/images/trustWallet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/trustWallet.png -------------------------------------------------------------------------------- /src/assets/images/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/twitter.png -------------------------------------------------------------------------------- /src/assets/images/voltage-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/voltage-logo.png -------------------------------------------------------------------------------- /src/assets/images/vote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/vote.png -------------------------------------------------------------------------------- /src/assets/images/x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/images/xdai-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/images/xdai-logo.png -------------------------------------------------------------------------------- /src/assets/kashi/bento-background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/bento-background.jpg -------------------------------------------------------------------------------- /src/assets/kashi/bento-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/bento-color.png -------------------------------------------------------------------------------- /src/assets/kashi/bento-empty-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/bento-empty-color.png -------------------------------------------------------------------------------- /src/assets/kashi/bento-illustration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/bento-illustration.png -------------------------------------------------------------------------------- /src/assets/kashi/bentobox-hero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/bentobox-hero.jpg -------------------------------------------------------------------------------- /src/assets/kashi/bentobox-hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/bentobox-hero.png -------------------------------------------------------------------------------- /src/assets/kashi/bentobox-hero.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/kashi/bentobox-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/bentobox-logo.png -------------------------------------------------------------------------------- /src/assets/kashi/borrow-graphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/borrow-graphic.png -------------------------------------------------------------------------------- /src/assets/kashi/brickwall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/brickwall.png -------------------------------------------------------------------------------- /src/assets/kashi/coming-soon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/coming-soon.png -------------------------------------------------------------------------------- /src/assets/kashi/deposit-graphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/deposit-graphic.png -------------------------------------------------------------------------------- /src/assets/kashi/kashi-kanji-wires.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/kashi-kanji-wires.png -------------------------------------------------------------------------------- /src/assets/kashi/kashi-neon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/kashi-neon.png -------------------------------------------------------------------------------- /src/assets/kashi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/logo.png -------------------------------------------------------------------------------- /src/assets/kashi/new-kashi-pattern-tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/kashi/new-kashi-pattern-tile.png -------------------------------------------------------------------------------- /src/assets/networks/arbitrum-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/arbitrum-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/avalanche-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/avalanche-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/bsc-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/bsc-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/celo-network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/celo-network.png -------------------------------------------------------------------------------- /src/assets/networks/fantom-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/fantom-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/fuse-network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/fuse-network.png -------------------------------------------------------------------------------- /src/assets/networks/goerli-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/goerli-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/harmonyone-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/harmonyone-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/heco-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/heco-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/kovan-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/kovan-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/mainnet-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/mainnet-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/matic-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/matic-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/moonbeam-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/moonbeam-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/okex-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/okex-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/polygon-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/polygon-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/rinkeby-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/rinkeby-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/ropsten-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/ropsten-network.jpg -------------------------------------------------------------------------------- /src/assets/networks/xdai-network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/networks/xdai-network.jpg -------------------------------------------------------------------------------- /src/assets/socials/GdLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/socials/GdLogo.png -------------------------------------------------------------------------------- /src/assets/socials/Twitter-X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/socials/Twitter-X.png -------------------------------------------------------------------------------- /src/assets/socials/discord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/socials/discord.png -------------------------------------------------------------------------------- /src/assets/socials/discourse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/socials/discourse.png -------------------------------------------------------------------------------- /src/assets/socials/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/socials/facebook.png -------------------------------------------------------------------------------- /src/assets/socials/instagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/socials/instagram.png -------------------------------------------------------------------------------- /src/assets/socials/linkedin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/socials/linkedin.png -------------------------------------------------------------------------------- /src/assets/socials/medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/socials/medium.png -------------------------------------------------------------------------------- /src/assets/socials/telegram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoodDollar/GoodProtocolUI/643da3195373f4d97f4d507741798918d212b909/src/assets/socials/telegram.png -------------------------------------------------------------------------------- /src/assets/svg/QR.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/svg/add.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/assets/svg/double-bars.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/svg/lightcircle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Path 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/bignumber.d.ts: -------------------------------------------------------------------------------- 1 | import { BigNumberish } from '@ethersproject/bignumber' 2 | import { Fraction } from '../entities/Fraction' 3 | 4 | declare module '@ethersproject/bignumber' { 5 | interface BigNumber { 6 | muldiv(multiplier: BigNumberish, divisor: BigNumberish): BigNumber 7 | toFixed(decimals: BigNumberish): string 8 | toFraction(decimals: BigNumberish, base: BigNumberish): Fraction 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/bootstrap.ts: -------------------------------------------------------------------------------- 1 | // Bootstrap... 2 | 3 | import { BigNumber, BigNumberish } from '@ethersproject/bignumber' 4 | import { Zero } from '@ethersproject/constants' 5 | import { parseUnits } from '@ethersproject/units' 6 | import Fraction from './entities/Fraction' 7 | 8 | String.prototype.toBigNumber = function (decimals: BigNumberish): BigNumber { 9 | try { 10 | return parseUnits(this as string, decimals) 11 | } catch (error) { 12 | console.debug(`Failed to parse input amount: "${this}"`, error) 13 | } 14 | return BigNumber.from(0) 15 | } 16 | 17 | BigNumber.prototype.muldiv = function (multiplier: BigNumberish, divisor: BigNumberish): BigNumber { 18 | return BigNumber.from(divisor).gt(0) ? BigNumber.from(this).mul(multiplier).div(divisor) : Zero 19 | } 20 | 21 | BigNumber.prototype.toFraction = function (decimals: BigNumberish = 18): Fraction { 22 | return Fraction.from(this, decimals ? BigNumber.from(10).pow(decimals) : Zero) 23 | } 24 | 25 | BigNumber.prototype.toFixed = function (decimals: BigNumberish = 18, maxFractions: BigNumberish = 8): string { 26 | return this.toFraction(decimals, 10).toString(BigNumber.from(maxFractions).toNumber()) 27 | } 28 | -------------------------------------------------------------------------------- /src/components/AccountDetails/Copy.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { t } from '@lingui/macro' 3 | import { useLingui } from '@lingui/react' 4 | import styled from 'styled-components' 5 | import useCopyClipboard from '../../hooks/useCopyClipboard' 6 | import { LinkStyledButton } from '../../theme' 7 | 8 | const CopyIcon = styled(LinkStyledButton)` 9 | color: ${({ theme }) => theme.text3}; 10 | flex-shrink: 0; 11 | display: flex; 12 | font-style: normal; 13 | font-weight: 500; 14 | font-size: 16px; 15 | line-height: 19px; 16 | text-decoration-line: underline; 17 | color: ${({ theme }) => theme.color.text2}; 18 | ` 19 | 20 | export default function CopyHelper(props: { toCopy: string; children?: React.ReactNode }): any { 21 | const { i18n } = useLingui() 22 | const [isCopied, setCopied] = useCopyClipboard() 23 | 24 | return setCopied(props.toCopy)}>{isCopied ? i18n._(t`Copied`) : props.children} 25 | } 26 | -------------------------------------------------------------------------------- /src/components/Badge.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export type BadgeColor = 'default' | 'blue' | 'pink' 4 | 5 | export interface BadgeProps { 6 | color?: BadgeColor 7 | } 8 | 9 | export const COLOR = { 10 | default: '', 11 | blue: 'outline-blue rounded xs blue px-2 py-1', 12 | pink: 'outline-pink rounded xs pink px-2 py-1', 13 | } 14 | 15 | function Badge({ 16 | color = 'default', 17 | children, 18 | className = '', 19 | }: BadgeProps & React.HTMLAttributes): JSX.Element { 20 | return
{children}
21 | } 22 | 23 | export default Badge 24 | -------------------------------------------------------------------------------- /src/components/Blocklist/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode, useMemo } from 'react' 2 | import { BLOCKED_ADDRESSES } from '../../constants' 3 | import { useActiveWeb3React } from '../../hooks/useActiveWeb3React' 4 | import { t } from '@lingui/macro' 5 | import { useLingui } from '@lingui/react' 6 | 7 | export default function Blocklist({ children }: { children: ReactNode }) { 8 | const { i18n } = useLingui() 9 | const { account } = useActiveWeb3React() 10 | const blocked: boolean = useMemo(() => Boolean(account && BLOCKED_ADDRESSES.indexOf(account) !== -1), [account]) 11 | if (blocked) { 12 | return
{i18n._(t`Blocked address`)}
13 | } 14 | return <>{children} 15 | } 16 | -------------------------------------------------------------------------------- /src/components/Card.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default function Card({ 4 | header = undefined, 5 | footer = undefined, 6 | backgroundImage = '', 7 | title = '', 8 | description = '', 9 | children, 10 | className, 11 | }: any) { 12 | return ( 13 |
23 |
24 | {header && <>{header}} 25 | 26 |
27 | {title &&
{title}
} 28 | {description &&
{description}
} 29 | {children} 30 |
31 | 32 | {footer && <>{footer}} 33 |
34 |
35 | ) 36 | } 37 | -------------------------------------------------------------------------------- /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 }) => 20 | (gap === 'sm' && '8px') || (gap === 'md' && '12px') || (gap === 'lg' && '24px') || gap}; 21 | justify-items: ${({ justify }) => justify && justify}; 22 | ` 23 | 24 | export default Column 25 | -------------------------------------------------------------------------------- /src/components/Dots.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | const Dots = styled.span` 4 | &::after { 5 | display: inline-block; 6 | animation: ellipsis 1.25s infinite; 7 | content: '.'; 8 | width: 1em; 9 | text-align: left; 10 | } 11 | @keyframes ellipsis { 12 | 0% { 13 | content: '.'; 14 | } 15 | 33% { 16 | content: '..'; 17 | } 18 | 66% { 19 | content: '...'; 20 | } 21 | } 22 | ` 23 | 24 | export default Dots 25 | -------------------------------------------------------------------------------- /src/components/EmptyState.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { AutoColumn } from './Column' 3 | import { TYPE } from '../theme' 4 | 5 | export function EmptyState({ message }: { message: string }) { 6 | return ( 7 | 8 | {message} 9 | 10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /src/components/Gas/index.tsx: -------------------------------------------------------------------------------- 1 | import useSWR from 'swr' 2 | import React from 'react' 3 | import { t } from '@lingui/macro' 4 | import { useLingui } from '@lingui/react' 5 | 6 | function Gas() { 7 | const { i18n } = useLingui() 8 | const { data, error }: any = useSWR('https://ethgasstation.info/api/ethgasAPI.json?', (url) => 9 | fetch(url).then((r) => r.json()) 10 | ) 11 | 12 | if (error) return
{i18n._(t`failed to load`)}
13 | if (!data) return
{i18n._(t`loading...`)}
14 | 15 | return
{data.average}
16 | } 17 | 18 | export default Gas 19 | -------------------------------------------------------------------------------- /src/components/Icon/Icon.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | 4 | export interface IconProps { 5 | children: React.ReactNode 6 | viewBox: string 7 | [p: string]: any 8 | } 9 | 10 | const SvgSC = styled.svg<{ size: string; width: string; height: string }>` 11 | height: ${({ size, height }) => height || size}; 12 | width: ${({ size, width }) => width || size}; 13 | ` 14 | 15 | export const Icon = ({ children, viewBox, size, width, height, ...rest }: IconProps): React.ReactElement => { 16 | return ( 17 | 25 | {children} 26 | 27 | ) 28 | } 29 | 30 | export default Icon 31 | -------------------------------------------------------------------------------- /src/components/Icon/createIcon.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Icon, IconProps } from './Icon' 3 | 4 | const createIcon = ( 5 | path: React.ReactNode, 6 | { displayName, ...props }: { displayName: string; [x: string]: any } 7 | ): React.ElementType => { 8 | const IconComponent = (iconProps: IconProps) => ( 9 | 10 | {path} 11 | 12 | ) 13 | 14 | IconComponent.displayName = displayName 15 | 16 | return IconComponent 17 | } 18 | 19 | export default createIcon 20 | -------------------------------------------------------------------------------- /src/components/Identicon/index.tsx: -------------------------------------------------------------------------------- 1 | import Jazzicon from 'jazzicon' 2 | import React, { useEffect, useRef } from 'react' 3 | import styled from 'styled-components' 4 | import { useActiveWeb3React } from '../../hooks/useActiveWeb3React' 5 | 6 | const StyledIdenticonContainer = styled.div` 7 | height: 1rem; 8 | width: 1rem; 9 | border-radius: 1.125rem; 10 | background-color: ${({ theme }) => theme.bg4}; 11 | ` 12 | 13 | export default function Identicon() { 14 | const ref = useRef() 15 | 16 | const { account } = useActiveWeb3React() 17 | 18 | useEffect(() => { 19 | if (account && ref.current) { 20 | ref.current.innerHTML = '' 21 | ref.current.appendChild(Jazzicon(16, parseInt(account.slice(2, 10), 16))) 22 | } 23 | }, [account]) 24 | 25 | // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30451 26 | return 27 | } 28 | -------------------------------------------------------------------------------- /src/components/Liquidity/AdvancedLiquidityDetailsDropdown.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | import { AdvancedLiquidityDetails, AdvancedLiquidityDetailsProps } from './AdvancedLiquidityDetails' 4 | 5 | const AdvancedDetailsFooter = styled.div<{ show: boolean }>` 6 | padding-top: calc(16px + 2rem); 7 | padding-bottom: 16px; 8 | margin-top: -2rem; 9 | width: 100%; 10 | border-bottom-left-radius: 20px; 11 | border-bottom-right-radius: 20px; 12 | color: ${({ theme }) => theme.text2}; 13 | background-color: #202231; 14 | // background-color: ${({ theme }) => theme.advancedBG}; 15 | z-index: -1; 16 | 17 | transform: ${({ show }) => (show ? 'translateY(0%)' : 'translateY(-100%)')}; 18 | transition: transform 300ms ease-in-out; 19 | ` 20 | 21 | export default function AdvancedSwapDetailsDropdown({ show, ...rest }: AdvancedLiquidityDetailsProps) { 22 | return ( 23 | 24 | 25 | 26 | ) 27 | } 28 | -------------------------------------------------------------------------------- /src/components/Logo/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import { HelpCircle } from 'react-feather' 3 | import { ImageProps } from 'rebass' 4 | 5 | export 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 | 17 | const src: string | undefined = srcs.find((src) => !BAD_SRCS[src]) 18 | 19 | if (src) { 20 | return ( 21 | {alt} { 26 | if (src) BAD_SRCS[src] = true 27 | refresh((i) => i + 1) 28 | }} 29 | /> 30 | ) 31 | } 32 | 33 | return 34 | } 35 | -------------------------------------------------------------------------------- /src/components/ModalHeader.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Title from './gd/Title' 3 | 4 | function ModalHeader({ 5 | title = undefined, 6 | onClose, 7 | className = '', 8 | }: { 9 | title?: string 10 | className?: string 11 | onClose: () => void 12 | }): JSX.Element { 13 | return ( 14 |
15 | {title && {title}} 16 |
20 | 21 | 25 | 26 |
27 |
28 | ) 29 | } 30 | 31 | export default ModalHeader 32 | -------------------------------------------------------------------------------- /src/components/NewsFeed/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useContext } from 'react' 2 | import { NewsFeed } from '@gooddollar/good-design' 3 | import { NewsFeedContext, NewsFeedProvider } from '@gooddollar/web3sdk-v2' 4 | 5 | import { feedConfig } from 'constants/config' 6 | import { getNetworkEnv } from 'utils/env' 7 | 8 | export const NewsFeedWidget = ({ variant, direction = 'row' }: { variant?: string; direction?: 'row' | 'column' }) => { 9 | const { feed } = useContext(NewsFeedContext) 10 | 11 | return 12 | } 13 | 14 | export const NewsFeedWrapper = ({ children }) => { 15 | const network = getNetworkEnv() 16 | const prodOrQa = /\b(production|staging)\b/.test(network) 17 | 18 | return ( 19 | 20 | {children} 21 | 22 | ) 23 | } 24 | -------------------------------------------------------------------------------- /src/components/Paper.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default function Paper({ children, className, ...rest }: any): JSX.Element { 4 | return ( 5 |
6 | {children} 7 |
8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /src/components/ShareTransaction/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import Title from 'components/gd/Title' 4 | import { Share, ShareProps } from 'components/Share' 5 | 6 | interface ShareTransactionProps { 7 | title?: string 8 | text?: string 9 | children?: React.ReactNode 10 | shareProps: ShareProps 11 | } 12 | 13 | const ShareTransaction = ({ title, text, children, shareProps }: ShareTransactionProps): React.ReactElement => { 14 | return ( 15 | <> 16 | {title && {title}} 17 | {text &&
{text}
} 18 | {children} 19 | 20 | 21 | ) 22 | } 23 | 24 | export default ShareTransaction 25 | -------------------------------------------------------------------------------- /src/components/SplitPane.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default function SplitPane({ left, right }: { left: JSX.Element; right: JSX.Element }): JSX.Element { 4 | return ( 5 |
6 |
{left}
7 |
{right}
8 |
9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /src/components/StyledMenu/Navbar.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { View } from 'native-base' 3 | import { withTheme } from '@gooddollar/good-design' 4 | import { ActionButton } from './ActionButton' 5 | 6 | export const navbarTheme = { 7 | baseStyle: { 8 | display: 'flex', 9 | width: '100%', 10 | backgroundColor: 'gdPrimary', 11 | flexDirection: 'row', 12 | justifyContent: 'space-between', 13 | alignItems: 'center', 14 | borderTopRightRadius: 12, 15 | borderTopLeftRadius: 12, 16 | height: '56px', 17 | paddingLeft: 6, 18 | paddingRight: 6, 19 | }, 20 | } 21 | 22 | export const NavBar = withTheme({ name: 'NavBar' })(({ ...props }: any) => ( 23 | 24 | 25 | 26 | 27 | 28 | 29 | )) 30 | -------------------------------------------------------------------------------- /src/components/Switch/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useCallback } from 'react' 2 | import { StyledSwitch } from './styled' 3 | 4 | type SwitchProps = Omit, 'onChange'> & { 5 | onChange: (value: boolean) => void 6 | checked: boolean 7 | disabled?: boolean 8 | } 9 | 10 | export default function Switch({ onChange, defaultChecked, checked, disabled, ...rest }: SwitchProps): JSX.Element { 11 | const onSwitchChange = useCallback( 12 | (e: React.ChangeEvent) => { 13 | onChange(e.target.checked) 14 | }, 15 | [onChange] 16 | ) 17 | return ( 18 | 19 |
20 | 28 |
29 | 30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /src/components/Switch/styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const StyledSwitch = styled.div<{ checked: boolean }>` 4 | position: relative; 5 | width: 36px; 6 | height: 22px; 7 | 8 | .area { 9 | position: absolute; 10 | top: 0; 11 | left: 0; 12 | right: 0; 13 | bottom: 0; 14 | background-color: ${({ theme, checked }) => (checked ? theme.color.text2 : theme.color.bg2)}; 15 | border-radius: 12px; 16 | } 17 | .toggle { 18 | position: absolute; 19 | top: 1px; 20 | left: 0; 21 | transform: translateX(1px); 22 | width: 20px; 23 | height: 20px; 24 | background-color: ${({ theme }) => theme.color.main}; 25 | box-shadow: 0 1.375px 1.375px rgba(0, 0, 0, 0.5); 26 | border-radius: 50%; 27 | transition: 0.3s; 28 | } 29 | 30 | input { 31 | position: absolute; 32 | top: 0; 33 | left: 0; 34 | width: 100%; 35 | height: 100%; 36 | border-radius: 12px; 37 | opacity: 0; 38 | border: none; 39 | z-index: 1; 40 | cursor: pointer; 41 | } 42 | 43 | input:checked + .toggle { 44 | left: 100%; 45 | transform: translateX(calc(-100% - 1px)); 46 | } 47 | ` 48 | -------------------------------------------------------------------------------- /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: 18px 20px; 8 | font-style: normal; 9 | font-weight: normal; 10 | font-size: 16px; 11 | line-height: 19px; 12 | color: ${({ theme }) => theme.color.text1}; 13 | ` 14 | 15 | export interface TooltipProps extends Omit { 16 | text: string 17 | } 18 | 19 | export default function Tooltip({ text, ...rest }: TooltipProps) { 20 | return {text}} {...rest} /> 21 | } 22 | 23 | export function MouseoverTooltip({ children, ...rest }: Omit) { 24 | const [show, setShow] = useState(false) 25 | const open = useCallback(() => setShow(true), []) 26 | const close = useCallback(() => setShow(false), []) 27 | return ( 28 | 29 |
30 | {children} 31 |
32 |
33 | ) 34 | } 35 | -------------------------------------------------------------------------------- /src/components/WalletChat/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { WalletChatWidget } from 'react-wallet-chat-gd' 4 | import { useScreenSize } from '@gooddollar/good-design' 5 | 6 | import { useActiveWeb3React } from '../../hooks/useActiveWeb3React' 7 | 8 | const WalletChat = () => { 9 | const { account, chainId, label, eipProvider } = useActiveWeb3React() 10 | const { isDesktopView } = useScreenSize() 11 | return ( 12 | 25 | ) 26 | } 27 | 28 | export default WalletChat 29 | -------------------------------------------------------------------------------- /src/components/Web3SupportedNetworks/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { Fragment, useMemo } from 'react' 2 | import { SupportedV2Networks, SupportedV2Network } from '@gooddollar/web3sdk-v2' 3 | import { getEnv } from 'utils/env' 4 | 5 | export interface IWeb3SupportedNetworkRecord { 6 | network: string 7 | chain: number 8 | } 9 | 10 | export interface IWeb3SupportedNetworksProps { 11 | onItem: (item: IWeb3SupportedNetworkRecord) => JSX.Element 12 | } 13 | 14 | export default function Web3SupportedNetworks({ onItem }: IWeb3SupportedNetworksProps): JSX.Element | null { 15 | const network = getEnv() 16 | 17 | const networks = useMemo( 18 | () => Object.keys(SupportedV2Networks).filter((v) => isNaN(Number(v))) as SupportedV2Network[], 19 | [] 20 | ) 21 | 22 | if (network === 'production') { 23 | return null 24 | } 25 | 26 | return ( 27 | <> 28 | {networks.map((key) => ( 29 | {onItem({ network: key, chain: SupportedV2Networks[key] })} 30 | ))} 31 | 32 | ) 33 | } 34 | -------------------------------------------------------------------------------- /src/components/Withdraw/styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const WithdrawStyled = styled.div` 4 | padding: 11px 17px 33px 24px; 5 | 6 | .withdraw { 7 | font-size: 20px; 8 | height: 71px; 9 | max-width: 387px; 10 | } 11 | 12 | .pending-hint { 13 | position: absolute; 14 | font-size: 12px; 15 | line-height: 14px; 16 | bottom: -18px; 17 | } 18 | 19 | .back-to-portfolio { 20 | text-decoration: none; 21 | text-transform: uppercase; 22 | color: ${({ theme }) => theme.color.text2}; 23 | font-weight: 900; 24 | font-size: 16px; 25 | line-height: 16px; 26 | } 27 | 28 | .details-row { 29 | color: ${({ theme }) => theme.color.text5}; 30 | font-weight: 700; 31 | font-size: 14px; 32 | line-height: 23px; 33 | letter-spacing: 0.35px; 34 | text-transform: uppercase; 35 | } 36 | 37 | .horizontal { 38 | border-bottom: 1px solid #e5e5e5; 39 | } 40 | ` 41 | -------------------------------------------------------------------------------- /src/components/WithdrawRewards/styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const WithdrawRewardsStyled = styled.div` 4 | padding: 11px 17px 33px 24px; 5 | 6 | .warning { 7 | font-size: 14px; 8 | font-weight: bold; 9 | line-height: 20px; 10 | letter-spacing: 0.35px; 11 | color: ${({ theme }) => theme.red4}; 12 | overflow-wrap: anywhere; 13 | word-break: break-all; 14 | } 15 | 16 | .claim-reward { 17 | font-size: 20px; 18 | height: 71px; 19 | max-width: 387px; 20 | } 21 | 22 | .pending-hint { 23 | position: absolute; 24 | text-align: center; 25 | font-size: 12px; 26 | line-height: 14px; 27 | top: 75px; 28 | } 29 | 30 | .back-to-portfolio { 31 | text-decoration: none; 32 | text-transform: uppercase; 33 | color: ${({ theme }) => theme.color.text2}; 34 | font-weight: 900; 35 | font-size: 16px; 36 | line-height: 16px; 37 | } 38 | ` 39 | -------------------------------------------------------------------------------- /src/components/gd/Card/index.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | import React, { ComponentType, HTMLAttributes, memo } from 'react' 3 | 4 | export interface CardProps extends HTMLAttributes { 5 | contentWrapped?: boolean 6 | as?: keyof JSX.IntrinsicElements | ComponentType>> 7 | } 8 | 9 | export const CardSC = styled.div` 10 | padding: 18px 20px; 11 | background: ${({ theme }) => theme.color.bg1}; 12 | box-shadow: ${({ theme }) => theme.shadow.settings}; 13 | border-radius: 12px; 14 | ` 15 | export const CardContentSC = styled.div` 16 | background: ${({ theme }) => theme.color.main}; 17 | border: 1px solid ${({ theme }) => theme.color.border2}; 18 | border-radius: 12px; 19 | padding: 16px 20px 20px; 20 | ` 21 | 22 | const Card = memo(({ children, contentWrapped = true, ...rest }: CardProps) => { 23 | if (contentWrapped) { 24 | children = {children} 25 | } 26 | 27 | return {children} 28 | }) 29 | 30 | export default Card 31 | -------------------------------------------------------------------------------- /src/components/gd/Placeholder/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { memo } from 'react' 2 | import styled from 'styled-components' 3 | 4 | const PlaceholderSC = styled.div` 5 | background: ${({ theme }) => theme.color.bg2}; 6 | border-radius: 6px; 7 | color: ${({ theme }) => theme.color.rangeTrack}; 8 | font-style: normal; 9 | font-weight: bold; 10 | font-size: 14px; 11 | line-height: 166%; 12 | letter-spacing: 0.35px; 13 | text-transform: uppercase; 14 | padding: 40px 34px 34px 34px; 15 | display: flex; 16 | justify-content: center; 17 | ` 18 | 19 | const Placeholder = memo(({ children, ...props }: Omit) => { 20 | return {children} 21 | }) 22 | 23 | export default Placeholder 24 | -------------------------------------------------------------------------------- /src/components/gd/sushi/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Card } from 'components/Card' 2 | export { default as Checkbox } from 'components/Checkbox' 3 | export { default as Layout } from './Layout' 4 | export { default as MarketHeader } from './MarketHeader' 5 | export { default as Paper } from 'components/Paper' 6 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Alert } from './Alert' 2 | export { default as AppBar } from './AppBar' 3 | export { default as Badge } from './Badge' 4 | export { default as Button, BackButton } from './Button' 5 | export { default as Card } from './Card' 6 | export { default as Checkbox } from './Checkbox' 7 | export { default as Dots } from './Dots' 8 | export { default as Header } from './AppBar' 9 | export { default as Link, NavLink } from './Link' 10 | export { default as Paper } from './Paper' 11 | export { default as SplitPane } from './SplitPane' 12 | export { default as Popups } from './Popups' 13 | export { default as QuestionHelper } from './QuestionHelper' 14 | -------------------------------------------------------------------------------- /src/components/swap/confirmPriceImpactWithoutFee.ts: -------------------------------------------------------------------------------- 1 | import { Percent } from '@sushiswap/sdk' 2 | import { ALLOWED_PRICE_IMPACT_HIGH, PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN } from '../../constants' 3 | 4 | /** 5 | * Given the price impact, get user confirmation. 6 | * 7 | * @param priceImpactWithoutFee price impact of the trade without the fee. 8 | */ 9 | export default function confirmPriceImpactWithoutFee(priceImpactWithoutFee: Percent): boolean { 10 | if (!priceImpactWithoutFee.lessThan(PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN)) { 11 | return ( 12 | window.prompt( 13 | `This swap has a price impact of at least ${PRICE_IMPACT_WITHOUT_FEE_CONFIRM_MIN.toFixed( 14 | 0 15 | )}%. Please type the word "confirm" to continue with this swap.` 16 | ) === 'confirm' 17 | ) 18 | } else if (!priceImpactWithoutFee.lessThan(ALLOWED_PRICE_IMPACT_HIGH)) { 19 | return window.confirm( 20 | `This swap has a price impact of at least ${ALLOWED_PRICE_IMPACT_HIGH.toFixed( 21 | 0 22 | )}%. Please confirm that you would like to continue with this swap.` 23 | ) 24 | } 25 | return true 26 | } 27 | -------------------------------------------------------------------------------- /src/constants/abis/argent-wallet-detector.ts: -------------------------------------------------------------------------------- 1 | import ARGENT_WALLET_DETECTOR_ABI from './argent-wallet-detector.json' 2 | 3 | const ARGENT_WALLET_DETECTOR_MAINNET_ADDRESS = '0xeca4B0bDBf7c55E9b7925919d03CbF8Dc82537E8' 4 | 5 | export { ARGENT_WALLET_DETECTOR_ABI, ARGENT_WALLET_DETECTOR_MAINNET_ADDRESS } 6 | -------------------------------------------------------------------------------- /src/constants/abis/compound-oracle.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "inputs": [{ "internalType": "bytes", "name": "data", "type": "bytes" }], 4 | "name": "get", 5 | "outputs": [ 6 | { "internalType": "bool", "name": "", "type": "bool" }, 7 | { "internalType": "uint256", "name": "", "type": "uint256" } 8 | ], 9 | "stateMutability": "nonpayable", 10 | "type": "function" 11 | }, 12 | { 13 | "inputs": [ 14 | { "internalType": "string", "name": "collateralSymbol", "type": "string" }, 15 | { "internalType": "string", "name": "assetSymbol", "type": "string" }, 16 | { "internalType": "uint256", "name": "division", "type": "uint256" } 17 | ], 18 | "name": "getDataParameter", 19 | "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], 20 | "stateMutability": "pure", 21 | "type": "function" 22 | }, 23 | { 24 | "inputs": [{ "internalType": "bytes", "name": "data", "type": "bytes" }], 25 | "name": "peek", 26 | "outputs": [ 27 | { "internalType": "bool", "name": "", "type": "bool" }, 28 | { "internalType": "uint256", "name": "", "type": "uint256" } 29 | ], 30 | "stateMutability": "view", 31 | "type": "function" 32 | } 33 | ] 34 | -------------------------------------------------------------------------------- /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/faucet.json: -------------------------------------------------------------------------------- 1 | [{ "inputs": [], "name": "drip", "outputs": [], "stateMutability": "nonpayable", "type": "function" }] 2 | -------------------------------------------------------------------------------- /src/constants/abis/faucet.ts: -------------------------------------------------------------------------------- 1 | import FAUCET_ABI from './faucet.json' 2 | 3 | const FAUCET_ADDRESS = '0x5546e0295c7bb85b2fC00883B6025BA0Db06e50A' 4 | 5 | export { FAUCET_ADDRESS, FAUCET_ABI } 6 | -------------------------------------------------------------------------------- /src/constants/abis/migrator.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "inputs": [ 4 | { 5 | "internalType": "address", 6 | "name": "_factoryV1", 7 | "type": "address" 8 | }, 9 | { 10 | "internalType": "address", 11 | "name": "_router", 12 | "type": "address" 13 | } 14 | ], 15 | "stateMutability": "nonpayable", 16 | "type": "constructor" 17 | }, 18 | { 19 | "inputs": [ 20 | { 21 | "internalType": "address", 22 | "name": "token", 23 | "type": "address" 24 | }, 25 | { 26 | "internalType": "uint256", 27 | "name": "amountTokenMin", 28 | "type": "uint256" 29 | }, 30 | { 31 | "internalType": "uint256", 32 | "name": "amountETHMin", 33 | "type": "uint256" 34 | }, 35 | { 36 | "internalType": "address", 37 | "name": "to", 38 | "type": "address" 39 | }, 40 | { 41 | "internalType": "uint256", 42 | "name": "deadline", 43 | "type": "uint256" 44 | } 45 | ], 46 | "name": "migrate", 47 | "outputs": [], 48 | "stateMutability": "nonpayable", 49 | "type": "function" 50 | }, 51 | { 52 | "stateMutability": "payable", 53 | "type": "receive" 54 | } 55 | ] 56 | -------------------------------------------------------------------------------- /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/pegged-oracle.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "inputs": [{ "internalType": "bytes", "name": "data", "type": "bytes" }], 4 | "name": "get", 5 | "outputs": [ 6 | { "internalType": "bool", "name": "", "type": "bool" }, 7 | { "internalType": "uint256", "name": "", "type": "uint256" } 8 | ], 9 | "stateMutability": "nonpayable", 10 | "type": "function" 11 | }, 12 | { 13 | "inputs": [{ "internalType": "uint256", "name": "rate", "type": "uint256" }], 14 | "name": "getDataParameter", 15 | "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }], 16 | "stateMutability": "pure", 17 | "type": "function" 18 | }, 19 | { 20 | "inputs": [{ "internalType": "bytes", "name": "data", "type": "bytes" }], 21 | "name": "peek", 22 | "outputs": [ 23 | { "internalType": "bool", "name": "", "type": "bool" }, 24 | { "internalType": "uint256", "name": "", "type": "uint256" } 25 | ], 26 | "stateMutability": "view", 27 | "type": "function" 28 | } 29 | ] 30 | -------------------------------------------------------------------------------- /src/constants/abis/saave.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, 3 | { 4 | "inputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }], 5 | "name": "saave", 6 | "outputs": [], 7 | "stateMutability": "nonpayable", 8 | "type": "function" 9 | }, 10 | { 11 | "inputs": [ 12 | { "internalType": "address", "name": "to", "type": "address" }, 13 | { "internalType": "uint256", "name": "amount", "type": "uint256" } 14 | ], 15 | "name": "saaveTo", 16 | "outputs": [], 17 | "stateMutability": "nonpayable", 18 | "type": "function" 19 | } 20 | ] 21 | -------------------------------------------------------------------------------- /src/constants/abis/staking-rewards.ts: -------------------------------------------------------------------------------- 1 | import { Interface } from '@ethersproject/abi' 2 | import { abi as STAKING_REWARDS_ABI } from '@uniswap/liquidity-staker/build/StakingRewards.json' 3 | import { abi as STAKING_REWARDS_FACTORY_ABI } from '@uniswap/liquidity-staker/build/StakingRewardsFactory.json' 4 | 5 | const STAKING_REWARDS_INTERFACE = new Interface(STAKING_REWARDS_ABI) 6 | 7 | const STAKING_REWARDS_FACTORY_INTERFACE = new Interface(STAKING_REWARDS_FACTORY_ABI) 8 | 9 | export { STAKING_REWARDS_FACTORY_INTERFACE, STAKING_REWARDS_INTERFACE } 10 | -------------------------------------------------------------------------------- /src/constants/abis/sushiswapmultiswapper.json: -------------------------------------------------------------------------------- 1 | [{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"contract IBentoBoxV1","name":"_bentoBox","type":"address"},{"internalType":"bytes32","name":"_pairCodeHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256","name":"shareIn","type":"uint256"}],"name":"getOutputAmount","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountMinOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"shareIn","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"shareOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}] -------------------------------------------------------------------------------- /src/constants/addresses.ts: -------------------------------------------------------------------------------- 1 | export {} 2 | -------------------------------------------------------------------------------- /src/constants/config.ts: -------------------------------------------------------------------------------- 1 | export const feedConfig = { 2 | production: { 3 | feedFilter: { 4 | context: process.env.REACT_APP_FEEDCONTEXT_PROD, 5 | tag: 'publishDapp', 6 | }, 7 | }, 8 | } 9 | -------------------------------------------------------------------------------- /src/constants/token-lists/sushiswap-v2-unsupported.tokenlist.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Uniswap V2 Unsupported List", 3 | "timestamp": "2021-01-05T20:47:02.923Z", 4 | "version": { 5 | "major": 1, 6 | "minor": 0, 7 | "patch": 0 8 | }, 9 | "tags": {}, 10 | "logoURI": "ipfs://QmNa8mQkrNKp1WEEeGjFezDmDeodkWRevGFN8JCV7b4Xir", 11 | "keywords": ["uniswap", "unsupported"], 12 | "tokens": [ 13 | { 14 | "name": "Gold Tether", 15 | "address": "0x4922a015c4407F87432B179bb209e125432E4a2A", 16 | "symbol": "XAUt", 17 | "decimals": 6, 18 | "chainId": 1, 19 | "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4922a015c4407F87432B179bb209e125432E4a2A/logo.png" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /src/constants/v1/index.ts: -------------------------------------------------------------------------------- 1 | import { Interface } from '@ethersproject/abi' 2 | import { ChainId } from '@sushiswap/sdk' 3 | import V1_EXCHANGE_ABI from './v1_exchange.json' 4 | import V1_FACTORY_ABI from './v1_factory.json' 5 | import { AdditionalChainId } from '../index' 6 | 7 | const V1_FACTORY_ADDRESSES: { [chainId in ChainId | AdditionalChainId]?: string } = { 8 | [ChainId.MAINNET]: '0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95', 9 | [ChainId.ROPSTEN]: '0x9c83dCE8CA20E9aAF9D3efc003b2ea62aBC08351', 10 | [ChainId.RINKEBY]: '0xf5D915570BC477f9B8D6C0E980aA81757A3AaC36', 11 | [ChainId.GÖRLI]: '0x6Ce570d02D73d4c384b46135E87f8C592A8c86dA', 12 | [ChainId.KOVAN]: '0xD3E51Ef092B2845f10401a0159B2B96e8B6c3D30', 13 | } 14 | 15 | const V1_FACTORY_INTERFACE = new Interface(V1_FACTORY_ABI) 16 | const V1_EXCHANGE_INTERFACE = new Interface(V1_EXCHANGE_ABI) 17 | 18 | export { V1_FACTORY_ADDRESSES, V1_FACTORY_INTERFACE, V1_FACTORY_ABI, V1_EXCHANGE_INTERFACE, V1_EXCHANGE_ABI } 19 | -------------------------------------------------------------------------------- /src/entities/BigNumberMath.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber, BigNumberish } from '@ethersproject/bignumber' 2 | 3 | export interface BigNumberMath { 4 | min(...values: BigNumberish[]): BigNumber 5 | max(...values: BigNumberish[]): BigNumber 6 | } 7 | 8 | export class BigNumberMath implements BigNumberMath { 9 | static min(...values: BigNumberish[]): BigNumber { 10 | let lowest = BigNumber.from(values[0]) 11 | for (let i = 1; i < values.length; i++) { 12 | const value = BigNumber.from(values[i]) 13 | if (value.lt(lowest)) { 14 | lowest = value 15 | } 16 | } 17 | return lowest 18 | } 19 | static max(...values: BigNumberish[]): BigNumber { 20 | let highest = BigNumber.from(values[0]) 21 | for (let i = 1; i < values.length; i++) { 22 | const value = BigNumber.from(values[i]) 23 | if (value.gt(highest)) { 24 | highest = value 25 | } 26 | } 27 | return highest 28 | } 29 | } 30 | 31 | export default BigNumberMath 32 | -------------------------------------------------------------------------------- /src/entities/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Fraction } from './Fraction' 2 | export { BigNumberMath } from './BigNumberMath' 3 | -------------------------------------------------------------------------------- /src/functions/balance.ts: -------------------------------------------------------------------------------- 1 | import { SavingsSDK } from '@gooddollar/web3sdk-v2' 2 | 3 | export type SavingsBalance = { 4 | account: string 5 | provider: any 6 | defaultEnv: string 7 | } 8 | 9 | export const hasSavingsBalance = ({ account, provider, defaultEnv }: SavingsBalance): Promise => { 10 | const sdk = new SavingsSDK(provider, defaultEnv) 11 | 12 | return sdk.hasBalance(account).catch(() => false) 13 | } 14 | -------------------------------------------------------------------------------- /src/functions/block.ts: -------------------------------------------------------------------------------- 1 | export {} 2 | -------------------------------------------------------------------------------- /src/functions/contract.ts: -------------------------------------------------------------------------------- 1 | export {} 2 | -------------------------------------------------------------------------------- /src/functions/index.ts: -------------------------------------------------------------------------------- 1 | export * from './block' 2 | export * from './contract' 3 | export * from './styling' 4 | export * from './validate' 5 | export * from './balance' 6 | -------------------------------------------------------------------------------- /src/functions/styling.ts: -------------------------------------------------------------------------------- 1 | export function classNames(...classes: string[]): string { 2 | return classes.filter(Boolean).join(' ') 3 | } 4 | -------------------------------------------------------------------------------- /src/functions/validate.ts: -------------------------------------------------------------------------------- 1 | // CONVENTION isFoo -> boolean 2 | 3 | /** 4 | * Returns true if the string value is zero in hex 5 | * @param hexNumberString 6 | */ 7 | export function isZero(hexNumberString: string): boolean { 8 | return /^0x0*$/.test(hexNumberString) 9 | } 10 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from '@ethersproject/bignumber' 2 | 3 | declare global { 4 | interface String { 5 | toBigNumber(decimals: number): BigNumber 6 | } 7 | interface Window { 8 | dataLayer: any 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/hooks/useActiveWeb3React.ts: -------------------------------------------------------------------------------- 1 | import { Web3Provider } from '@ethersproject/providers' 2 | import { ChainId } from '@sushiswap/sdk' 3 | import { useActiveOnboard, EIP1193ProviderExtended } from './useActiveOnboard' 4 | import type { ActiveOnboard } from './useActiveOnboard' 5 | 6 | export function useActiveWeb3React(): ActiveOnboard & { 7 | chainId: ChainId 8 | label?: string 9 | active?: boolean 10 | eipProvider?: EIP1193ProviderExtended 11 | account?: string 12 | } { 13 | const context = useActiveOnboard() 14 | return context 15 | } 16 | 17 | export default useActiveWeb3React 18 | -------------------------------------------------------------------------------- /src/hooks/useCallbackOnFocus.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react' 2 | 3 | export default function useCallbackOnFocus(callback: () => void): void { 4 | useEffect(() => { 5 | function invokeOnFocusHandler() { 6 | if (document.visibilityState === 'visible') callback() 7 | } 8 | 9 | document.addEventListener('visibilitychange', invokeOnFocusHandler) 10 | return () => document.removeEventListener('visibilitychange', invokeOnFocusHandler) 11 | }, [callback]) 12 | } 13 | -------------------------------------------------------------------------------- /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 | // Update debounced value after delay 9 | const handler = setTimeout(() => { 10 | setDebouncedValue(value) 11 | }, delay) 12 | 13 | // Cancel the timeout if value changes (also on delay change or unmount) 14 | // This is how we prevent debounced value from updating if value is changed ... 15 | // .. within the delay period. Timeout gets cleared and restarted. 16 | return () => { 17 | clearTimeout(handler) 18 | } 19 | }, [value, delay]) 20 | 21 | return debouncedValue 22 | } 23 | -------------------------------------------------------------------------------- /src/hooks/useFuse.ts: -------------------------------------------------------------------------------- 1 | import Fuse from 'fuse.js' 2 | import { useState } from 'react' 3 | 4 | function fuzzySearch({ fuse, data, term }: any) { 5 | const result = fuse.search(`${term}`) 6 | return term ? result : data 7 | } 8 | /** 9 | * 10 | * @param {*} param0 11 | * 12 | * A custom React Hook to do a in-memory fuzzy text search 13 | * using Fuse.js. 14 | */ 15 | function useFuse({ data, options }: any) { 16 | const [term, setTerm] = useState('') 17 | const fuseOptions = { 18 | ...options, 19 | } 20 | const fuse = new Fuse(data, fuseOptions) 21 | const result = fuzzySearch({ data, term, fuse }) 22 | const reset = () => setTerm('') 23 | 24 | return { result, search: setTerm, term, reset } 25 | } 26 | 27 | export default useFuse 28 | -------------------------------------------------------------------------------- /src/hooks/useG$.ts: -------------------------------------------------------------------------------- 1 | import { getTokens } from '@gooddollar/web3sdk' 2 | import useActiveWeb3React from './useActiveWeb3React' 3 | import { useEffect, useState } from 'react' 4 | import { Token } from '@sushiswap/sdk' 5 | import { Token as UToken } from '@uniswap/sdk-core' 6 | import { ethers } from 'ethers' 7 | 8 | export default function useG$() { 9 | const { chainId } = useActiveWeb3React() 10 | const [token, setToken] = useState(new Token(chainId, ethers.constants.AddressZero, 18, 'G$', 'GoodDollar')) 11 | 12 | useEffect(() => { 13 | if (!chainId) return 14 | void (async () => { 15 | const [tokens] = await getTokens(chainId as any) 16 | const G$ = tokens.get('G$') as UToken | undefined 17 | if (G$) { 18 | setToken(new Token(chainId, G$.address, G$.decimals, G$.symbol, G$.name)) 19 | } 20 | })() 21 | }, [chainId]) 22 | 23 | return token 24 | } 25 | -------------------------------------------------------------------------------- /src/hooks/useHasBalance.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react' 2 | import { ChainId } from '@sushiswap/sdk' 3 | import { useGetEnvChainId, useReadOnlyProvider } from '@gooddollar/web3sdk-v2' 4 | 5 | import { hasSavingsBalance } from 'functions' 6 | 7 | export default function useHasBalance(account: string, requiredChain: ChainId): boolean | undefined { 8 | const [hasBalance, setHasBalance] = useState(false) 9 | const { defaultEnv } = useGetEnvChainId(requiredChain) 10 | const provider = useReadOnlyProvider(requiredChain) 11 | 12 | useEffect(() => { 13 | if (!account || !provider) { 14 | return 15 | } 16 | 17 | hasSavingsBalance({ account, provider, defaultEnv }) 18 | .then(setHasBalance) 19 | .catch((e) => console.log('checking savings balance error', { e })) 20 | // eslint-disable-next-line react-hooks-addons/no-unused-deps 21 | }, [account, setHasBalance, provider, defaultEnv, requiredChain]) 22 | 23 | return hasBalance 24 | } 25 | -------------------------------------------------------------------------------- /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 | // Remember the latest callback. 7 | useEffect(() => { 8 | savedCallback.current = callback 9 | }, [callback]) 10 | 11 | // Set up the interval. 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 | * Returns whether the window is currently visible to the user. 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/useMetaMask.ts: -------------------------------------------------------------------------------- 1 | export type MetaMaskInfo = { 2 | isMetaMask: boolean 3 | isMultiple: boolean 4 | } 5 | 6 | /** 7 | * checks for multiple providers and if one of those is metamask 8 | * @returns {isMetaMask, isMultiple} 9 | */ 10 | 11 | export default function useMetaMask(): MetaMaskInfo { 12 | const { ethereum } = window 13 | const isMultiple = ethereum && ethereum.providers?.length > 1 14 | 15 | const isMetaMask = ethereum && (isMultiple ? ethereum.selectedProvider?.isMetaMask : ethereum.isMetaMask) 16 | return { 17 | isMetaMask: isMetaMask ?? false, 18 | isMultiple: isMultiple ?? false, 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /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 { ParsedQs, parse } 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/useToggle.ts: -------------------------------------------------------------------------------- 1 | import { useCallback, useState } from 'react' 2 | 3 | export default function useToggle(initialState = false): [boolean, () => void] { 4 | const [state, setState] = useState(initialState) 5 | const toggle = useCallback(() => setState((state) => !state), []) 6 | return [state, toggle] 7 | } 8 | -------------------------------------------------------------------------------- /src/hooks/useWindowSize.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react' 2 | 3 | const isClient = typeof window === 'object' 4 | 5 | function getSize() { 6 | return { 7 | width: isClient ? window.innerWidth : undefined, 8 | height: isClient ? window.innerHeight : undefined, 9 | } 10 | } 11 | 12 | // https://usehooks.com/useWindowSize/ 13 | export function useWindowSize() { 14 | const [windowSize, setWindowSize] = useState(getSize) 15 | 16 | useEffect(() => { 17 | function handleResize() { 18 | setWindowSize(getSize()) 19 | } 20 | 21 | if (isClient) { 22 | window.addEventListener('resize', handleResize) 23 | return () => { 24 | window.removeEventListener('resize', handleResize) 25 | } 26 | } 27 | return undefined 28 | }, []) 29 | 30 | return windowSize 31 | } 32 | -------------------------------------------------------------------------------- /src/language/hooks/index.tsx: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react' 2 | import { LanguageContext } from '..' 3 | 4 | export function useLanguageData() { 5 | return useContext(LanguageContext) 6 | } 7 | -------------------------------------------------------------------------------- /src/pages/gd/Claim/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { useFeatureFlagWithPayload } from 'posthog-react-native' 3 | import { useEthers } from '@usedapp/core' 4 | import { Spinner } from 'native-base' 5 | import usePromise from 'react-use-promise' 6 | 7 | import OldClaim from './OldClaim' 8 | import NewClaim from './Claim' 9 | import { isSupportedCountry } from '../GoodId' 10 | 11 | const Claim = () => { 12 | const { account } = useEthers() 13 | const [, payload] = useFeatureFlagWithPayload('goodid') 14 | const { enabled = false, whitelist, countries = '' } = payload ?? {} 15 | const { ethereum } = window 16 | const isMiniPay = ethereum?.isMiniPay 17 | 18 | const [isGoodIdEnabled] = usePromise(async () => { 19 | if (isMiniPay) return false 20 | if (enabled || whitelist?.includes(account)) return true 21 | 22 | return isSupportedCountry(countries) 23 | }, [enabled, whitelist, countries, account, isMiniPay]) 24 | 25 | if (payload === undefined || isGoodIdEnabled === undefined) return 26 | 27 | return isGoodIdEnabled && !isMiniPay ? : 28 | } 29 | 30 | export default Claim 31 | -------------------------------------------------------------------------------- /src/pages/gd/DatastudioDashboard/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { CentreBox } from '@gooddollar/good-design' 3 | 4 | const DASHBOARD_URL = process.env.REACT_APP_DATASTUDIO_DASHBOARD_URL || 'https://dashboard.gooddollar.org/' 5 | 6 | export default function DatastudioDashboard(): JSX.Element { 7 | return ( 8 | 9 | 17 | 18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /src/pages/gd/GoodId/GoodIdDetails.tsx: -------------------------------------------------------------------------------- 1 | import React, { memo } from 'react' 2 | import { GoodIdDetails as Details } from '@gooddollar/good-design' 3 | import { useEthers } from '@usedapp/core' 4 | 5 | const GoodIdDetails = memo(() => { 6 | const { account } = useEthers() 7 | 8 | return
9 | }) 10 | 11 | export default GoodIdDetails 12 | -------------------------------------------------------------------------------- /src/pages/gd/News/index.tsx: -------------------------------------------------------------------------------- 1 | import { NewsFeedWidget, NewsFeedWrapper } from 'components/NewsFeed' 2 | 3 | const NewsFeedPage = () => ( 4 | 5 | 6 | 7 | ) 8 | 9 | export default NewsFeedPage 10 | -------------------------------------------------------------------------------- /src/pages/gd/Stake/Savings/SavingsDepositMobile.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC, useCallback } from 'react' 2 | 3 | import { useSavingsStats } from '@gooddollar/web3sdk-v2' 4 | import { SavingsCellsMobile } from 'components/Savings/SavingsCard/SavingsCardTableMobile/SavingsCellsMobile' 5 | 6 | import { ChainId } from '@sushiswap/sdk' 7 | import type { HeadingCopy } from 'components/Savings/SavingsCard' 8 | 9 | interface SavingsDepositMobileProps { 10 | headings: HeadingCopy 11 | requiredChain: ChainId 12 | showModal: (chain: ChainId) => void 13 | } 14 | 15 | export const SavingsDepositMobile: FC = ({ headings, requiredChain, showModal }) => { 16 | const { stats, error } = useSavingsStats(10) 17 | 18 | const onModalButtonPress = useCallback(() => showModal(requiredChain), [requiredChain, showModal]) 19 | 20 | return ( 21 | 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /src/pages/gd/Stake/StakeDeposit/styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const StakeDepositSC = styled.div` 4 | .walletNotice { 5 | font-style: italic; 6 | font-weight: normal; 7 | font-size: 12px; 8 | line-height: 14px; 9 | text-align: center; 10 | color: ${({ theme }) => theme.color.text1}; 11 | } 12 | 13 | .amount { 14 | font-weight: bold; 15 | font-size: 14px; 16 | line-height: 166%; 17 | letter-spacing: 0.35px; 18 | text-transform: uppercase; 19 | color: ${({ theme }) => theme.color.text5}; 20 | } 21 | 22 | .token { 23 | font-style: normal; 24 | font-weight: normal; 25 | font-size: 24px; 26 | line-height: 28px; 27 | color: ${({ theme }) => theme.color.input}; 28 | } 29 | 30 | .dollar-equivalent { 31 | font-style: normal; 32 | font-weight: bold; 33 | font-size: 14px; 34 | line-height: 166%; 35 | letter-spacing: 0.35px; 36 | text-transform: uppercase; 37 | color: ${({ theme }) => theme.color.text5}; 38 | } 39 | 40 | .error { 41 | font-weight: bold; 42 | font-size: 14px; 43 | line-height: 20px; 44 | letter-spacing: 0.35px; 45 | color: #ff0000; 46 | } 47 | ` 48 | -------------------------------------------------------------------------------- /src/pages/gd/Swap/SwapConfirmModal/styled.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const SwapConfirmModalSC = styled.div` 4 | padding: 13px 38px 20px 30px; 5 | .description { 6 | font-style: italic; 7 | font-weight: normal; 8 | font-size: 14px; 9 | line-height: 16px; 10 | color: ${({ theme }) => theme.color.text4}; 11 | } 12 | 13 | .diagram { 14 | display: grid; 15 | gap: 6px 18px; 16 | grid-template-columns: 54px auto auto; 17 | grid-template-rows: 54px auto 54px; 18 | align-items: center; 19 | 20 | .direction { 21 | grid-column: 1 / -1; 22 | padding-left: 8px; 23 | } 24 | 25 | .value { 26 | font-style: normal; 27 | font-weight: normal; 28 | font-size: 24px; 29 | line-height: 28px; 30 | color: ${({ theme }) => theme.color.input}; 31 | } 32 | 33 | .symbol { 34 | justify-self: end; 35 | font-style: normal; 36 | font-weight: bold; 37 | font-size: 24px; 38 | line-height: 32px; 39 | color: ${({ theme }) => theme.color.text6}; 40 | } 41 | } 42 | ` 43 | -------------------------------------------------------------------------------- /src/pages/gd/Swap/SwapDetails/styled.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const SwapDetailsSC = styled.div<{ $open?: boolean }>` 4 | background: ${({ theme }) => theme.color.bg1}; 5 | box-shadow: ${({ theme }) => theme.shadow.swapFooter}; 6 | border-radius: 0px 0px 6px 6px; 7 | padding: 21px 20px 16px; 8 | margin-left: 10px; 9 | margin-right: 10px; 10 | transform: translateY(${({ $open }) => ($open ? '-11px' : '-100%')}); 11 | position: relative; 12 | z-index: 1; 13 | opacity: ${({ $open }) => ($open ? '1' : '0')}; 14 | transition: opacity 0.4s ease, transform 0.6s ease; 15 | display: ${({ $open }) => ($open ? 'block' : 'none')}; 16 | ` 17 | -------------------------------------------------------------------------------- /src/pages/gd/Swap/SwapInfo/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { CSSProperties, memo, ReactNode } from 'react' 2 | import { SwapInfoSC } from './styled' 3 | import { QuestionHelper } from 'components' 4 | 5 | export interface SwapInfoProps { 6 | className?: string 7 | style?: CSSProperties 8 | title: string 9 | value: ReactNode 10 | tip?: string 11 | } 12 | 13 | const SwapInfo = memo(({ className, style, tip, title, value }: SwapInfoProps) => { 14 | return ( 15 | 16 |
17 | {title} {tip && } 18 |
19 |
{value}
20 |
21 | ) 22 | }) 23 | 24 | export default SwapInfo 25 | -------------------------------------------------------------------------------- /src/pages/gd/Swap/SwapInfo/styled.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const SwapInfoSC = styled.div` 4 | display: flex; 5 | justify-content: space-between; 6 | align-items: center; 7 | 8 | .title { 9 | margin-right: 1rem; 10 | } 11 | 12 | .title, 13 | .value { 14 | font-style: normal; 15 | font-weight: bold; 16 | font-size: 14px; 17 | line-height: 1.6; 18 | letter-spacing: 0.35px; 19 | text-transform: uppercase; 20 | color: ${({ theme }) => theme.color.text5}; 21 | white-space: nowrap; 22 | 23 | @media ${({ theme }) => theme.media.md} { 24 | font-size: 11px; 25 | line-height: 1.4; 26 | } 27 | } 28 | ` 29 | -------------------------------------------------------------------------------- /src/pages/gd/Swap/SwapTokensModal/styled.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const SwapTokensModalSC = styled.div` 4 | padding: 20px 8px 10px 8px; 5 | display: flex; 6 | flex-direction: column; 7 | overflow: hidden; 8 | 9 | .list { 10 | overflow-y: auto; 11 | padding-right: 8px; 12 | flex-grow: 1; 13 | } 14 | ` 15 | 16 | export const SwapTokensModalSearch = styled.div` 17 | margin-top: 14px; 18 | margin-bottom: 28px; 19 | display: flex; 20 | padding: 12px 12px 12px 17px; 21 | background: ${({ theme }) => theme.color.main}; 22 | border: 1px solid ${({ theme }) => theme.color.text5}; 23 | border-radius: 6px; 24 | 25 | input { 26 | font-style: normal; 27 | font-weight: normal; 28 | font-size: 14px; 29 | line-height: 16px; 30 | color: ${({ theme }) => theme.color.text4}; 31 | padding: 0; 32 | border: none; 33 | flex-grow: 1; 34 | } 35 | 36 | svg { 37 | color: ${({ theme }) => theme.color.text2}; 38 | margin-left: 12px; 39 | flex-shrink: 0; 40 | } 41 | ` 42 | -------------------------------------------------------------------------------- /src/pages/gd/Swap/common.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export const SwitchSVG = ( 4 | 5 | 6 | 7 | 8 | 9 | ) 10 | -------------------------------------------------------------------------------- /src/pages/routes/redirects.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Redirect, RouteComponentProps } from 'react-router-dom' 3 | 4 | // Redirects Legacy Hash Routes to Browser Routes 5 | export function RedirectHashRoutes({ location }: RouteComponentProps) { 6 | if (!location.hash) { 7 | return 8 | } 9 | return 10 | } 11 | 12 | // Redirects to swap but only replace the pathname 13 | export function RedirectPathToSwapOnly({ location }: RouteComponentProps) { 14 | return 15 | } 16 | -------------------------------------------------------------------------------- /src/serviceWorker.ts: -------------------------------------------------------------------------------- 1 | const isServiceWorkerSupported = 'serviceWorker' in navigator 2 | 3 | function getServiceWorkerUrl(): string { 4 | const url = new URL(document.location.href) 5 | 6 | url.pathname = '/service-worker.js' 7 | url.hash = '' 8 | url.search = '' 9 | return url.toString() 10 | } 11 | 12 | export function registerServiceWorker(): void { 13 | if (!isServiceWorkerSupported) { 14 | return 15 | } 16 | 17 | window.addEventListener('load', () => { 18 | const swUrl = getServiceWorkerUrl() 19 | 20 | navigator.serviceWorker.register(swUrl).catch((error) => { 21 | console.error('serviceWorker', 'Error during service worker registration:', error) 22 | }) 23 | }) 24 | } 25 | 26 | export function unregister() { 27 | if (!isServiceWorkerSupported) { 28 | return 29 | } 30 | 31 | const onError = (error: any) => { 32 | console.error('serviceWorker', 'Error unregistering service worker', error) 33 | } 34 | 35 | navigator.serviceWorker.ready 36 | .then((registration) => { 37 | registration.unregister().catch(onError) 38 | }) 39 | .catch(onError) 40 | } 41 | -------------------------------------------------------------------------------- /src/state/application/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from '@reduxjs/toolkit' 2 | import { ApplicationState, ApplicationModal, PopupContent } from './types' 3 | export { ApplicationModal } from './types' 4 | export const updateBlockNumber = createAction<{ chainId: number; blockNumber: number }>('application/updateBlockNumber') 5 | export const setOpenModal = createAction('application/setOpenModal') 6 | export const addPopup = createAction<{ key?: string; removeAfterMs?: number | null; content: PopupContent }>( 7 | 'application/addPopup' 8 | ) 9 | export const removePopup = createAction<{ key: string }>('application/removePopup') 10 | export const setKashiApprovalPending = createAction('application/setKashiApprovalPending') 11 | export const setTheme = createAction('application/setTheme') 12 | export const setChain = createAction('application/setChain') 13 | -------------------------------------------------------------------------------- /src/state/application/types.ts: -------------------------------------------------------------------------------- 1 | import { TokenList } from '@uniswap/token-lists' 2 | 3 | export type PopupContent = 4 | | { 5 | txn: { 6 | hash: string 7 | success: boolean 8 | summary?: string 9 | } 10 | } 11 | | { 12 | listUpdate: { 13 | listUrl: string 14 | oldList: TokenList 15 | newList: TokenList 16 | auto: boolean 17 | } 18 | } 19 | 20 | export enum ApplicationModal { 21 | WALLET, 22 | SETTINGS, 23 | SELF_CLAIM, 24 | ADDRESS_CLAIM, 25 | CLAIM_POPUP, 26 | MENU, 27 | DELEGATE, 28 | VOTE, 29 | LANGUAGE, 30 | NETWORK, 31 | FAUCET, 32 | } 33 | 34 | export type PopupList = Array<{ key: string; show: boolean; content: PopupContent; removeAfterMs: number | null }> 35 | 36 | export interface ApplicationState { 37 | readonly blockNumber: { readonly [chainId: number]: number } 38 | readonly popupList: PopupList 39 | readonly openModal: ApplicationModal | null 40 | kashiApprovalPending: string 41 | theme: 'light' | 'dark' 42 | selectedChain: number 43 | } 44 | -------------------------------------------------------------------------------- /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/index.ts: -------------------------------------------------------------------------------- 1 | import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit' 2 | import { load, save } from 'redux-localstorage-simple' 3 | import application from './application/reducer' 4 | import { updateVersion } from './global/actions' 5 | import multicall from './multicall/reducer' 6 | import swap from './swap/reducer' 7 | import transactions from './transactions/reducer' 8 | import user from './user/reducer' 9 | 10 | const PERSISTED_KEYS: string[] = ['user', 'transactions'] 11 | 12 | const store = configureStore({ 13 | reducer: { 14 | application, 15 | user, 16 | transactions, 17 | swap, 18 | multicall, 19 | }, 20 | middleware: [...getDefaultMiddleware({ thunk: false, immutableCheck: false }), save({ states: PERSISTED_KEYS })], 21 | preloadedState: load({ states: PERSISTED_KEYS }), 22 | }) 23 | 24 | store.dispatch(updateVersion()) 25 | 26 | export default store 27 | 28 | export type AppState = ReturnType 29 | export type AppDispatch = typeof store.dispatch 30 | -------------------------------------------------------------------------------- /src/state/simpleapp/simpleapp.tsx: -------------------------------------------------------------------------------- 1 | import React, { createContext, FC, ReactNode, useContext, useState } from 'react' 2 | 3 | export interface ISimpleApp { 4 | isSimpleApp: boolean 5 | } 6 | 7 | export const SimpleAppContext = createContext({ isSimpleApp: false }) 8 | 9 | export function useIsSimpleApp() { 10 | const { isSimpleApp } = useContext(SimpleAppContext) 11 | 12 | return isSimpleApp 13 | } 14 | 15 | export const SimpleAppProvider: FC<{ children: ReactNode }> = ({ children }) => { 16 | const [isSimpleApp] = useState(() => { 17 | const params = new URLSearchParams(window.location.search) 18 | 19 | return !!params.get('simpleapp') 20 | }) 21 | 22 | return {children} 23 | } 24 | -------------------------------------------------------------------------------- /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<{ field: Field; currencyId: string }>('swap/selectCurrency') 9 | export const switchCurrencies = createAction('swap/switchCurrencies') 10 | export const typeInput = createAction<{ field: Field; typedValue: string }>('swap/typeInput') 11 | export const replaceSwapState = createAction<{ 12 | field: Field 13 | typedValue: string 14 | inputCurrencyId?: string 15 | outputCurrencyId?: string 16 | recipient: string | null 17 | }>('swap/replaceSwapState') 18 | export const setRecipient = createAction<{ recipient: string | null }>('swap/setRecipient') 19 | -------------------------------------------------------------------------------- /src/state/swap/reducer.test.ts: -------------------------------------------------------------------------------- 1 | import { createStore, Store } from 'redux' 2 | import { Field, selectCurrency } from './actions' 3 | import reducer, { SwapState } from './reducer' 4 | 5 | describe('swap reducer', () => { 6 | let store: Store 7 | 8 | beforeEach(() => { 9 | store = createStore(reducer, { 10 | [Field.OUTPUT]: { currencyId: '' }, 11 | [Field.INPUT]: { currencyId: '' }, 12 | typedValue: '', 13 | independentField: Field.INPUT, 14 | recipient: null, 15 | }) 16 | }) 17 | 18 | describe('selectToken', () => { 19 | it('changes token', () => { 20 | store.dispatch( 21 | selectCurrency({ 22 | field: Field.OUTPUT, 23 | currencyId: '0x0000', 24 | }) 25 | ) 26 | 27 | expect(store.getState()).toEqual({ 28 | [Field.OUTPUT]: { currencyId: '0x0000' }, 29 | [Field.INPUT]: { currencyId: '' }, 30 | typedValue: '', 31 | independentField: Field.INPUT, 32 | recipient: null, 33 | }) 34 | }) 35 | }) 36 | }) 37 | -------------------------------------------------------------------------------- /src/state/user/updater.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react' 2 | import { useDispatch } from 'react-redux' 3 | import { AppDispatch } from '../index' 4 | import { updateMatchesDarkMode } from './actions' 5 | 6 | export default function Updater(): null { 7 | const dispatch = useDispatch() 8 | 9 | // keep dark mode in sync with the system 10 | useEffect(() => { 11 | const darkHandler = (match: MediaQueryListEvent) => { 12 | dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })) 13 | } 14 | 15 | const match = window?.matchMedia('(prefers-color-scheme: dark)') 16 | dispatch(updateMatchesDarkMode({ matchesDarkMode: match.matches })) 17 | 18 | if (match?.addListener) { 19 | match?.addListener(darkHandler) 20 | } else if (match?.addEventListener) { 21 | match?.addEventListener('change', darkHandler) 22 | } 23 | 24 | return () => { 25 | if (match?.removeListener) { 26 | match?.removeListener(darkHandler) 27 | } else if (match?.removeEventListener) { 28 | match?.removeEventListener('change', darkHandler) 29 | } 30 | } 31 | }, [dispatch]) 32 | 33 | return null 34 | } 35 | -------------------------------------------------------------------------------- /src/theme/nbtheme.tsx: -------------------------------------------------------------------------------- 1 | import { theme as baseTheme } from '@gooddollar/good-design' 2 | import { extendTheme } from 'native-base' 3 | 4 | import { navbarTheme as NavBar } from 'components/StyledMenu/Navbar' 5 | import { mpContainerTheme as MainPageContainer } from 'components/Layout/MainPageContainer' 6 | import { menuContainerTheme as MenuContainer } from 'components/Layout/MenuContainer' 7 | 8 | const { components } = baseTheme 9 | 10 | export const nbTheme = extendTheme({ 11 | ...baseTheme, 12 | components: { 13 | ...components, 14 | NavBar, 15 | MainPageContainer, 16 | MenuContainer, 17 | }, 18 | }) 19 | -------------------------------------------------------------------------------- /src/theme/styled.d.ts: -------------------------------------------------------------------------------- 1 | import { theme } from './theme' 2 | import 'styled-components' 3 | 4 | type Theme = ReturnType 5 | 6 | declare module 'styled-components' { 7 | // eslint-disable-next-line @typescript-eslint/no-empty-interface 8 | export interface DefaultTheme extends Theme {} 9 | } 10 | -------------------------------------------------------------------------------- /src/types/LPToken.ts: -------------------------------------------------------------------------------- 1 | import { Token, TokenAmount } from '@sushiswap/sdk' 2 | import { ethers } from 'ethers' 3 | 4 | export default interface LPToken { 5 | id?: number 6 | address: string 7 | tokenA: Token 8 | tokenB: Token 9 | totalSupply: ethers.BigNumber 10 | balance: TokenAmount 11 | name?: string 12 | symbol?: string 13 | decimals?: number 14 | version?: 'v1' | 'v2' 15 | } 16 | -------------------------------------------------------------------------------- /src/types/MetamaskError.ts: -------------------------------------------------------------------------------- 1 | export default interface MetamaskError { 2 | code?: any 3 | message?: string 4 | } 5 | -------------------------------------------------------------------------------- /src/types/WrappedTokenInfo.ts: -------------------------------------------------------------------------------- 1 | import { Token } from '@sushiswap/sdk' 2 | import { Tags, TokenInfo } from '@uniswap/token-lists' 3 | import { isAddressString } from 'utils' 4 | 5 | type TagDetails = Tags[keyof Tags] 6 | 7 | export interface TagInfo extends TagDetails { 8 | id: string 9 | } 10 | 11 | /** 12 | * Token instances created from token info. 13 | */ 14 | export class WrappedTokenInfo extends Token { 15 | constructor(public readonly tokenInfo: TokenInfo, public readonly tags: TagInfo[]) { 16 | super( 17 | tokenInfo.chainId, 18 | isAddressString(tokenInfo.address), 19 | tokenInfo.decimals, 20 | tokenInfo.symbol, 21 | tokenInfo.name 22 | ) 23 | } 24 | 25 | get logoURI(): string | undefined { 26 | return this.tokenInfo.logoURI 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/utils/HttpsProvider.tsx: -------------------------------------------------------------------------------- 1 | import { openLink } from '@gooddollar/web3sdk-v2' 2 | import { noop } from 'lodash' 3 | import { ReactElement, useRef } from 'react' 4 | 5 | export interface IHttpsProviderProps { 6 | enabled: boolean 7 | children: ReactElement 8 | } 9 | 10 | const HTTPS = 'https:' 11 | 12 | function checkSchemeAndRedirect(): boolean { 13 | const url = new URL(document.location.href) 14 | const shouldRedirect = url.protocol !== HTTPS 15 | 16 | if (shouldRedirect) { 17 | url.protocol = HTTPS 18 | // do not await 19 | openLink(url.toString(), '_self').catch(noop) 20 | } 21 | 22 | return shouldRedirect 23 | } 24 | 25 | export function HttpsProvider({ enabled, children }: IHttpsProviderProps): ReactElement | null { 26 | const redirectedRef = useRef(false) 27 | 28 | if (enabled && !redirectedRef.current) { 29 | redirectedRef.current = checkSchemeAndRedirect() 30 | } 31 | 32 | if (redirectedRef.current) { 33 | return null 34 | } 35 | 36 | return children 37 | } 38 | -------------------------------------------------------------------------------- /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/currencyId.ts: -------------------------------------------------------------------------------- 1 | import { Currency, ETHER, Token } from '@sushiswap/sdk' 2 | 3 | export function currencyId(currency: Currency): string { 4 | if (currency === ETHER) return 'ETH' 5 | if (currency instanceof Token) return currency.address 6 | throw new Error('invalid currency') 7 | } 8 | -------------------------------------------------------------------------------- /src/utils/env.ts: -------------------------------------------------------------------------------- 1 | import { osName, osVersion as detectedOSVersion } from 'mobile-device-detect' 2 | 3 | export interface IOSVersionInfo { 4 | osName: string 5 | version: string 6 | major: number 7 | minor: number 8 | patch: number 9 | build: number 10 | } 11 | 12 | export function getNetworkEnv(defaultValue = 'development-celo'): string { 13 | return process.env.REACT_APP_NETWORK || defaultValue 14 | } 15 | 16 | export function getEnv(defaultValue = 'development'): string { 17 | const network = getNetworkEnv('') 18 | 19 | if (!network) { 20 | return defaultValue 21 | } 22 | 23 | if (network === 'fuse' || network === 'development-celo') { 24 | return 'development' 25 | } 26 | 27 | if (network.includes('-celo')) { 28 | const baseNetwork = network.replace('-celo', '') 29 | return baseNetwork 30 | } 31 | 32 | return network 33 | } 34 | 35 | export const osVersionInfo = (() => { 36 | const version = detectedOSVersion 37 | const [major, minor = 0, patch = 0, build = 0] = version.split('.').map(Number) 38 | 39 | return { osName, version, major, minor, patch, build } 40 | })() 41 | 42 | export const osVersion: string = (() => { 43 | const { osName, version } = osVersionInfo 44 | 45 | return `${osName} ${version}` 46 | })() 47 | -------------------------------------------------------------------------------- /src/utils/maxAmountSpend.ts: -------------------------------------------------------------------------------- 1 | import { CurrencyAmount, ETHER, JSBI } from '@sushiswap/sdk' 2 | import { MIN_ETH } from '../constants' 3 | 4 | /** 5 | * Given some token amount, return the max that can be spent of it 6 | * @param currencyAmount to return max of 7 | */ 8 | export function maxAmountSpend(currencyAmount?: CurrencyAmount): CurrencyAmount | undefined { 9 | if (!currencyAmount) return undefined 10 | if (currencyAmount.currency === ETHER) { 11 | if (JSBI.greaterThan(currencyAmount.raw, MIN_ETH)) { 12 | return CurrencyAmount.ether(JSBI.subtract(currencyAmount.raw, MIN_ETH)) 13 | } else { 14 | return CurrencyAmount.ether(JSBI.BigInt(0)) 15 | } 16 | } 17 | return currencyAmount 18 | } 19 | -------------------------------------------------------------------------------- /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 | expect(parseENSAddress('hello-world.eth')).toEqual({ ensName: 'hello-world.eth', ensPath: undefined }) 14 | expect(parseENSAddress('-prefix-dash.eth')).toEqual(undefined) 15 | expect(parseENSAddress('suffix-dash-.eth')).toEqual(undefined) 16 | expect(parseENSAddress('it.eth')).toEqual({ ensName: 'it.eth', ensPath: undefined }) 17 | expect(parseENSAddress('only-single--dash.eth')).toEqual(undefined) 18 | }) 19 | }) 20 | -------------------------------------------------------------------------------- /src/utils/parseENSAddress.ts: -------------------------------------------------------------------------------- 1 | const ENS_NAME_REGEX = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/ 2 | 3 | export function parseENSAddress(ensAddress: string): { ensName: string; ensPath: string | undefined } | undefined { 4 | const match = ENS_NAME_REGEX.exec(ensAddress) 5 | if (!match) return undefined 6 | return { ensName: `${match[1].toLowerCase()}eth`, ensPath: match[4] } 7 | } 8 | -------------------------------------------------------------------------------- /src/utils/screenSizes.ts: -------------------------------------------------------------------------------- 1 | import { Dimensions } from 'react-native' 2 | 3 | export const getScreenHeight = () => Dimensions.get('window').height 4 | export const getScreenWidth = () => Dimensions.get('window').width 5 | -------------------------------------------------------------------------------- /src/utils/trades.ts: -------------------------------------------------------------------------------- 1 | import { Percent, Trade, currencyEquals } from '@sushiswap/sdk' 2 | import { ONE_HUNDRED_PERCENT, ZERO_PERCENT } from './../constants/index' 3 | 4 | // returns whether tradeB is better than tradeA by at least a threshold percentage amount 5 | export function isTradeBetter( 6 | tradeA: Trade | undefined | null, 7 | tradeB: Trade | undefined | null, 8 | minimumDelta: Percent = ZERO_PERCENT 9 | ): boolean | undefined { 10 | if (tradeA && !tradeB) return false 11 | if (tradeB && !tradeA) return true 12 | if (!tradeA || !tradeB) return undefined 13 | 14 | if ( 15 | tradeA.tradeType !== tradeB.tradeType || 16 | !currencyEquals(tradeA.inputAmount.currency, tradeB.inputAmount.currency) || 17 | !currencyEquals(tradeB.outputAmount.currency, tradeB.outputAmount.currency) 18 | ) { 19 | throw new Error('Trades are not comparable') 20 | } 21 | 22 | if (minimumDelta.equalTo(ZERO_PERCENT)) { 23 | return tradeA.executionPrice.lessThan(tradeB.executionPrice) 24 | } else { 25 | return tradeA.executionPrice.raw.multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)).lessThan(tradeB.executionPrice) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/utils/uriToHttp.test.ts: -------------------------------------------------------------------------------- 1 | import uriToHttp from './uriToHttp' 2 | 3 | describe('uriToHttp', () => { 4 | it('returns .eth.link for ens names', () => { 5 | expect(uriToHttp('t2crtokens.eth')).toEqual([]) 6 | }) 7 | it('returns https first for http', () => { 8 | expect(uriToHttp('http://test.com')).toEqual(['https://test.com', 'http://test.com']) 9 | }) 10 | it('returns https for https', () => { 11 | expect(uriToHttp('https://test.com')).toEqual(['https://test.com']) 12 | }) 13 | it('returns ipfs gateways for ipfs:// urls', () => { 14 | expect(uriToHttp('ipfs://QmV8AfDE8GFSGQvt3vck8EwAzsPuNTmtP8VcQJE3qxRPaZ')).toEqual([ 15 | 'https://cloudflare-ipfs.com/ipfs/QmV8AfDE8GFSGQvt3vck8EwAzsPuNTmtP8VcQJE3qxRPaZ/', 16 | 'https://ipfs.io/ipfs/QmV8AfDE8GFSGQvt3vck8EwAzsPuNTmtP8VcQJE3qxRPaZ/', 17 | ]) 18 | }) 19 | it('returns ipns gateways for ipns:// urls', () => { 20 | expect(uriToHttp('ipns://app.uniswap.org')).toEqual([ 21 | 'https://cloudflare-ipfs.com/ipns/app.uniswap.org/', 22 | 'https://ipfs.io/ipns/app.uniswap.org/', 23 | ]) 24 | }) 25 | it('returns empty array for invalid scheme', () => { 26 | expect(uriToHttp('blah:test')).toEqual([]) 27 | }) 28 | }) 29 | -------------------------------------------------------------------------------- /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 | case 'ipfs': { 13 | const hash = /^ipfs:(\/\/)?(.*)$/i.exec(uri)?.[2] 14 | return [`https://cloudflare-ipfs.com/ipfs/${hash}/`, `https://ipfs.io/ipfs/${hash}/`] 15 | } 16 | case 'ipns': { 17 | const name = /^ipns:(\/\/)?(.*)$/i.exec(uri)?.[2] 18 | return [`https://cloudflare-ipfs.com/ipns/${name}/`, `https://ipfs.io/ipns/${name}/`] 19 | } 20 | default: 21 | return [] 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/utils/wrappedCurrency.ts: -------------------------------------------------------------------------------- 1 | import { ChainId, Currency, CurrencyAmount, ETHER, Token, TokenAmount, WETH } from '@sushiswap/sdk' 2 | 3 | export function wrappedCurrency(currency: Currency | undefined, chainId: ChainId | undefined): Token | undefined { 4 | return chainId && currency === ETHER ? WETH[chainId] : currency instanceof Token ? currency : undefined 5 | } 6 | 7 | export function wrappedCurrencyAmount( 8 | currencyAmount: CurrencyAmount | undefined, 9 | chainId: ChainId | undefined 10 | ): TokenAmount | undefined { 11 | const token = currencyAmount && chainId ? wrappedCurrency(currencyAmount.currency, chainId) : undefined 12 | return token && currencyAmount ? new TokenAmount(token, currencyAmount.raw) : undefined 13 | } 14 | 15 | export function unwrappedToken(token: Token): Currency { 16 | if (token.equals(WETH[token.chainId])) return ETHER 17 | return token 18 | } 19 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "types": ["vite/client", "jest"], 6 | "allowJs": false, 7 | "skipLibCheck": true, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "noFallthroughCasesInSwitch": true, 13 | "module": "ESNext", 14 | "moduleResolution": "node", 15 | "resolveJsonModule": true, 16 | "isolatedModules": true, 17 | "noImplicitAny": false, 18 | "skipDefaultLibCheck": true, 19 | "noEmit": true, 20 | "jsx": "react-jsx", 21 | "baseUrl": "./src", 22 | "typeRoots": ["./node_modules/@types", "./types", "./node_modules/@react-spring/types", "./src"] 23 | }, 24 | "include": ["src"], 25 | "exclude": ["node_modules"] 26 | } 27 | --------------------------------------------------------------------------------