From f7a84451598621268ba62455db2e6a90c7f84ea6 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 08:45:53 +0100 Subject: [PATCH 01/30] align design --- .eslintignore | 2 + .eslintrc.cjs | 58 + .eslintrc.js | 26 - .gitignore | 31 +- .prettierignore | 3 + .prettierrc | 2 +- .storybook/decorators.jsx | 11 - .storybook/main.js | 69 - .storybook/main.ts | 28 + .storybook/preview-head.html | 14 +- .storybook/preview.js | 67 - .storybook/preview.ts | 92 + config-overrides.js | 21 - index.html | 92 +- package-lock.json | 46585 ++++------------ package.json | 183 +- public/index.html | 43 - public/logo192.png | Bin 48221 -> 140369 bytes public/manifest.json | 59 +- src/App.tsx | 39 +- .../AnimatedButton/AnimatedButton.stories.tsx | 83 +- .../AnimatedButton/AnimatedButton.tsx | 27 +- src/components/AnimatedButton/style.ts | 218 +- .../AnimatedNumber/AnimatedNumber.stories.tsx | 92 + .../AnimatedNumber/AnimatedNumber.tsx | 21 + src/components/AnimatedNumber/index.js | 3 - .../BondHeader/BondHeader.stories.tsx | 13 +- .../Bonds/BondList/BondHeader/BondHeader.tsx | 36 +- .../Bonds/BondList/BondHeader/style.ts | 52 +- .../BondList/BondItem/BondItem.stories.tsx | 67 +- .../Bonds/BondList/BondItem/BondItem.tsx | 194 +- .../Bonds/BondList/BondItem/style.ts | 176 +- .../Bonds/BondList/BondList.stories.tsx | 79 +- src/components/Bonds/BondList/BondList.tsx | 50 +- src/components/Bonds/BondList/style.ts | 42 +- .../HeaderList/HeaderList.stories.tsx | 13 +- .../Bonds/UserList/HeaderList/HeaderList.tsx | 34 +- .../Bonds/UserList/HeaderList/style.ts | 52 +- .../PositionsItem/PositionsItem.stories.tsx | 67 +- .../UserList/PositionsItem/PositionsItem.tsx | 196 +- .../Bonds/UserList/PositionsItem/style.ts | 156 +- .../PositionsList/PositionsList.stories.tsx | 79 +- .../UserList/PositionsList/PositionsList.tsx | 40 +- .../Bonds/UserList/PositionsList/style.ts | 28 +- .../EmptyPlaceholder.stories.tsx | 40 +- .../EmptyPlaceholder/EmptyPlaceholder.tsx | 49 +- src/components/EmptyPlaceholder/style.ts | 60 + src/components/EmptyPlaceholder/styles.ts | 25 - src/components/FarmsList/FarmList.stories.tsx | 149 +- src/components/FarmsList/FarmList.tsx | 224 +- .../FarmsList/FarmTile/FarmTile.stories.tsx | 106 +- .../FarmsList/FarmTile/FarmTile.tsx | 372 +- src/components/FarmsList/FarmTile/style.ts | 454 +- .../RewardsTile/RewardsTile.stories.tsx | 137 +- .../FarmsList/RewardsTile/RewardsTile.tsx | 322 +- .../FarmsList/RewardsTile/styles.ts | 276 +- .../SelectedFarmList.stories.tsx | 225 +- .../SelectedFarmList/SelectedFarmList.tsx | 452 +- .../FarmsList/SelectedFarmList/style.ts | 254 +- .../FarmsList/StakeTile/StakeTile.stories.tsx | 51 +- .../FarmsList/StakeTile/StakeTile.tsx | 310 +- src/components/FarmsList/StakeTile/styles.ts | 118 +- src/components/FarmsList/style.ts | 58 +- src/components/Footer/Footer.stories.tsx | 22 +- src/components/Footer/Footer.tsx | 91 +- src/components/Footer/style.ts | 84 +- src/components/Header/Header.stories.tsx | 132 +- src/components/Header/Header.tsx | 358 +- .../ChangeWalletButton.stories.tsx | 41 + .../HeaderButton/ChangeWalletButton.tsx | 34 +- .../HeaderButton/FaucetButton.stories.tsx | 30 + .../Header/HeaderButton/FaucetButton.tsx | 28 + .../SelectChainButton.stories.tsx | 27 + .../Header/HeaderButton/SelectChainButton.tsx | 61 + .../SelectNetworkButton.stories.tsx | 55 + .../HeaderButton/SelectNetworkButton.tsx | 13 +- .../HeaderButton/SelectPriorityButton.tsx | 8 +- .../HeaderButton/SelectRPCButton.stories.tsx | 30 + .../Header/HeaderButton/SelectRPCButton.tsx | 82 + src/components/Header/HeaderButton/style.ts | 108 + src/components/Header/style.ts | 209 +- .../HeaderButton/HeaderButton.stories.tsx | 99 - .../HeaderButton/SelectRPCButton.tsx | 67 - src/components/HeaderButton/style.ts | 100 - src/components/Ido/Ido.stories.tsx | 232 +- src/components/Ido/Ido.tsx | 182 +- .../Ido/IdoLabel/IdoLabel.stories.tsx | 21 + src/components/Ido/IdoLabel/IdoLabel.tsx | 70 + src/components/Ido/IdoLabel/style.ts | 97 + src/components/Ido/style.ts | 270 +- src/components/IdoLabel/IdoLabel.stories.tsx | 20 - src/components/IdoLabel/IdoLabel.tsx | 70 - src/components/IdoLabel/style.ts | 97 - .../DepositAmountInput.stories.tsx | 138 +- .../DepositAmountInput/DepositAmountInput.tsx | 160 +- .../Inputs/DepositAmountInput/style.ts | 81 +- .../ExchangeAmountInput.stories.tsx | 127 +- .../ExchangeAmountInput.tsx | 236 +- .../Inputs/ExchangeAmountInput/style.ts | 58 +- .../Inputs/RangeInput/RangeInput.stories.tsx | 131 +- .../Inputs/RangeInput/RangeInput.tsx | 73 +- src/components/Inputs/RangeInput/style.ts | 51 +- .../SearchInput/SearchInput.stories.tsx | 31 +- .../Inputs/SearchInput/SearchInput.tsx | 70 +- src/components/Inputs/SearchInput/style.tsx | 60 +- .../Inputs/Select/Select.stories.tsx | 101 +- src/components/Inputs/Select/Select.tsx | 44 +- src/components/Inputs/Select/style.ts | 75 +- .../SimpleInput/SimpleInput.stories.tsx | 56 +- .../Inputs/SimpleInput/SimpleInput.tsx | 19 +- src/components/Inputs/SimpleInput/style.ts | 10 +- .../Inputs/SortSelect/SortSelect.stories.tsx | 185 +- .../Inputs/SortSelect/SortSelect.tsx | 136 +- src/components/Inputs/SortSelect/style.tsx | 62 +- .../AddTokenModal/AddTokenModal.stories.tsx | 23 +- .../Modals/AddTokenModal/AddTokenModal.tsx | 13 +- src/components/Modals/AddTokenModal/style.ts | 150 +- .../BuyBondModal/BuyBondModal.stories.tsx | 39 - .../Modals/BuyBondModal/BuyBondModal.tsx | 629 +- src/components/Modals/BuyBondModal/styles.ts | 266 +- .../ClosePositionWarning.stories.tsx | 24 +- .../ClosePositionWarning.tsx | 4 +- .../Modals/ClosePositionWarning/styles.ts | 22 +- src/components/Modals/ConfirmModal/style.ts | 112 +- .../ConnectWallet/ConnectWallet.stories.tsx | 30 +- .../Modals/ConnectWallet/ConnectWallet.tsx | 24 +- src/components/Modals/ConnectWallet/style.ts | 140 +- src/components/Modals/Priority/Priority.tsx | 8 +- src/components/Modals/Priority/style.ts | 192 +- .../RoutesModal/RoutesModal.stories.tsx | 68 +- .../Modals/RoutesModal/RoutesModal.tsx | 47 +- src/components/Modals/RoutesModal/style.ts | 91 +- .../SelectChain/SelectChain.stories.tsx | 38 + .../Modals/SelectChain/SelectChain.tsx | 68 + src/components/Modals/SelectChain/style.ts | 84 + .../SelectDevnetRPC/SelectDevnetRPC.tsx | 175 + .../Modals/SelectDevnetRPC/styles.ts | 178 + .../SelectMainnetRPC.stories.ts | 29 + .../SelectMainnetRPC.stories.tsx | 38 - .../SelectMainnetRPC/SelectMainnetRPC.tsx | 122 +- .../Modals/SelectMainnetRPC/styles.ts | 274 +- .../Modals/SelectModals/CustomScrollbar.tsx | 31 - .../SelectTokenModal/CustomScrollbar.tsx | 32 + .../SelectTokenModal.stories.tsx | 64 +- .../SelectTokenModal/SelectTokenModal.tsx | 246 +- .../SelectModals/SelectTokenModal/style.ts | 415 + .../SortFarmsModal/SortFarmModal.stories.tsx | 173 +- .../SortFarmsModal/SortFarmModal.tsx | 134 +- src/components/Modals/SelectModals/style.ts | 689 +- .../SelectNetwork/SelectNetwork.stories.tsx | 55 +- .../Modals/SelectNetwork/SelectNetwork.tsx | 50 +- src/components/Modals/SelectNetwork/style.ts | 136 +- .../SelectTestnetRPC.stories.tsx | 41 + .../SelectTestnetRPC/SelectTestnetRPC.tsx | 175 + .../Modals/SelectTestnetRPC/styles.ts | 178 + .../Modals/Slippage/Slippage.stories.tsx | 57 +- src/components/Modals/Slippage/Slippage.tsx | 176 +- src/components/Modals/Slippage/style.ts | 202 +- src/components/Navbar/Navbar.stories.tsx | 16 - .../Navbar/NavbarButton.stories.tsx | 16 + .../Navbar/{Button.tsx => NavbarButton.tsx} | 12 +- src/components/Navbar/style.ts | 61 +- .../ConcentrationSlider.stories.tsx | 51 +- .../ConcentrationSlider.tsx | 48 +- .../NewPosition/ConcentrationSlider/style.ts | 117 +- .../ConcentrationTypeSwitch.stories.tsx | 53 +- .../ConcentrationTypeSwitch.tsx | 29 +- .../ConcentrationTypeSwitch/style.ts | 68 +- .../DepositSelector.stories.tsx | 164 +- .../DepositSelector/DepositSelector.tsx | 280 +- .../NewPosition/DepositSelector/style.ts | 156 +- .../FeeSwitch/FeeSwitch.stories.tsx | 80 +- .../NewPosition/FeeSwitch/FeeSwitch.tsx | 13 +- src/components/NewPosition/FeeSwitch/style.ts | 165 +- .../MarketIdLabel/MarketIdLabel.stories.tsx | 35 +- .../MarketIdLabel/MarketIdLabel.tsx | 15 +- .../NewPosition/MarketIdLabel/style.ts | 44 +- .../NewPosition/NewPosition.stories.tsx | 364 +- src/components/NewPosition/NewPosition.tsx | 450 +- .../NewPosition/PoolInit/PoolInit.stories.tsx | 88 +- .../NewPosition/PoolInit/PoolInit.tsx | 366 +- src/components/NewPosition/PoolInit/style.ts | 213 +- .../RangeSelector/RangeSelector.stories.tsx | 199 +- .../RangeSelector/RangeSelector.tsx | 362 +- .../NewPosition/RangeSelector/style.ts | 420 +- src/components/NewPosition/style.ts | 223 +- .../NoConnected/NoConnected.stories.tsx | 43 +- src/components/NoConnected/NoConnected.tsx | 38 +- src/components/NoConnected/style.ts | 42 +- .../OutlinedButton/OutlinedButton.stories.tsx | 65 +- .../OutlinedButton/OutlinedButton.tsx | 14 +- src/components/OutlinedButton/style.ts | 11 +- .../Pagination/Pagination.stories.tsx | 25 +- src/components/Pagination/Pagination.tsx | 19 +- src/components/Pagination/style.tsx | 20 +- .../PlotTypeSwitch/PlotTypeSwitch.stories.tsx | 16 - .../PlotTypeSwitch/PlotTypeSwitch.tsx | 46 - src/components/PlotTypeSwitch/style.ts | 50 - .../LiquidationRangeInfo.stories.tsx | 39 +- .../LiquidationRangeInfo.tsx | 9 +- .../LiquidationRangeInfo/style.ts | 19 +- .../PositionDetails.stories.tsx | 140 +- .../PositionDetails/PositionDetails.tsx | 240 +- .../SinglePositionInfo/BoxInfo.tsx | 147 +- .../SinglePositionInfo.stories.tsx | 105 +- .../SinglePositionInfo/SinglePositionInfo.tsx | 154 +- .../SinglePositionInfo/style.ts | 167 +- .../SinglePositionPlot.stories.tsx | 131 +- .../SinglePositionPlot/SinglePositionPlot.tsx | 103 +- .../SinglePositionPlot/style.ts | 20 +- src/components/PositionDetails/style.ts | 77 +- .../PositionItem/PositionItem.stories.tsx | 55 +- .../PositionItem/PositionItem.tsx | 224 +- .../PositionItem/{style.ts => style.tsx} | 59 +- .../PositionsList/PositionsList.stories.tsx | 94 +- .../PositionsList/PositionsList.tsx | 94 +- src/components/PositionsList/style.ts | 60 +- src/components/PriceRangePlot/Brush/Brush.tsx | 50 +- src/components/PriceRangePlot/Brush/style.ts | 4 +- .../PriceRangePlot/PriceRangePlot.stories.tsx | 122 - .../PriceRangePlot/PriceRangePlot.tsx | 59 +- src/components/PriceRangePlot/style.ts | 14 +- .../Refresher/Refresher.stories.tsx | 19 + src/components/Refresher/Refresher.tsx | 41 +- src/components/Refresher/style.ts | 14 +- .../RpcErrorModal/RpcErrorModal.stories.tsx | 31 + .../RpcErrorModal/RpcErrorModal.tsx | 17 +- src/components/RpcErrorModal/style.ts | 15 +- .../CustomSnackbar/CustomSnackbar.stories.tsx | 52 + .../CustomSnackbar/CustomSnackbar.tsx | 122 + .../Snackbar/CustomSnackbar/style.ts | 146 + .../LoadingSnackbar.stories.tsx | 20 - .../LoadingSnackbar/LoadingSnackbar.tsx | 70 - .../Snackbar/LoadingSnackbar/style.ts | 105 - src/components/Snackbar/Snackbar.tsx | 47 - src/components/Snackbar/index.tsx | 56 + src/components/Snackbar/style.ts | 122 - src/components/Stats/Liquidity/Liquidity.tsx | 47 +- .../Liquidity/Stats.liguidity.stories.tsx | 78 +- src/components/Stats/Liquidity/style.ts | 8 +- .../Stats/PoolList/PoolList.stories.tsx | 31 - src/components/Stats/PoolList/PoolList.tsx | 50 +- .../Stats/PoolList/Stats.PoolList.stories.tsx | 92 + src/components/Stats/PoolList/style.ts | 9 +- .../PoolListItem/PoolListItem.stories.tsx | 28 - .../Stats/PoolListItem/PoolListItem.tsx | 158 +- .../Stats.PoolListItem.stories.tsx | 51 + src/components/Stats/PoolListItem/style.ts | 86 +- .../Stats.TokenListItem.stories.tsx | 46 + .../TokenListItem/TokenListItem.stories.tsx | 22 - .../Stats/TokenListItem/TokenListItem.tsx | 129 +- src/components/Stats/TokenListItem/style.ts | 46 +- .../TokensList/Stats.TokenList.stories.tsx | 108 + .../Stats/TokensList/TokensList.stories.tsx | 35 - .../Stats/TokensList/TokensList.tsx | 34 +- src/components/Stats/TokensList/style.ts | 4 +- .../Stats/Volume/Stats.Volume.stories.tsx | 64 + .../Stats/Volume/Stats.volume24.stories.tsx | 26 - src/components/Stats/Volume/Volume.tsx | 48 +- src/components/Stats/Volume/style.ts | 7 +- .../{volumeBar.tsx => VolumeBar.tsx} | 42 +- .../volumeBar/stats.VolumeBar.stories.tsx | 41 + src/components/Stats/volumeBar/style.ts | 6 +- .../Stats/volumeBar/volumeStar.stories.tsx | 16 - .../ExchangeRate/ExchangeRate.stories.tsx | 34 + .../Swap/ExchangeRate/ExchangeRate.tsx | 27 +- src/components/Swap/ExchangeRate/style.ts | 22 +- src/components/Swap/Swap.stories.tsx | 233 +- src/components/Swap/Swap.tsx | 544 +- .../SingleToken/SingleToken.stories.tsx | 55 + .../TokensInfo/SingleToken/SingleToken.tsx | 117 + .../Swap/TokensInfo/TokensInfo.stories.tsx | 56 + src/components/Swap/TokensInfo/TokensInfo.tsx | 52 + src/components/Swap/TokensInfo/styles.ts | 125 + .../TransactionDetailsBox.stories.tsx | 56 +- .../TransactionDetailsBox.tsx | 39 +- .../Swap/TransactionDetailsBox/styles.ts | 10 +- src/components/Swap/style.ts | 245 +- src/components/TooltipHover/TooltipHover.tsx | 23 + .../TooltipTransition/TooltipTransition.tsx | 30 + src/components/TooltipHover/style.ts | 19 + .../TransactionPriorityButton.tsx | 6 +- .../TransactionPriorityButton/style.ts | 6 +- src/containers/EventsHandlers/bonds.tsx | 288 +- src/containers/EventsHandlers/index.tsx | 7 +- src/containers/EventsHandlers/market.ts | 32 +- src/containers/EventsHandlers/solanaWallet.ts | 12 +- src/containers/EventsHandlers/staker.ts | 256 +- src/containers/FarmsWrapper/FarmsWrapper.tsx | 156 +- src/containers/FooterWrapper/index.tsx | 8 + .../HeaderWrapper/HeaderWrapper.tsx | 156 +- .../NewPositionWrapper/NewPositionWrapper.tsx | 266 +- src/containers/Notifier/Notifier.tsx | 102 +- src/containers/Notifier/style.ts | 115 +- .../PerformanceWarning/PerformanceWarning.tsx | 12 +- src/containers/PerformanceWarning/styles.ts | 40 +- .../SingleFarmWrapper/SingleFarmWrapper.tsx | 806 +- .../SinglePositionWrapper.tsx | 178 +- src/containers/SinglePositionWrapper/style.ts | 36 +- src/containers/WrappedBonds/WrappedBonds.tsx | 544 +- src/containers/WrappedBonds/styles.ts | 54 +- .../WrappedPositionsList.tsx | 217 +- src/containers/WrappedStats/WrappedStats.tsx | 72 +- src/containers/WrappedStats/styles.ts | 5 +- src/containers/WrappedSwap/WrappedSwap.tsx | 136 +- src/expanded-theme.ts | 51 - src/hideErrors.ts | 42 + src/index.css | 61 +- src/{index.tsx => main.tsx} | 13 +- src/pages/BondsPage/BondsPage.tsx | 26 +- src/pages/BondsPage/styles.ts | 42 +- src/pages/FarmsPage/FarmsPage.tsx | 26 +- src/pages/FarmsPage/style.ts | 42 +- src/pages/ListPage/ListPage.tsx | 9 +- src/pages/ListPage/styles.ts | 38 +- src/pages/NewPositionPage/NewPositionPage.tsx | 40 +- src/pages/NewPositionPage/styles.ts | 39 +- src/pages/PagesRouter.tsx | 99 - src/pages/RootPage.tsx | 63 + src/pages/RouterPages.tsx | 20 + src/pages/SingleFarmPage/SingleFarmPage.tsx | 32 +- src/pages/SingleFarmPage/style.ts | 37 +- .../SinglePositionPage/SinglePositionPage.tsx | 18 +- src/pages/SinglePositionPage/styles.ts | 35 +- src/pages/StatsPage/StatsPage.tsx | 10 +- src/pages/StatsPage/styles.ts | 19 +- src/pages/SwapPage/SwapPage.tsx | 12 +- src/pages/SwapPage/styles.ts | 21 +- src/pages/style.ts | 14 + src/setupTests.ts | 5 - src/static/icons.ts | 69 +- src/static/icons/ana.svg | 19 - src/static/icons/usdc.svg | 349 - src/static/icons/wsol.svg | 374 - src/static/icons/xusd.svg | 325 - src/static/links.ts | 4 +- src/static/png/coming-soon.png | Bin 0 -> 21444 bytes src/static/png/invariant-logo.png | Bin 48221 -> 140369 bytes src/static/svg/MathWallet.svg | 44 - src/static/svg/SolanaCreator/Cat1.svg | 11 + src/static/svg/SolanaCreator/Cat2.svg | 11 + src/static/svg/SolanaCreator/Dog1.svg | 10 + src/static/svg/SolanaCreator/Dog2.svg | 10 + src/static/svg/SolanaCreator/Logo2svg.svg | 11 + src/static/svg/{Warrning.svg => Warning.svg} | 2 +- src/static/svg/alephiumLogo.svg | 2 +- src/static/svg/bitcoin.svg | 27 - src/static/svg/btc-ic.svg | 29 - src/static/svg/circle-discord.svg | 5 + src/static/svg/circle-telegram.svg | 4 + src/static/svg/clover.svg | 79 - src/static/svg/coin98.svg | 105 - src/static/svg/copy-address.svg | 3 + src/static/svg/devNet.svg | 19 - src/static/svg/devnet.svg | 2 +- src/static/svg/disconnect.svg | 4 + src/static/svg/dogecoin.svg | 27 - src/static/svg/eclipse.svg | 4 + src/static/svg/empty.svg | 16 +- src/static/svg/ethcoin.svg | 27 - src/static/svg/exodus.svg | 33 - src/static/svg/fttcoin.svg | 30 - src/static/svg/horizontalSwapArrows.svg | 5 + src/static/svg/horizontal_green_white.svg | 12 - src/static/svg/logo-ic-footer.svg | 3 - src/static/svg/logo-ic-nav.svg | 3 - src/static/svg/mainNet.svg | 22 - src/static/svg/mainnet.svg | 2 +- src/static/svg/newTab.svg | 6 + src/static/svg/phantom.svg | 93 - src/static/svg/plus.svg | 4 + src/static/svg/selectToken.svg | 9 + src/static/svg/slope.svg | 95 - src/static/svg/sny-ic.svg | 35 - src/static/svg/sny.svg | 4 - src/static/svg/snycoin.svg | 27 - src/static/svg/solana.svg | 1 - src/static/svg/solcoin.svg | 29 - src/static/svg/solflare.svg | 159 - src/static/svg/sollet.svg | 81 - src/static/svg/successIcon.svg | 4 + src/static/svg/synthetifyError.svg | 9 - src/static/svg/testNet.svg | 21 - src/static/svg/testnet.svg | 2 +- src/static/svg/twitter-circle.svg | 54 - src/static/svg/twitter-ic-footer.svg | 3 - src/static/svg/twitterCircle.svg | 20 - src/static/svg/unknownToken.svg | 119 + src/static/svg/wallet.svg | 3 + src/static/svg/xCircle.svg | 4 + src/static/svg/xusd-coin.svg | 27 - src/static/{theme.ts => theme/index.ts} | 37 +- src/static/theme/types.ts | 19 + src/store/consts/static.ts | 198 +- src/store/consts/types.ts | 288 + src/store/consts/uiUtils.ts | 72 - src/store/index.ts | 88 +- src/store/middleware.ts | 7 - src/store/reducers/bonds.ts | 2 +- src/store/reducers/farms.ts | 2 +- src/store/reducers/index.ts | 22 +- src/store/reducers/pools.ts | 10 +- src/store/reducers/positions.ts | 21 +- src/store/reducers/snackbars.ts | 22 +- src/store/reducers/solanaConnection.ts | 30 +- src/store/reducers/solanaWallet.ts | 55 +- src/store/reducers/stats.ts | 2 +- src/store/reducers/swap.ts | 2 +- src/store/reducers/types.ts | 9 - src/store/sagas/bonds.ts | 44 +- src/store/sagas/connection.ts | 30 +- src/store/sagas/farms.ts | 35 +- src/store/sagas/index.ts | 2 +- src/store/sagas/pool.ts | 10 +- src/store/sagas/positions.ts | 72 +- src/store/sagas/stats.ts | 10 +- src/store/sagas/swap.ts | 51 +- src/store/sagas/token.ts | 1 - src/store/sagas/wallet.ts | 110 +- src/store/selectors/farms.ts | 2 +- src/store/selectors/pools.ts | 15 +- src/store/selectors/positions.ts | 30 +- src/store/selectors/snackbars.ts | 2 +- src/store/selectors/solanaConnection.ts | 2 +- src/store/selectors/solanaWallet.ts | 18 +- src/store/selectors/stats.ts | 2 +- src/utils/uiUtils.ts | 37 + src/{store/consts => utils}/utils.ts | 424 +- src/{ => utils}/web3/adapters/standard.ts | 4 +- src/{ => utils}/web3/adapters/types.ts | 0 src/{ => utils}/web3/connection.ts | 22 +- src/{ => utils}/web3/data.ts | 0 src/{ => utils}/web3/programs/amm.ts | 7 +- src/{ => utils}/web3/programs/bonds.ts | 6 +- src/{ => utils}/web3/programs/staker.ts | 6 +- src/{ => utils}/web3/selector.ts | 17 +- src/{ => utils}/web3/wallet.ts | 0 src/vite-env.d.ts | 1 + tsconfig.json | 49 +- tsconfig.node.json | 11 + tsconfig.paths.json | 16 - vite.config.ts | 45 +- vitest.config.ts | 14 + 443 files changed, 31502 insertions(+), 51182 deletions(-) create mode 100644 .eslintrc.cjs delete mode 100644 .eslintrc.js create mode 100644 .prettierignore delete mode 100644 .storybook/main.js create mode 100644 .storybook/main.ts delete mode 100644 .storybook/preview.js create mode 100644 .storybook/preview.ts delete mode 100644 config-overrides.js delete mode 100644 public/index.html create mode 100644 src/components/AnimatedNumber/AnimatedNumber.stories.tsx create mode 100644 src/components/AnimatedNumber/AnimatedNumber.tsx delete mode 100644 src/components/AnimatedNumber/index.js create mode 100644 src/components/EmptyPlaceholder/style.ts delete mode 100644 src/components/EmptyPlaceholder/styles.ts create mode 100644 src/components/Header/HeaderButton/ChangeWalletButton.stories.tsx rename src/components/{ => Header}/HeaderButton/ChangeWalletButton.tsx (72%) create mode 100644 src/components/Header/HeaderButton/FaucetButton.stories.tsx create mode 100644 src/components/Header/HeaderButton/FaucetButton.tsx create mode 100644 src/components/Header/HeaderButton/SelectChainButton.stories.tsx create mode 100644 src/components/Header/HeaderButton/SelectChainButton.tsx create mode 100644 src/components/Header/HeaderButton/SelectNetworkButton.stories.tsx rename src/components/{ => Header}/HeaderButton/SelectNetworkButton.tsx (78%) rename src/components/{ => Header}/HeaderButton/SelectPriorityButton.tsx (84%) create mode 100644 src/components/Header/HeaderButton/SelectRPCButton.stories.tsx create mode 100644 src/components/Header/HeaderButton/SelectRPCButton.tsx create mode 100644 src/components/Header/HeaderButton/style.ts delete mode 100644 src/components/HeaderButton/HeaderButton.stories.tsx delete mode 100644 src/components/HeaderButton/SelectRPCButton.tsx delete mode 100644 src/components/HeaderButton/style.ts create mode 100644 src/components/Ido/IdoLabel/IdoLabel.stories.tsx create mode 100644 src/components/Ido/IdoLabel/IdoLabel.tsx create mode 100644 src/components/Ido/IdoLabel/style.ts delete mode 100644 src/components/IdoLabel/IdoLabel.stories.tsx delete mode 100644 src/components/IdoLabel/IdoLabel.tsx delete mode 100644 src/components/IdoLabel/style.ts delete mode 100644 src/components/Modals/BuyBondModal/BuyBondModal.stories.tsx create mode 100644 src/components/Modals/SelectChain/SelectChain.stories.tsx create mode 100644 src/components/Modals/SelectChain/SelectChain.tsx create mode 100644 src/components/Modals/SelectChain/style.ts create mode 100644 src/components/Modals/SelectDevnetRPC/SelectDevnetRPC.tsx create mode 100644 src/components/Modals/SelectDevnetRPC/styles.ts create mode 100644 src/components/Modals/SelectMainnetRPC/SelectMainnetRPC.stories.ts delete mode 100644 src/components/Modals/SelectMainnetRPC/SelectMainnetRPC.stories.tsx delete mode 100644 src/components/Modals/SelectModals/CustomScrollbar.tsx create mode 100644 src/components/Modals/SelectModals/SelectTokenModal/CustomScrollbar.tsx create mode 100644 src/components/Modals/SelectModals/SelectTokenModal/style.ts create mode 100644 src/components/Modals/SelectTestnetRPC/SelectTestnetRPC.stories.tsx create mode 100644 src/components/Modals/SelectTestnetRPC/SelectTestnetRPC.tsx create mode 100644 src/components/Modals/SelectTestnetRPC/styles.ts delete mode 100644 src/components/Navbar/Navbar.stories.tsx create mode 100644 src/components/Navbar/NavbarButton.stories.tsx rename src/components/Navbar/{Button.tsx => NavbarButton.tsx} (78%) delete mode 100644 src/components/PlotTypeSwitch/PlotTypeSwitch.stories.tsx delete mode 100644 src/components/PlotTypeSwitch/PlotTypeSwitch.tsx delete mode 100644 src/components/PlotTypeSwitch/style.ts rename src/components/PositionsList/PositionItem/{style.ts => style.tsx} (79%) delete mode 100644 src/components/PriceRangePlot/PriceRangePlot.stories.tsx create mode 100644 src/components/Refresher/Refresher.stories.tsx create mode 100644 src/components/RpcErrorModal/RpcErrorModal.stories.tsx create mode 100644 src/components/Snackbar/CustomSnackbar/CustomSnackbar.stories.tsx create mode 100644 src/components/Snackbar/CustomSnackbar/CustomSnackbar.tsx create mode 100644 src/components/Snackbar/CustomSnackbar/style.ts delete mode 100644 src/components/Snackbar/LoadingSnackbar/LoadingSnackbar.stories.tsx delete mode 100644 src/components/Snackbar/LoadingSnackbar/LoadingSnackbar.tsx delete mode 100644 src/components/Snackbar/LoadingSnackbar/style.ts delete mode 100644 src/components/Snackbar/Snackbar.tsx create mode 100644 src/components/Snackbar/index.tsx delete mode 100644 src/components/Snackbar/style.ts delete mode 100644 src/components/Stats/PoolList/PoolList.stories.tsx create mode 100644 src/components/Stats/PoolList/Stats.PoolList.stories.tsx delete mode 100644 src/components/Stats/PoolListItem/PoolListItem.stories.tsx create mode 100644 src/components/Stats/PoolListItem/Stats.PoolListItem.stories.tsx create mode 100644 src/components/Stats/TokenListItem/Stats.TokenListItem.stories.tsx delete mode 100644 src/components/Stats/TokenListItem/TokenListItem.stories.tsx create mode 100644 src/components/Stats/TokensList/Stats.TokenList.stories.tsx delete mode 100644 src/components/Stats/TokensList/TokensList.stories.tsx create mode 100644 src/components/Stats/Volume/Stats.Volume.stories.tsx delete mode 100644 src/components/Stats/Volume/Stats.volume24.stories.tsx rename src/components/Stats/volumeBar/{volumeBar.tsx => VolumeBar.tsx} (69%) create mode 100644 src/components/Stats/volumeBar/stats.VolumeBar.stories.tsx delete mode 100644 src/components/Stats/volumeBar/volumeStar.stories.tsx create mode 100644 src/components/Swap/ExchangeRate/ExchangeRate.stories.tsx create mode 100644 src/components/Swap/TokensInfo/SingleToken/SingleToken.stories.tsx create mode 100644 src/components/Swap/TokensInfo/SingleToken/SingleToken.tsx create mode 100644 src/components/Swap/TokensInfo/TokensInfo.stories.tsx create mode 100644 src/components/Swap/TokensInfo/TokensInfo.tsx create mode 100644 src/components/Swap/TokensInfo/styles.ts create mode 100644 src/components/TooltipHover/TooltipHover.tsx create mode 100644 src/components/TooltipHover/TooltipTransition/TooltipTransition.tsx create mode 100644 src/components/TooltipHover/style.ts create mode 100644 src/containers/FooterWrapper/index.tsx delete mode 100644 src/expanded-theme.ts create mode 100644 src/hideErrors.ts rename src/{index.tsx => main.tsx} (66%) delete mode 100644 src/pages/PagesRouter.tsx create mode 100644 src/pages/RootPage.tsx create mode 100644 src/pages/RouterPages.tsx create mode 100644 src/pages/style.ts delete mode 100644 src/setupTests.ts delete mode 100644 src/static/icons/ana.svg delete mode 100644 src/static/icons/usdc.svg delete mode 100644 src/static/icons/wsol.svg delete mode 100644 src/static/icons/xusd.svg create mode 100644 src/static/png/coming-soon.png delete mode 100644 src/static/svg/MathWallet.svg create mode 100644 src/static/svg/SolanaCreator/Cat1.svg create mode 100644 src/static/svg/SolanaCreator/Cat2.svg create mode 100644 src/static/svg/SolanaCreator/Dog1.svg create mode 100644 src/static/svg/SolanaCreator/Dog2.svg create mode 100644 src/static/svg/SolanaCreator/Logo2svg.svg rename src/static/svg/{Warrning.svg => Warning.svg} (97%) delete mode 100644 src/static/svg/bitcoin.svg delete mode 100644 src/static/svg/btc-ic.svg create mode 100644 src/static/svg/circle-discord.svg create mode 100644 src/static/svg/circle-telegram.svg delete mode 100644 src/static/svg/clover.svg delete mode 100644 src/static/svg/coin98.svg create mode 100644 src/static/svg/copy-address.svg delete mode 100644 src/static/svg/devNet.svg create mode 100644 src/static/svg/disconnect.svg delete mode 100644 src/static/svg/dogecoin.svg create mode 100644 src/static/svg/eclipse.svg delete mode 100644 src/static/svg/ethcoin.svg delete mode 100644 src/static/svg/exodus.svg delete mode 100644 src/static/svg/fttcoin.svg create mode 100644 src/static/svg/horizontalSwapArrows.svg delete mode 100644 src/static/svg/horizontal_green_white.svg delete mode 100644 src/static/svg/logo-ic-footer.svg delete mode 100644 src/static/svg/logo-ic-nav.svg delete mode 100644 src/static/svg/mainNet.svg create mode 100644 src/static/svg/newTab.svg delete mode 100644 src/static/svg/phantom.svg create mode 100644 src/static/svg/plus.svg create mode 100644 src/static/svg/selectToken.svg delete mode 100644 src/static/svg/slope.svg delete mode 100644 src/static/svg/sny-ic.svg delete mode 100644 src/static/svg/sny.svg delete mode 100644 src/static/svg/snycoin.svg delete mode 100644 src/static/svg/solana.svg delete mode 100644 src/static/svg/solcoin.svg delete mode 100644 src/static/svg/solflare.svg delete mode 100644 src/static/svg/sollet.svg create mode 100644 src/static/svg/successIcon.svg delete mode 100644 src/static/svg/synthetifyError.svg delete mode 100644 src/static/svg/testNet.svg delete mode 100644 src/static/svg/twitter-circle.svg delete mode 100644 src/static/svg/twitter-ic-footer.svg delete mode 100644 src/static/svg/twitterCircle.svg create mode 100644 src/static/svg/unknownToken.svg create mode 100644 src/static/svg/wallet.svg create mode 100644 src/static/svg/xCircle.svg delete mode 100644 src/static/svg/xusd-coin.svg rename src/static/{theme.ts => theme/index.ts} (83%) create mode 100644 src/static/theme/types.ts create mode 100644 src/store/consts/types.ts delete mode 100644 src/store/consts/uiUtils.ts delete mode 100644 src/store/middleware.ts delete mode 100644 src/store/reducers/types.ts create mode 100644 src/utils/uiUtils.ts rename src/{store/consts => utils}/utils.ts (71%) rename src/{ => utils}/web3/adapters/standard.ts (90%) rename src/{ => utils}/web3/adapters/types.ts (100%) rename src/{ => utils}/web3/connection.ts (81%) rename src/{ => utils}/web3/data.ts (100%) rename src/{ => utils}/web3/programs/amm.ts (90%) rename src/{ => utils}/web3/programs/bonds.ts (89%) rename src/{ => utils}/web3/programs/staker.ts (89%) rename src/{ => utils}/web3/selector.ts (58%) rename src/{ => utils}/web3/wallet.ts (100%) create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.node.json delete mode 100644 tsconfig.paths.json create mode 100644 vitest.config.ts diff --git a/.eslintignore b/.eslintignore index 1c52538a8..2f9788d7f 100644 --- a/.eslintignore +++ b/.eslintignore @@ -6,3 +6,5 @@ dist vite.config.ts .eslintrc.js storybook-static +vitest.config.ts +node_modules diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 000000000..20f01098e --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,58 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + 'plugin:storybook/recommended' + ], + ignorePatterns: [ + 'dist', + '.eslintrc.cjs', + 'node_modules', + 'node_modules/@invariant-labs/sdk-eclipse/**' + ], + parserOptions: { + project: './tsconfig.json' + }, + parser: '@typescript-eslint/parser', + plugins: ['react-refresh', 'react-hooks'], + rules: { + 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }], + indent: 'off', + '@typescript-eslint/indent': 'off', + 'multiline-ternary': 'off', + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/prefer-reduce-type-parameter': 'off', + '@typescript-eslint/strict-boolean-expressions': 'off', + '@typescript-eslint/space-before-function-paren': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/member-delimiter-style': 'off', + '@typescript-eslint/no-explicit-any': 'off', + 'generator-star-spacing': ['error', { before: false, after: true }], + 'yield-star-spacing': ['error', { before: false, after: true }], + 'react-hooks/exhaustive-deps': 'off', + 'react-hooks/rules-of-hooks': 'error', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + varsIgnorePattern: '^_', + argsIgnorePattern: '^_' + } + ], + 'no-extra-semi': 'off', + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }] + }, + overrides: [ + { + files: ['**/*.stories.tsx'], + rules: { + '@typescript-eslint/no-unused-vars': 'off', + 'import/no-unresolved': 'off' + } + } + ] +} diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 1b00bbefa..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = { - extends: ['standard-with-typescript'], - parserOptions: { - project: './tsconfig.json' - }, - parser: '@typescript-eslint/parser', - plugins: ['react-hooks'], - rules: { - indent: 'off', - '@typescript-eslint/indent': 'off', - 'multiline-ternary': 'off', - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars-experimental': 'error', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/prefer-reduce-type-parameter': 'off', - '@typescript-eslint/strict-boolean-expressions': 'off', - '@typescript-eslint/space-before-function-paren': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/member-delimiter-style': 'off', - 'generator-star-spacing': ['error', { before: false, after: true }], - 'yield-star-spacing': ['error', { before: false, after: true }], - 'react-hooks/exhaustive-deps': 'off', - 'react-hooks/rules-of-hooks': 'error' - } -} diff --git a/.gitignore b/.gitignore index 167b3b605..31bfab61e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,27 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local -# dependencies -/node_modules -/.pnp -.pnp.js +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? # testing /coverage @@ -23,4 +41,5 @@ npm-debug.log* yarn-debug.log* -yarn-error.log* \ No newline at end of file +yarn-error.log* +*storybook.log \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..1b07c39e9 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +# Ignore artifacts: +build +coverage \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index b25dd11d0..40f1fb478 100644 --- a/.prettierrc +++ b/.prettierrc @@ -8,7 +8,7 @@ "useTabs": false, "singleQuote": true, "jsxSingleQuote": true, - "spaceBeforeFunctionParen": true, + "spaceBeforeFunctionParent": true, "printWidth": 100, "bracketSameLine": true } diff --git a/.storybook/decorators.jsx b/.storybook/decorators.jsx index eea2094df..ba553cdb8 100644 --- a/.storybook/decorators.jsx +++ b/.storybook/decorators.jsx @@ -1,15 +1,4 @@ import React from 'react' -import { StylesProvider } from '@material-ui/styles' import { Provider } from 'react-redux' -import { ThemeProvider } from '@storybook/theming' -import { theme } from '../src/static/theme' - -export const withMaterialStyles = storyFn => ( - {storyFn()} -) export const withStore = store => storyFn => {storyFn()} -export default { - withStore, - withMaterialStyles -} diff --git a/.storybook/main.js b/.storybook/main.js deleted file mode 100644 index 264825700..000000000 --- a/.storybook/main.js +++ /dev/null @@ -1,69 +0,0 @@ -const path = require('path') -const NodePolyfillPlugin = require('node-polyfill-webpack-plugin') - -const resolve = item => { - return path.join(__dirname, '../', item) -} -module.exports = { - stories: ['../src/**/*.stories.tsx'], - addons: [ - // '@storybook/preset-create-react-app', - '@storybook/addon-actions/register', - // '@storybook/addon-knobs/register', - '@storybook/addon-viewport/register', - '@storybook/addon-storysource' - ], - core: { - builder: 'storybook-builder-vite' - }, - viteFinal(config, { configType }) { - // customize the Vite config here - Object.assign(config.resolve.alias, { - '@sb': resolve('.storybook'), - '@static': resolve('src/static'), - '@components': resolve('src/components'), - '@containers': resolve('src/containers'), - '@pages': resolve('src/pages'), - '@web3': resolve('src/web3'), - '@reducers': resolve('src/store/reducers'), - '@selectors': resolve('src/store/selectors'), - '@sagas': resolve('src/store/sagas'), - '@consts': resolve('src/store/consts'), - '@store': resolve('src/store') - }) - config.define = { 'process.env.NODE_DEBUG': 'false' } - // return the customized config - return config - } - // core: { - // builder: 'webpack5' - // }, - // webpackFinal: config => { - // // config.node = { - // // fs: 'empty', - // // tls: 'empty', - // // net: 'empty', - // // module: 'empty', - // // console: true - // // } - - // config.resolve.fallback.crypto = false - // Object.assign(config.resolve.alias, { - // '@sb': resolve('.storybook'), - // '@static': resolve('src/static'), - // '@components': resolve('src/components'), - // '@containers': resolve('src/containers'), - // '@pages': resolve('src/pages'), - // '@web3': resolve('src/web3'), - // '@reducers': resolve('src/store/reducers'), - // '@selectors': resolve('src/store/selectors'), - // '@sagas': resolve('src/store/sagas'), - // '@consts': resolve('src/store/consts') - // }) - // Object.assign(config.resolve.fallback, { - // fs: false - // }) - // config.plugins.push(new NodePolyfillPlugin()) - // return config - // } -} diff --git a/.storybook/main.ts b/.storybook/main.ts new file mode 100644 index 000000000..c2748de24 --- /dev/null +++ b/.storybook/main.ts @@ -0,0 +1,28 @@ +import type { StorybookConfig } from '@storybook/react-vite' + +const config: StorybookConfig = { + stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + + addons: [ + '@storybook/addon-onboarding', + '@storybook/addon-links', + '@storybook/addon-essentials', + '@chromatic-com/storybook', + '@storybook/addon-interactions', + '@storybook/addon-viewport', + '@storybook/react-vite', + '@storybook/addon-themes', + 'storybook-addon-remix-react-router', + '@storybook/addon-actions' + ], + typescript: { + reactDocgen: 'react-docgen-typescript' + }, + framework: { + name: '@storybook/react-vite', + options: {} + }, + + docs: {} +} +export default config diff --git a/.storybook/preview-head.html b/.storybook/preview-head.html index a11060da4..2a2430b44 100644 --- a/.storybook/preview-head.html +++ b/.storybook/preview-head.html @@ -1,12 +1,12 @@ \ No newline at end of file + diff --git a/.storybook/preview.js b/.storybook/preview.js deleted file mode 100644 index 54424c06e..000000000 --- a/.storybook/preview.js +++ /dev/null @@ -1,67 +0,0 @@ -import React from 'react' - -import { addDecorator, addParameters } from '@storybook/react' -import { muiTheme } from 'storybook-addon-material-ui' -import { themes } from '@storybook/theming' -import { theme } from '../src/static/theme' -import { StylesProvider } from '@material-ui/core' -import { MemoryRouter } from 'react-router' -import { withMaterialStyles } from './decorators' -import { MINIMAL_VIEWPORTS } from '@storybook/addon-viewport' -addDecorator(muiTheme([theme])) -addDecorator(withMaterialStyles) -// addDecorator(story => {story()}) -addParameters({ - backgrounds: [ - { name: 'dark', value: '#202020', default: true }, - { name: 'light', value: '#FFFFFF' } - ], - options: { theme: themes.dark } -}) - -const customViewports = { - sx375: { - name: 'xs-375', - styles: { - width: '375px', - height: '375px' - } - }, - sm450: { - name: 'sm-450', - styles: { - width: '450px', - height: '450px' - } - }, - md600: { - name: 'md-600', - styles: { - width: '600px', - height: '600px' - } - }, - lg960: { - name: 'lg-960', - styles: { - width: '960px', - height: '960px' - } - }, - xl1280: { - name: 'xl-1280', - styles: { - width: '1280px', - height: '1280px' - } - } -} - -export const parameters = { - viewport: { - viewports: { - ...MINIMAL_VIEWPORTS, - ...customViewports - } - } -} diff --git a/.storybook/preview.ts b/.storybook/preview.ts new file mode 100644 index 000000000..2116d0268 --- /dev/null +++ b/.storybook/preview.ts @@ -0,0 +1,92 @@ +import type { Preview } from '@storybook/react' +import { withRouter } from 'storybook-addon-remix-react-router' +import { ThemeProvider, CssBaseline } from '@mui/material' +import { withThemeFromJSXProvider } from '@storybook/addon-themes' +import { theme } from '../src/static/theme' + +const customViewports = { + sx375: { + name: 'xs-375', + styles: { + width: '375px', + height: '375px' + } + }, + sm450: { + name: 'sm-450', + styles: { + width: '450px', + height: '450px' + } + }, + md600: { + name: 'md-600', + styles: { + width: '600px', + height: '600px' + } + }, + lg960: { + name: 'lg-960', + styles: { + width: '960px', + height: '960px' + } + }, + xl1280: { + name: 'xl-1280', + styles: { + width: '1280px', + height: '1280px' + } + } +} + +const preview: Preview = { + parameters: { + themes: { + themeOverride: 'dark' + }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i + } + }, + viewport: { + viewports: { + ...customViewports + } + }, + layout: 'centered', + backgrounds: { + default: 'dark', + values: [ + { + name: 'dark', + value: '#202020' + }, + { + name: 'light', + value: '#FFFFFF' + } + ] + }, + createBrowserRouter: { withRouter } + }, + + decorators: [ + withThemeFromJSXProvider({ + themes: { + dark: theme + }, + defaultTheme: 'dark', + Provider: ThemeProvider, + GlobalStyles: CssBaseline + }) + ] +} + +export default preview + +export const parameters = {} diff --git a/config-overrides.js b/config-overrides.js deleted file mode 100644 index e3c45a0a0..000000000 --- a/config-overrides.js +++ /dev/null @@ -1,21 +0,0 @@ -const tsconfigPaths = require('./tsconfig.paths.json')['compilerOptions']['paths'] -const rewireReactHotLoader = require('react-app-rewire-hot-loader') -const path = require('path') - -const alias = {} -const resolve = dir => path.resolve(__dirname, dir) -const removeSlashStar = arg => arg.split('/*')[0] - -Object.entries(tsconfigPaths).forEach(([key, [value]]) => { - const name = removeSlashStar(key) - const path = removeSlashStar(value) - - alias[name] = resolve(path) -}) - -module.exports = function (config, env) { - config = rewireReactHotLoader(config, env) - config.resolve.alias = Object.assign(config.resolve.alias, alias) - - return config -} diff --git a/index.html b/index.html index 013636212..9a0c8c6bb 100644 --- a/index.html +++ b/index.html @@ -1,63 +1,109 @@ - + + + + - - - - + + + - Invariant - AMM DEX provided concentrated liquidity - + + Invariant: Best AMM DEX with Concentrated Liquidity on Solana | High Efficiency DeFi + + + content="Discover Invariant, the top AMM DEX on Solana offering the highest capital efficiency with concentrated liquidity. Maximize your DeFi investments with advanced risk management tools." /> + content="AMM DEX, concentrated liquidity, Solana, DeFi exchange, crypto trading, capital efficiency, risk management, decentralized finance, Solana DeFi, liquidity pools, yield farming, blockchain" /> + + - + - + + content="Join Invariant, the top AMM DEX on Solana, and access cutting-edge DeFi solutions with concentrated liquidity for maximum capital efficiency and risk management." /> - + + content="Discover Invariant, Solana's most efficient AMM DEX. Concentrated liquidity ensures top-tier capital efficiency for all DeFi traders." /> - + + content="Invariant offers top-tier capital efficiency and risk management on Solana, making it the most advanced AMM DEX for DeFi investors." /> - - + + + + + + + + + + + + + + + - - - - - - diff --git a/src/static/icons/wsol.svg b/src/static/icons/wsol.svg deleted file mode 100644 index f327732c1..000000000 --- a/src/static/icons/wsol.svg +++ /dev/null @@ -1,374 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/icons/xusd.svg b/src/static/icons/xusd.svg deleted file mode 100644 index ca64623f1..000000000 --- a/src/static/icons/xusd.svg +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/links.ts b/src/static/links.ts index 98613761c..fb9a00b17 100644 --- a/src/static/links.ts +++ b/src/static/links.ts @@ -1,8 +1,8 @@ export const social = { - twitter: 'https://twitter.com/invariant_labs', + x: 'https://twitter.com/invariant_labs', github: 'https://github.com/invariant-labs', discord: 'https://discord.gg/w6hTeWTJvG', - telegram: 'https://t.me/+-C9-e6L08AY4YWI0', + telegram: 'https://t.me/Invariant_app', medium: 'https://medium.com/@invariant_labs', docs: 'https://docs.invariant.app' } diff --git a/src/static/png/coming-soon.png b/src/static/png/coming-soon.png new file mode 100644 index 0000000000000000000000000000000000000000..a36b3cc7d92a538f0c1ed0341a9899a29c417c0a GIT binary patch literal 21444 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 literal 0 HcmV?d00001 diff --git a/src/static/png/invariant-logo.png b/src/static/png/invariant-logo.png index 0bdafb146778cc3a3f9e452cb4d78f2a0c382169..a0196bafee0cf9d2f847bd2e8f017ddb3ac0e9d4 100644 GIT binary patch literal 140369 zcmeFY=Qmv8`#vg>L?WV#MDI0-h~A?Ugapx}L~qgC5G1-8HHb2TMDN{uKu z;_#;|P@5?HAZ+$TE#k?2Gq!K5oD1F?7Sn@9YfJN&chHihmk(SD)IGe}8KQ4>1NqH3 z+zqZU()CED@xW|X%nds~b}N?^j9eY>z%9CtW{S>Tf0DP8vwKYy$#(yLum7#U|5o6C zEAYP+`2S4>!tVS96ZR07;bl8u`hRb=uG=+o-F0&_d{c7MLU{)Z_%nBdvA&rkgyHo) zz40ojng8q$LIZDT1xY;4s1~j+PE+c^rI=@i3 z*LjT{_YdINp+~dW{cd%8v^o)A)wXZ-30Q@FWN|cMyR62Pp}b zW^v3mHtYif)x>aM3}OTzd<`_s$cUhbAI=nz&3VA)HtK2dA4PKQcJS4q?L z+}zmQ$Eq51(4LdTKB_RxZFSZ(4=fA%DSx2Rv z$#@bCH-;tmqQ`~B-CJ@(EA=hwgo@uT>e`&^O2~qn1DiX0Z(FS?=9{H84&)SnsI_N-z%F+sc3TMX*mS8|w?S<(~MB&;s zJv;iypk~71%#~2n7Z3reAJs^_0Z4RKZ{d@Xd4Q|DPYwEjE$kWU73CdesFvI{#i8fT zmFG2DgjAUlK~IK12@joum+(G8%iN3H2brNxm96qxt9-T#Yp(VCPBi}ZSFClm29xGr zLMQr-9xoX$noP`H>%jxQ1_q|D))Vgd#e2+z`)59ns9ul?*4OQGJ}>m zhn9|5aHnt$@pZOM_9L+J`H~kZzoEUwei_u=1%tt&LmHNeMTh*{Y}rH|WJ~Mr$|r~~ zxVkh+>_+~Uujocn_LZB9Bn5W_0t;z>8y)4zMtn3H#IxJ`F{~48xf#ZlBT3LTkG$f>3=pLBZoy6T ztgRhOs-DkgqFIhX$2CADsKP-EdI|f{M}vH<(;uuy?#v|@>kieE9cYtlvdjE=>G8u5 zMUBCET3b^eo`!_hD~CJ^NoZoHlfEfm>aR)c#BbGv60m5KFaOw5V8!{mWjMz3p)zIo zhpRMe!gl8cTZwf(g`wp7p9-2cpHg8rqihim-^M?Sv+rS=(@mb!^*835P*K5KTSzNa z20WXFoMJ{0I;l@EF=ohj>5InjZDAkMo!Xi-n zp4Bt|=V!L={x2t21j9O>hCZy4d9aLv&k6NGx0?qmAt8sq5t&^}7q?%bHbu398^w=z z!#~9O)GRMqd<^CbKuE`jsOsA`D8#66E6AdnYdNLTq75R8&2wDIgCk2_sc1%&<0qn4 zHF8&kX1*OR*n5o2x11IUYN%0}RY1aTes5;+CeFDFis$d*?4(tNHS^EnTPqSYS6K5N zQG2ogK)8>v;L$cHi)!%ezO4W_WN!m*>5;mm+0@}=?FxL#4jexVmLr(msJ%n%7JI3? zo8;%*Ig|0|4WB!^yNznzrSeQ{!O;kS-EO?E{iyT2TKwXOV>oSZSl~M~W3*AEoM9{k zSo?BcjP>QAnDuhF_qP))R(uO|N14)-7Ib5MeyoVk2~XI4eFsbOJGB|HdCjW2DFpx#1dx|mx!M~o_DBUW{$nRHU2{Div?P)|pt zDCYNW#c683F=dr1%t~^DJp98sBpaNczJy%bj(UID+#Ns@QzhBsn?1RYK>tJF?mqd~+SsNQVVeyk{>RGaVx3)d6GzW16GPDJMbFyAUET8B zl%?ty$s6ZeCFNT88(5>BT~n)#pUGeoaUxC}vv0tCAE=DNSTrygDHi)rNfiX$KvL3@ zPotNJctM*R&6jsypHW$*)9X=CzL(#2INIxJ$jNuIY0X=dLy)+R#bw@(tbUw~8^J7m zV!L3Z4r=$DwE0_f%oC0*xjr7hx(v<3$&1$C64}&fPtYG$l;kWoL4W zE3b?e$;-I2UpDbEZ_)NnYU!Dpfg^s+HdmrkYBMD{b|5Ff*rB<4p|UL*)gp&8$pe?^ zN|0Zt4C{!X`!t2BNUfTi1hQI~wRuqdt|2)}M%e*+0wyF4Ao4F=Gcl z<+5~zifQ`6{6o?siY|D4Upz~O;@Diw!SwVk;!N1%aM(edDva$!e=O49LKyhs>f6aK z3`IE0K=sIkS6rq#YuwmSjIz2jhUB`s3;(%M9HJ^1_wfJ%k&1WSbyXG$X8V$ey+0Y> z!G@;}z^6R*jxq(-`VZBkVo}^0tY8zc`63INTe;+4d+x7~Mi~Y~o&(lV;pm*3KKDdL z2<;D_@2|_Ays+I+n-yD>u-MC|2u&$jKAsGy6LxjpVN=HzgG|138!@ueXSR^2C%j9d zq6z~QYtV}21OBw6*1S4fzBJ+euAvt^YNJyeL*wrhpLfnKkgqDw@sr`stn5nanzI3- zLh)joY1Zo`G*lmEVy|X#kR~gZb>wRxZGEsg3c{~A-)0%Tm&U%Mpk6;CpNvi6@##%!SL-IO&k(lDEY39O8# z^wm(xud>-4u6oN5O04mlH&#j5K!id-9Dwp;MQ*TGx9|I{uQ*Ki)59U$@yQPm$FI_zMiP zDPpAVD7ztj{wtBkW#%Nt-Zwk#fXfnXwAT8-yFJLW^}Zel283Ya(})mry~2flmK;xR z5n?}kiPk;%#T{`vkLTH9tM({aGdwrNL{%~d*6zPmCK6}$@;Ufc*{uJh*l*|$?74ns z2R`a~?j6vCnksyWNA27CnjER**G*YIze;z(=EnjgKJZm0U1O@@7ef7t$+`z98}3J* zW0Bi{WCh3MglDuSD7p&FjpbmFSFTs%=AuYbOycXe@7v&zdOYl|#08*>7RJL!Q+jL9Ejd!y#fCA3G;R366TjOt|xt*tBWLNi&Lv;5`_myE{4C z+$767(iwjSV2d`_1#UQ}s_TiUR?~$}O{pifZ0+YNsq=F1{+PK!H;+{vfLQ9#2sNUs znE=T059R0RbG>~0?hCX@(B9}dp`8QDI^myq8f%Z63NBa6HM!24iko116dZRZNzyai z?#bWMNv5A8@Ns4{&>H_R;df{H0;UsnhO)l=nAuFycM8o}?&SE_xql4P^v#|gC4v!l zEsHqsCHZ>M#q-p-4Jnwapmco}!8RAD$O?5znTmaErrM(v{Wsp;562dDJQB22JjdZ@ zRs^LiPsB?rR}|ve9gTeI8ZPk)PJVw6%)6+OzuQu`bsPA2FjZwVh$orfrZoby)0s5|! z`i4w1ChY{h606y+WgHaKew*TyI-~svtjSrX{5UF{DHRiHm*;d=YUv#)8K+e~USblO znU7zYM}3ip9%s8wW2heb>>K}TlsmO}G|=x;kn#g4UTt1xkBtwK$p($BHx$dT?C zQFA_4TX~#cuhtfqhoepdn5dZYCm=M|Moh z&Xfr87_}Cy<%Y|}l}s&Y7V&=R7B<;z&hF`l!=kJYiGDi>FhbZlWHqkfW?AH>w?@GM z>&v11PrErB_TtYwIyvqrhiY7HSQDxg@qzJ|7pDrEO!J>$^it2xO^FPFxz%Es?g z{4j=Rjiy~~`McT8Ewb=eH4jmM^@_|=TA%0)W>rxIJZi%!C=QIV1X4avN=c%Ro;N%- znAq^!nLXOawI-*rd;xH%yCTB{!%(NoO)NPWTazvkEwjlu$_c-?)59rt%KO`E{h@ft z&M-wJ#j|w!)VG4KW@-CPr-O~PUpZlq8$6|Xy^Oi=y`hv6c^}?rkym^MZ>lJkMzTMZ zk)slrv_IGDIz0W;7db3(kkIz!oopYQ<51*y2Psjb$zbjY^zkTp#t`anA4hPCOq#DO zpBraP_9L!mn+Hw%(%V^6qNWvHYxK5sduOfSB_dG$qOv652_H zZrLNVHJFyyeon&5e@2okx;{U4y5I_Nya!LI1TRsK)Y(c$!l8gqK{w8J3NtW3Ji7N|`<~qCgcGRN!w9g7X`iniYxwl+^ zpID7r%V3p;)9l-w*AkMHwae}wJP((3-wfx8!%T-%DVLtk+RmJ6I6(RewA+y=%z5!sft89seVJHVzQfuq}3Gxf;>$lYH4Lh(u@#VG0K z))w$7vTHwN&HMFY;TL)ykLuV1Bi4e#_j#6+9wpcK+>Z6N!-Z#dy2)(w+LbgqBQn;6 zhv#3OTk*r~Z#?ji{pB=&j3fGbxn}71Cpj}`56ae?HOpf!6KY!!EoiH>)|LvKkgETJ zZ_h_M`+BawNo49LZFG!$91KDyvX?WC8JTiIi~Vxkg-ck=h3d6QD;XCn)w&RTo>WOl zp?N_P^Ikq^AGfpN!U#P@6V-58=>7a`K3p>~2aGR)32y|dooy^#F?R(`emt9t4Feya z`miFK5dENaOz4_O_<`Wj?V8YH#{WT2cd`zHfB4Dz)${6Dv1Rb$_EBMz+C*(hqejjd zPAHuwXqu|8SK_19Etu9kj(A_mmx0P`vl8QirZUwq_i6r)P7t-vY88Nn6hn`kaUZdK z9sKiIvLw=cS|U(xzOC8ja~Hc)AF7m&fsQ=3#C>_YqNg!HCz*T&WLk93G*S@3Oo*CF$htnuB0*)4#m@H&+}L z*Y4KGvvnp)T@s>xiR!VEzMFdUVUy{ZewUIRmry9Ya8{!cURZ;sALbd_{@#ZB7Ht?u zMipm)&H5E2OWoYnX%Wj-9z@{)H^aH`=4+8AEae}e^p;-IE~~|Yk9wwtxREQsY8Jn5 z%_TvQ)txFj=_z5IR;#xgavBW%_<0R!0I>A@HaU6kjkr@>)~X%~IkKe<*Dl0~=a49IldL z^<8Fq@DFRHrsd`oPXd%E>^S#y?| z{9EY2x^jR?Im`F@K(t+~<66p#D>pN7XItJ%t!)PUNV=KGBFXZr#Q`X3=K&1x?w+B0 zZBujePr8(DXs!`in@3*ev-bfX0Hoe!En+sMP2O%HjID7&5xY$aMHEnz!PC!Qtbi9f z&kAS;g3&6IdiBeH3d{+&nmUHh{~0o}mX-Hiq?nZIx01umn;`vLW7L`_Y0H66@3TmQ9>pQ<&qv+zRBFifwBH=>J#7LowtaqKsdRO-#>TQ;eQj3LyG<@E^+gpQG3F4?quFV0?<$-J7T-bi&2orl!mzTIt1_#}vaX zN@Ex$?#BkWZabZJK&Sf+6ihezvo~z{DQacTGp_Z%>VALIq##+yuFI*XAB5;dpZw-P zShN>o-NYUuh<-6?fVFX*8uSCD?BhJELr9ESkbXJ1`#OX020YxDI_p^$GJwsr52b@3 zP77X(#$G4N95%{Fj&a}0G8Vk!yU^md&=4r_Dy{ipc}KvWU`_>|xTC)-59|VbaCBvM zlYFY-PRMWnoc`s|VY>Q+sNTtCjZV<*xzd!^&--w6wBzk3n- z%|e5*_q~|5yNPtOMc>x5V=i>kiS^}>F>v5$!HOWlaSq|@`P5LjytpnhyAFvAQ%#5I zY`y(a;9vc=VJ1ZOA{NsfarC0z(_HNog-L5Bi4G@K^0 zO-}9=;O6L`pvzodK`h`&ajLXIs_&>Bo!)t2>em54R>l^C`c=LsG3eo*x8>M(7V%5W zPs#TRYPe?NGf-iz-NXywSW1&EeROijGvWPbu6Vyw zSv*l5gERW;N9q?>CRCv*oGxEu{2GEqU|VLs4UZZ*=dmua4(1b$tDk5R1gn07?Qa%m z$AW%k2niZ8rdZ6_77`!C8?2cVGhzh&%NMAARR63H@mXmlO8H$Rw0qdp2fQQr=tFC{ z(wT)n7XVpgPN}eOhe3&M#nPH}O1|29^L5kk1KO@x;zN>>>g-(R+7*7J`k^Urieqdp*VS3CAWS&AbSh6`mYH8#|7)fQ;bmCT zkdJ|^yIr53{|PRVC`Rnh3g-_@brEIY=6rCtNfz`P&YA{Gym5A;iZCJUX=uTT5h(?4 z|L>-4|EFn0ou?Iub1{%cnIa812B;3rJ=GpBdStu(Nv_5=zxHX+SWfYHL3zTH&o6Q? z8XYyd(%6Bjf-@w(krTlfw7bFa5P>0y1vz;|UqLUvzD8G;P}em*d9%6N zzY{#>Hf{-H^Fe7CiDH6w1wj&A7>@)(tUPxvkxg|jk{wyqM3t<@6l2^r3<-#e4*J8> z#%#IR6Z4&7S+J`lLruc^zhC62O62_g&ZPqI8zkmNtdf`e?v^ePkVe_1}4v$Pl*oKPK7f_u1OF{Wd**zXTLVxF_-N)gYh18%>rKSy)ZH|R+5zDMR%Ze^nBDoQnz z*Md)@lU6}4$3Tgbku;Ee&$0dd=}=6SJ@VRQM~yrPgXFaF9$6a{{j~dDRiIwjFzBdO zSB9>7@H!}@a&t6NVV??iD}3Xd`{fz0l+94k?~hW2KI5Pl#S)+6B#=f zn&W%@!FAr}^-Dc7Z0+LqH>a6Kx>PJ6(B$H5E*Tk6c1d2WHzFBtK59t_Z7x4*80@B- z40^N+qYu|9e1lqNQs?3baV&VoQYqS@`4(8Gvgavk`EI*^keULK#dx0D`NdKlLQ&0s z|JWPDM>hMw-^fneMObex=U0lkP_rgBCv5gdl{=GlN~G?TJ3)V}^12tQ?kV zH^Rt{+@=p9?!~jvS^ZZmRnDAc zCS^WDs$)7)xUbm)W$p0#8(}@Xi)>h`YLec*e9H3dit?Q;&VlWWFXlg=K|4YI!oeY_ z1^DsNeEdHq+Kj12BQN9!`%@|qm`*vQKov#MWq_DQ;}=#+XlgLa4f)(J8^!WYSA#ZG zyQLc;0CqCWD&$TP+J8Uz^Z(65S{`XH$FT-1DV$Gt;sRGMyT0KL2EgPWpC-?cN*2J5)JA6!X}R_6cjy*h$X5wghlcs!Y5^oGSOR zI)qZUh3~N=eH%p0x1(^apeg3i|F~Zs=WOa{&Q-jNk6`SbYNwSeBy86Q{Fzf8qv^(h z5WO3(9QLVk*_`naC8=v!n&lLg&!nniJqFx_IC~4!RTlG)zV8x!W49a4eJ{5e(4;EJ z6w^lz;VE3buaajg zeZ%qE6?c34DcuU^V0Y!Zd%rQDU_ETXk-_?D%2!tMQZ@8 zLepi!y6625a~ZWZ4LPAB>eKWSD(ok>G2X?TE_~VPn1?!%M4%q82%)^vGGW-^1R^7HGhOvgr@qIK4~p1)q!cBESFm2i8E`i9dr2Lm{cL@Z46 z)5aG*taJ1Sf1ZziX@=mH$MghzFgh)@bF3}sXqEV`*%ijUP;)tmWxiwGz}!+SF&f3< zzSX7P2oYa?&}hjyF*?EN4|Kv4TfNK0951wl4?BW*D5%5PC;WGd0L1)iZk)Rfapdhn zR+iv7%Q4gLwz9DEWleZR6^82n(QW@|$yMu`>&;hyGK`RPv;3C=R?FEQfc6}$-q^>Q+u=WxOev;P zc=O>GgyXyrJp9q7)DR=_xk|J&i{^~e|2V6utvtP0hCh{ua2r1hGeblDZMbS;0HH#| zJenDOFX2yUeTGis+|ERo%3i#w78#2>eZ|O5tC8U+^^q(oGdzU_*SCF&v|&k{@lSBAB}ymP>+(|Rz1r_b>`QmGYX3ZpB8RSh;b^C8=uR75VkX87V%im`iaSay9{HoV3U4lGdyVNpGw>=cq8a z8>XPVhWspmrvm%#09g28+r8lxom!@dS?-fjt%aXwBK-sxy*Zy1#c$rxeLuE0lQA9& z3jQ;gz?BNDRRu~h?}iyZd4tIe+imD%LlDDI|6jzE4aEmscl6uM>!Wd~h`sIJ5te7( zi!1Z4#y$QT0Fre`-sB9bx*Y~~$?Mp2x8N|MVm<{--c{?lE%tF=OeF$4st_h*LBBC} za|YZs)}LEJDgY)2-`QWn)*XtV3YNMSw5fB7Yn60a)A=`!tmp{U@TdH`?kZ$9CU|uk z{!VL);fmck2ED`A7L3m1dnrf`=Fwk9DJ(`;jXV_PQe=ks=*J(&_yzd1SVM-!sU8`3 zsE#$XnyXRTr7Q`@Ge3&{x=+adp2db^OmRslw^bPp9L7)YQ9Wgk z@Pwx%eREZ)G&0Ai`Zk9muXmnYEDLJq<+w#O-uW@=V<$}QZPnJ;!U|BijhXJteRV>5 zkjG{<@Z$Cl|83W~_qqZt;j+(^K6JE0z%&x|I+JLR!p$l1D7HYP;&}3$j|T_0^*x*Z z%k<^=#+dTixhh?Mb|*R=QSKm_~Xy|c04rxBx$miBdTJ^$2hZXVnsv+))a)@lnVGT z%S(GagkM;qu!}9uZ0N0#+evo_zSmdO%6n`zlT{KCWNW1{J&jJ%!^^l=GVNER zrj90LBQULAk@;=UC{CO%PP&8n9mNJg{6t*R?T!?fLoAjl+6!DVdbQ zv&JNVq+=p>7e8MN)H=JJ?JIg)ZltixSWVWQuD_8vCs5H}K*=~ma^9ZCf4T(`OsweP zFXa7G&-|?nOI>H^Z)0iu)sH0BF)s_=wh<=S{76ojVWwv+MhYXGzhlqNP#&HGqWu<# z(GDH_^F@ZC6&Dva{Y69!RJox(6ynHLjOMjz8-T*Ee7^HPqHy6n@>Q^(Rtt6+_Q&qw zk~>@n@PwSK@oxmz0kmaIWFmTaF#`=m7?3^i#xa=yG~>yZ{fr|Nk)bJP{e<;N|AZiC zCb+Am2UE*Ta`6_N5&O&;G|?BcAvA$)ASax$s&RZ|eri{eE=Nfn5yahlGm*O_0L@ zDYjmT2qSKIK1Nrx7I8i)Lf8};zz`#R?#L_s(`l4F@OwWGdd&OX!_LC7t>cP{ly%EW z(-PeqEmEMWkDtyg>YAqy0r@U!V}I3PG`@=Ah);S{ToVd# zg+8Xta^>+4Q|(p03uy!j7Ne(n=d!C;SeqO{w;81D=v=zbUw5n8(&wBr)>t9Q@92!h z$F7$jcx1IyJkTa(8N5T>-1shAqj6Lkt<`W>Z4vZov$K@C+K_vUgBHCX3Yr_ABTWyv z)s|QI`GG2B^R_STjZTJ2C0@zcyHe1eK&5L9AlG^jXe<`fL9(5Dm%!0(VX$OY1yuKG z`1ROB5Q>>4HM-@{GPr*tX+B$3L^pHXi!iVK`HGFBd8H~kSh*OJ!7}ub!cNe=Db}(p#XG5V#~_Q<5m~kfT>Y0wurx zg)JjhCEnVI)mrH1nP^GFn3-q`ebCHm3O{^S*b>79wJh+CTVe&|*f$;TKr}!igw^9= z<&Vd3qZ9?wij7RvrMQiG86E|2qPkv5?@%xeehJ%VzPZcqDZ$vyEI!L|nW^3>jPbBe zLGXql{$F#F;-4sxOsF9&wuEgfAPBE%xe|u#`lJ7e9LtbK<`Bj6FQvkmMn9U8Ah*7+LLHORt6!)xRtzWIvw06T zC5!jnTfd#I_x?o8GeTd#0gdYc$#3%@D{N$i#S|ksZb-mWkvJ;iidb8@a6a{WCzVB%-ZS5i~QmdQVhxI zq$lI zz!eF;BX`uKTN!Y=R^Dd~uTi)n{9}_SMYjJlXcFjpzIcOnwN3_K#oZ+7!0FYEtuQl- z{jD=dx>Y9gNmtp{^Bb6YDlBBWLf^GP~zp0;p%n(f{*sYlw=hpQ=TeOvx zS$(XFk+I9whd^y)a542r!w^J!5n1}I#xw~}_R5se=|9P93aJKo7Y|DqEHvRL3-w%P~*43%uzmdLow<(Fu#ZZwCzLJ4TBT<2C40Xq(OYF zQ)NH?!_U)jo(<(@xL__B?~FSl4$AhoRRml(FH*Q^rG_CGo}&D0bc6iBRV`XApJp zMBB{YS@4{MiSdz(svF4GoA3RvGDV5aujV3}5}^oR9aCv_77K-vD26>2@17`_Dwp0X zdst2Wj(1B7|3KpXfc&%x6W^B=s*7pVe~K=O4Da{GbCT%An2sIW;(mq2? z3aHs;S8ygb94(RcZQEJ5mz}mB)qC}PJh2*snMB*z78Q16#Wrl1m2Bl{4Zp;{SBnmj zQF){@e(}>%^>q!kB{DGNpEOQym*7M#2=BkZ{fXfn{CVJ4v?*6RV+P{We_-^-tA)PR ztr1*CD^8?Z@5rCuyKCkIOo6eL?LFV&Y8<^O4X)Pcv3ODN%$@nw$4;78e`h2Nheo4f zJgwrL+L_BAK~4mzwZqbmo^U z(Kxg}dMoAFy-C6<^?3L_n&E3Wt26?PKFw_$yfIg`GULSq$>6rpZ;V06M7o1*# z)FFPVtlYSvgA;tMwRg%S`(ig}jg7AWxVnEkrQWPUrU`E3syh2|sZ5bIYwqNlqF>wg zz(MHo8zA(MBe*|yD|IfHxF(zp`pta8Z>TBnsq&+g8ZgR)|-ll?`l z6-I+oOCu4~ofU56W!bv{CKCUREsC^X8aSiGc#I#)AO7Aog~=;KORZS4Q~|S%qRIQZ!*|zWNSg z^YpyViUPU)pUFub>kLIU7)0$#_`f&`FZ0bw&Ak2~N#}8AnB0eOc8bNtU!l{pPV8bU zhD$%h;_H>a=cNV?ED+0{&2frMSV8G6O3_s30-khQgCQ0zSGN`%fhed|5rw-iTIR6@ z;|naq`7d!7V~dgpR&;-y9iJsbJY}l5F$YzqJ`d!^Ck~%d;Ql(|N_LR%h%(WVfK#iq zK;dsf1R9+a+eecRsCoE2GAY1-jgX+MQwm~z-;bYVe30ODh zml-FYixG22+N)E-q|jUW*V|iRPP>m%zEL`pWPxRaMw%W^hS7ZTEIT=kXJ_7hz))$W zJp{B^n@A|W5b}1H+(fg1Ym>D)AE7j+J(4Ww_rJo<-2b-Sl_G6}up$Vs*HMArQ9MSt!-q#vBB?k&JfHM}zMzPS4fe3~X#KvIpsJYI00ME@{Vi^X}V( z@*A*fP>BN)C!{Y1=6%CQ2i*B?NrdFNzmGlmdc{0}N^Wy}O%E!I&De%5eUzq9iIg#I zV)1O;uVwX8VMzGP!-2d2pIhL#qmyRuy(3~zu`Xu%Iv>i4U$f4PDm;@maToI-ZctY( z=BWAb@t3GLl1ai$xhd8nBw5zz0hN~Li*QhVO>BK1)7^41^w(Q4@tXD9vNuoihVd1~rvb z4A&S(FjKTn8)UO;iZ_lFmuU(s%oKLLkL+5=8pOhPNn=}^!8b4q|BlCLs7%H%5{ELE zxaQTyvYl(KF>vmqSKb&6Yw)7(@7yP=+{}d*s3UB-Vk#cJAdX>?Od8~` z7?;ihSQn!sFpU3gUD70kU%DbLcd>uYot=YVxa5ea{bff|zq}nX)hZ(()SI{JIw-K( zJtZQ$WM4vK^WBC|a%!OBhTCzjxA^8~PyU8LJ(*Sw&1nrEGPm8!MSd4L7UGHHxwxeh zb#O<&dMJ{orA^F7?y2XenqYCi=kz%Gz=Px1)<$k=oUy(k7s;-G%bQ%ju?J1c{d{(2 z_5kyr?9-^}2_I;Vs@yevIS2Vn2aup#+WXkDcTOP2v>GdeZ8tFhC?Z87?UJD}qTQyV zcfKx_OyP9jHxT{!Ncen^HLrh7tX?}m>FQrtG7d~OBYCd*B`uGPl}m>3K)S^t=F%z> z`aY#=uOI%hN?>~(_1wM@ZzDlonM9wXJ`-$B?#}hr5!fpuqO+cDcjB^L0_|+;lRGSH z+P0aJlSe-Ln83&2=$zU8T5CkCn^~xt_P$htcQXSnry23eFyz5)CdAx?!*MzGoP$L6 z8ig39$qv6%7?UnM4oc%zR?t7VJGJ_|l@h)_DA3pR$OQ2*CsI5f5Q9#PxgO=xq|a~$-l7udb*YH3@~r*FoIu)S;`9Xm{N>QsMqXVn=Q82 zh@CX_OIdP2Dx$uon;XWOviZxOn4%^=63l~L!`cPUbJAPIq6_{~{c<-v zN*5X_J#B{|6AUfg7xx8&_EZzq2##bdkhTybJ_elfiwzdN@^N44L(LTB zr6=zpG>p@@Vz$pQZv1iQPZ+s}s>yi2+#{Nku#ML`@VI#Ya#MgRoo|(dU5dr=icg)m zc6&E>a!FJAtvd%kD>1SMfQ;@bRUu4!r-oupjXNqI>~n?SRGPFt%jxt=YLCEVf;ww% z{B^L{BT|8%}?v=rOYjSEXMr*BgJ{iSwk-oDLG-V!gRVe z?EUk27jlTAg6AOq$)uM3L0om4U^{w!mgd%``F@cwBAvZk1Rsi1;W){fgM+Ac z3qiW3ehJTee;_)D8Jsd}>3t9OBAD{+nvHY_<{s}8BUNw-uBIXWm#!mYLGDv-jDa1$ zSa0t0{daK*C%<```wlYdxL5`|1af~cg}C~@io`V4nTWP6?5D-wt01hl+}!fpc(E5a zfHbEh^8{(OtDQWh>sDSp{C&_{`!bj2JH9(%dgY9RJ7O+$CeC(sg~E_=$tK;rx~VR> zDZskZ#*4EcOkpuLr&uj`t^5xzf?JR9-&pYtxp&Q+; z%c#lX1Crsw*bt#6jBZzt8>#zrBAr0{RAraxL9MOZY8hQ z2II?%m>7pKzZM!n`2aoWt|?U9m~q2lmc$;>FD5F7ou2j@l_5HrI@8jApVx?1Tx|Kv6YU^u1kEAt_0njjD3NytZxAQU=?7=9plg zdHf;LS0lqGsZD8be``ZS&dXM|VajIB&X>A%Q2SwTbmR2^gq+&t^oio1IZ7=N?@ESg zCa5-pjb5aKM*h)tjOnOokwELBW}KUwCp}ut?9YJiifENWi3Ppjc(=pdzrk!{k%1vUFxQdVcCKH-`g_pF)8^K(cSIr)tSN?92H+ zttKXwWnQ*(=E;yukn5!&X?Ayn-=l@ju0X3;w#@rCuU>+2A3cvbvaPQR_@v(W$Kron zll^Yv6k1+QwA66<+NqdFNB>LET~t_lN@z&XWIn+)(yb4!mv0pRI;MpE_>b<&+<1zL zmC)My+k>#gxy@J$T##BiAvs@1M!5Zl<&;-Cd3t7Lr>r=%S!1Cq#%vDF!Br(g*zg?x zpTBo9FkRFp-vA1^-%OX>6!qK9>7$7)C2}afyv=hh5;(7Za&QF4ZyZ-2!nUTZ zK0m8yiGj*<5AIDK$BidLUB8GHy^`yr%oy;IyVbKuugKWiXK3sh62UgXN4F;t+&XQHf}HMi{fnWXVQLIiVF+(FhbzuZw-cn(^Oeg+2J0T)=yMVX?Jcz z8K4T|yEAg!e&kxIdrS28Zl_y@0S_My`sWthD>TCsHb35b0NCc*0JJMWtknpnyO+GC%Kc~t)6yt^2mt-JUO#W`?n5KOC>zE>uCx%1+9owyc1Q=K%RTnV;7)ze zFO4TGbL!Lb`SCd9C-v0ILi<7P^sb#rLn!&{CRd@&?d;lj zTz^k*-6oyf|8Oc`zTA}Pno*GNZCg?*bD;HD?rVtuyOg9f$l0B+99s(u39 z*`)uzX4-H0a%qPdJ{R0e@+_7nO0_CofokmS6J;7+L+a;$TUnP@APSsNW@CY*le-@% zliAX32zQs~|IJZH;NPEK;ZF;HSmX|%Ve5&ip8IBxy!oXvSsS%T1>!6J9zXPM1jk~V zJYAWskWtt(7@B$p6s0eX`V?>3=am-}kn7v;hCvk#w1p#top7rZN{cM#5mf(`0x2|~ zqdTwR;d{Iu;LEfe(j5Xe)-N1t%5Z{L{$i*d%DvAYMP9ghbQt>@vq@qxB~i*18N;2&bV)c1E?$nRi)M@_VoLM)KK$ycX=obZCP$9UG5=8LG9-touP`=;?o5!~o9jb(y>&W=;V7tJtAgO%v1aIRjrDF804A$rW$3r`B{c{}+xJF@M7xXL? zj*45LzgC%+j}2PR_QgC>!R#V>yBDdnS2e-SUu$;T*1#sigbXng0t55!emH`@e_0Dncvun%NoRd>&kC#b| zB?3%4sOuGyj-fGplmCj}Tw5{GCS*rPr2fKaXVi+eI)oqM32+(Q3O`QhJXuf_R#dwB z&9QUqzodl6`6Y&M(0RHl47SFY+?iozWliycpkt>u^3~oQ2*1sDP0?57{lBPs4@Wk` zw{O2%rOT|*+M7}oH6zj1uA@+aR=q$4VV7J7h+!G;ufe8u@_kG509x10W(q!LL9imkKmuM{W~NL z#i#6EEK!0Qv2S1ZqTVLnU;N-TF+Tf-MzAu;Na^)b+l~0ybbyaLXJ{LP)$hWw87t)b zuGVi`HN5{Ur{=f{7I_J!B+?QCj=tD9K_A8+BeGtS1YCs&Gu`|Sg>wp5asb^8ET4CP z2O)7$%AGMG7P%br&F~;_h|%sLC(+Bo@z-%Z8~TlOD4S40X+0(XXO>qG;biGi$v@@k z;(vJeM$U>a1p{-nef`)|7!$_~$-^dH0BU4{$N-4G}#ebS9kF{Y;f+c_2$kw}f z^#VaBgkj3ZHaJstBx5Z#o5sac3eG@9QC^(}OVT6>YHe+KpHLa4zU20X)9xQRx<5KNB*#J_U zBzLvuYaNqo{8_MeU`4Y7SeV-vdKtO ze;RV%9Ow@ik=lHH;}Zb<7q3I6J{y;Y>@tpTZO}0hsk$Nxcic`Y3$9V+#lPuMt$H!_ zO2V#}3@aHO3V|s-#(GOJi~9&!P~4~FuB7w z4dqkTqPYE8pRCD0<&8l*3*b>^vTOAN5UKtGJULtS&`bV8IUJu{Qpn{8W}j{|E0ae8 z7r=i!zwB+%udc7QSdE0!$bD)-&-w?Fr4!uUii*e0`Dm3e)1W45SUcE6I+UcPkC4*lQZgrN_9c?enUc zXrXs`yV8wpHUrbFBRe{4$j#8oNrG=>S_WcA=RS5cwKooH=JwcKdzRs2K9{?C@6XoeDOR z;a0xYZdETh z!o#}kv(A7m+Za3V>gwLC`I?jY@l(|=d+I-kemR&ld?$t}0DKyv@6@?Q&i0b(e=+#O z!rqdgUGs~5ZZdpI+YR4X*djZ*^R9BU7tdnCc?KXEs?eCb{6cA_>6xMuD}CdEZp>m- zBTCaTw zdVW(sN5pE9;AcqUqmZ!;6}WdWQLq5w)1z#9+GdmK%e=0|!4F*T0OwN-3EuCbzsp2y z<^J6Dw%Z{n;{Jy?Pj|y=U2}g2|M7O7jfh=bhd}-}Q+z?S(PMV^`0W5?XLl!I$G}W8 zvS)C0>l{#)p*!46Jd4F&#;y-q>t`~RNENPXUQ*hv@V1G~VQcZ;OvB=PkkDM@9g?HK zgs!S6ka2$%l@RMgNm+w>#Oj;@aF)&#^=0HHtorwp%zU%{k9K$F8C{LV(OkA=qFj;1cxr|g5G=zd*?hh?M#z`ADga?YXq+`^_f2Bm1_R2fgM&$ipsvO zuV;j}z2a=G0o_peH!(HJeL_a5-kP3JJpzojcQM_QUVUduf1W>eQUXvlS6ZlK^k=rr zL1iy^=3JgXGGumF*yK5^?mH85_v8-_B8C`T4>M9_?8$%I1+drOlc!0m`4@36!~|sj zCCU^4p5KVAuUI_vPhRpjqZ{q>yRTlM&JE9lvnJHt>i%s46D}a05-A55^`|66+kkII za<7QrCT>kJqY(EfDQg;46xc}`Z7JN^uC(#1l5ZPZyTK!R&4HS_+$NW1)(L;<*?f2Y=L=ouA)i@?(9oR-br2h zi$IZ^e;M&%%738zJMP|S*-^3`=jvl(w?M@Sz$UIM^mFS&zNZJN(~YyGX2@P=O%c}NDAvO3b^SwS+yoXZ1GFT;-A{obPPV+OZ^@1(g)nTb=Erw{li|sH~ zuT5*UxH{On4)peDaWkD>*gaUhivH2i zY}=PMJ!j~saVf7vUEo26;~>(C9?#kTLv)Y)qgr-~=`1=l)yIS&36rtu(DGm2lE(z3 z*!(Oy|29#3P%| zrwU3JWB<SI(IRY$Orhzf4ebvh>Kk5nOfHN+l%tl~n23r{r@Iv1`fHXRtV6iJKV3~W!w8>@^67ZP-DZ@)2<7o|}* zye0I-T{M}9`?+1Bu~~@xVow+Xou2NCOh!Otnm4;r<-^BkJ>`$t%)f%V3v#i z2XtmmiP|3OS`Pq)koTb)NATomejX1G>x9MhJwAG7jCD-*rf z$CuS}QE4tagm#;7Z&W5{NT&v!9^y`>6L(NeIAYh`%#%6I0L0YN!(iDc)GpfX-KE;H zxwQ+yAH1FW2i;f-K;>geeC28SI`G$Kw1D8g)~N=F9Di9>*hRu4o6RBzwX;=Yne)37 zi2e_AWJNEjT53i)AQO0hQld4j(I|~}NXJ9k+x$ryCfSKBCpRrL5f9sp)!LO?!+Ku) zl~#8V$td+a6M9c!3nxjUt?6V(eYKhp zSE|cut=7G-@}UDOzy}AIwqfz`mv1%YF=;BXOLwX1kCNq8xq;){=2Wi`JU1I&*lZa2 zYx(f^G2Y9cID6l0zw%h{oDSM)in!AbV_}a+s5+fBUQLV|0|OuHDfBvcojvg{!~m`$ zbsH{YFt4@#h5a54Jn1~U0)nC7YqMyS^fiM}#+-hQyilgJ zuXpNOShkhGC-tRE63^?O9_J?XEm3)jGXzQT-K<4#08AC#1bsk1f%;^csAVrNTk<)O zTrzU`4@kOWyLMXSBQE+u3&GZl?(_fx4WmQy?rN?jL@sK&zYSd0s7kP;biO~H{8sgf zH)u2l^CUq8(7f~<4ug-)biXs!BxFV51hE8W<(=nxH(cC17kF;{`?R7+R{2ZeXh$-K zq)pq@y6-#^I6&!V)Wi^O!j|hlgU7wJFG10YADo-w|7=Bewdsv^;kkC-I;oOslgp$a zrFb*7Ga^kVsIw{`m{9rfdQ>|Hjle&x&InDxF-i%?w-%xE!4Xm{q*7Z*hChKCKo?nF z%${=&7%F@PPyQ-t z92hQRpmc!ezR8h=)ZbtiL?D{1|6l^E*tiUjDD}x>&Q~l$7VR-~620Vc;!PM`m3&LF zGlKc~CVSQOE?4n-m%BXQ^k3Qv>hA0wZoxC@a1LnjX$Da>=orPWt)mbv?g$xG6J1H( zk0LYbYnyG^qS-fFx@?rNbxBZ^rW-e=IU(0!=Rgr`%b&(YHM4)EJ#wp)N7ms-oZBz1O{|M9cpLjcqECaT6W=cl2>Y|Jv|5JYUFP+RHX04pUH z_ASsH+FuO|Fh$<tA#6ihi) z*;SQ}EZI8LzdQ1E@EVZ1;0oUe>Nc)qcRC3#Bgl3W36b!UC4R3W-c!>s0Y5sR_=0A^ zja;gN;n&>CFN{kB9`K{TUM2Lfq4-d;47g~GBVu<3c=lt)=-`>bhD?WR;xYNGULr2hFmUgpE;7E+x-H*sWb|POIz#keNUX{_F#&r3;vDx=h)DlV5 zM>RSz)$U%CE}u5otj@q2Zv&KY$3;If#D=_vc2^g-+BDlG?U87ZC#o3EVEezpD@nKR1haU51(A}bq;NE)I@HfBtuzS)KgN+& zkMrcfA-wbuE>hJO1`gGj7X#ulOrPf~oNJP_zFe9BX!grxwIN?-{nh?HNjl+hi|3;v z7fUE#8VrltR}OV?W5*+{T+ewnUbZZSq#ojoXI-hM7#y8WIY%+pO=^WTzf4Rra>71w zpAo9Xn&xALY~<8C=brUD)9xl#D~cWI(gu0nk#8b;XffCVwAE>=)f{BF&}hJA)Yw(} zLD3F(*Y~KiScjleeMI$XmExs>!2fp=J{;K?B{rE86^Le>QJ9DOiiD|I=o)hnbchOM zIN@a*$KJkAdG4yQ)7ZQi_{9tuSa11cHsUj(v9Ezk2rno!>acd2C~qS+QA!Q+TEvLO ztNK^QX~ucK_n$5Giau$j^bpxRb+-=3^Jc?Q_T&?vI*H;inQD*zGP_7}^81a&B>@Pb z(Tw&sM>*an#>e3`ooz1J2M#Jt^gM?q%gow6k5sp*DUAZ;mo@0(yKGV{q3SMKq>Fcl zig(*mvMz^282+@q=AAn~X3c`<1OhtB+S$`~O_1Dz->HuA9ziQU(M75Qewtb>ZB#Q) zg%JL$Rg%$<-N%!EH#uCyVV^6L2KbEE8}t+X%(Z1_w5WsQb`KW*rX}55jgRv}mIZ$o zRnWGLa&Y|mL*+sm@lZBMk(OjP`GD{QRYNqhgU^cGLHw+5#?JAngyUU*v)J9}xcYz# zYzlePWLr)4+7_bcjn^0i#q1&4>1%BT%9M)*TO7<`@7-Cj4f3rqw|jOnnLeo9PP8t> z;>`nNSpYXSa+Kqd)8(b!3JjR)YSAiSl)KBwK0OJ@p5|C;%mY`PA-F%>hkCCBiSk|Y z=5`3mgS$WvGe89RrfL+s(f@i{a}A?>*n0>1>#dY4xppD=n(%GbLOtJiM+(<`|(d zTsIj7&$b)S@mzkK=F(01RwrI|$;adO)|BhL2pm6bOPl|k&?t-2x8JuB^Oohx ztvno~)X*;zwTSp8%$2KkH|7)CEz{}@=EIS2x@sUsMhSzUu^FQetJ_kaekcn(|nj$b(rcnveQ*RgvGDu5Yy3Tm*X)Xlb;b?C3z z4em&S;yQ!4PtJpxzUB^F6Ud+?+-1K5;+AMaGTBgDZ#wGY|ApP^y{IyYIcMRlri#n8 zl7acqeCA0whLSgye!^9Bx&;Tb@Hs5rEq-|+gWM4vNO+_G3Dx@VdPp|;bv*=6adp~x z(aY|e*qOgv6tL_KJ|Ny~+2SrjbNZ6+fb0DZ(T9ItY&t6hslG9sGG(aop3oIP%TDpI zGx4vqxW-+4=Gf4yj2D2YAV-ZEo&%lBfRO>8Y$M@bKd=M!eV2TudVw_fGaI(j=z|dSIJw zYFvpb8tuypfA~k;k3lh3|L}=Hl`va7r=%2h?t<=6`vOajU|fAA3tInhIlkpyj!a$& zhA^A(HTvO#}Mff751k+6qGlI^`ugD7u#ZM!Y8rn zq_(;??8ozjPH5!iTB$lU_nfy%o3zCZrU&&@stYKMs*XEK%r_NOHjDTNM>Ca38A;g= z&DF17CGTskP>4iL6+Txb6CA}8`ph2oc_t{Aru8zhO@^whar_$AdNjb->QJ>V>&da8 zligFh`76iF@Tw&r>U`lH?nm=`JrUNI3I9^fBOj4@smH86?ymqPB)vwsvmA+${LhQ` zzq}|xZ!bEi(C@BNsE9pR176cOavj(boBa9#ok#dkE{|V;ARBJx-7$GVACKqP`q#@4 zy@#Evsipt&a?Uh@aePuN(&MgdFQ*er2jslIbhjPu%;`Hj z&t-%Tk>c5f^!b%jS=9}E%$8R@u~jrxNf5YntwkY?UaxTaN9F*9+RZ`Q_hkW7&7wS0 zH?ukv%U`b6M^AK#qgzgB3FX1>R1n4|))c(>*3G@$lw|OPtUj5dCiTXLVTGv zE^4&6G6=V(moifR-ezC}j69EGLS~_C_hc;>XT4H7BevRus9xvC*1_{zT^)|RP~)D? z2?edkNO|B(>w$Ls$Zfd>T^S3WyqbIiP;U{J^{ni^J9QiGtiB;;Pw0jaP0cW~B7{6t zKjdXy(YJ)(yRasy_;#65oo3CaUqakgv=z}{YOleFH}(2*)xQ0kY-781!%Mp`z36UC z2?pUSBV9yq3Qpxr za;DZfA*vJ7>WqiOX{{CQs>)&!jkP?<7vp9rsLTVpWMs<{gAnG_p3TKNRlFWEDU7R;EkimWVx}yhl?cRy20=k7wFzjcvS|A)S>KI9{N>wT+j1 zyTxE(D`w7{hpzj4^HkIRR{iB4i)Gq_xc9@3T#hSEvNM6%l4Zjstcv#Rv)w$N#d{{7 z|2FwgT$jvDnH{`JTQVHKrC?hRcK2)C&vy_z4k8(V-(Z-FlksKx^T^ev4mQgcrFF~l zux2`(4A+)Xhgr7!76|$h#CJMJ{U6K(6nP3~C$8tWBjNc2x2ocLZ=rx{i|5bad^NC+ zbX00AQ1Z@%9`r76YVTp|1ZJP5YH78P>`BXP^5aGgifp@<9h2uG1 zXYN(#n1PB=__ALxV%ynQ7jEuFxQARzI$QYe1pZWn+JehSpj}Z#oqO3*+szHOH(t@QxOQSp!$R&r4!%GNDt?b^5VPtDrOl5 zL~Y!ou=$qWw(i9VlV(d>dLF#-ZER{=_0^ULX|vY6`y7$MWwO46;scX}y4j|giDl*= z*#>jELtL%0zY7eC$q#e^GAw7N3h~?JfD%duKPwf#&XZS|JUry zC!OIy8fV8IsaFFcTl(oUmNgh=Ha!yE`4Gsb!?SVXLD0!0w|XL}%ia2dV^h7!1KKx= zp56)adwRafZ!!30Yvn0L;_~JUNNL=CNI#DC_FQrNI!(~tHS_dV#BkXXU$%OvbdWZ0 zDc=^AW!-=kj*iGtK+RYkaK;^|V={LC83E3w~~ zhL8E8BGnoPfy|cSc6NVvJYrt>6pk-DKk$S{TBW(wMg6e%u)55<-H>H6Aguja-9hVP zq|E*fNuV!}P*c8CO<&|pZ@}e3VjKLd?JwY9e)tCd+?qTq4O4hlI>eq#Y_+*yn{KCk zjwnXG99nm-9lYGpn^?2f+iP?^YddkbhowuGPK}SjY-20WI~1O2MISb+eoCzj7;2DO z%^N?@O|7JQ;_Hdw&c*32ERVLm9!YQ~RDbIX8Xxh?1y!R!3T0P&bBceLKZZKpo%nM& zEqb{*3N-?$oX#nY-TL2XHlX@+A<~@C!t2!8iB&s`%GzVru!qI8RNCU!k;IE{&-ON1 z?X~@12*&j8EMLhpNz2CchUdr@Ad(i?ZX+3Fn-W{^lO9SKXY0SwqUKelsnT@LU7X`X zIRIpi`NvD@1IHv_EkDZ{6R_lyA~h!xCiODhJ8?O1x@Xk-X+uh&k16TojxX_GD2 zHu2NRGPPXyOtEYK8P;wT{lzMhg><%&{+WHnJ4uOST2r}m=708~z=ge{-%Y#lZnVND zO{Icodipo}>VxeVl#i=7p5uz|Gq*YmnBF*?0KIWYn-+C=iuQKW*&mkm`y!O{)c5D# z9}8StzR=2!g430hN!3Jv$kFqn1J@|`Q85CN_sQ8+VXjNi9^-~(L;~x7b}QO?lN$%g z^UvqyAm%0+naV7W;77>0WB-&YdOq(KK%QJ=N^)vPHQprKShi?-tHRVPaTvi@?4Tj# zKvg1?487&10>%8TIhhm4JY}dJYpc^)TkDZKej2mH*6al59-7t;z>Tb~1 zBe$QnhPh8g!4EIt4FE>wRT+upe|>B6P8koE#w&f8B>Q7l zWg-11H7biQn^ol=NTFlw?fkxfi8;QVBt<5}jiWQgu{u<~oD)l!1Bv!sHIV)GSau}i zSE-h#B>&UxVDmz2pHk)XYWU{gJA6HwOXzbPS%=!yp{BC^0PiFf8W<; zNrXAA%#{b1T|&)!fhD?c=0>g|C_C;GLVAq+RdeS8GHPY9C6BEp&2^z$z9Vds&$zRl zD|?tvY%0B)EjN7dP^M*qLT}U~m?bFN25dVMU9IjyFYYni;9%8awd3nsS3=sq9QeIG zWZT!+#6;mL>&Lj;g;RQp&!9T4IER1US?<1wI3DiZd0tG_d8~i-_2s7Jz5m6fV9XaY z)d5(Ada7f0w!(#^U7GHrQd>6UkmlGWmRqkQ77qN1T1$N586-c9BpV5O?iF3f~ei&UH%H!CtM!YTgK~sjx3TZix9%`-T!&u zh`rq?9J9SUDP!?qi%{kQuGDE*v>cX|b3bYt{;B2p0%~e4T9}KPSboPu`4Y!QUUXp) z*dsZ2@6D*-LRQg7y$k6r*LJTnfBj6=ll`)V%9>xk`>87iyacCg9SG{tqyfl>@WeBr zKBPeGh8092STR78xN)K!|VEYGzk=Cy>q-6#;U1>S)r^ zLq9%Te`OpQ3)h$6T{SIyq#cX1Q#%Mt*?jcCvvot)?W&c{=^KZSs-(C2tHs&J_*-&0 zTZIdqXRy0&o!f{oPpbvEMrKuDj^VdPWH7xA_&Y{jOx60j} z(H4}Uk_n$^@$M`U48?snk|9|pED_+phVa?u7saDQx3foUmW(f{-n3oua$e^P%TL)n zwp{ML3?PM~W??51>p${6lkY#4Wh-`}g0!<4IxUL7Iv{zW=i}`pSN0vK#as#xk1F*w zbyxl5>{I(@{y^!1`7)dons8%WCU$pA$S)6$A<9|inBiCtk%Bqa!ezdlN?&v>oTG>Z z6H+k?X9_msFg$@8aI-)d0;Y%CD2EhV4G598^6ZbiE40mJ9AjdG))pEEdPuBYE*}dP zuj-%#(FyhkkCU9ej>SR?jOhe4Oq6KcnCW%DY#SqlSmizgp-9E{jV-zI&kMYtOA6A; z&Cl)fXB|-mQN}+wlzgQ!h;ZY|ZO{8>WYPWCz*Pn$|NW2qv%nR&vR|qp*S)q<)Nk0V z;$Nu+#AuY9&)gRukL45w`vfC=jG=cVMOL0X_h!fva&Nz9OLKGK0qI;`ZB+4d4NA`dc~8!t~QG89Ml=(@0jq zM^z%t@rjK+OAl1?AP~EUT`$a40w<*oB7b?zDlv0*df!^{0RAPw9B!rFov+M%P9HJ@ zOu-<%^LRyygTj_;xbLIj;0plSbFe2O)rwyEnnpQ^kF%uIT}Dv1%I~ka_Yxzr>`p zjAi$_j=3E5=}*Yyf2IGRVUr(}V6uFn5U>;*iC5>*(Kdmy-h=}MKf6q=(96fdWwp`* z_I~7Q!{i)0BI{+0l7o#)y5)~DZF5K9_!ZkoUkX9?f4U0bdv9*i???4Yz=N5#b zw5cm~y3{0ZA}4j6*G1pBRpy5oV7Bf%&CLCOXkEpy`SFczFT5O7m=h= zB%H&@mEpA_T_G9Pxpt~)YPI$8!WMyvjg=6H_tdSxM4Or4YgF!n&u0Xjd>O;Ln~Iq~ zp)Q`!;D$I?-&>XiUC6vf+`1kz?AZoCDBvru{J$?v(kvyWDV$_qjVkbwy8S5uU5y60 z(V)d#PCj^XF5@e;wPW^4<dKt$3FxCH~{sk6^l~#aEc{82^sBu;=~LgYQ!B^ZgX~BaDZ{3GK-q zJIb3%1J+PifVRci>y{ANuB~U_M2|t@#;N~U;U$sT6`ri#cgnpTx8bLtoqdb9aMw^* zxaEy3g_G1#lZb*3*IZ4Ta+94x6M(edCTshhtC{yS&is6_x)1({-653d-FcB#t-!D$ z^xw1A4>;sM#x;d=FhNmvKIOD5+uKr z-h;8{!M!LK3*E7S6Kzjra5n4)kdw^^k1_;23<@$nYEvQKZA4pja-k2!?qnyJ;b92Q z@}9Zcx5mc~2XE&5i?iRW|12IEG~_=T6yb)<;M;+Yb}uuOxE}g42c(SR#&Z23yS0va2NX8-Qr25q4*-jTEA@7fm&|vIe^-2MmugT1b1&agYkda^ zdDE%J8^dBzoBVtrNAxXQ7`|1&!Y*?Z^G_2kM1bpAEOpk!E-0L~B z3~-2R_anN&2Ffo^V(Ex?_u5?cMEl?@*Q1C1@5i$e{Q7^JIF5p9Low#&MFGlTD6T~s zb!3tAzSDpg@3HVXY#zNOww=wzAIJ%23`2IyL*^oj^?V;*7+L8V7JKol`fErf8rNVI zkO={NC#IkM^u3TY`vEda`o4Yt$_LJG)Og-}&RsoEO8?930O~H@99tL8%^~!?u!Co( z)RrCMGa1k=YS&gk>tC%BzdpfJ<@;d#ke(*NblGgl%tYxvO0{k0^LEk^vB<8ltR+$y zw^v_Egi#<~YpkmWIT+R1w|q*34K4{|YYxA#VA=3U`L8 z6>PF;;&1Ogx#4TNp3}VdJrSfw#qn89GV#OE;OaM6$Lv!RHCdK714cKPeI{?#?#iym zy$!9hPc*f|b!Bm@ntva^as0;rSu91c4kWzk$2s@go@gDzs^(}-`pCetmKK&}Vu z`0u>mL3+1c8BYDuxnK_w9+1?1g+&R@zhm_!GwmATD?#jI-Ud*GD?Z0pi|!YJ;wL6{ zCb?<#z=F$7pPwO}TqB9qewCy^}Y0_>EL<+N&NSl03wghQEp61YVV(qu^NSS z%I1(rG#VqgEKOZ>Cw6>XqVOQ~kk!by{F>?sT)R)_>Xz1siMmYhKecJl7MtB*|6Jrq z{ouC(LjBL*mmlXWgqVll?B&8MbZjYJNA3Ap(}1d34IRm(oq*wCs>2dNUaCJNjEr?D zC_>4uV+Al3^=98J(wVf0@j(R~?MhqQVU0~|Uz$)4X}@r|r`Se8xA)w^2{J}|tm7W{ zOX<%gPd{3K3y>W~YIV#}0YBvW2Aa-f_2ap83t9vJmVXBf)^!=r$=HP#O~rdcAmwAX z^hR1f`X$C-Y&&zK9{^TF)fXi0fl=L39t`#*8+i_I#{$^n)46tSH7;Sct&xr(2UfKU z`r0tWYXXq@$UDA4yx;9P$PwL&UpGFbm^DtQ$M^YMA&y_+mJ?WCdkyCQ#GP&P|5r0i z=|8ue8~MZq%tiguR(d0nt@|S4-VPucgptETR}!Mm!swQmGGXhT$_wjR6;*jR)K%&O zGXhk`C0>T(JueGdq^U#87UDHX!v|jUuFZos4+sIGEZz#|u#morn+}C)I`!4+l-^+M zZXe>Gt)EoNxc7Xwv`|L^VmVQ6!AQR4q0-~Z&h1HKPwzDTWVZ3qs>Aqu*9o`GosU4x z&>W;qql*}Eo~tI?waIj4&_V4yaFJ~_mc&=oz`t1fh&p^iM0uTdPTZv1@~Gz0NIYd` z>m>*Em?vII&ymW+k^hwmw+zpsuNafq#8Vc-=p#Z3-`V25o9bdvQ$daz;oYZEa>f&0 z8}FzR0nN4p^r?F->Wj1`+T(e9@=F#vL(k&Xr+L)uWN;nkJ?o);s-#l7cc&I}Jq*4| zQyVIHMa!|TYVFO+-lZ^8i)CWh;B5i_lEwvl`$uIYKPuJje2lB2fA-5J3~lR&He-Kj zT^HsVdWNEQ5A4FfE#|U+<14Nt0?(t2^HJ6E_55VRJp(x{j`B04c0`Qg0>KF9pB|K- zE8|Im=;mj-7PqH#A#Cw93i{>^)Ir!a?GR{*`^Z80aPLl~p?jxH%WH|NyVv#*5DjTy z$p7^m2ep4>U$9~Sa$F+)2ds>sCPC^i))X5%<~MF)jHUza6X%qdyy*f5CxOXCj$QY` zB?|2wK)zY~S5xOvYZJLn+EEkbgE-Ap&AfYQ;W>*>hK|*0{GOY6nfZRsYYmXU^Sx2H z>XiXdN%tTx$zSaZFG*C(_uU|OlTP&azQ2FCWFwHuc?rVy6l>Ik(Hb1MZ`Co<(8s>B zyx(ZczYrH{YGO9_x9o?qV@FWpZ=RYuP_-|W<7hh4XyI+ba|Z(=>ov9|*Iz z5BH3$xtWj!B~MEQ%5b;NAq78uLxE8aJ(ZQpK7*O-h@(}%elzllGYUwhg;RYs&C_k0 z^YA3O4--!IPItJ$Z;9;HCW*R%z%PR(lQ9Q9 zOafE)#-mo{}d}D)S_(vkcQ^)>167OE#oJFHUa8q>j;Xi(WYG zpQ{wmY7>6(Rdw_6dI3->)@Pqhqlnp2;U?q|e;yS9gv)f?tD!JSTJKYoO41N%X$*A} z-I!3ee_8Z<{Y6aElxcC&dL|ATsI@1)?W)vlQ{XAdw`EHkpJ$qH2eZsTv3^i>EoFO( zS$ExU)_ARRs$GO_vakVmg0o~_Z8_y~{MDkTC)3X1dMsJheyrhn>FT4;7M96zeqeQ$ zg>h7#Q!aaE8eLhObh`CHM#kQ|amWa+x2N@hioLIHt~gpF&oeg>92tNHQE5Ub)BaRs z|NHfmG&5mq@9SsHHtsdvodf#a_!+cpE89<5e+rWtSV${8`Yci3 z7vKM153kOD)X0J!93rpcTrPLq*z7mtm$D`<;Z*?3-bZ$n`}t zQzzg%(8#39k@O+VNmt&&q*h->q|p{p)Tz&$Frq0go`ZR1MANlib*?mH1J|8 zIdb6lTuP&$L3sfPOVa{DA7~_c+T$l_Hx~+6u(#LmXAvNAZ84nldJd)RmI-7(yQE&; zT(7LwJm$uj=Am*>)iIk}I`fv4>4F{`e=XaZds4~vTkz8=gkNrQ0=qAf+zmbt%(3oQ zB;d+TcW#T=j=f5>tQj`B(Xjb}L-=}yPajMGd+wd>FC;%%(WtPVlN4fFX9sU~8|@DK zHM?6wHfe0E6qRlHJK`ROiRL#~Lw{pT@O#I)nM`Bzdq||*%+w_7mL0j!o{3||4C^h9 zT3rY5Uhz+^XBCtGa>=Dij5~n>z??-g)nmc4f06I$&awjqJw?4d6)U4p)D%qV(Zmjw zp-P%-NN1@N70-z1T&V98`TV}#1 z8VciTh?IAxcQGoAG99Gx-n?-%L*cu_`4f+(`D>R1u3XM^Mov2GY2=PMeK~1n6Qa7& zhvjq%QeMOZ9kmtjyvj8xGrFL#RXjw-dZ-h`D1F61ndWB`k>{Rgq^l2=#~A-_$@da| zUtIxeD&t(KJCx~N4llKI^IaLfA-7Eb?H)AtU*70vmu8^JDC0Vzcj`mgFgd!4MoY)tsheOlQVx z?_KydE2Y|%>vX{yRJ|E1qdZ^q+g_uL=ZAgEvh1Q{3G7siyuwn?hg}4Tto~Ec_@G@m zs|Mpi3)!JPe)R3rhCECrN8{zLA7{rqTAfQyc_dzdYRh(QNC1njAuet0FpQhM5ScAS zmzXKeLW1ilMgtlMLa%To_FyrxP_QVNuI!MF+hM$1%}^H;-Mk1uI$2cW^>HdYV(;ZoRvJtD;- z=t{=P<%HVni$@ewHe1U+^z?{8mG-Jik+Q~ogQYd7_vV&UT1gj}(as+U8!vC%^X1={ zRY_e0%iN+|bH19sh7GWtocYfJ*6y6&{2!QvCAIZxZY4kP+~jKT;+a>{&r3{hNJVwu z>7`fSoS{{K^7ycNj?16Md)<}7bH6AMFt5N)#e;%Ocs#TnsI|Qn_$$x8e|lG6*$gll766E7r&7-UV<@pE2dwSPxy^AZY16kS zX`|;gXZe+;9BgH2{pC@kdz>WXcV(1pZ?4s<_;JcgsREwRB=9YLB-1M8I^ZZuX|BRI ztv06JEm2m&Mm9|0D)0Prn(rM^XLJ}Jc&1wCACLY9kQKlH9$UHbgv%qf;5}aooC=*V zQpprq9;nC^*$Z1-qhD89-CKo?UnVu}M!oTihm!M8DrprAT4~zL97Tq41kZuAT0(SB zyoCAr9PDXS3rkwBTb$}qSUutC5dIDRc|@YAB|zGtf%^9=1h4`kyuwf<*En%&TwV|s ztCYIP2;eKL%xbF_Kb)8`gJ>Czz9@SJHf-M`>MON&9y z`U!8JJmICYH@^C?tiFB7*4+{K6OJ6z8qhQc-1>)+ROp4&IFF zhSv;>s&adxqj&f`trJ}{0#)7W41y{Av#Kq{BFsKQzt#FXlg}Q(EDvO8Z!bvQZP*HU z@qB3$Eg&BW>`4$ja9SB_$8=;{wI_b=dg4lb^2F%5NK~3nk&CrXEyv+pUWGDX@b36N ztuBlg^qFz~@7d8j`*(T6&u2^~PZu?C`{ zR)LGpz)OqfmhTm7#9g(1>m&t^n2~*>-xjpv2xb)3m5BCEX^CR|MWVzaMUwI)u2c9>1 z)oA9VY%Cjl$Z8<~H}}!oPjl~!ba1RbegU%3QI`p?rhQi`}5iJRA6atZp& zemGPRg&2{(`aSB)sEo{6sa*7kegy&l9#$vB{ICI?y-IoG|NN3Nuajph4W8Fc{b>p^ z=rKRq7UB0Byt#-&kBqqmg>dIWI|0xFHM?aJSqhZHh$bT>I-=?WLz zr|yc2ke~IHE$o`dTRS*>?y>j+UU8A@2zIw%8A*7n;+X85g-H8phJT$QH7PZt6;%WS z6kXlPrIgXNN`ZuZ=m1FQWfdVsg>9m({FJrf!D8+YoN{aLfaN@<9PYfC%_&R`W?X+~ z-kBK)2+@RhVLR|T`T6>H58A)J9BI&(^#0h*H2LLI_+&RPFedl0Yla6Z#VnWVV8x9Y z-*71CH<5eC>l1<#Tdl8x^-^jRr3}u)IxRicrOe%(b)`ZOzaO-e77N|69Fv(B6whBT zU%eO8xOrLTx9FMqf4F+@c(?+tYg8}Mf)LSri3~xa*C0AUqSt5Vmh_c|R)34t2`{MeA3v#v-M@1_ITguvHc6**^J>U^~AtSwqTrkI)cOu`&o zue(9*S#6Q^J%lpXO5%V~h$a4zhhUl03h@07v+)$qKclw9sLREiU5)yB<>kf!SGvMe zuzFd+*&K92AdCG*sJ$1HrG?see#kP=4z6d%yxwURokd1A|6Wa5@wHgY3&sPFvi+4= zrkdaVjHhhTc>^vao~vT(AZue4NF^Zp(hVtJ6R(o2n^H2ut`dB1(^Py>xir9o@-`hM zs}NI$UPf4Poz$=zLI=;(pM3;+m^qi|-Ge+st+)B%eSwvvS z@@>O!Aascc>MnC5JlbIwn0#?9GR;YGmB#B$&ULcNv?dbkS{@f2e2l-6Lv^g2!JWZb zo6ty^=&}`N^&rRWANtNmZ>QZCRXaVt_f|jbD@3L z@NFcIF4CRORYUYi&YC0l^Kt(+zwkP6KbvWOExaX&EwZV6mH5I6XB|vVR*)T0N=Bc@xPhK_P2z_r-cx`-Mt@>vjle7VzB2tsy|h*$X9(DFCjh$9h=gvQU6>^mcW7ik2gR1&f%2h? z@8j7}+-|$42eyezVwa?K9nBAwN&~VnbbzGMRcF6hBz;VxcO-(b#o8>blPK@ie@ zB9wQg^q|SxD`TEyFSb##Vn-L8>?wEAu4r40s&`3ta=$AvdSww}QW-xxpmEeJycDZ? z(qPvr>2x%E1SP!70r0Oh-MBNj#TTo@9Dwy0gSPUOW_{cW2sFD?thXZ|YUU|xt})!V zhA#d#fevPr2(|O2bM$)mU{Jo)=RMqxIn*9Bb$ey6?To#?V9FyCrfJAxqEPU}SHbEN z&i3K*!yB|uNUvLVl~c0awc{80{k-8@{7%L~n68`4Fh?sXHt`QW86SzadqHFU?sTH| zDF?`R42`d^g(Fn`Mf~&p>4t?EW?17874JX+Z;3lnU%AHry=E;xG%GM*8tV=J!OF6( zUA6+qF`}6Cbn}U<&h#>meINQ}BnGwjQC4APq<7Qcpb^@3K*DZ{O*9PH#Yy1eUyIus| zUgkCpm*V+W!F61rmaC3!((*Kn{RLm=Rq?5H; zh|D77`jONKgyTsrdfX!BN{(&Io-Xl<;R!UNWgwM63MDo3?$E zuCa}-o0gZO0oEoj-TC0W$~yeiY4%;p-xs!Mwg#p#@4n{5wxd$4%eGA!ZgyR%?MoTO z4YlCOaA`Qbx~}pGF7C3o+4t4tqHH}+ksQAC0vqic)0p`E+U4W=f733-I#jD{rm~5= z3987#m}AqU*1fu$EVhoqnJ4#6eM|1j8G_M&-o9guSfV0#yJMJP%%mO>YjxRKR+H*` z^i73jbLwe(AuKPHTN~&&xOM?OXCGu*uED8ov5cLOeUs$E&Xl6}X7tSzXScauXNdll z+Mb|`Y^L~yw@wmJO){w>AtG}BpIZc)WDSg-T}96`emfD$ED1_Up2||25fS{ll(Fdx zY=-I}jf1*WZZ9_6R(8^=<=@GefEcwADAtf#rkk<6Cyltoe&?~HE-h_8jl@`^n`+^% z;O3XCYVl9WBvkxAWv4f0XCv(aSX~fYo|>k;Ev{W;M#6&y@1uZ*DgjD<%aIN8<|H^| zscxiQ#kYF?lkN$tU~iGJf3A1+XJ2LuJw@p9oR!KQfF7?H?2}AWhoIVKI%1JTnn#TW zD)P*_>XqVrW}OG@2__%J>z}#K&pF?J6uvx~sJMDhc5nQ5Yu{XX3#nG+Fs=POy~jXY zz@FVp0+3U>Gb@1nfNfBz@oW$Jue=O&pL@;IoMFxA%Jo(tTGKyydZy8EO2v*J1XlRx zqW{rfs|;nUJc7xh^cFd{*7JHJ&%-X^d0zOsoPwJsCv8C1fbJWl;95BP$(IX1qhtvl zDtx>wnW03#fcck}n#w#^1dtW~Fce1XXhNZH+)N)FkYU5~3M{cH~Sy#kDVc}g@W4>t5A(YZ-%ODJn1 zKfLE-2^CR3jD1R&gHg);U_m005YSXhu(!;TSN|n@3)_0QCOmOW&prqf=dO|HyI;lx z;*U$bYforR<6djTMY~N2>p4BTztLGGIlCX|xhP=0uC31JUPsct&L{NBLN05kc$N2k zBHxeYBHks_q(jW{oSUr|m+9$rJ6?j>(n( z^DB@p^i=zTx8hJ~lzQ=vCD>OerZg~Ww`(@bX8dtm`t4Dzs^|BCm$;gpQDH#E_;)#3 zuRF_*T+ZpVYE=4`_qoNR630`N)qU$pyQ01 z*lEsc;;EAiEu7^h%GckJx`42Njax2$CnHeXu#(F`va3i~?vV-Y+cK$1j*0ma^VRAu z+{a+)v8NZf|2Yv9<@S2$-#A#k8|Vt^o3m|7Q|jCg2J83?F-&{22U5=3B{M#TA8G|T z_2@;c8%12Txs(aZy0h`aJbH4sR$2X-*n^h+S>DPp{@tW*p&@reK5|}9ATY@&$wwCf zJ?A>_7b%?&qD9-x#pFw7@aoLtQXcnRJLmD8e^9w!s5Gm4w1Iw@XwUlvq97$}rpc@C zU;b#>Q+JVml4ZMCH>g?g-jk5vjY=53=8Ytxklu}w3Em?Aw&AZbWR<>#I>MTEq=y45spO#P)0?ND; zeg_fbeUhV49|P=@&d~`THZws84phv!R$&!$s#3J^+iuAqn{&*GYs4A}jtY~`l=p%6 zU-se;N&C&u*_F&mF^CE(2VrTcZAwLRL6~y>rWPI1w-qu^>V_`wfAR@331cHj%rypY zIm`i2uM$#k!1U?zU-YaqOPMLL{8-|_(ml07oBpH0!Gd_rE1x1IgDkh!7Zw$tFj;^^ z&3+`v%ljAIdfs=Wd|kmb0_lLr=k~;qj3dDWp*qF`{c7pR)l}3qm7lz??*F37WkRp* zg3&$?b_pfzGJhJi+kU=7^^*KuA7yLTI0wqG0sI%8Np9egN3+6b!HICXyi5`Mu2qp9 zCXwoYoiRg|Cogv-bj5;J+2K3=5^Q_B4~cVyz5c#WZ577sYM+>->NnrPy4u(%n%I7A zI8l|=#$o(!7~VlX`kj`Gu(r09qsx?_>9?eUj1;#^zno^$T>YKr=T^0lG7AD6N4PLr z6^IE)(&zh6yxcS^t^v-h%ABmD~&}wR50CKk63Vau&h-8!c&-Ax$1|?pGS?- zMDJ7e>%V}yypukSb;r(Ig(P{g!_9bW&y|Q*$*+vV5@nPixSOKm3E7^+=pXz+*O}GB zbiLWE{~foT9>?vWUYTpPt4t-FJ9D(`9G?xNfH`}RRNN(Cc+1z-Tk&;(+q}A`#bnyJt(*Ee&&YV=dsy( zt}V=AfXVisx-pRrQlGo7QjF<1ci7+4;ty}xe~ebY8x`ATZG-F{ZqVuXEO*UL&E7Y`T0$nxEWH zpUW2v1sZx!Y$KxUP&a*5?x+`8-uy;fYwz?NSQwKpu*FsyO?`^-nZ50_W=qM$yu>j; z4N1&4B?{(nSp+sA88<8br@!u{zF)gVqj$zt%^$U=AUCrrR#VUirB3+8Vx1CkYaUbB9HvGGm zZ1(iH|3bP{cZFGwfZXDdpNOp+OkC4Iv_;230hmm5_DaS^JoIy~xYv1J-{HCzbk0(T zRUY3m?sEpYdoOA71+#&p{rGX_&o}D<^EP+6;M)lq#KHN%>CXQq#DhPdw#eMIJ~-_Odl8jtG2*Arm}k(PI!*eVevPLGao^;#BtO_d zVMNi+tKsxAwj$*r%Y#Rg|LnM;&S)nu7Tn7e=Y`25LRg-Jz7>2WP$d@IebdAIxzGJ! z+wo0#MEHQqK&;cA_qb3rIMi5lXtCvl#fR)&pbmQBp6_$>mu+^3W8BBE?82IG+PE(r zaxNv$a3n+mW@)~9H*-K!0O#}K$nHjMly zXxGgIH7>c-SqLMqB<<}KJu6i`+CcfBC|S3Ts(HItuY$E}#(tNfI(Lz%QThvfKO}_{ z^K=_wo1a3^%(ai^Eu-;PeD#;xZ~i{1DVSQuitWYZWsNLL$6vMvrCL|L@T!X*?lC%A z#wrMIWyh=4wnuJiiuc4>xO0JH)JNk);FQ?*)u97_j4m}@0u#n^vM){|@K0MDhTAmJ zQ^(O8eO>~rNbfXki|w}X@~d~gg2t+H3aiG_KFM9zIg>%9-%b=AYv1}%Q1j#ICEY*% zBxJv=snKM#n6b~98IB>T6I`vHrY?k$fG9~&N4@rHozm`=1$uIR#{Hl-ku-r>MzKXr z+|}NZww0AJpLUD}!de-U2@XO!Uzpxb5W|lLf3ZF}DzJ}Tj(%0ZnRo=bayVOce0v}q zHA{=X%XHqCvaIR4lt;<*1e2s>2*Hr4E+M0|)OLLvBE&QtJocqSm0E*R;S34Re$fSe ztK_DAy<8CeY8Re_aNhaTnzk%8PoQ)0A!sW(g27eEh8@OF&NVOBTU_=8REZ%~QMHuw zM&%A&sAtwXlR)S7)aXo%scY-ze0ZyQK0I;$x-vQd=II@u-}RF5xk8YsTU$KYYStso z%K3i>_D51Cxc!XmeoE##F3u;|WTy=+>y^#4fFFO_L3eTyKFDOQoJ{H`0jf+7NGQO! zU+G_Q&u-wRZerWTzS&}4^LYw=x#qnZvFROw^g{rfilB%VCNiLhIVHNhsnUP`MD$Ff z9I`^$CUd0Z(Io0EKSQ_WuT;y1q_OIdVZ4&6J9!L%Zn?H+lW5$bNYVXFjMY|uX!VU8 zw!(Dxmi3gJ+&p5rplH$A>$B1&>~h7loOSmMJgiGz|K#lkOR&<5#~U`~Rd!mo8aX_VS(?>aj#TUg4EoxXBWP8UPN za_};YaOgg|oNr)mL@$T){+@09eSxLy@=az*+cT=ZKx z@rr#fjfGzPh>-zT*AqX&avIC6tItfRt03v&^MiEOAlfHFc}(OO-)&?7)xlUFT^i!M z0ThfIizNsvHEv6&_uwh{UPR&!+kcEKlE7_BZJJk9E_q6%`SLYGbZdWZ_CcwY^!x8q zK|i*DRk7WD7K%O`-WbsnU-!I|%011u4EJ4%=0eoYS5#VUy2c0$b{vO`UXJuh8;Kmf zson)?zI?~up=@&Dux&3pf9Zc8RGvvsju6d%YkUBgKIJTa{PxxUy93|MpFvy2PN3Ii z?p*lJ4{%}Be*@v?UJ78DM6xTk1BquKA~FB1*y^ZevTklGC}70SiYH9`^l2dSx_Qj( z!*QPAHN%T83AN5p*XmN=9INQYm0s=F&dKB9Qpd)J!q%C=j6wZrUlJF%>X|g%kV(w2 zTJrg}D|KY z7`mub@g%5GpRU7NUW zr+RN(u>|~^&AI!Zm5SdZ#uMnDm$|!TVnW{7%Y9pF5=L3*8=6-$9e%vPH#I*Iv3%%m ztdLY`J+zzh>5zTYA1L7G7M&#Kt%Dt>S~Et6Rf3Dgj@@aCYEBdkpH{@ny0lh}#w4c#@d-)9x53Z2N<4^#xWb+18%3 z?gvhTmp9Y4Y=*N^#}eOfY@MreM>S&{72WvM+&{8QnJ{bL@s+n1`t)@O=`wt{xzRj= z2^-;d7jf7dYp`%RvqY`zqnQ6tj$@{<+c`x$V=Jy7S}};&U?t2e%Jz{@E*j6`FMvR& zanTXkU#i#TrlJ%yTZJD(Z=akbu`xMJH^yhvEL4a=d#n+`p8$(h$~RqM%}_T*Ak#>W z4Td*XaFJ5~QiSecqv_Xp^`Zx7p@Ir0<~fP@7L*k4{GXWQHkT16D}t@#mJ-W0!Vg4z zK-?*tQwHY@J&AvJUqy?jELj*W)AfFuzO%91)_5(3+69kLv+9=x3@)9m1OCU>RfF=s zll)`;@q@3W3iRk|Po}YOo2;%iwh6Z$`1G7gMdYK0l1elBm2>pBlMT06|EiG>YRvZ(g=&Tls^}oa?C$$yO&Rj`MKPKy> z^;thU zQ~k#C()rpRz0DKrbDzs-X8LU9r$d>)SLPGsAlkcsNgCfCkH-|!7*Sm6t#=5?j!9m! z3e3$FRwhyRkU=o!8dxC-g~&YxQ>}MG9#VlCO)Z{Zm(3fedm7IFp}HmucIDcQNfEH70G<-Lg$3;E@hm91 z*5(91)2z$GemLi&oI(Tg4n2Ruu~MwFuhSB=KEGP`*z9-yZ?k`7=Yt(j7x@F%CvJgo zMlti{<-)BK*>0KBdFH*}zRQ6ns2q)j)fVM;@(t7VppG7SV~XWhj7?1j*%U=DicIR> z$~3Cnq2y%fkxu2cFokt$ z!X)Z;4VTx$Bvn}&H-Y!{onaxFwB#^iZsQH6Na12GNSNiEU; zdy)p3-ISuv@woQhD|rGKMzVwW2{tAEZC>q0<_BE90lU`;BhV_@tx3%)`|OBk^n_e- zH+C8!X5D^<;RaD7=I@kO@$;nWZk~AOBH2#DRsBBK*1Wrt#DgHlyO`QmtId|iuMIFR zIK0ejKmU!o;HBg z$1CK1c_Mzl^%p7i_;Hz;)1>6sIC@Khsk{E??>{FJrt5{$u+gR+ZR@x7jQ20N6GZXj zVb4fUI?{m~7!3^xV%ys$yMe2dc!vZns2!w6l~+Rsyp)cpEn8}iP`G;(Kb(nkwQrT2 z^jnfyx)~<*xQy7LCz%$WM=BF(A=yPy`cUJ1D`F?-jV2GyzC9~fyKq%LW|-&anN$(V zKz8XZq1>;DaANVYrP}+#?lJ+6GE6aw#(WRGWXZ;8>iPaDC6Zh#bc^OvytUv#T+!)M_wm&JpH{ z4ZhE(i}d!?oMogY_F-HaZZ`g{64kp5U(0Ze+4*{E5$%8d3Y0#I zlH?MIA!q(IW2<$W6`fHShe8P?HVR2oW57PE!1OB&YB#(f$*sY5o3ZBqv;sHJuE{aw zfftbN5n%TYWpXxPd6QiI_GS|rZ+r4OLTD~12g<~XIYs13lKYC- z`@72kr&meb<7E}v^ji!t)fDr=Ej(OxPr?5nBi z?R3}bbnzC`f}d{1LaAOuL=O4hfYf{tSSQ$1^eI2SQQqSI6Mwxs+diVU!@z6>PNEmb ztR!!bGVv@irdgZadRKk!2++CarQ^Pn49?Zl%Ww&-WineLP7zkUig3Rm?Ee9}{CjrC zP{Vj2QuL>YZe`<@4tDB#)&Nj--Y%|W-XJ?fo2_K#jha9n%DKrWr<}6;E3J7Or7t%{ zsUx=vgT7$5J3n-D9q1izwnt?x_81e6PuxhCRIHA((*!J-=eYr{43vQgLxtSPC$!4w z^5mI*rpewYQL5f-8>Rijyo;e_NgvH2?d0RZ=X1hP^-7LB)BY* zq0DPwyFVBk&U-Q-O&TVMW>TY)^+ELG!<&G2^Cx7F%I1^*ZIL{&-(;8S#mG4dPt+0iCI_a(i2Z93(`e?C{L2Kw^?MWl!i07ujaIWFK3vKt z58gFqssJCWcQ#d4sWK)ZW&GZl6-KsVNj!)E;E%^p6Xl?iM=l~+oZO%?Josjg(< zsHvvF;n*L(vcGRl`B#5gYTC)HG>-01PI58qI6YqYRnOZ=G;b_b#TYr>$Km8OQ!id) zaNs~V$we%VZO<^=pGSFNX{Y;Qv-84^C&kACijAf2s0AlGRm>=dqA?pKyG{8?_YCs! z607F3yibxpi4Ko91Zka8(|llRs5QdyeUbeCpx-nLaHsN5R+j!^~ z^x=|Twztx{5dZaQVmY5O;iEPb+0wj7pyF;4_Kdu8xIryky z{bU#Y_{%-N45LWv`) zCFq4$^}k|>RD#d;%Di7EqB+JS1h^QB_bqt{OY%?3+l1QD77G@RsBPV^+nVv<+tKIJ z2#)_$*!b1|De>`RiCtU*&xp+L`m^~SD#E9owCaWCE5jLlIAL97^=!B6-QGT~2g2^8 zTlVyJP791$^FK%0g2S;BIa2Ol%eUaYE{EJ1J<$^f>Bh0iUUWL0pLXu*mOEFj^unYT zJi|QaiY1UBare5TWs$i3SB=-4svDXA2mJhLOK`cdxb6Erwi&s2?7f;db8(cX3*LWulm-0261dNhnXe;} z`Eeq$9h%gA=GUX&m3d z-k(}$*Sf~$&>l=~?C7~3t-lx-J1mgrr2J3n`Aa_%bYoVmI*t5FnbohtevIAS1uxZX zFX`Fc-e^BQ^%RwL5L>UlK^Adq@k2&%OYL~xWs_N2H5OcHPUxzeqPd4+PO+j}y>^MO zoA6_Ui(Hvu&&4kle~bh+o+nK&MjqW=KJPs9McHjz(J-lnbQT@+>Qxw=?OUn9x=7BD z!8;Bz?5OJ!My@Am#*Rd?Hw47QeWEW=cVT2}PNKk)gBF1u^cQG-Tblq3x0J5i2czS! zoiXO$fnO&KZwEb1_1l*M@F7|7SvOy>CvKn1p;(mf`L2_E^~KlMB01>ybd4nDKi|Ke zw|^RCbakjp+8}H3-N{;qS+mr!hqF{orl3?DG_xqwk=Qz&X*%gn^w4+Pz|zfz#|qBp~~H7gufdi<~EUdK_NzlY!yhueDfTo&==veb*w&stJDow=30S?X6( zK3T*aYj6FPN2oqrDdULh64lHR9*b7-CBNOX_(E4iL%Jf?8NT#+++$SS0t=AiQLvEV z+1e^H4uFeMk(tz`@M}iGI3J^+|lA zP&aoyCBy)0wq7x2o)QkGdRa8>=|t*Uw^KHXkr*HdjfKB9SxJC^vEKGMV*Sk|a>&HWG$USKs$8GVn`Kq%C2@iKk6==kvR$n18S)aY7X;LFuX z2MthQa5B*5Iwf*R%WA?JR4GZJEa{O zhpP`jQlhYq;jB)m>fzEIqZ4l{UKFNLu%gbzb@E@Q-nPU8uY8V?F5 zt%Z-2&JTE4WbxbBFRj!wBYG+X{{Zjy`5u%X{|1kZ;2`d?5v2XCMi02$hayntjeRXJ z-k}MXPYEgN>Dc+VXQEwBM@5RWA$K@`5)cxiIU&i~!2Ax{D={R}+i9T-%aZF|{iAYI zlgooIG~ZxaN@j)6yfXpc!2OS@hpSqOSdRgQXB`P0&7ObWSdZiUVX)c$)DN#So_d)@ zf1glFjWjgQUT80veg$#YQ>7J!6maN=&d$VR9XusD6;fUS=wwMR;bO?;Wub@A*BE{$ha2YVO+;Sf4z1$jWpJW9?Hy2}Fi_`Z?unogIkE3D%5f zSO`{c1q-PbdBB2D+-o^jwDmM?(wkx{Z#ud^Par(}_=II!KI0wu51-pUkXXgD@NM(>|CfWs!N$WscMgsW?0Xyc5!Q5OTt`Q{~e%wkrQI zi6RK&;jZwXa+1BeKD4+ahg~`SMqiebamVYZtm0i6Y93Cwlg8iBh&H^Tfk0^UvuDtO z%0Tu1)Z8Kdk==h-9g2A#UyZ()2cCXgdPuD;(33g#+URi_0e&`3Z=(xsr@E3bt{KyF zi80CfNt_#BM|SR_7v2p>(Z5kD=*Bp^83=8ictH`Emux`~;dsnd0TJqnY&2R- zg5_Gld28($@{{)T5OlnvPkx@)-lcgLh$Xjg(hg?Du1p5;ZOItE?A_6f@=IxRXkElN zI3B9WL&beu_^qA^oGUiouyAG6$Iy^&3>ki;3)Y68_4<~~LM3!=;>=PH{;F%@Qfz(q z!3ud#SMd^3eSY<1`8S_0f%16!A-&x6llpHHZ-ub3Hhh)m!krE&E1E18eyF5Khu-|X zgiZWZ#ctONXwc6T-5*2GSm!ucXum|g#0WOJr!KrS+5F`gK@FHs_0Z&bOG!$vi%l16 z=do4)n{u=;JA1CSLB~fr)XM{M2efggbkhG23oiSXfsEk!)qJIHumwCsj`a;+N=a=* z`m?xeCFV`C$SOVDN;Xbh*@=~4?5Er13`gr7`(W2pTkSAe^IAoQ<`gZ3)<~SlJkStj z@W;*=Spp8CDw^-q2k$23)=NX=$4;iuwcVN|$29*vDA=dpSlj zdo?B^_LOOIe^ff#9ckKNl5&3W+KXslNbXvyQ+=tkEqouLj&ni^YQh3hB_pv#Q&)d+ z8LWB=Zb!{lf+4gSObaFTvvl_m*;~tobL`56CB2Lbr@4V?G)#*%%ho+9FuK(fv`$zw z5kZ$yt08t_Jsp23z3l6Z^&GqO3?1A$uQjLr0ZQZ=C%yjeN=%D29k^?yjx7SRu?X^D z8hJ&`a8W^0w^u0yT)wlz zIZ#AW3BS=d=;h2xRuxDs%rv_%0Do5=%T0t>b3mS59-5Tg@^Up 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 literal 48221 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 diff --git a/src/static/svg/MathWallet.svg b/src/static/svg/MathWallet.svg deleted file mode 100644 index f8993ef5a..000000000 --- a/src/static/svg/MathWallet.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/static/svg/SolanaCreator/Cat1.svg b/src/static/svg/SolanaCreator/Cat1.svg new file mode 100644 index 000000000..c8c57612c --- /dev/null +++ b/src/static/svg/SolanaCreator/Cat1.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/static/svg/SolanaCreator/Cat2.svg b/src/static/svg/SolanaCreator/Cat2.svg new file mode 100644 index 000000000..92da67765 --- /dev/null +++ b/src/static/svg/SolanaCreator/Cat2.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/static/svg/SolanaCreator/Dog1.svg b/src/static/svg/SolanaCreator/Dog1.svg new file mode 100644 index 000000000..c9906829f --- /dev/null +++ b/src/static/svg/SolanaCreator/Dog1.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/static/svg/SolanaCreator/Dog2.svg b/src/static/svg/SolanaCreator/Dog2.svg new file mode 100644 index 000000000..46c437b19 --- /dev/null +++ b/src/static/svg/SolanaCreator/Dog2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/static/svg/SolanaCreator/Logo2svg.svg b/src/static/svg/SolanaCreator/Logo2svg.svg new file mode 100644 index 000000000..ea2fc034e --- /dev/null +++ b/src/static/svg/SolanaCreator/Logo2svg.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/static/svg/Warrning.svg b/src/static/svg/Warning.svg similarity index 97% rename from src/static/svg/Warrning.svg rename to src/static/svg/Warning.svg index 9308469f4..da4ff36fc 100644 --- a/src/static/svg/Warrning.svg +++ b/src/static/svg/Warning.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/src/static/svg/alephiumLogo.svg b/src/static/svg/alephiumLogo.svg index b861bbca1..683db7603 100644 --- a/src/static/svg/alephiumLogo.svg +++ b/src/static/svg/alephiumLogo.svg @@ -7,7 +7,7 @@ - + diff --git a/src/static/svg/bitcoin.svg b/src/static/svg/bitcoin.svg deleted file mode 100644 index 564822e00..000000000 --- a/src/static/svg/bitcoin.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/btc-ic.svg b/src/static/svg/btc-ic.svg deleted file mode 100644 index 0e1bf457e..000000000 --- a/src/static/svg/btc-ic.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/circle-discord.svg b/src/static/svg/circle-discord.svg new file mode 100644 index 000000000..74ab91c8b --- /dev/null +++ b/src/static/svg/circle-discord.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/static/svg/circle-telegram.svg b/src/static/svg/circle-telegram.svg new file mode 100644 index 000000000..d2d562f95 --- /dev/null +++ b/src/static/svg/circle-telegram.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/svg/clover.svg b/src/static/svg/clover.svg deleted file mode 100644 index 0dc4fdf27..000000000 --- a/src/static/svg/clover.svg +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/static/svg/coin98.svg b/src/static/svg/coin98.svg deleted file mode 100644 index b81bb7da7..000000000 --- a/src/static/svg/coin98.svg +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/copy-address.svg b/src/static/svg/copy-address.svg new file mode 100644 index 000000000..9176b4732 --- /dev/null +++ b/src/static/svg/copy-address.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/static/svg/devNet.svg b/src/static/svg/devNet.svg deleted file mode 100644 index fa4b1bd99..000000000 --- a/src/static/svg/devNet.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/devnet.svg b/src/static/svg/devnet.svg index fa4b1bd99..3d5d01b0b 100644 --- a/src/static/svg/devnet.svg +++ b/src/static/svg/devnet.svg @@ -16,4 +16,4 @@ - + \ No newline at end of file diff --git a/src/static/svg/disconnect.svg b/src/static/svg/disconnect.svg new file mode 100644 index 000000000..9f2876aa0 --- /dev/null +++ b/src/static/svg/disconnect.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/svg/dogecoin.svg b/src/static/svg/dogecoin.svg deleted file mode 100644 index 530a62e1b..000000000 --- a/src/static/svg/dogecoin.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/eclipse.svg b/src/static/svg/eclipse.svg new file mode 100644 index 000000000..137cbd8c1 --- /dev/null +++ b/src/static/svg/eclipse.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/svg/empty.svg b/src/static/svg/empty.svg index c2f638ded..bb3656186 100644 --- a/src/static/svg/empty.svg +++ b/src/static/svg/empty.svg @@ -1,13 +1,5 @@ - - - - - - - - - - - - + + + + diff --git a/src/static/svg/ethcoin.svg b/src/static/svg/ethcoin.svg deleted file mode 100644 index 5e003a847..000000000 --- a/src/static/svg/ethcoin.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/exodus.svg b/src/static/svg/exodus.svg deleted file mode 100644 index da9c93431..000000000 --- a/src/static/svg/exodus.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/fttcoin.svg b/src/static/svg/fttcoin.svg deleted file mode 100644 index be25d0e74..000000000 --- a/src/static/svg/fttcoin.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/horizontalSwapArrows.svg b/src/static/svg/horizontalSwapArrows.svg new file mode 100644 index 000000000..1a6361cf8 --- /dev/null +++ b/src/static/svg/horizontalSwapArrows.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/static/svg/horizontal_green_white.svg b/src/static/svg/horizontal_green_white.svg deleted file mode 100644 index c1cf953ff..000000000 --- a/src/static/svg/horizontal_green_white.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/src/static/svg/logo-ic-footer.svg b/src/static/svg/logo-ic-footer.svg deleted file mode 100644 index 58c79cdc9..000000000 --- a/src/static/svg/logo-ic-footer.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/static/svg/logo-ic-nav.svg b/src/static/svg/logo-ic-nav.svg deleted file mode 100644 index 0ce5f52b4..000000000 --- a/src/static/svg/logo-ic-nav.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/static/svg/mainNet.svg b/src/static/svg/mainNet.svg deleted file mode 100644 index 96f45acb3..000000000 --- a/src/static/svg/mainNet.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/mainnet.svg b/src/static/svg/mainnet.svg index 96f45acb3..59030e66c 100644 --- a/src/static/svg/mainnet.svg +++ b/src/static/svg/mainnet.svg @@ -19,4 +19,4 @@ - + \ No newline at end of file diff --git a/src/static/svg/newTab.svg b/src/static/svg/newTab.svg new file mode 100644 index 000000000..85d2e021a --- /dev/null +++ b/src/static/svg/newTab.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/static/svg/phantom.svg b/src/static/svg/phantom.svg deleted file mode 100644 index c77fcab68..000000000 --- a/src/static/svg/phantom.svg +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/plus.svg b/src/static/svg/plus.svg new file mode 100644 index 000000000..eb76ea218 --- /dev/null +++ b/src/static/svg/plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/static/svg/selectToken.svg b/src/static/svg/selectToken.svg new file mode 100644 index 000000000..187c50f42 --- /dev/null +++ b/src/static/svg/selectToken.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/static/svg/slope.svg b/src/static/svg/slope.svg deleted file mode 100644 index a694c73de..000000000 --- a/src/static/svg/slope.svg +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/sny-ic.svg b/src/static/svg/sny-ic.svg deleted file mode 100644 index 4d3deb268..000000000 --- a/src/static/svg/sny-ic.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/sny.svg b/src/static/svg/sny.svg deleted file mode 100644 index 1fcef2844..000000000 --- a/src/static/svg/sny.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/static/svg/snycoin.svg b/src/static/svg/snycoin.svg deleted file mode 100644 index 655aa5643..000000000 --- a/src/static/svg/snycoin.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/solana.svg b/src/static/svg/solana.svg deleted file mode 100644 index 489219f27..000000000 --- a/src/static/svg/solana.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/static/svg/solcoin.svg b/src/static/svg/solcoin.svg deleted file mode 100644 index 071543389..000000000 --- a/src/static/svg/solcoin.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/solflare.svg b/src/static/svg/solflare.svg deleted file mode 100644 index 97440b9cb..000000000 --- a/src/static/svg/solflare.svg +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/sollet.svg b/src/static/svg/sollet.svg deleted file mode 100644 index c3ef786a5..000000000 --- a/src/static/svg/sollet.svg +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/successIcon.svg b/src/static/svg/successIcon.svg new file mode 100644 index 000000000..88bb5952c --- /dev/null +++ b/src/static/svg/successIcon.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/src/static/svg/synthetifyError.svg b/src/static/svg/synthetifyError.svg deleted file mode 100644 index 64f9ebcf4..000000000 --- a/src/static/svg/synthetifyError.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/static/svg/testNet.svg b/src/static/svg/testNet.svg deleted file mode 100644 index 8be9092df..000000000 --- a/src/static/svg/testNet.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/svg/testnet.svg b/src/static/svg/testnet.svg index 8be9092df..b431c4bda 100644 --- a/src/static/svg/testnet.svg +++ b/src/static/svg/testnet.svg @@ -18,4 +18,4 @@ - + \ No newline at end of file diff --git a/src/static/svg/twitter-circle.svg b/src/static/svg/twitter-circle.svg deleted file mode 100644 index cff5f3d3f..000000000 --- a/src/static/svg/twitter-circle.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - diff --git a/src/static/svg/twitter-ic-footer.svg b/src/static/svg/twitter-ic-footer.svg deleted file mode 100644 index d4f2b0879..000000000 --- a/src/static/svg/twitter-ic-footer.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/static/svg/twitterCircle.svg b/src/static/svg/twitterCircle.svg deleted file mode 100644 index 8b083331c..000000000 --- a/src/static/svg/twitterCircle.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - diff --git a/src/static/svg/unknownToken.svg b/src/static/svg/unknownToken.svg new file mode 100644 index 000000000..cca2e0500 --- /dev/null +++ b/src/static/svg/unknownToken.svg @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/static/svg/wallet.svg b/src/static/svg/wallet.svg new file mode 100644 index 000000000..ce0b8d975 --- /dev/null +++ b/src/static/svg/wallet.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/static/svg/xCircle.svg b/src/static/svg/xCircle.svg new file mode 100644 index 000000000..30cb29db2 --- /dev/null +++ b/src/static/svg/xCircle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/svg/xusd-coin.svg b/src/static/svg/xusd-coin.svg deleted file mode 100644 index 5b00a7a16..000000000 --- a/src/static/svg/xusd-coin.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/static/theme.ts b/src/static/theme/index.ts similarity index 83% rename from src/static/theme.ts rename to src/static/theme/index.ts index 3e0e16cbd..401c79c32 100644 --- a/src/static/theme.ts +++ b/src/static/theme/index.ts @@ -1,16 +1,16 @@ -import { createTheme } from '@material-ui/core/styles' +import { createTheme } from '@mui/material/styles' export const colors = { black: { full: '#000000', - background: '#1B1C2A', // v2.0 + background: '#1B1C2A', light: '#090B1B', kinda: '#1A1A1A', greyish: '#081323', - cinder: '#0E0C12', // v2.0 background color - controls: '#44424E', // v2.0 controls background color - header: '#1A1D28', // v2.0 header - card: '#28242E' // v2.0 card color + cinder: '#0E0C12', + controls: '#44424E', + header: '#1A1D28', + card: '#28242E' }, blue: { accent: '#072E5A', @@ -21,7 +21,7 @@ export const colors = { neon: '#08F7FE', astel: '#48ADF1', bastille: '#1E1A23', - charade: '#272735', // v2.0 component + charade: '#272735', deep: '#4B5983' }, green: { @@ -46,7 +46,6 @@ export const colors = { neon: '#F5D300' }, navy: { - // colors with suffix "2" on figma background: '#0C0D2C', dark: '#0E0E2A', component: '#1D1D49', @@ -65,6 +64,7 @@ export const colors = { invariant: { warning: '#EFD063', pink: '#EF84F5', + lightPink: '#f29df7', violet: '#9C3EBD', green: '#2EE09A', dark: '#040B22', @@ -75,7 +75,7 @@ export const colors = { lightHover: '#A9B6BF', black: '#010514', textGrey: '#A9B6BF', - lightGrey: '#A9B6BF', + lightGrey: '#bac7d1', text: '#FFFFFF', Error: '#FB555F', greenLinearGradient: 'linear-gradient(180deg, #2EE09A 0%, #21A47C 100%)', @@ -160,8 +160,8 @@ export const typography = { export const theme = createTheme({ palette: { primary: { - main: colors.navy.button, // v2.0 - contrastText: colors.navy.veryLightGrey // v2.0 + main: colors.navy.button, + contrastText: colors.navy.veryLightGrey }, secondary: { main: colors.green.button, @@ -187,14 +187,13 @@ export const theme = createTheme({ body3: typography.body3, caption: typography.caption1 }, - overrides: { - MuiInputBase: { - input: { - MozAppearance: 'textfield', - '&::-webkit-clear-button, &::-webkit-outer-spin-button, &::-webkit-inner-spin-button': { - display: 'none' - } - } + breakpoints: { + values: { + xs: 0, + sm: 600, + md: 960, + lg: 1280, + xl: 1920 } } }) diff --git a/src/static/theme/types.ts b/src/static/theme/types.ts new file mode 100644 index 000000000..4d5109ef9 --- /dev/null +++ b/src/static/theme/types.ts @@ -0,0 +1,19 @@ +import '@mui/material/styles' + +declare module '@mui/material/styles' { + interface TypographyVariants { + body3: React.CSSProperties + } + + // allow configuration using `createTheme` + interface TypographyVariantsOptions { + body3?: React.CSSProperties + } +} + +// Update the TypographyProps interface if you plan to use the variant in the Typography component +declare module '@mui/material/Typography' { + interface TypographyPropsVariantOverrides { + body3: true + } +} diff --git a/src/store/consts/static.ts b/src/store/consts/static.ts index 29d257a98..c1e832099 100644 --- a/src/store/consts/static.ts +++ b/src/store/consts/static.ts @@ -1,26 +1,17 @@ import { MOCK_TOKENS } from '@invariant-labs/sdk' import { FEE_TIERS } from '@invariant-labs/sdk/lib/utils' import { BN } from '@project-serum/anchor' -import { ISnackbar } from '@reducers/snackbars' +import { ISnackbar } from '@store/reducers/snackbars' import { PublicKey } from '@solana/web3.js' +import { BestTier, Chain, PrefixConfig, Token } from './types' -declare global { - interface Window { - solana: any - } - - interface ImportMeta { - globEager: (x: string) => { [propertyName: string]: { default: string } } - } -} -export interface Token { - symbol: string - address: PublicKey - decimals: number - name: string - logoURI: string - isUnknown?: boolean +export enum NetworkType { + Local = 'Local', + Testnet = 'Testnet', + Devnet = 'Devnet', + Mainnet = 'Mainnet' } + export const PRICE_DECIMAL = 24 export const USDC_DEV: Token = { symbol: 'USDC', @@ -138,7 +129,7 @@ export const HBB_DEV: Token = { 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HBB111SCo9jkCejsZfz8Ec8nH7T6THF8KEKSnvwT6XK6/logo.svg' } -enum SolanaNetworks { +export enum RPC { DEV = 'https://api.devnet.solana.com', TEST = 'https://api.testnet.solana.com', MAIN = 'https://api.mainnet-beta.solana.com', @@ -152,27 +143,14 @@ enum SolanaNetworks { LOCAL = 'http://127.0.0.1:8899' } -enum NetworkType { - DEVNET = 'Devnet', - TESTNET = 'Testnet', - LOCALNET = 'Localnet', - MAINNET = 'Mainnet' -} - -const DEFAULT_PUBLICKEY = new PublicKey(0) -const MAX_U64 = new BN('18446744073709551615') +export const DEFAULT_PUBLICKEY = new PublicKey(0) +export const MAX_U64 = new BN('18446744073709551615') export const tokens: Record = { Devnet: [USDC_DEV, USDT_DEV, BTC_DEV, MSOL_DEV], Mainnet: [], Testnet: [], - Localnet: [] -} - -export interface BestTier { - tokenX: PublicKey - tokenY: PublicKey - bestTierIndex: number + Local: [] } const mainnetBestTiersCreator = () => { @@ -273,7 +251,7 @@ export const bestTiers: Record = { ], Testnet: [], Mainnet: mainnetBestTiersCreator(), - Localnet: [] + Local: [] } export const airdropTokens: Record = { @@ -291,7 +269,7 @@ export const airdropTokens: Record = { ], Mainnet: [], Testnet: [], - Localnet: [] + Local: [] } export const airdropQuantities: Record = { @@ -309,7 +287,7 @@ export const airdropQuantities: Record = { ], Mainnet: [], Testnet: [], - Localnet: [] + Local: [] } export const WRAPPED_SOL_ADDRESS = 'So11111111111111111111111111111111111111112' @@ -320,13 +298,20 @@ export const WSOL_POSITION_INIT_LAMPORTS = new BN(6164600) export const WSOL_POOL_INIT_LAMPORTS = new BN(106000961) +export const WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT_TEST = new BN(9200961) +export const WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT_MAIN = new BN(9200961) + +export const WSOL_POSITION_INIT_LAMPORTS_MAIN = new BN(6164600) +export const WSOL_POSITION_INIT_LAMPORTS_TEST = new BN(6164600) + +export const WSOL_POOL_INIT_LAMPORTS_MAIN = new BN(106000961) +export const WSOL_POOL_INIT_LAMPORTS_TEST = new BN(106000961) + export const ALL_FEE_TIERS_DATA = FEE_TIERS.map((tier, index) => ({ tier, primaryIndex: index })).slice(3, -1) // remove slice if all tiers should be visible -export { DEFAULT_PUBLICKEY, MAX_U64, NetworkType, SolanaNetworks } - export const POSITIONS_PER_PAGE = 5 export const SIGNING_SNACKBAR_CONFIG: Omit = { @@ -335,15 +320,140 @@ export const SIGNING_SNACKBAR_CONFIG: Omit = { persist: true } -export type PositionOpeningMethod = 'range' | 'concentration' - export const STABLECOIN_ADDRESSES: string[] = [ 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB' ] // USDC, USDT -export const TIMEOUT_ERROR_MESSAGE = 'Transaction timed out. Check the details to see if it passed.' +export const REFRESHER_INTERVAL = 120 -export const RECOMMENDED_RPC_ADDRESS = SolanaNetworks.MAIN_HELIUS +export const commonTokensForNetworks: Record = { + Devnet: [ + USDC_DEV.address, + USDT_DEV.address, + SOL_DEV.address, + MSOL_DEV.address, + BTC_DEV.address, + RENDOGE_DEV.address, + MCK_DEV.address, + MC2_DEV.address, + MC3_DEV.address, + USDH_DEV.address + ], + Mainnet: [ + new PublicKey('So11111111111111111111111111111111111111112'), + new PublicKey('JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN'), + new PublicKey('85VBFQZC9TZkfaptBWjvUw7YbZjy52A6mjtPGjstQAmQ'), + new PublicKey('HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3'), + new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'), + new PublicKey('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'), + new PublicKey('EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm'), + new PublicKey('CKaKtYvz6dKPyMvYq9Rh3UBrnNqYZAyd7iF4hJtjUvks') + ], + Testnet: [], + Local: [] +} -export const REFRESHER_INTERVAL = 120 +export const FormatConfig = { + B: 1000000000, + M: 1000000, + K: 1000, + BDecimals: 9, + MDecimals: 6, + KDecimals: 3, + DecimalsAfterDot: 2 +} + +export enum PositionTokenBlock { + None, + A, + B +} + +export const subNumbers = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉'] + +export const defaultPrefixConfig: PrefixConfig = { + B: 1000000000, + M: 1000000, + K: 10000 +} + +export const getAddressTickerMap = (network: NetworkType): { [k: string]: string } => { + if (network === NetworkType.Mainnet) { + return { + SOL: 'So11111111111111111111111111111111111111112', + USDC: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', + USDT: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', + USDH: 'USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX', + mSOL: 'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So', + bSOL: 'bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1', + stSOL: '7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj', + SNY: '4dmKkXNHdgYsXqBHCuMikNQWwVomZURhYvkkX5c4pQ7y', + ETH: '7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs', + LFNTY: 'LFNTYraetVioAPnGJht4yNg2aUZFXR776cMeN9VMjXp' + } + } else { + return {} + } +} + +export const getReversedAddressTickerMap = (network: NetworkType) => { + return Object.fromEntries( + Object.entries(getAddressTickerMap(network)).map(([key, value]) => [value, key]) + ) +} + +export const MINIMAL_POOL_INIT_PRICE = 0.00000001 + +export const DEFAULT_SWAP_SLIPPAGE = '0.50' +export const DEFAULT_NEW_POSITION_SLIPPAGE = '0.50' + +export const CHAINS = [ + { name: Chain.Solana, address: 'https://invariant.app/swap' }, + { name: Chain.AlephZero, address: 'https://azero.invariant.app/exchange' }, + { name: Chain.Eclipse, address: 'https://eclipse.invariant.app/exchange' }, + { name: Chain.Vara, address: 'https://vara.invariant.app/exchange' }, + { name: Chain.Alephium, address: 'https://alph.invariant.app/exchange' } +] + +export const enum SortTypePoolList { + NAME_ASC, + NAME_DESC, + FEE_ASC, + FEE_DESC, + VOLUME_ASC, + VOLUME_DESC, + TVL_ASC, + TVL_DESC + // APY_ASC, + // APY_DESC +} + +export const enum SortTypeTokenList { + NAME_ASC, + NAME_DESC, + PRICE_ASC, + PRICE_DESC, + // CHANGE_ASC, + // CHANGE_DESC, + VOLUME_ASC, + VOLUME_DESC, + TVL_ASC, + TVL_DESC +} + +export const RECOMMENDED_RPC_ADDRESS = { + [NetworkType.Testnet]: RPC.TEST, + [NetworkType.Mainnet]: RPC.MAIN_HELIUS, + [NetworkType.Devnet]: RPC.DEV, + [NetworkType.Local]: '' +} + +export const DEFAULT_TOKEN_DECIMAL = 6 + +export const COINGECKO_QUERY_COOLDOWN = 20 * 60 * 1000 + +export const DEFAULT_TOKENS = ['ethereum', 'solana', 'usd-coin', 'dogwifhat'] + +export const TIMEOUT_ERROR_MESSAGE = + 'Transaction has timed out. Check the details to confirm success.' diff --git a/src/store/consts/types.ts b/src/store/consts/types.ts new file mode 100644 index 000000000..b4794e123 --- /dev/null +++ b/src/store/consts/types.ts @@ -0,0 +1,288 @@ +import { ActionCreatorWithPayload } from '@reduxjs/toolkit' +import { BN } from '@project-serum/anchor' +import { PublicKey } from '@solana/web3.js' +import { NetworkType } from './static' + +declare global { + interface Window { + solana: any + } + + interface ImportMeta { + globEager: (x: string) => { [propertyName: string]: { default: string } } + } +} + +interface ActionsBasicType { + [k: string]: ActionCreatorWithPayload +} + +export type PayloadType = { + [k in keyof actions]: Parameters[0] +} + +export enum SwapError { + InsufficientLiquidity, + AmountIsZero, + NoRouteFound, + MaxSwapStepsReached, + StateOutdated, + Unknown +} + +export interface Token { + symbol: string + address: PublicKey + decimals: number + name: string + logoURI: string + coingeckoId?: string + isUnknown?: boolean +} + +export interface ISelectNetwork { + networkType: NetworkType + rpc: string + rpcName?: string +} + +export interface PrefixConfig { + B?: number + M?: number + K?: number +} + +export interface BestTier { + tokenX: PublicKey + tokenY: PublicKey + bestTierIndex: number +} + +export type CoinGeckoAPIData = CoinGeckoAPIPriceData[] + +export type CoinGeckoAPIPriceData = { + id: string + current_price: number + price_change_percentage_24h: number +} + +export type SimulateResult = { + amountOut: BN + poolIndex: number + AmountOutWithFee: BN + estimatedPriceAfterSwap: BN + minimumReceived: BN + priceImpact: BN + error: string[] +} + +export interface FormatNumberThreshold { + value: number + decimals: number + divider?: number +} + +export type PositionOpeningMethod = 'range' | 'concentration' + +export interface TokenPriceData { + price: number +} + +export interface CoingeckoApiPriceData { + id: string + current_price: number + price_change_percentage_24h: number +} + +export interface CoingeckoPriceData { + price: number + priceChange: number +} + +export interface SnapshotValueData { + tokenBNFromBeginning: string + usdValue24: number +} + +export interface PrefixConfig { + B?: number + M?: number + K?: number +} + +export interface ParsedBN { + BN: BN + decimal: number +} + +export interface IncentiveRewardData { + apy: number + apySingleTick: number + total: number + token: string +} + +export interface PoolSnapshot { + timestamp: number + volumeX: SnapshotValueData + volumeY: SnapshotValueData + liquidityX: SnapshotValueData + liquidityY: SnapshotValueData + feeX: SnapshotValueData + feeY: SnapshotValueData +} +// export interface Token { +// symbol: string +// address: PublicKey +// decimals: number +// name: string +// logoURI: string +// balance?: BN +// coingeckoId?: string +// isUnknown?: boolean +// } + +export interface BestTier { + tokenX: PublicKey + tokenY: PublicKey + bestTierIndex: number +} + +export interface ISelectChain { + name: Chain + address: string +} + +export enum Chain { + Solana = 'Solana', + AlephZero = 'Aleph Zero', + Eclipse = 'Eclipse', + Vara = 'Vara', + Alephium = 'Alephium' +} + +export interface SnapshotValueData { + tokenBNFromBeginning: string + usdValue24: number +} + +export interface PoolSnapshot { + timestamp: number + volumeX: SnapshotValueData + volumeY: SnapshotValueData + liquidityX: SnapshotValueData + liquidityY: SnapshotValueData + feeX: SnapshotValueData + feeY: SnapshotValueData +} + +export interface FullSnap { + volume24: { + value: number + change: number + } + tvl24: { + value: number + change: number + } + fees24: { + value: number + change: number + } + tokensData: TokenStatsDataWithString[] + poolsData: PoolStatsDataWithString[] + volumePlot: TimeData[] + liquidityPlot: TimeData[] +} + +export interface TokenStatsDataWithString { + address: string + price: number + volume24: number + tvl: number +} + +export interface TimeData { + timestamp: number + value: number +} + +export interface PoolStatsDataWithString { + poolAddress: string + tokenX: string + tokenY: string + fee: number + volume24: number + tvl: number + apy: number +} + +export interface SnapshotValueData { + tokenBNFromBeginning: string + usdValue24: number +} + +export interface PoolSnapshot { + timestamp: number + volumeX: SnapshotValueData + volumeY: SnapshotValueData + liquidityX: SnapshotValueData + liquidityY: SnapshotValueData + feeX: SnapshotValueData + feeY: SnapshotValueData +} + +export interface FullSnap { + volume24: { + value: number + change: number + } + tvl24: { + value: number + change: number + } + fees24: { + value: number + change: number + } + tokensData: TokenStatsDataWithString[] + poolsData: PoolStatsDataWithString[] + volumePlot: TimeData[] + liquidityPlot: TimeData[] +} + +export interface TokenStatsDataWithString { + address: string + price: number + volume24: number + tvl: number +} + +export interface TimeData { + timestamp: number + value: number +} + +export interface PoolStatsDataWithString { + poolAddress: string + tokenX: string + tokenY: string + fee: number + volume24: number + tvl: number + apy: number +} + +export interface IPriorityFeeOptions { + label: string + value: number + saveValue: number + description: string +} + +export interface IPriorityFeeOptions { + label: string + value: number + saveValue: number + description: string +} diff --git a/src/store/consts/uiUtils.ts b/src/store/consts/uiUtils.ts deleted file mode 100644 index f74b82930..000000000 --- a/src/store/consts/uiUtils.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { BN } from '@project-serum/anchor' -import { STABLECOIN_ADDRESSES } from './static' - -export const toBlur = 'global-blur' - -export const addressTickerMap: { [key: string]: string } = { - SOL: 'So11111111111111111111111111111111111111112', - USDC: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', - USDT: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', - USDH: 'USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX', - mSOL: 'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So', - bSOL: 'bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1', - stSOL: '7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj', - SNY: '4dmKkXNHdgYsXqBHCuMikNQWwVomZURhYvkkX5c4pQ7y', - ETH: '7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs', - LFNTY: 'LFNTYraetVioAPnGJht4yNg2aUZFXR776cMeN9VMjXp' -} - -export const reversedAddressTickerMap = Object.fromEntries( - Object.entries(addressTickerMap).map(([key, value]) => [value, key]) -) - -// could use rewriting to backdrop-filter when browser support is better -export const blurContent = () => { - const el = document.getElementById(toBlur) - if (!el) return - el.style.filter = 'blur(4px) brightness(0.4)' -} -export const unblurContent = () => { - const el = document.getElementById(toBlur) - if (!el) return - el.style.filter = 'none' -} - -const addPxToValue = ['fontSize'] // add more css properties when needed - -export const importantStyles = (styleObject: { [key: string]: string | number }) => - Object.entries(styleObject).reduce( - (obj, [key, value]) => ({ - ...obj, - [key]: `${value}${addPxToValue.some(prop => prop === key) ? 'px' : ''} !important` - }), - styleObject - ) - -export const parseFeeToPathFee = (fee: BN): string => { - const parsedFee = (fee / Math.pow(10, 8)).toString().padStart(3, '0') - return parsedFee.slice(0, parsedFee.length - 2) + '_' + parsedFee.slice(parsedFee.length - 2) -} - -export const parsePathFeeToFeeString = (pathFee: string): string => { - return (+pathFee.replace('_', '') * Math.pow(10, 8)).toString() -} - -export const tickerToAddress = (ticker: string): string => { - return addressTickerMap[ticker] || ticker -} - -export const addressToTicker = (address: string): string => { - return reversedAddressTickerMap[address] || address -} - -export const initialXtoY = (tokenXAddress?: string, tokenYAddress?: string) => { - if (!tokenXAddress || !tokenYAddress) { - return true - } - - const isTokeXStablecoin = STABLECOIN_ADDRESSES.includes(tokenXAddress) - const isTokenYStablecoin = STABLECOIN_ADDRESSES.includes(tokenYAddress) - - return isTokeXStablecoin === isTokenYStablecoin || (!isTokeXStablecoin && !isTokenYStablecoin) -} diff --git a/src/store/index.ts b/src/store/index.ts index 4a8346889..eba3d318c 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,31 +1,73 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -import { applyMiddleware, compose, createStore, Store } from 'redux' -import { middleware, sagaMiddleware } from './middleware' +import createSagaMiddleware from 'redux-saga' +import { configureStore, isPlain } from '@reduxjs/toolkit' import combinedReducers from './reducers' import rootSaga from './sagas' +import { PublicKey } from '@solana/web3.js' +import { BN } from '@project-serum/anchor' -declare global { - interface Window { - __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: (a: R) => R +const isLocalhost = window.location.hostname === 'localhost' + +const isSerializable = (value: unknown) => { + return ( + typeof value === 'bigint' || isPlain(value) || value instanceof PublicKey || value instanceof BN + ) +} + +const getEntries = (value: unknown) => { + if (typeof value === 'bigint') { + return [['bigint', value.toString()]] as [string, unknown][] + } + + if (value instanceof PublicKey) { + return [['PublicKey', (value as PublicKey).toBase58()]] as [string, unknown][] + } + + if (value instanceof BN) { + return [['BN', (value as BN).toString()]] as [string, unknown][] } + + return Object.entries(value as Record) } -type AppStore = Store - -const configureStore = (initialState = {}): AppStore => { - const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?? compose - const store = createStore( - combinedReducers, - initialState, - composeEnhancers(applyMiddleware(...middleware)) - ) - // if (process.env.NODE_ENV === 'development' && module.hot) { - // module.hot.accept('./reducers', () => { - // const newRootReducer = require('./reducers').default - // store.replaceReducer(newRootReducer) - // }) - // } + +const configureAppStore = (initialState = {}) => { + const reduxSagaMonitorOptions = {} + const sagaMiddleware = createSagaMiddleware(reduxSagaMonitorOptions) + + const middleware = [sagaMiddleware] + + const store = configureStore({ + reducer: combinedReducers, + middleware: getDefaultMiddleware => + getDefaultMiddleware({ + serializableCheck: { + isSerializable, + getEntries, + ignoredActions: ['positions/closePosition', 'pools/setTickMaps', 'pools/getPoolData'] + } + }).concat(middleware), + preloadedState: initialState, + devTools: isLocalhost + ? { + serialize: { + replacer: (_key, value) => + typeof value === 'bigint' + ? value.toString() + : value instanceof PublicKey + ? (value as PublicKey).toBase58() + : value instanceof BN + ? (value as BN).toString() + : value, + options: true + } + } + : false + }) + + sagaMiddleware.run(rootSaga) return store } -export const store = configureStore() -export const runSagas = (): unknown => sagaMiddleware.run(rootSaga) +export const store = configureAppStore() + +export type AppDispatch = typeof store.dispatch +export type RootState = ReturnType diff --git a/src/store/middleware.ts b/src/store/middleware.ts deleted file mode 100644 index 19b9d3bb1..000000000 --- a/src/store/middleware.ts +++ /dev/null @@ -1,7 +0,0 @@ -import createSagaMiddleware from 'redux-saga' - -// It will start spinning sagas passed to it as an args -export const sagaMiddleware = createSagaMiddleware() - -// Push custom middleware here -export const middleware = [sagaMiddleware] diff --git a/src/store/reducers/bonds.ts b/src/store/reducers/bonds.ts index 959cd9af4..65de6988c 100644 --- a/src/store/reducers/bonds.ts +++ b/src/store/reducers/bonds.ts @@ -2,7 +2,7 @@ import { BondSaleStruct, BondStruct } from '@invariant-labs/bonds-sdk/lib/sale' import { BN } from '@project-serum/anchor' import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { PublicKey } from '@solana/web3.js' -import { PayloadType } from './types' +import { PayloadType } from '@store/consts/types' export interface BondSaleWithAddress extends BondSaleStruct { address: PublicKey diff --git a/src/store/reducers/farms.ts b/src/store/reducers/farms.ts index a5e6f7875..40f568479 100644 --- a/src/store/reducers/farms.ts +++ b/src/store/reducers/farms.ts @@ -1,10 +1,10 @@ /* eslint-disable @typescript-eslint/restrict-plus-operands */ import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { PublicKey } from '@solana/web3.js' -import { PayloadType } from './types' import { IncentiveStructure, Stake } from '@invariant-labs/staker-sdk/lib/staker' import { BN } from '@project-serum/anchor' import { Tick } from '@invariant-labs/sdk/lib/market' +import { PayloadType } from '@store/consts/types' export interface CurrentFarmData { farm: PublicKey diff --git a/src/store/reducers/index.ts b/src/store/reducers/index.ts index 529742d98..6de43e7c3 100644 --- a/src/store/reducers/index.ts +++ b/src/store/reducers/index.ts @@ -1,7 +1,6 @@ import { combineReducers } from 'redux' import storage from 'redux-persist/lib/storage' import { persistReducer, createTransform, createMigrate, MigrationManifest } from 'redux-persist' -import { NetworkType, SolanaNetworks } from '@consts/static' import { reducer as snackbarsReducer, snackbarsSliceName } from './snackbars' import { reducer as solanaWalletReducer, solanaWalletSliceName } from './solanaWallet' import { @@ -15,6 +14,7 @@ import { positionsSliceName, reducer as positionsReducer } from './positions' import { statsSliceName, reducer as statsReducer } from './stats' import { farmsSliceName, reducer as farmsReducer } from './farms' import { bondsSliceName, reducer as bondsReducer } from './bonds' +import { NetworkType, RPC } from '@store/consts/static' const transformNetwork = createTransform( (inboundState: any, _key) => { @@ -22,7 +22,7 @@ const transformNetwork = createTransform( }, (outboundState, key) => { if (key === 'network' && !Object.values(NetworkType).includes(outboundState)) { - return NetworkType.MAINNET + return NetworkType.Mainnet } return outboundState @@ -35,22 +35,22 @@ const migrations: MigrationManifest = { const network = typeof state?.network !== 'undefined' && Object.values(NetworkType).includes(state.network) ? state.network - : NetworkType.MAINNET + : NetworkType.Mainnet let rpcAddress switch (network) { - case NetworkType.DEVNET: - rpcAddress = SolanaNetworks.DEV + case NetworkType.Devnet: + rpcAddress = RPC.DEV break - case NetworkType.TESTNET: - rpcAddress = SolanaNetworks.TEST + case NetworkType.Testnet: + rpcAddress = RPC.TEST break - case NetworkType.LOCALNET: - rpcAddress = SolanaNetworks.LOCAL + case NetworkType.Local: + rpcAddress = RPC.LOCAL break - case NetworkType.MAINNET: - rpcAddress = SolanaNetworks.MAIN_ALCHEMY + case NetworkType.Mainnet: + rpcAddress = RPC.MAIN_ALCHEMY break } diff --git a/src/store/reducers/pools.ts b/src/store/reducers/pools.ts index 37c4bba61..97f7bf46e 100644 --- a/src/store/reducers/pools.ts +++ b/src/store/reducers/pools.ts @@ -1,12 +1,11 @@ -import { Token } from '@consts/static' import { Pair } from '@invariant-labs/sdk' import { PoolStructure, Tickmap } from '@invariant-labs/sdk/lib/market' import { Tick } from '@invariant-labs/sdk/src/market' import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { PublicKey } from '@solana/web3.js' -import { PayloadType } from './types' import * as R from 'remeda' import { Range } from '@invariant-labs/sdk/lib/utils' +import { PayloadType, Token } from '@store/consts/types' export interface PoolWithAddress extends PoolStructure { address: PublicKey @@ -17,6 +16,9 @@ export interface IPoolsStore { pools: { [key in string]: PoolWithAddress } poolTicks: { [key in string]: Tick[] } isLoadingLatestPoolsForTransaction: boolean + isLoadingTicksAndTickMaps: boolean + isLoadingTokens: boolean + isLoadingTokensError: boolean tickMaps: { [key in string]: Tickmap } volumeRanges: Record } @@ -53,6 +55,9 @@ export const defaultState: IPoolsStore = { pools: {}, poolTicks: {}, isLoadingLatestPoolsForTransaction: false, + isLoadingTicksAndTickMaps: false, + isLoadingTokens: false, + isLoadingTokensError: false, tickMaps: {}, volumeRanges: {} } @@ -87,6 +92,7 @@ const poolsSlice = createSlice({ ...state.tokens, ...action.payload } + state.isLoadingTokens = false return state }, setVolumeRanges(state, action: PayloadAction>) { diff --git a/src/store/reducers/positions.ts b/src/store/reducers/positions.ts index b1a06cf32..133372856 100644 --- a/src/store/reducers/positions.ts +++ b/src/store/reducers/positions.ts @@ -1,8 +1,8 @@ import { InitPosition, Position, Tick } from '@invariant-labs/sdk/lib/market' import { BN } from '@project-serum/anchor' -import { PayloadType } from '@reducers/types' import { PayloadAction, createSlice } from '@reduxjs/toolkit' import { PublicKey } from '@solana/web3.js' +import { PayloadType } from '@store/consts/types' export interface PositionWithAddress extends Position { address: PublicKey @@ -29,7 +29,7 @@ export interface InitPositionStore { success: boolean } -export interface CurrentPositionRangeTicksStore { +export interface CurrentPositionTicksStore { lowerTick?: Tick upperTick?: Tick loading: boolean @@ -38,8 +38,9 @@ export interface IPositionsStore { lastPage: number plotTicks: PlotTicks positionsList: PositionsListStore - currentPositionRangeTicks: CurrentPositionRangeTicksStore + currentPositionTicks: CurrentPositionTicksStore initPosition: InitPositionStore + shouldNotUpdateRange: boolean } export interface InitPositionData @@ -58,6 +59,7 @@ export interface GetCurrentTicksData { poolIndex: number isXtoY: boolean disableLoading?: boolean + onlyUserPositionsEnabled?: boolean } export interface ClosePositionData { @@ -81,7 +83,7 @@ export const defaultState: IPositionsStore = { list: [], loading: true }, - currentPositionRangeTicks: { + currentPositionTicks: { lowerTick: undefined, upperTick: undefined, loading: false @@ -89,7 +91,8 @@ export const defaultState: IPositionsStore = { initPosition: { inProgress: false, success: false - } + }, + shouldNotUpdateRange: false } export const positionsSliceName = 'positions' @@ -146,14 +149,14 @@ const positionsSlice = createSlice({ return state }, getCurrentPositionRangeTicks(state, _action: PayloadAction) { - state.currentPositionRangeTicks.loading = true + state.currentPositionTicks.loading = true return state }, setCurrentPositionRangeTicks( state, action: PayloadAction<{ lowerTick?: Tick; upperTick?: Tick }> ) { - state.currentPositionRangeTicks = { + state.currentPositionTicks = { ...action.payload, loading: false } @@ -168,6 +171,10 @@ const positionsSlice = createSlice({ resetState(state) { state = defaultState return state + }, + setShouldNotUpdateRange(state, action: PayloadAction) { + state.shouldNotUpdateRange = action.payload + return state } } }) diff --git a/src/store/reducers/snackbars.ts b/src/store/reducers/snackbars.ts index 5de5213f4..38f942307 100644 --- a/src/store/reducers/snackbars.ts +++ b/src/store/reducers/snackbars.ts @@ -1,17 +1,21 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit' -import { PayloadType } from './types' -import { SnackbarVariant } from '@components/Snackbar/Snackbar' -import { createLoaderKey } from '@consts/utils' +import { PayloadType } from '../consts/types' +import { createLoaderKey } from '@utils/utils' +import { SnackbarAction, VariantType } from 'notistack' export interface ISnackbar { message: string key?: string - variant: SnackbarVariant + variant: VariantType open: boolean - action?: (key: number) => JSX.Element + action?: SnackbarAction persist?: boolean txid?: string isAccount?: boolean + link?: { + label: string + href: string + } } export interface ISnackbarStore { @@ -34,14 +38,6 @@ const snackbarsSlice = createSlice({ }) return state }, - hide(state, action: PayloadAction) { - const index = state.snackbars.findIndex(snack => snack.key === action.payload) - if (index === -1) { - return state - } - state.snackbars[index].open = false - return state - }, remove(state, action: PayloadAction) { state.snackbars = state.snackbars.filter(snack => snack.key !== action.payload) return state diff --git a/src/store/reducers/solanaConnection.ts b/src/store/reducers/solanaConnection.ts index ae464bd3e..2d8a32957 100644 --- a/src/store/reducers/solanaConnection.ts +++ b/src/store/reducers/solanaConnection.ts @@ -1,6 +1,6 @@ -import { NetworkType, SolanaNetworks } from '@consts/static' +import { NetworkType, RECOMMENDED_RPC_ADDRESS, RPC } from '@store/consts/static' import { PayloadAction, createSlice } from '@reduxjs/toolkit' -import { PayloadType } from './types' +import { PayloadType } from '@store/consts/types' export enum Status { Uninitialized = 'uninitialized', @@ -31,15 +31,21 @@ export interface ISolanaConnectionStore { timeoutError: boolean } +const network = + NetworkType[localStorage.getItem('INVARIANT_NETWORK_SOLANA') as keyof typeof NetworkType] ?? + NetworkType.Mainnet + export const defaultState: ISolanaConnectionStore = { status: Status.Uninitialized, message: '', - network: NetworkType.MAINNET, + network: network, slot: 0, - rpcAddress: SolanaNetworks.MAIN_HELIUS, + rpcAddress: + localStorage.getItem(`INVARIANT_RPC_SOLANA_${network}`) ?? RECOMMENDED_RPC_ADDRESS[network], rpcStatus: RPC_STATUS, timeoutError: false } + export const solanaConnectionSliceName = 'solanaConnection' const solanaConnectionSlice = createSlice({ name: solanaConnectionSliceName, @@ -57,16 +63,8 @@ const solanaConnectionSlice = createSlice({ state.message = action.payload return state }, - setNetwork( - state, - action: PayloadAction<{ - network: NetworkType - rpcAddress: string - rpcName?: string - }> - ) { - state.network = action.payload.network - state.rpcAddress = action.payload.rpcAddress + setNetwork(state, action: PayloadAction) { + state.network = action.payload return state }, updateSlot(state) { @@ -76,6 +74,10 @@ const solanaConnectionSlice = createSlice({ state.slot = action.payload return state }, + setRPCAddress(state, action: PayloadAction) { + state.rpcAddress = action.payload + return state + }, setRpcStatus(state, action: PayloadAction) { state.rpcStatus = action.payload return state diff --git a/src/store/reducers/solanaWallet.ts b/src/store/reducers/solanaWallet.ts index db06353fd..17cee82e1 100644 --- a/src/store/reducers/solanaWallet.ts +++ b/src/store/reducers/solanaWallet.ts @@ -1,27 +1,16 @@ -import { - BTC_DEV, - DEFAULT_PUBLICKEY, - MC2_DEV, - MC3_DEV, - MCK_DEV, - MSOL_DEV, - NetworkType, - RENDOGE_DEV, - SOL_DEV, - USDC_DEV, - USDH_DEV, - USDT_DEV -} from '@consts/static' +import { DEFAULT_PUBLICKEY } from '@store/consts/static' import { BN } from '@project-serum/anchor' import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { PublicKey } from '@solana/web3.js' -import { PayloadType } from './types' +import { PayloadType } from '@store/consts/types' + export enum Status { Uninitialized = 'uninitialized', Init = 'init', Error = 'error', Initialized = 'initalized' } + export interface ITokenAccount { programId: PublicKey balance: BN @@ -49,7 +38,6 @@ export interface ISolanaWallet { balance: BN accounts: { [key in string]: ITokenAccount } balanceLoading: boolean - commonTokens: Record } export const defaultState: ISolanaWallet = { @@ -57,33 +45,7 @@ export const defaultState: ISolanaWallet = { address: DEFAULT_PUBLICKEY, balance: new BN(0), accounts: {}, - balanceLoading: false, - commonTokens: { - Devnet: [ - USDC_DEV.address, - USDT_DEV.address, - SOL_DEV.address, - MSOL_DEV.address, - BTC_DEV.address, - RENDOGE_DEV.address, - MCK_DEV.address, - MC2_DEV.address, - MC3_DEV.address, - USDH_DEV.address - ], - Mainnet: [ - new PublicKey('So11111111111111111111111111111111111111112'), - new PublicKey('JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN'), - new PublicKey('85VBFQZC9TZkfaptBWjvUw7YbZjy52A6mjtPGjstQAmQ'), - new PublicKey('HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3'), - new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'), - new PublicKey('Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'), - new PublicKey('EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm'), - new PublicKey('CKaKtYvz6dKPyMvYq9Rh3UBrnNqYZAyd7iF4hJtjUvks') - ], - Testnet: [], - Localnet: [] - } + balanceLoading: false } export const solanaWalletSliceName = 'solanaWallet' @@ -130,15 +92,12 @@ const solanaWalletSlice = createSlice({ state.accounts[action.payload.programId].balance = action.payload.balance return state }, - setCommonTokens(state, action: PayloadAction<{ network: NetworkType; tokens: PublicKey[] }>) { - state.commonTokens[action.payload.network] = action.payload.tokens - return state - }, // Triggers rescan for tokens that we control rescanTokens() {}, airdrop() {}, connect() {}, - disconnect() {} + disconnect() {}, + reconnect() {} } }) interface IsetTokenBalance { diff --git a/src/store/reducers/stats.ts b/src/store/reducers/stats.ts index 76982be07..4c6d8542f 100644 --- a/src/store/reducers/stats.ts +++ b/src/store/reducers/stats.ts @@ -1,6 +1,6 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { PublicKey } from '@solana/web3.js' -import { PayloadType } from './types' +import { PayloadType } from '@store/consts/types' export interface TimeData { timestamp: number diff --git a/src/store/reducers/swap.ts b/src/store/reducers/swap.ts index 3790706d0..3e60f9b1a 100644 --- a/src/store/reducers/swap.ts +++ b/src/store/reducers/swap.ts @@ -3,7 +3,7 @@ import { fromFee } from '@invariant-labs/sdk/lib/utils' import { BN } from '@project-serum/anchor' import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { PublicKey } from '@solana/web3.js' -import { PayloadType } from './types' +import { PayloadType } from '@store/consts/types' export interface Swap { slippage: Decimal diff --git a/src/store/reducers/types.ts b/src/store/reducers/types.ts deleted file mode 100644 index ea9358550..000000000 --- a/src/store/reducers/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { AnyAction, ActionCreator } from 'redux' - -interface ActionsBasicType { - [k: string]: ActionCreator -} - -export type PayloadType = { - [k in keyof actions]: Parameters[0] -} diff --git a/src/store/sagas/bonds.ts b/src/store/sagas/bonds.ts index 7d4135303..4f63cb90d 100644 --- a/src/store/sagas/bonds.ts +++ b/src/store/sagas/bonds.ts @@ -1,11 +1,17 @@ -import { actions, RedeemBond, BuyBond, BondSaleWithAddress, BondWithAddress } from '@reducers/bonds' -import { getBondsProgram } from '@web3/programs/bonds' +import { + actions, + RedeemBond, + BuyBond, + BondSaleWithAddress, + BondWithAddress +} from '@store/reducers/bonds' +import { getBondsProgram } from '@utils/web3/programs/bonds' import { all, call, put, select, spawn, takeLatest } from 'typed-redux-saga' -import { actions as snackbarsActions } from '@reducers/snackbars' +import { actions as snackbarsActions } from '@store/reducers/snackbars' import { PayloadAction } from '@reduxjs/toolkit' -import { createLoaderKey, getFullNewTokensData } from '@consts/utils' -import { tokens } from '@selectors/pools' -import { actions as poolsActions } from '@reducers/pools' +import { createLoaderKey, getFullNewTokensData } from '@utils/utils' +import { tokens } from '@store/selectors/pools' +import { actions as poolsActions } from '@store/reducers/pools' import { getConnection, handleRpcError } from './connection' import { Keypair, @@ -14,15 +20,15 @@ import { SystemProgram, Transaction } from '@solana/web3.js' -import { accounts, address } from '@selectors/solanaWallet' -import { createAccount, getWallet } from './wallet' -import { bondsList, userVested } from '@selectors/bonds' -import { SIGNING_SNACKBAR_CONFIG, WRAPPED_SOL_ADDRESS } from '@consts/static' +import { accounts, address } from '@store/selectors/solanaWallet' +import { bondsList, userVested } from '@store/selectors/bonds' +import { SIGNING_SNACKBAR_CONFIG, WRAPPED_SOL_ADDRESS } from '@store/consts/static' import { NATIVE_MINT, Token, TOKEN_PROGRAM_ID } from '@solana/spl-token' import { BN } from '@project-serum/anchor' import { DECIMAL } from '@invariant-labs/sdk/lib/utils' -import { network, rpcAddress } from '@selectors/solanaConnection' +import { network, rpcAddress } from '@store/selectors/solanaConnection' import { closeSnackbar } from 'notistack' +import { createAccount, getWallet } from './wallet' export function* handleGetBondsList() { try { @@ -142,7 +148,7 @@ export function* handleBuyBondWithWSOL(data: BuyBond) { const initialTx = new Transaction().add(createIx).add(transferIx).add(initIx) - const initialBlockhash = yield* call([connection, connection.getRecentBlockhash]) + const initialBlockhash = yield* call([connection, connection.getLatestBlockhash]) initialTx.recentBlockhash = initialBlockhash.blockhash initialTx.feePayer = wallet.publicKey @@ -155,12 +161,12 @@ export function* handleBuyBondWithWSOL(data: BuyBond) { }, bondKeypair.publicKey ) - const bondBlockhash = yield* call([connection, connection.getRecentBlockhash]) + const bondBlockhash = yield* call([connection, connection.getLatestBlockhash]) bondTx.recentBlockhash = bondBlockhash.blockhash bondTx.feePayer = wallet.publicKey const unwrapTx = new Transaction().add(unwrapIx) - const unwrapBlockhash = yield* call([connection, connection.getRecentBlockhash]) + const unwrapBlockhash = yield* call([connection, connection.getLatestBlockhash]) unwrapTx.recentBlockhash = unwrapBlockhash.blockhash unwrapTx.feePayer = wallet.publicKey @@ -339,7 +345,7 @@ export function* handleBuyBond(action: PayloadAction) { }, bondKeypair.publicKey ) - const blockhash = yield* call([connection, connection.getRecentBlockhash]) + const blockhash = yield* call([connection, connection.getLatestBlockhash]) tx.recentBlockhash = blockhash.blockhash tx.feePayer = wallet.publicKey @@ -452,7 +458,7 @@ export function* handleRedeemBondWithWSOL(data: RedeemBond) { const initialTx = new Transaction().add(createIx).add(initIx) - const initialBlockhash = yield* call([connection, connection.getRecentBlockhash]) + const initialBlockhash = yield* call([connection, connection.getLatestBlockhash]) initialTx.recentBlockhash = initialBlockhash.blockhash initialTx.feePayer = wallet.publicKey @@ -461,12 +467,12 @@ export function* handleRedeemBondWithWSOL(data: RedeemBond) { bondId: data.bondId, ownerBondAccount: wrappedSolAccount.publicKey }) - const blockhash = yield* call([connection, connection.getRecentBlockhash]) + const blockhash = yield* call([connection, connection.getLatestBlockhash]) redeemTx.recentBlockhash = blockhash.blockhash redeemTx.feePayer = wallet.publicKey const unwrapTx = new Transaction().add(unwrapIx) - const unwrapBlockhash = yield* call([connection, connection.getRecentBlockhash]) + const unwrapBlockhash = yield* call([connection, connection.getLatestBlockhash]) unwrapTx.recentBlockhash = unwrapBlockhash.blockhash unwrapTx.feePayer = wallet.publicKey @@ -636,7 +642,7 @@ export function* handleRedeemBond(action: PayloadAction) { bondId: action.payload.bondId, ownerBondAccount }) - const blockhash = yield* call([connection, connection.getRecentBlockhash]) + const blockhash = yield* call([connection, connection.getLatestBlockhash]) tx.recentBlockhash = blockhash.blockhash tx.feePayer = wallet.publicKey diff --git a/src/store/sagas/connection.ts b/src/store/sagas/connection.ts index a162f4511..e71349c84 100644 --- a/src/store/sagas/connection.ts +++ b/src/store/sagas/connection.ts @@ -1,21 +1,22 @@ import { all, call, put, SagaGenerator, select, takeLeading, spawn, delay } from 'typed-redux-saga' -import { actions, Status, PayloadTypes, RpcStatus } from '@reducers/solanaConnection' -import { getSolanaConnection } from '@web3/connection' -import { actions as snackbarsActions } from '@reducers/snackbars' -import { rpcAddress, rpcStatus } from '@selectors/solanaConnection' +import { actions, Status, PayloadTypes, RpcStatus } from '@store/reducers/solanaConnection' +import { getSolanaConnection } from '@utils/web3/connection' +import { actions as snackbarsActions } from '@store/reducers/snackbars' +import { network, rpcAddress, rpcStatus } from '@store/selectors/solanaConnection' import { Connection } from '@solana/web3.js' import { PayloadAction } from '@reduxjs/toolkit' -import { RECOMMENDED_RPC_ADDRESS } from '@consts/static' +import { RECOMMENDED_RPC_ADDRESS } from '@store/consts/static' export function* handleRpcError(error: string): Generator { const currentRpc = yield* select(rpcAddress) const currentRpcStatus = yield* select(rpcStatus) + const networkType = yield* select(network) console.log(error) if ( - currentRpc !== RECOMMENDED_RPC_ADDRESS && + currentRpc !== RECOMMENDED_RPC_ADDRESS[networkType] && (error.includes('Failed to fetch') || error.includes('400') || error.includes('403')) ) { if (currentRpcStatus === RpcStatus.Uninitialized) { @@ -39,10 +40,7 @@ export function* getConnection(): SagaGenerator { export function* initConnection(): Generator { try { yield* call(getConnection) - // TODO: pull state here - // yield* call(pullUserAccountData) - // yield* call(init) yield* put( snackbarsActions.add({ message: 'Solana network connected.', @@ -51,9 +49,6 @@ export function* initConnection(): Generator { }) ) yield* put(actions.setStatus(Status.Initialized)) - // yield* call(depositCollateral, new BN(4 * 1e8)) - // yield* call(mintUsd, new BN(8 * 1e7)) - // yield* call(handleAirdrop) } catch (error) { console.log(error) yield* put(actions.setStatus(Status.Error)) @@ -70,17 +65,18 @@ export function* initConnection(): Generator { } export function* handleNetworkChange(action: PayloadAction): Generator { - yield* delay(1000) - window.location.reload() + // yield* delay(1000) + // window.location.reload() yield* put( snackbarsActions.add({ - message: `You are on network ${action.payload.network}${ - action.payload?.rpcName ? ' (' + action.payload.rpcName + ')' : '' - }.`, + message: `You are on network ${action.payload}`, variant: 'info', persist: false }) ) + + localStorage.setItem('INVARIANT_NETWORK_SOLANA', action.payload) + window.location.reload() } export function* updateSlot(): Generator { diff --git a/src/store/sagas/farms.ts b/src/store/sagas/farms.ts index 258da2cb2..71c4c1c10 100644 --- a/src/store/sagas/farms.ts +++ b/src/store/sagas/farms.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/restrict-plus-operands */ import { all, call, fork, put, select, spawn, take, takeLatest, takeEvery } from 'typed-redux-saga' import { actions, @@ -9,21 +8,21 @@ import { StakeRangeTicks, FarmApyUpdate, StakeRewardData -} from '@reducers/farms' -import { actions as poolsActions, ListPoolsResponse, ListType } from '@reducers/pools' -import { actions as snackbarsActions } from '@reducers/snackbars' -import { getStakerProgram } from '@web3/programs/staker' -import { getMarketProgram } from '@web3/programs/amm' +} from '@store/reducers/farms' +import { actions as poolsActions, ListPoolsResponse, ListType } from '@store/reducers/pools' +import { actions as snackbarsActions } from '@store/reducers/snackbars' +import { getStakerProgram } from '@utils/web3/programs/staker' +import { getMarketProgram } from '@utils/web3/programs/amm' import { createAccount, getWallet, sleep } from './wallet' import { PayloadAction } from '@reduxjs/toolkit' -import { network, rpcAddress } from '@selectors/solanaConnection' -import { networkTypetoProgramNetwork } from '@web3/connection' +import { network, rpcAddress } from '@store/selectors/solanaConnection' +import { networkTypetoProgramNetwork } from '@utils/web3/connection' import { positionsList, positionsWithPoolsData, PositionWithPoolData, singlePositionData -} from '@selectors/positions' +} from '@store/selectors/positions' import { getMarketAddress, Pair } from '@invariant-labs/sdk' import { AccountInfo, @@ -35,10 +34,10 @@ import { SystemProgram, Transaction } from '@solana/web3.js' -import { farms, stakesForPosition, userStakes } from '@selectors/farms' -import { accounts } from '@selectors/solanaWallet' +import { farms, stakesForPosition, userStakes } from '@store/selectors/farms' +import { accounts } from '@store/selectors/solanaWallet' import { getConnection, handleRpcError } from './connection' -import { SIGNING_SNACKBAR_CONFIG, WRAPPED_SOL_ADDRESS } from '@consts/static' +import { SIGNING_SNACKBAR_CONFIG, WRAPPED_SOL_ADDRESS } from '@store/consts/static' import { NATIVE_MINT, Token, TOKEN_PROGRAM_ID } from '@solana/spl-token' import { createLoaderKey, @@ -50,8 +49,8 @@ import { getTicksList, getUserStakesForFarm, printBN -} from '@consts/utils' -import { pools, tokens } from '@selectors/pools' +} from '@utils/utils' +import { pools, tokens } from '@store/selectors/pools' import { BN } from '@project-serum/anchor' import { calculatePriceSqrt, getX, getY } from '@invariant-labs/sdk/lib/math' import { GuardPredicate } from '@redux-saga/types' @@ -60,7 +59,7 @@ import { positionsRewardAPY, rewardsAPY } from '@invariant-labs/sdk/lib/utils' -import { PositionWithAddress } from '@reducers/positions' +import { PositionWithAddress } from '@store/reducers/positions' import { closeSnackbar } from 'notistack' export function* getFarmsTotals() { @@ -717,7 +716,7 @@ export function* handleWithdrawRewardsWithWSOL(data: FarmPositionData) { const initialTx = new Transaction().add(createIx).add(initIx) - const initialBlockhash = yield* call([connection, connection.getRecentBlockhash]) + const initialBlockhash = yield* call([connection, connection.getLatestBlockhash]) initialTx.recentBlockhash = initialBlockhash.blockhash initialTx.feePayer = wallet.publicKey @@ -747,12 +746,12 @@ export function* handleWithdrawRewardsWithWSOL(data: FarmPositionData) { }) const withdrawTx = new Transaction().add(updateIx).add(withdrawIx) - const blockhash = yield* call([connection, connection.getRecentBlockhash]) + const blockhash = yield* call([connection, connection.getLatestBlockhash]) withdrawTx.recentBlockhash = blockhash.blockhash withdrawTx.feePayer = wallet.publicKey const unwrapTx = new Transaction().add(unwrapIx) - const unwrapBlockhash = yield* call([connection, connection.getRecentBlockhash]) + const unwrapBlockhash = yield* call([connection, connection.getLatestBlockhash]) unwrapTx.recentBlockhash = unwrapBlockhash.blockhash unwrapTx.feePayer = wallet.publicKey diff --git a/src/store/sagas/index.ts b/src/store/sagas/index.ts index e11526ad5..9a2e73381 100644 --- a/src/store/sagas/index.ts +++ b/src/store/sagas/index.ts @@ -3,7 +3,7 @@ import { connectionSaga } from './connection' import { poolsSaga } from './pool' import { swapHandler } from './swap' import { walletSaga } from './wallet' -import { positionsSaga } from '@sagas/positions' +import { positionsSaga } from './positions' import { statsHandler } from './stats' import { farmsSaga } from './farms' import { bondsSaga } from './bonds' diff --git a/src/store/sagas/pool.ts b/src/store/sagas/pool.ts index 79169f88e..28b126c85 100644 --- a/src/store/sagas/pool.ts +++ b/src/store/sagas/pool.ts @@ -1,15 +1,15 @@ import { call, put, all, spawn, takeEvery, takeLatest, select } from 'typed-redux-saga' -import { getMarketProgram } from '@web3/programs/amm' +import { getMarketProgram } from '@utils/web3/programs/amm' import { Pair } from '@invariant-labs/sdk' -import { actions, ListPoolsRequest, PairTokens, PoolWithAddress } from '@reducers/pools' +import { actions, ListPoolsRequest, PairTokens, PoolWithAddress } from '@store/reducers/pools' import { PayloadAction } from '@reduxjs/toolkit' import { Tick } from '@invariant-labs/sdk/src/market' import { PublicKey } from '@solana/web3.js' import { FEE_TIERS } from '@invariant-labs/sdk/lib/utils' -import { getFullNewTokensData, getPools, getPoolsFromAdresses } from '@consts/utils' -import { tokens } from '@selectors/pools' +import { getFullNewTokensData, getPools, getPoolsFromAdresses } from '@utils//utils' +import { tokens } from '@store/selectors/pools' import { handleRpcError, getConnection } from './connection' -import { network, rpcAddress } from '@selectors/solanaConnection' +import { network, rpcAddress } from '@store/selectors/solanaConnection' export interface iTick { index: Tick[] diff --git a/src/store/sagas/positions.ts b/src/store/sagas/positions.ts index 051429946..ce776038a 100644 --- a/src/store/sagas/positions.ts +++ b/src/store/sagas/positions.ts @@ -1,30 +1,34 @@ -import { SIGNING_SNACKBAR_CONFIG, TIMEOUT_ERROR_MESSAGE, WRAPPED_SOL_ADDRESS } from '@consts/static' +import { + SIGNING_SNACKBAR_CONFIG, + TIMEOUT_ERROR_MESSAGE, + WRAPPED_SOL_ADDRESS +} from '@store/consts/static' import { createLiquidityPlot, createLoaderKey, createPlaceholderLiquidityPlot, getPositionsAddressesFromRange, solToPriorityFee -} from '@consts/utils' +} from '@utils/utils' import { Pair } from '@invariant-labs/sdk' import { Staker } from '@invariant-labs/staker-sdk' -import { actions as farmsActions } from '@reducers/farms' -import { ListPoolsResponse, ListType, actions as poolsActions } from '@reducers/pools' +import { actions as farmsActions } from '@store/reducers/farms' +import { ListPoolsResponse, ListType, actions as poolsActions } from '@store/reducers/pools' import { ClosePositionData, GetCurrentTicksData, InitPositionData, actions -} from '@reducers/positions' -import { actions as connectionActions } from '@reducers/solanaConnection' -import { actions as snackbarsActions } from '@reducers/snackbars' +} from '@store/reducers/positions' +import { actions as connectionActions } from '@store/reducers/solanaConnection' +import { actions as snackbarsActions } from '@store/reducers/snackbars' import { GuardPredicate } from '@redux-saga/types' import { PayloadAction } from '@reduxjs/toolkit' -import { stakesForPosition } from '@selectors/farms' -import { poolsArraySortedByFees, tokens } from '@selectors/pools' -import { positionsWithPoolsData, singlePositionData } from '@selectors/positions' -import { network, rpcAddress } from '@selectors/solanaConnection' -import { accounts } from '@selectors/solanaWallet' +import { stakesForPosition } from '@store/selectors/farms' +import { poolsArraySortedByFees, tokens } from '@store/selectors/pools' +import { positionsWithPoolsData, singlePositionData } from '@store/selectors/positions' +import { network, rpcAddress } from '@store/selectors/solanaConnection' +import { accounts } from '@store/selectors/solanaWallet' import { NATIVE_MINT, TOKEN_PROGRAM_ID, Token } from '@solana/spl-token' import { Keypair, @@ -34,8 +38,8 @@ import { TransactionExpiredTimeoutError, sendAndConfirmRawTransaction } from '@solana/web3.js' -import { getMarketProgram } from '@web3/programs/amm' -import { getStakerProgram } from '@web3/programs/staker' +import { getMarketProgram } from '@utils/web3/programs/amm' +import { getStakerProgram } from '@utils/web3/programs/staker' import { all, call, put, select, spawn, take, takeEvery, takeLeading } from 'typed-redux-saga' import { getConnection, handleRpcError } from './connection' import { createClaimAllPositionRewardsTx } from './farms' @@ -110,8 +114,8 @@ function* handleInitPositionAndPoolWithSOL(action: PayloadAction): Ge allTokens[data.tokenX.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[data.tokenX.toString()] - ? tokensAccounts[data.tokenX.toString()].address - : null + ? tokensAccounts[data.tokenX.toString()].address + : null if (userTokenX === null) { userTokenX = yield* call(createAccount, data.tokenX) @@ -422,8 +426,8 @@ function* handleInitPositionWithSOL(action: PayloadAction): Ge allTokens[data.tokenY.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[data.tokenY.toString()] - ? tokensAccounts[data.tokenY.toString()].address - : null + ? tokensAccounts[data.tokenY.toString()].address + : null if (userTokenY === null) { userTokenY = yield* call(createAccount, data.tokenY) @@ -702,7 +706,7 @@ export function* handleInitPosition(action: PayloadAction): Ge lastValidBlockHeight: blockhash.lastValidBlockHeight, signature: txId }) - console.log(confirmedTx) + closeSnackbar(loaderTxDetails) yield put(snackbarsActions.remove(loaderTxDetails)) @@ -932,8 +936,8 @@ export function* handleClaimFeeWithSOL(positionIndex: number) { allTokens[positionForIndex.tokenX.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenX.toString()] - ? tokensAccounts[positionForIndex.tokenX.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenX.toString()].address + : null if (userTokenX === null) { userTokenX = yield* call(createAccount, positionForIndex.tokenX) @@ -943,8 +947,8 @@ export function* handleClaimFeeWithSOL(positionIndex: number) { allTokens[positionForIndex.tokenY.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenY.toString()] - ? tokensAccounts[positionForIndex.tokenY.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenY.toString()].address + : null if (userTokenY === null) { userTokenY = yield* call(createAccount, positionForIndex.tokenY) @@ -1277,8 +1281,8 @@ export function* handleClosePositionWithSOL(data: ClosePositionData) { allTokens[positionForIndex.tokenX.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenX.toString()] - ? tokensAccounts[positionForIndex.tokenX.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenX.toString()].address + : null if (userTokenX === null) { userTokenX = yield* call(createAccount, positionForIndex.tokenX) @@ -1288,8 +1292,8 @@ export function* handleClosePositionWithSOL(data: ClosePositionData) { allTokens[positionForIndex.tokenY.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenY.toString()] - ? tokensAccounts[positionForIndex.tokenY.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenY.toString()].address + : null if (userTokenY === null) { userTokenY = yield* call(createAccount, positionForIndex.tokenY) diff --git a/src/store/sagas/stats.ts b/src/store/sagas/stats.ts index 6416af40e..bf7a161dd 100644 --- a/src/store/sagas/stats.ts +++ b/src/store/sagas/stats.ts @@ -1,10 +1,10 @@ -import { actions } from '@reducers/stats' +import { actions } from '@store/reducers/stats' import { call, put, select, takeEvery } from 'typed-redux-saga' -import { network } from '@selectors/solanaConnection' -import { getFullNewTokensData, getFullSnap } from '@consts/utils' -import { tokens } from '@selectors/pools' +import { network } from '@store/selectors/solanaConnection' +import { getFullNewTokensData, getFullSnap } from '@utils/utils' +import { tokens } from '@store/selectors/pools' import { PublicKey } from '@solana/web3.js' -import { actions as poolsActions } from '@reducers/pools' +import { actions as poolsActions } from '@store/reducers/pools' import { getConnection, handleRpcError } from './connection' export function* getStats(): Generator { diff --git a/src/store/sagas/swap.ts b/src/store/sagas/swap.ts index 7ece6c1be..3a4491a91 100644 --- a/src/store/sagas/swap.ts +++ b/src/store/sagas/swap.ts @@ -1,13 +1,17 @@ -import { SIGNING_SNACKBAR_CONFIG, TIMEOUT_ERROR_MESSAGE, WRAPPED_SOL_ADDRESS } from '@consts/static' -import { createLoaderKey, solToPriorityFee } from '@consts/utils' +import { + SIGNING_SNACKBAR_CONFIG, + TIMEOUT_ERROR_MESSAGE, + WRAPPED_SOL_ADDRESS +} from '@store/consts/static' +import { createLoaderKey, solToPriorityFee } from '@utils/utils' import { Pair } from '@invariant-labs/sdk' -import { actions as snackbarsActions } from '@reducers/snackbars' -import { actions as swapActions } from '@reducers/swap' -import { actions as connectionActions } from '@reducers/solanaConnection' -import { poolsArraySortedByFees, tokens } from '@selectors/pools' -import { network, rpcAddress } from '@selectors/solanaConnection' -import { accounts } from '@selectors/solanaWallet' -import { swap } from '@selectors/swap' +import { actions as snackbarsActions } from '@store/reducers/snackbars' +import { actions as swapActions } from '@store/reducers/swap' +import { actions as connectionActions } from '@store/reducers/solanaConnection' +import { poolsArraySortedByFees, tokens } from '@store/selectors/pools' +import { network, rpcAddress } from '@store/selectors/solanaConnection' +import { accounts } from '@store/selectors/solanaWallet' +import { swap } from '@store/selectors/swap' import { NATIVE_MINT, TOKEN_PROGRAM_ID, Token } from '@solana/spl-token' import { Keypair, @@ -16,7 +20,7 @@ import { TransactionExpiredTimeoutError, sendAndConfirmRawTransaction } from '@solana/web3.js' -import { getMarketProgram } from '@web3/programs/amm' +import { getMarketProgram } from '@utils/web3/programs/amm' import { call, put, select, takeEvery } from 'typed-redux-saga' import { getConnection, handleRpcError } from './connection' import { createAccount, getWallet } from './wallet' @@ -52,6 +56,23 @@ export function* handleSwapWithSOL(): Generator { (tokenFrom.equals(pool.tokenX) && tokenTo.equals(pool.tokenY)) || (tokenFrom.equals(pool.tokenY) && tokenTo.equals(pool.tokenX)) ) + console.log('allTokens', allTokens) + console.log('allPools', allPools) + console.log('slippage', slippage) + console.log('tokenFrom', tokenFrom) + console.log('tokenTo', tokenTo) + console.log('amountIn', amountIn) + console.log('estimatedPriceAfterSwap', estimatedPriceAfterSwap) + console.log('poolIndex', poolIndex) + console.log('byAmountIn', byAmountIn) + console.log('amountOut', amountOut) + console.log('wallet', wallet) + console.log('tokensAccounts', tokensAccounts) + console.log('connection', connection) + console.log('networkType', networkType) + console.log('rpc', rpc) + console.log('marketProgram', marketProgram) + console.log('swapPool', swapPool) if (!swapPool) { return @@ -124,8 +145,8 @@ export function* handleSwapWithSOL(): Generator { allTokens[tokenFrom.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[tokenFrom.toString()] - ? tokensAccounts[tokenFrom.toString()].address - : null + ? tokensAccounts[tokenFrom.toString()].address + : null if (fromAddress === null) { fromAddress = yield* call(createAccount, tokenFrom) } @@ -133,8 +154,8 @@ export function* handleSwapWithSOL(): Generator { allTokens[tokenTo.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[tokenTo.toString()] - ? tokensAccounts[tokenTo.toString()].address - : null + ? tokensAccounts[tokenTo.toString()].address + : null if (toAddress === null) { toAddress = yield* call(createAccount, tokenTo) } @@ -439,7 +460,7 @@ export function* handleSwap(): Generator { closeSnackbar(loaderSigningTx) yield put(snackbarsActions.remove(loaderSigningTx)) - + console.log('connection', connection) const txid = yield* call([connection, connection.sendRawTransaction], signedTx.serialize(), { skipPreflight: false }) diff --git a/src/store/sagas/token.ts b/src/store/sagas/token.ts index 8e3a53a32..0cd881775 100644 --- a/src/store/sagas/token.ts +++ b/src/store/sagas/token.ts @@ -1,5 +1,4 @@ import { call, SagaGenerator } from 'typed-redux-saga' - import { getConnection } from './connection' import { Account, PublicKey } from '@solana/web3.js' import { MintInfo, Token, TOKEN_PROGRAM_ID } from '@solana/spl-token' diff --git a/src/store/sagas/wallet.ts b/src/store/sagas/wallet.ts index 7ffbc7fbe..044784509 100644 --- a/src/store/sagas/wallet.ts +++ b/src/store/sagas/wallet.ts @@ -6,12 +6,12 @@ import { spawn, all, select, - takeLatest + takeLatest, + delay } from 'typed-redux-saga' - -import { actions, ITokenAccount, Status } from '@reducers/solanaWallet' +import { actions, ITokenAccount, Status } from '@store/reducers/solanaWallet' import { getConnection, handleRpcError } from './connection' -import { getSolanaWallet, disconnectWallet } from '@web3/wallet' +import { getSolanaWallet, disconnectWallet } from '@utils/web3/wallet' import { Account, PublicKey, @@ -20,21 +20,23 @@ import { TransactionInstruction } from '@solana/web3.js' import { Token, ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } from '@solana/spl-token' -import { actions as snackbarsActions } from '@reducers/snackbars' -import { actions as positionsActions } from '@reducers/positions' +import { actions as snackbarsActions } from '@store/reducers/snackbars' +import { actions as positionsActions } from '@store/reducers/positions' import { BN } from '@project-serum/anchor' -import { WalletAdapter } from '@web3/adapters/types' +import { WalletAdapter } from '@utils/web3/adapters/types' import { getTokenDetails } from './token' -import { accounts, status } from '@selectors/solanaWallet' -import { airdropQuantities, airdropTokens, Token as StoreToken } from '@consts/static' -import airdropAdmin from '@consts/airdropAdmin' -import { network } from '@selectors/solanaConnection' -import { tokens } from '@selectors/pools' -import { actions as poolsActions } from '@reducers/pools' -import { actions as farmsActions } from '@reducers/farms' -import { actions as bondsActions } from '@reducers/bonds' +import { accounts, status } from '@store/selectors/solanaWallet' +import { airdropQuantities, airdropTokens } from '@store/consts/static' +import { Token as StoreToken } from '@store/consts/types' +import airdropAdmin from '@store/consts/airdropAdmin' +import { network } from '@store/selectors/solanaConnection' +import { tokens } from '@store/selectors/pools' +import { actions as poolsActions } from '@store/reducers/pools' +import { actions as farmsActions } from '@store/reducers/farms' +import { actions as bondsActions } from '@store/reducers/bonds' import { closeSnackbar } from 'notistack' -import { createLoaderKey } from '@consts/utils' +import { createLoaderKey } from '@utils/utils' +import { openWalletSelectorModal } from '@utils/web3/selector' export function* getWallet(): SagaGenerator { const wallet = yield* call(getSolanaWallet) @@ -115,6 +117,7 @@ export function* getToken(tokenAddress: PublicKey): SagaGenerator { export function* handleAirdrop(): Generator { const walletStatus = yield* select(status) + console.log('walletStatus', walletStatus) if (walletStatus !== Status.Initialized) { yield put( snackbarsActions.add({ @@ -139,25 +142,49 @@ export function* handleAirdrop(): Generator { const connection = yield* call(getConnection) const networkType = yield* select(network) const wallet = yield* call(getWallet) - let balance = yield* call([connection, connection.getBalance], wallet.publicKey) - if (balance < 0.05 * 1e9) { - yield* call([connection, connection.requestAirdrop], wallet.publicKey, 0.1 * 1e9) + console.log('connectipon', connection) + console.log('wallet', wallet) + console.log('networkType', networkType) + + let balance = 0 + try { balance = yield* call([connection, connection.getBalance], wallet.publicKey) - yield* call(sleep, 2000) - let retries = 30 - for (;;) { - // eslint-disable-next-line eqeqeq - if (0.05 * 1e9 < (yield* call([connection, connection.getBalance], wallet.publicKey))) { - break - } + if (balance < 0.05 * 1e9) { + yield* call([connection, connection.requestAirdrop], wallet.publicKey, 0.1 * 1e9) + balance = yield* call([connection, connection.getBalance], wallet.publicKey) yield* call(sleep, 2000) - if (--retries <= 0) { - break + let retries = 30 + for (;;) { + // eslint-disable-next-line eqeqeq + if (0.05 * 1e9 < (yield* call([connection, connection.getBalance], wallet.publicKey))) { + break + } + yield* call(sleep, 2000) + if (--retries <= 0) { + break + } } } - } + yield* call( + getCollateralTokenAirdrop, + airdropTokens[networkType], + airdropQuantities[networkType] + ) + yield put( + snackbarsActions.add({ + message: 'You will soon receive airdrop', + variant: 'success', + persist: false + }) + ) - yield* call(getCollateralTokenAirdrop, airdropTokens[networkType], airdropQuantities[networkType]) + closeSnackbar(loaderKey) + yield put(snackbarsActions.remove(loaderKey)) + } catch (error) { + console.log('airdrop error', error) + closeSnackbar(loaderKey) + yield put(snackbarsActions.remove(loaderKey)) + } yield put( snackbarsActions.add({ @@ -210,7 +237,7 @@ export function* getCollateralTokenAirdrop( } const tx = instructions.reduce((tx, ix) => tx.add(ix), new Transaction()) const connection = yield* call(getConnection) - const blockhash = yield* call([connection, connection.getRecentBlockhash]) + const blockhash = yield* call([connection, connection.getLatestBlockhash]) tx.feePayer = wallet.publicKey tx.recentBlockhash = blockhash.blockhash const signedTx = yield* call([wallet, wallet.signTransaction], tx) @@ -227,7 +254,7 @@ export function* getCollateralTokenAirdrop( export function* signAndSend(wallet: WalletAdapter, tx: Transaction): SagaGenerator { const connection = yield* call(getConnection) - const blockhash = yield* call([connection, connection.getRecentBlockhash]) + const blockhash = yield* call([connection, connection.getLatestBlockhash]) tx.feePayer = wallet.publicKey tx.recentBlockhash = blockhash.blockhash const signedTx = yield* call([wallet, wallet.signTransaction], tx) @@ -414,6 +441,12 @@ export function* handleDisconnect(): Generator { } } +export function* handleReconnect(): Generator { + yield* call(handleDisconnect) + yield* delay(100) + yield* call(openWalletSelectorModal) +} + export function* connectHandler(): Generator { yield takeLatest(actions.connect, handleConnect) } @@ -434,8 +467,19 @@ export function* handleBalanceSaga(): Generator { yield takeLatest(actions.getBalance, handleBalance) } +export function* reconnectHandler(): Generator { + yield takeLatest(actions.reconnect, handleReconnect) +} + export function* walletSaga(): Generator { yield all( - [initSaga, airdropSaga, connectHandler, disconnectHandler, handleBalanceSaga].map(spawn) + [ + initSaga, + airdropSaga, + connectHandler, + disconnectHandler, + handleBalanceSaga, + reconnectHandler + ].map(spawn) ) } diff --git a/src/store/selectors/farms.ts b/src/store/selectors/farms.ts index 1c27338d4..486b21a68 100644 --- a/src/store/selectors/farms.ts +++ b/src/store/selectors/farms.ts @@ -1,4 +1,3 @@ -import { printBN } from '@consts/utils' import { calculatePriceSqrt, getX, getY } from '@invariant-labs/sdk/lib/math' import { createSelector } from '@reduxjs/toolkit' import { PublicKey } from '@solana/web3.js' @@ -6,6 +5,7 @@ import { IFarmsStore, farmsSliceName, ExtendedIncentive, ExtendedStake } from '. import { keySelectors, AnyProps } from './helpers' import { pools } from './pools' import { positionsList, positionsWithPoolsData } from './positions' +import { printBN } from '@utils/utils' const store = (s: AnyProps) => s[farmsSliceName] as IFarmsStore diff --git a/src/store/selectors/pools.ts b/src/store/selectors/pools.ts index d520835f7..87e6ed49e 100644 --- a/src/store/selectors/pools.ts +++ b/src/store/selectors/pools.ts @@ -10,14 +10,20 @@ export const { poolTicks, isLoadingLatestPoolsForTransaction, tickMaps, - volumeRanges + volumeRanges, + isLoadingTicksAndTickMaps, + isLoadingTokens, + isLoadingTokensError } = keySelectors(store, [ 'pools', 'tokens', 'poolTicks', 'isLoadingLatestPoolsForTransaction', 'tickMaps', - 'volumeRanges' + 'volumeRanges', + 'isLoadingTicksAndTickMaps', + 'isLoadingTokens', + 'isLoadingTokensError' ]) export const poolsArraySortedByFees = createSelector(pools, allPools => @@ -32,7 +38,10 @@ export const poolsSelectors = { poolTicks, isLoadingLatestPoolsForTransaction, tickMaps, - volumeRanges + volumeRanges, + isLoadingTicksAndTickMaps, + isLoadingTokens, + isLoadingTokensError } export default poolsSelectors diff --git a/src/store/selectors/positions.ts b/src/store/selectors/positions.ts index 9d9bd5cf7..e99e5a0cb 100644 --- a/src/store/selectors/positions.ts +++ b/src/store/selectors/positions.ts @@ -1,4 +1,4 @@ -import { PoolWithAddress } from '@reducers/pools' +import { PoolWithAddress } from '@store/reducers/pools' import { createSelector } from 'reselect' import { IPositionsStore, positionsSliceName, PositionWithAddress } from '../reducers/positions' import { AnyProps, keySelectors } from './helpers' @@ -7,14 +7,21 @@ import { SwapToken, swapTokensDict } from './solanaWallet' const store = (s: AnyProps) => s[positionsSliceName] as IPositionsStore -export const { lastPage, positionsList, plotTicks, currentPositionRangeTicks, initPosition } = - keySelectors(store, [ - 'lastPage', - 'positionsList', - 'plotTicks', - 'currentPositionRangeTicks', - 'initPosition' - ]) +export const { + lastPage, + positionsList, + plotTicks, + currentPositionTicks, + initPosition, + shouldNotUpdateRange +} = keySelectors(store, [ + 'lastPage', + 'positionsList', + 'plotTicks', + 'currentPositionTicks', + 'initPosition', + 'shouldNotUpdateRange' +]) export const lastPageSelector = createSelector(lastPage, s => s) @@ -63,8 +70,9 @@ export const singlePositionData = (id: string) => export const positionsSelectors = { positionsList, plotTicks, - currentPositionRangeTicks, - initPosition + currentPositionTicks, + initPosition, + shouldNotUpdateRange } export default positionsSelectors diff --git a/src/store/selectors/snackbars.ts b/src/store/selectors/snackbars.ts index bda347795..55ffe012b 100644 --- a/src/store/selectors/snackbars.ts +++ b/src/store/selectors/snackbars.ts @@ -1,5 +1,5 @@ import { ISnackbarStore, snackbarsSliceName } from '../reducers/snackbars' -import { keySelectors, AnyProps } from './helpers' +import { AnyProps, keySelectors } from './helpers' const store = (s: AnyProps) => s[snackbarsSliceName] as ISnackbarStore diff --git a/src/store/selectors/solanaConnection.ts b/src/store/selectors/solanaConnection.ts index e2c1f8b70..d5d9721c9 100644 --- a/src/store/selectors/solanaConnection.ts +++ b/src/store/selectors/solanaConnection.ts @@ -1,4 +1,4 @@ -import { ISolanaConnectionStore, solanaConnectionSliceName } from '@reducers/solanaConnection' +import { ISolanaConnectionStore, solanaConnectionSliceName } from '@store/reducers/solanaConnection' import { keySelectors, AnyProps } from './helpers' const store = (s: AnyProps) => s[solanaConnectionSliceName] as ISolanaConnectionStore diff --git a/src/store/selectors/solanaWallet.ts b/src/store/selectors/solanaWallet.ts index 7075d9671..c3e9033dd 100644 --- a/src/store/selectors/solanaWallet.ts +++ b/src/store/selectors/solanaWallet.ts @@ -1,6 +1,6 @@ import { BN } from '@project-serum/anchor' import { createSelector } from '@reduxjs/toolkit' -import { ISolanaWallet, solanaWalletSliceName, ITokenAccount } from '@reducers/solanaWallet' +import { ISolanaWallet, solanaWalletSliceName, ITokenAccount } from '@store/reducers/solanaWallet' import { keySelectors, AnyProps } from './helpers' import { PublicKey } from '@solana/web3.js' import { MOCK_TOKENS } from '@invariant-labs/sdk' @@ -9,14 +9,17 @@ import { WRAPPED_SOL_ADDRESS, WSOL_POOL_INIT_LAMPORTS, WSOL_POSITION_INIT_LAMPORTS -} from '@consts/static' +} from '@store/consts/static' const store = (s: AnyProps) => s[solanaWalletSliceName] as ISolanaWallet -export const { address, balance, accounts, status, balanceLoading, commonTokens } = keySelectors( - store, - ['address', 'balance', 'accounts', 'status', 'balanceLoading', 'commonTokens'] -) +export const { address, balance, accounts, status, balanceLoading } = keySelectors(store, [ + 'address', + 'balance', + 'accounts', + 'status', + 'balanceLoading' +]) export const tokenBalance = (tokenAddress: PublicKey) => createSelector(accounts, balance, (tokensAccounts, solBalance) => { @@ -113,7 +116,6 @@ export const solanaWalletSelectors = { accounts, status, tokenAccount, - balanceLoading, - commonTokens + balanceLoading } export default solanaWalletSelectors diff --git a/src/store/selectors/stats.ts b/src/store/selectors/stats.ts index c6bbea156..5f06e754a 100644 --- a/src/store/selectors/stats.ts +++ b/src/store/selectors/stats.ts @@ -1,4 +1,4 @@ -import { Token } from '@consts/static' +import { Token } from '@store/consts/static' import { createSelector } from '@reduxjs/toolkit' import { IStatsStore, PoolStatsData, statsSliceName, TokenStatsData } from '../reducers/stats' import { keySelectors, AnyProps } from './helpers' diff --git a/src/utils/uiUtils.ts b/src/utils/uiUtils.ts new file mode 100644 index 000000000..6448da576 --- /dev/null +++ b/src/utils/uiUtils.ts @@ -0,0 +1,37 @@ +export const toBlur = 'global-blur' +export const addressTickerMap: { [key: string]: string } = { + WETH: 'So11111111111111111111111111111111111111112', + BTC: '3JXmQAzBPU66dkVQufSE1ChBMRAdCHp6T7ZMBKAwhmWw', + USDC: '5W3bmyYDww6p5XRZnCR6m2c75st6XyCxW1TgGS3wTq7S', + EBGR: 'EBGR1Nb8k3ihiwFuRvXXuxotSKbX7FQWwuzfJEVE9wx9', + ETH: 'So11111111111111111111111111111111111111112', + MOON: 'JChWwuoqpXZZn6WjSCssjaozj4u65qNgvGFsV6eJ2g8S', + ECEGG: 'ECEGG4YDbBevPsq5KfL8Vyk6kptY1jhsoeaiG8RMXZ7C' +} + +export const reversedAddressTickerMap = Object.fromEntries( + Object.entries(addressTickerMap).map(([key, value]) => [value, key]) +) + +// could use rewriting to backdrop-filter when browser support is better +export const blurContent = () => { + const el = document.getElementById(toBlur) + if (!el) return + el.style.filter = 'blur(4px) brightness(0.4)' +} +export const unblurContent = () => { + const el = document.getElementById(toBlur) + if (!el) return + el.style.filter = 'none' +} + +const addPxToValue = ['fontSize'] // add more css properties when needed + +export const importantStyles = (styleObject: { [key: string]: string | number }) => + Object.entries(styleObject).reduce( + (obj, [key, value]) => ({ + ...obj, + [key]: `${value}${addPxToValue.some(prop => prop === key) ? 'px' : ''} !important` + }), + styleObject + ) diff --git a/src/store/consts/utils.ts b/src/utils/utils.ts similarity index 71% rename from src/store/consts/utils.ts rename to src/utils/utils.ts index c6226d9e9..cc6960813 100644 --- a/src/store/consts/utils.ts +++ b/src/utils/utils.ts @@ -2,7 +2,7 @@ import { calculateSellPrice } from '@invariant-labs/bonds-sdk/lib/math' import { BondSaleStruct } from '@invariant-labs/bonds-sdk/lib/sale' import { calculatePriceSqrt, MAX_TICK, MIN_TICK, Pair } from '@invariant-labs/sdk' import { Market, TICK_CROSSES_PER_IX, Tickmap } from '@invariant-labs/sdk/lib/market' -import { getMaxTick, getMinTick, Range } from '@invariant-labs/sdk/lib/utils' +import { getMaxTick, getMinTick, PRICE_SCALE, Range } from '@invariant-labs/sdk/lib/utils' import { Decimal, PoolStructure, Tick } from '@invariant-labs/sdk/src/market' import { calculateTickDelta, @@ -14,15 +14,17 @@ import { import { Staker } from '@invariant-labs/staker-sdk' import { Stake } from '@invariant-labs/staker-sdk/lib/staker' import { BN } from '@project-serum/anchor' -import { ExtendedStake } from '@reducers/farms' -import { PoolWithAddress } from '@reducers/pools' -import { PlotTickData, PositionWithAddress } from '@reducers/positions' +import { ExtendedStake } from '@store/reducers/farms' +import { PoolWithAddress } from '@store/reducers/pools' +import { PlotTickData, PositionWithAddress } from '@store/reducers/positions' import { Token as SPLToken, TOKEN_PROGRAM_ID } from '@solana/spl-token' import { Connection, Keypair, PublicKey } from '@solana/web3.js' -import axios from 'axios' +import axios, { AxiosResponse } from 'axios' import bs58 from 'bs58' import { BTC_DEV, + getAddressTickerMap, + getReversedAddressTickerMap, HBB_DEV, MAX_U64, MC2_DEV, @@ -32,15 +34,18 @@ import { NetworkType, PRICE_DECIMAL, RENDOGE_DEV, - Token, + STABLECOIN_ADDRESSES, USDC_DEV, USDH_DEV, USDT_DEV, VEMC2_DEV, VEMCK_DEV, WSOL_DEV -} from './static' -import mainnetList from './tokenLists/mainnet.json' +} from '@store/consts/static' +import mainnetList from '@store/consts/tokenLists/mainnet.json' +import { FormatConfig, subNumbers } from '@store/consts/static' +import { CoingeckoPriceData, Token } from '@store/consts/types' +import { sqrt } from '@invariant-labs/sdk/lib/math' export const transformBN = (amount: BN): string => { // eslint-disable-next-line new-cap @@ -77,7 +82,7 @@ export const trimZeros = (amount: string) => { return amount } } -export const printBNtoBN = (amount: string, decimals: number): BN => { +export const convertBalanceToBN = (amount: string, decimals: number): BN => { const balanceString = amount.split('.') if (balanceString.length !== 2) { return new BN(balanceString[0] + '0'.repeat(decimals)) @@ -232,13 +237,36 @@ export const getScaleFromString = (value: string): number => { export const logBase = (x: number, b: number): number => Math.log(x) / Math.log(b) -export const calcYPerXPrice = (sqrtPrice: BN, xDecimal: number, yDecimal: number): number => { +export const calcYPerXPriceBySqrtPrice = ( + sqrtPrice: BN, + xDecimal: number, + yDecimal: number +): number => { const sqrt = +printBN(sqrtPrice, PRICE_DECIMAL) const proportion = sqrt * sqrt return proportion / 10 ** (yDecimal - xDecimal) } +export const calcPriceBySqrtPrice = ( + sqrtPrice: BN, + isXtoY: boolean, + xDecimal: number, + yDecimal: number +): number => { + const price = calcYPerXPriceBySqrtPrice(sqrtPrice, xDecimal, yDecimal) ** (isXtoY ? 1 : -1) + + return price +} + +export const calcYPerXPriceByTickIndex = ( + tickIndex: number, + xDecimal: number, + yDecimal: number +): number => { + return calcYPerXPriceBySqrtPrice(calculatePriceSqrt(tickIndex), xDecimal, yDecimal) +} + export const spacingMultiplicityLte = (arg: number, spacing: number): number => { if (Math.abs(arg % spacing) === 0) { return arg @@ -284,7 +312,7 @@ export const createLiquidityPlot = ( const max = getMaxTick(pool.tickSpacing) if (!ticks.length || ticks[0].index > min) { - const minPrice = calcPrice(min, isXtoY, tokenXDecimal, tokenYDecimal) + const minPrice = calcPriceByTickIndex(min, isXtoY, tokenXDecimal, tokenYDecimal) ticksData.push({ x: minPrice, @@ -295,14 +323,24 @@ export const createLiquidityPlot = ( ticks.forEach((tick, i) => { if (i === 0 && tick.index - pool.tickSpacing > min) { - const price = calcPrice(tick.index - pool.tickSpacing, isXtoY, tokenXDecimal, tokenYDecimal) + const price = calcPriceByTickIndex( + tick.index - pool.tickSpacing, + isXtoY, + tokenXDecimal, + tokenYDecimal + ) ticksData.push({ x: price, y: 0, index: tick.index - pool.tickSpacing }) } else if (i > 0 && tick.index - pool.tickSpacing > ticks[i - 1].index) { - const price = calcPrice(tick.index - pool.tickSpacing, isXtoY, tokenXDecimal, tokenYDecimal) + const price = calcPriceByTickIndex( + tick.index - pool.tickSpacing, + isXtoY, + tokenXDecimal, + tokenYDecimal + ) ticksData.push({ x: price, y: +printBN(ticks[i - 1].liqudity, DECIMAL), @@ -310,7 +348,7 @@ export const createLiquidityPlot = ( }) } - const price = calcPrice(tick.index, isXtoY, tokenXDecimal, tokenYDecimal) + const price = calcPriceByTickIndex(tick.index, isXtoY, tokenXDecimal, tokenYDecimal) ticksData.push({ x: price, y: +printBN(ticks[i].liqudity, DECIMAL), @@ -319,7 +357,7 @@ export const createLiquidityPlot = ( }) if (!ticks.length) { - const maxPrice = calcPrice(max, isXtoY, tokenXDecimal, tokenYDecimal) + const maxPrice = calcPriceByTickIndex(max, isXtoY, tokenXDecimal, tokenYDecimal) ticksData.push({ x: maxPrice, @@ -328,7 +366,7 @@ export const createLiquidityPlot = ( }) } else if (ticks[ticks.length - 1].index < max) { if (max - ticks[ticks.length - 1].index > pool.tickSpacing) { - const price = calcPrice( + const price = calcPriceByTickIndex( ticks[ticks.length - 1].index + pool.tickSpacing, isXtoY, tokenXDecimal, @@ -341,7 +379,7 @@ export const createLiquidityPlot = ( }) } - const maxPrice = calcPrice(max, isXtoY, tokenXDecimal, tokenYDecimal) + const maxPrice = calcPriceByTickIndex(max, isXtoY, tokenXDecimal, tokenYDecimal) ticksData.push({ x: maxPrice, @@ -365,7 +403,7 @@ export const createPlaceholderLiquidityPlot = ( const min = getMinTick(tickSpacing) const max = getMaxTick(tickSpacing) - const minPrice = calcPrice(min, isXtoY, tokenXDecimal, tokenYDecimal) + const minPrice = calcPriceByTickIndex(min, isXtoY, tokenXDecimal, tokenYDecimal) ticksData.push({ x: minPrice, @@ -373,7 +411,7 @@ export const createPlaceholderLiquidityPlot = ( index: min }) - const maxPrice = calcPrice(max, isXtoY, tokenXDecimal, tokenYDecimal) + const maxPrice = calcPriceByTickIndex(max, isXtoY, tokenXDecimal, tokenYDecimal) ticksData.push({ x: maxPrice, @@ -387,7 +425,7 @@ export const createPlaceholderLiquidityPlot = ( export const getNetworkTokensList = (networkType: NetworkType): Record => { const obj: Record = {} switch (networkType) { - case NetworkType.MAINNET: + case NetworkType.Mainnet: Object.entries(mainnetList as unknown as Record).forEach( ([address, token]) => { obj[address] = { @@ -397,7 +435,7 @@ export const getNetworkTokensList = (networkType: NetworkType): Record { + const minTick = getMinTick(spacing) + const maxTick = getMaxTick(spacing) + + const basePrice = Math.min( + Math.max( + price, + Number(calcPriceByTickIndex(isXtoY ? minTick : maxTick, isXtoY, xDecimal, yDecimal)) + ), + Number(calcPriceByTickIndex(isXtoY ? maxTick : minTick, isXtoY, xDecimal, yDecimal)) + ) + + const primaryUnitsPrice = getPrimaryUnitsPrice( + basePrice, + isXtoY, + Number(xDecimal), + Number(yDecimal) + ) + + const parsedPrimaryUnits = + primaryUnitsPrice > 1 && Number.isInteger(primaryUnitsPrice) + ? primaryUnitsPrice.toString() + : primaryUnitsPrice.toFixed(24) + + const priceBN = convertBalanceToBN(parsedPrimaryUnits, PRICE_SCALE) + const sqrtPrice = sqrt(priceBN) + + const minSqrtPrice = calculatePriceSqrt(minTick).v + const maxSqrtPrice = calculatePriceSqrt(maxTick).v + + let validatedSqrtPrice = sqrtPrice + + if (sqrtPrice.lt(minSqrtPrice)) { + validatedSqrtPrice = minSqrtPrice + } else if (sqrtPrice.gt(maxSqrtPrice)) { + validatedSqrtPrice = maxSqrtPrice + } + + return validatedSqrtPrice +} + +export const validConcentrationMidPriceTick = ( + midPriceTick: number, + isXtoY: boolean, + tickSpacing: number +) => { + const minTick = getMinTick(tickSpacing) + const maxTick = getMaxTick(tickSpacing) + + const parsedTickSpacing = Number(tickSpacing) + const tickDelta = calculateTickDelta(parsedTickSpacing, 2, 2) + + const minTickLimit = minTick + (2 + tickDelta) * tickSpacing + const maxTickLimit = maxTick - (2 + tickDelta) * tickSpacing + + if (isXtoY) { + if (midPriceTick < minTickLimit) { + return minTickLimit + } else if (midPriceTick > maxTickLimit) { + return maxTickLimit + } + } else { + if (midPriceTick > maxTickLimit) { + return maxTickLimit + } else if (midPriceTick < minTickLimit) { + return minTickLimit + } + } + + return midPriceTick +} + +export const findClosestIndexByValue = (arr: number[], value: number): number => { + const high = arr.length - 1 + + if (value < arr[0]) { + return 0 + } + + if (value > arr[high]) { + return high + } + + for (let i = arr.length - 1; i >= 0; i--) { + if (Number(arr[i].toFixed(0)) <= Number(value.toFixed(0))) { + return i + } + } + return high +} + +export const calculateTickFromBalance = ( + price: number, + spacing: number, + isXtoY: boolean, + xDecimal: number, + yDecimal: number +) => { + const minTick = getMinTick(spacing) + const maxTick = getMaxTick(spacing) + + const basePrice = Math.max( + price, + calcPriceByTickIndex(isXtoY ? minTick : maxTick, isXtoY, xDecimal, yDecimal) + ) + const primaryUnitsPrice = getPrimaryUnitsPrice(basePrice, isXtoY, xDecimal, yDecimal) + const tick = Math.round(logBase(primaryUnitsPrice, 1.0001)) + + return Math.max(Math.min(tick, getMaxTick(spacing)), getMinTick(spacing)) +} + export const nearestSpacingMultiplicity = (arg: number, spacing: number) => { const greater = spacingMultiplicityGte(arg, spacing) const lower = spacingMultiplicityLte(arg, spacing) @@ -445,7 +600,10 @@ export const nearestTickIndex = ( xDecimal: number, yDecimal: number ) => { - const base = Math.max(price, calcPrice(isXtoY ? MIN_TICK : MAX_TICK, isXtoY, xDecimal, yDecimal)) + const base = Math.max( + price, + calcPriceByTickIndex(isXtoY ? MIN_TICK : MAX_TICK, isXtoY, xDecimal, yDecimal) + ) const primaryUnitsPrice = getPrimaryUnitsPrice(base, isXtoY, xDecimal, yDecimal) const log = Math.round(logBase(primaryUnitsPrice, 1.0001)) return nearestSpacingMultiplicity(log, spacing) @@ -467,8 +625,13 @@ export const calcTicksAmountInRange = ( return Math.ceil(Math.abs(maxIndex - minIndex) / tickSpacing) } -export const calcPrice = (index: number, isXtoY: boolean, xDecimal: number, yDecimal: number) => { - const price = calcYPerXPrice(calculatePriceSqrt(index).v, xDecimal, yDecimal) +export const calcPriceByTickIndex = ( + index: number, + isXtoY: boolean, + xDecimal: number, + yDecimal: number +) => { + const price = calcYPerXPriceBySqrtPrice(calculatePriceSqrt(index).v, xDecimal, yDecimal) return isXtoY ? price : price !== 0 ? 1 / price : Number.MAX_SAFE_INTEGER } @@ -508,7 +671,7 @@ export const calcCurrentPriceOfPool = ( const knownPrice: BN = new BN(sqrtPricePow * 10 ** decimalDiff) - return printBNtoBN(knownPrice.toString(), 0) + return convertBalanceToBN(knownPrice.toString(), 0) } export const handleSimulate = async ( @@ -793,6 +956,7 @@ export interface JupApiPriceData { export interface CoingeckoApiPriceData { id: string current_price: number + price_change_percentage_24h: number } export interface TokenPriceData { @@ -801,37 +965,46 @@ export interface TokenPriceData { export const getCoingeckoPricesData = async ( ids: string[] -): Promise> => { - const maxTokensPerRequest = 250 - const chunkedIds = [] - for (let i = 0; i < ids.length; i += maxTokensPerRequest) { - chunkedIds.push(ids.slice(i, i + maxTokensPerRequest)) +): Promise> => { + const requests: Array>> = [] + for (let i = 0; i < ids.length; i += 250) { + const idsSlice = ids.slice(i, i + 250) + let idsList = '' + idsSlice.forEach((id, index) => { + idsList += id + (index < 249 ? ',' : '') + }) + requests.push( + axios.get( + `https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&ids=${idsList}&per_page=250` + ) + ) } - const requests = chunkedIds.map( - async idsChunk => - await axios.get( - `https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&ids=${idsChunk.join( - ',' - )}&per_page=250` - ) - ) + return await Promise.all(requests).then(responses => { + let concatRes: CoingeckoApiPriceData[] = [] + responses + .map(res => res.data) + .forEach(data => { + concatRes = [...concatRes, ...data] + }) - const responses = await Promise.all(requests) - const concatRes = responses.flatMap(response => - Object.values(response.data).map(({ id, current_price: price }) => ({ id, price })) - ) + const data: Record = {} - return concatRes.reduce>((acc, { id, price }) => { - acc[id] = { price: price ?? 0 } - return acc - }, {}) + concatRes.forEach(({ id, current_price, price_change_percentage_24h }) => { + data[id] = { + price: current_price ?? 0, + priceChange: price_change_percentage_24h ?? 0 + } + }) + + return data + }) } export const getJupPricesData = async (ids: string[]): Promise> => { const maxTokensPerRequest = 100 - const chunkedIds = [] + const chunkedIds: string[][] = [] for (let i = 0; i < ids.length; i += maxTokensPerRequest) { chunkedIds.push(ids.slice(i, i + maxTokensPerRequest)) } @@ -1198,3 +1371,160 @@ export const getMainnetCommonTokens = async (): Promise => { return commonTokens } + +export const numberToString = (number: number | bigint | string): string => { + return String(number).includes('e-') + ? Number(number).toFixed(parseInt(String(number).split('e-')[1])) + : String(number) +} + +export const containsOnlyZeroes = (string: string): boolean => { + return /^(?!.*[1-9]).*$/.test(string) +} + +export const printSubNumber = (amount: number): string => { + return Array.from(String(amount)) + .map(char => subNumbers[+char]) + .join('') +} + +export const countLeadingZeros = (str: string): number => { + return (str.match(/^0+/) || [''])[0].length +} + +export const formatNumber = ( + number: number | bigint | string, + noDecimals?: boolean, + decimalsAfterDot: number = 3 +): string => { + const numberAsNumber = Number(number) + const isNegative = numberAsNumber < 0 + const absNumberAsNumber = Math.abs(numberAsNumber) + + if (absNumberAsNumber.toString().includes('e')) { + const exponential = absNumberAsNumber.toExponential(decimalsAfterDot) + return isNegative ? `-${exponential}` : exponential + } + + const absNumberAsString = numberToString(absNumberAsNumber) + + if (containsOnlyZeroes(absNumberAsString)) { + return '0' + } + + const [beforeDot, afterDot] = absNumberAsString.split('.') + + let formattedNumber + + if (Math.abs(numberAsNumber) >= FormatConfig.B) { + const formattedDecimals = noDecimals + ? '' + : (FormatConfig.DecimalsAfterDot ? '.' : '') + + (beforeDot.slice(-FormatConfig.BDecimals) + (afterDot ? afterDot : '')).slice( + 0, + FormatConfig.DecimalsAfterDot + ) + + formattedNumber = + beforeDot.slice(0, -FormatConfig.BDecimals) + (noDecimals ? '' : formattedDecimals) + 'B' + } else if (Math.abs(numberAsNumber) >= FormatConfig.M) { + const formattedDecimals = noDecimals + ? '' + : (FormatConfig.DecimalsAfterDot ? '.' : '') + + (beforeDot.slice(-FormatConfig.MDecimals) + (afterDot ? afterDot : '')).slice( + 0, + FormatConfig.DecimalsAfterDot + ) + formattedNumber = + beforeDot.slice(0, -FormatConfig.MDecimals) + (noDecimals ? '' : formattedDecimals) + 'M' + } else if (Math.abs(numberAsNumber) >= FormatConfig.K) { + const formattedDecimals = noDecimals + ? '' + : (FormatConfig.DecimalsAfterDot ? '.' : '') + + (beforeDot.slice(-FormatConfig.KDecimals) + (afterDot ? afterDot : '')).slice( + 0, + FormatConfig.DecimalsAfterDot + ) + formattedNumber = + beforeDot.slice(0, -FormatConfig.KDecimals) + (noDecimals ? '' : formattedDecimals) + 'K' + } else if (afterDot && countLeadingZeros(afterDot) <= decimalsAfterDot) { + const roundedNumber = numberAsNumber + .toFixed(countLeadingZeros(afterDot) + decimalsAfterDot + 1) + .slice(0, -1) + formattedNumber = trimZeros(roundedNumber) + } else { + const leadingZeros = afterDot ? countLeadingZeros(afterDot) : 0 + + const parsedAfterDot = + String(parseInt(afterDot)).length > decimalsAfterDot + ? String(parseInt(afterDot)).slice(0, decimalsAfterDot) + : afterDot + formattedNumber = trimZeros( + beforeDot + + '.' + + (parsedAfterDot + ? leadingZeros > decimalsAfterDot + ? '0' + printSubNumber(leadingZeros) + parseInt(parsedAfterDot) + : parsedAfterDot + : '') + ) + } + + return isNegative ? '-' + formattedNumber : formattedNumber +} + +export const trimDecimalZeros = (numStr: string): string => { + if (/^[0.]+$/.test(numStr)) { + return '0' + } + + const withoutTrailingDot = numStr.replace(/\.$/, '') + + if (!withoutTrailingDot.includes('.')) { + return withoutTrailingDot + } + + const [integerPart, decimalPart] = withoutTrailingDot.split('.') + + const trimmedDecimal = decimalPart.replace(/0+$/, '') + return trimmedDecimal ? `${integerPart}.${trimmedDecimal}` : integerPart +} + +export const stringToFixed = (string: string, numbersAfterDot: number): string => { + return string.includes('.') ? string.slice(0, string.indexOf('.') + 1 + numbersAfterDot) : string +} + +export const tickerToAddress = (network: NetworkType, ticker: string): string => { + try { + return getAddressTickerMap(network)[ticker].toString() + } catch (error) { + return ticker + } +} + +export const addressToTicker = (network: NetworkType, address: string): string => { + return getReversedAddressTickerMap(network)[address] || address +} + +export const initialXtoY = (tokenXAddress?: string, tokenYAddress?: string) => { + if (!tokenXAddress || !tokenYAddress) { + return true + } + + const isTokeXStablecoin = STABLECOIN_ADDRESSES.includes(tokenXAddress) + const isTokenYStablecoin = STABLECOIN_ADDRESSES.includes(tokenYAddress) + + return isTokeXStablecoin === isTokenYStablecoin || (!isTokeXStablecoin && !isTokenYStablecoin) +} + +export const parseFeeToPathFee = (fee: BN): string => { + const parsedFee = (fee / Math.pow(10, 8)).toString().padStart(3, '0') + return parsedFee.slice(0, parsedFee.length - 2) + '_' + parsedFee.slice(parsedFee.length - 2) +} + +export const parsePathFeeToFeeString = (pathFee: string): string => { + return (+pathFee.replace('_', '') * Math.pow(10, 8)).toString() +} + +export const shortenAddress = (address: string, chars = 4) => + `${address.slice(0, chars)}...${address.slice(-chars)}` diff --git a/src/web3/adapters/standard.ts b/src/utils/web3/adapters/standard.ts similarity index 90% rename from src/web3/adapters/standard.ts rename to src/utils/web3/adapters/standard.ts index b4b10a00b..881364acf 100644 --- a/src/web3/adapters/standard.ts +++ b/src/utils/web3/adapters/standard.ts @@ -1,7 +1,7 @@ import { Transaction } from '@solana/web3.js' import { WalletAdapter } from './types' -import { DEFAULT_PUBLICKEY } from '@consts/static' -import { nightlyConnectAdapter } from '@web3/selector' +import { nightlyConnectAdapter } from '../selector' +import { DEFAULT_PUBLICKEY } from '@store/consts/static' export class StandardAdapter implements WalletAdapter { constructor() { diff --git a/src/web3/adapters/types.ts b/src/utils/web3/adapters/types.ts similarity index 100% rename from src/web3/adapters/types.ts rename to src/utils/web3/adapters/types.ts diff --git a/src/web3/connection.ts b/src/utils/web3/connection.ts similarity index 81% rename from src/web3/connection.ts rename to src/utils/web3/connection.ts index 48181ece1..fd76dfe1a 100644 --- a/src/web3/connection.ts +++ b/src/utils/web3/connection.ts @@ -1,5 +1,5 @@ import { Connection } from '@solana/web3.js' -import { NetworkType, SolanaNetworks } from '@consts/static' +import { NetworkType, RPC } from '@store/consts/static' import { Network } from '@invariant-labs/sdk' import { Network as StakerNetwork } from '@invariant-labs/staker-sdk' import { Network as BondsNetwork } from '@invariant-labs/bonds-sdk' @@ -11,7 +11,7 @@ const getSolanaConnection = (url: string): Connection => { if (_connection && _network === url) { return _connection } - _connection = new Connection(url, 'recent') + _connection = new Connection(url, 'processed') _network = url return _connection @@ -19,13 +19,13 @@ const getSolanaConnection = (url: string): Connection => { const networkTypetoProgramNetwork = (type: NetworkType): Network => { switch (type) { - case NetworkType.DEVNET: + case NetworkType.Devnet: return Network.DEV - case NetworkType.LOCALNET: + case NetworkType.Local: return Network.LOCAL // case SolanaNetworks.TEST: // return StakerNetwork.TEST - case NetworkType.MAINNET: + case NetworkType.Mainnet: return Network.MAIN default: return Network.DEV @@ -34,13 +34,13 @@ const networkTypetoProgramNetwork = (type: NetworkType): Network => { const networkTypetoStakerNetwork = (type: NetworkType): StakerNetwork => { switch (type) { - case NetworkType.DEVNET: + case NetworkType.Devnet: return StakerNetwork.DEV - case NetworkType.LOCALNET: + case NetworkType.Local: return StakerNetwork.LOCAL // case SolanaNetworks.TEST: // return StakerNetwork.TEST - case NetworkType.MAINNET: + case NetworkType.Mainnet: return StakerNetwork.MAIN default: return StakerNetwork.DEV @@ -49,9 +49,9 @@ const networkTypetoStakerNetwork = (type: NetworkType): StakerNetwork => { const networkTypetoBondsNetwork = (type: NetworkType): BondsNetwork => { switch (type) { - case NetworkType.DEVNET: + case NetworkType.Devnet: return BondsNetwork.DEV - case NetworkType.LOCALNET: + case NetworkType.Local: return BondsNetwork.LOCAL // case SolanaNetworks.TEST: // return StakerNetwork.TEST @@ -68,7 +68,7 @@ const getCurrentSolanaConnection = (): Connection | null => { export { getSolanaConnection, - SolanaNetworks, + RPC, getCurrentSolanaConnection, networkTypetoStakerNetwork, networkTypetoProgramNetwork, diff --git a/src/web3/data.ts b/src/utils/web3/data.ts similarity index 100% rename from src/web3/data.ts rename to src/utils/web3/data.ts diff --git a/src/web3/programs/amm.ts b/src/utils/web3/programs/amm.ts similarity index 90% rename from src/web3/programs/amm.ts rename to src/utils/web3/programs/amm.ts index 657da59d7..87c2c713c 100644 --- a/src/web3/programs/amm.ts +++ b/src/utils/web3/programs/amm.ts @@ -1,8 +1,9 @@ import { getMarketAddress, Market } from '@invariant-labs/sdk' -import { getSolanaConnection, networkTypetoProgramNetwork } from '@web3/connection' -import { getSolanaWallet } from '@web3/wallet' import { PublicKey } from '@solana/web3.js' -import { NetworkType } from '@consts/static' +import { NetworkType } from '@store/consts/static' +import { getSolanaWallet } from '../wallet' +import { getSolanaConnection, networkTypetoProgramNetwork } from '../connection' + let _market: Market export const getCurrentMarketProgram = (): Market => { return _market diff --git a/src/web3/programs/bonds.ts b/src/utils/web3/programs/bonds.ts similarity index 89% rename from src/web3/programs/bonds.ts rename to src/utils/web3/programs/bonds.ts index a1c032dbd..1c1c50bbb 100644 --- a/src/web3/programs/bonds.ts +++ b/src/utils/web3/programs/bonds.ts @@ -1,7 +1,7 @@ -import { NetworkType } from '@consts/static' import { Bonds } from '@invariant-labs/bonds-sdk' -import { getSolanaConnection, networkTypetoBondsNetwork } from '@web3/connection' -import { getSolanaWallet } from '@web3/wallet' +import { getSolanaConnection, networkTypetoBondsNetwork } from '../connection' +import { NetworkType } from '@store/consts/static' +import { getSolanaWallet } from '../wallet' let _bonds: Bonds export const getCurrentBondsProgram = (): Bonds => { diff --git a/src/web3/programs/staker.ts b/src/utils/web3/programs/staker.ts similarity index 89% rename from src/web3/programs/staker.ts rename to src/utils/web3/programs/staker.ts index 7a82a10fe..a1c4bd5d3 100644 --- a/src/web3/programs/staker.ts +++ b/src/utils/web3/programs/staker.ts @@ -1,7 +1,7 @@ -import { NetworkType } from '@consts/static' import { Staker } from '@invariant-labs/staker-sdk' -import { getSolanaConnection, networkTypetoStakerNetwork } from '@web3/connection' -import { getSolanaWallet } from '@web3/wallet' +import { NetworkType } from '@store/consts/static' +import { getSolanaConnection, networkTypetoStakerNetwork } from '../connection' +import { getSolanaWallet } from '../wallet' let _staker: Staker export const getCurrentStakerProgram = (): Staker => { diff --git a/src/web3/selector.ts b/src/utils/web3/selector.ts similarity index 58% rename from src/web3/selector.ts rename to src/utils/web3/selector.ts index 7cbdb9606..97b85b216 100644 --- a/src/web3/selector.ts +++ b/src/utils/web3/selector.ts @@ -1,16 +1,13 @@ import { NightlyConnectAdapter } from '@nightlylabs/wallet-selector-solana' -export const nightlyConnectAdapter: NightlyConnectAdapter = NightlyConnectAdapter.buildLazy( - { - appMetadata: { - name: 'Invariant', - description: 'Invariant - AMM DEX provided concentrated liquidity', - icon: 'https://invariant.app/favicon-192x192.png' - }, - url: 'https://nc2.nightly.app' +export const nightlyConnectAdapter: NightlyConnectAdapter = NightlyConnectAdapter.buildLazy({ + appMetadata: { + name: 'Invariant', + description: 'Invariant - AMM DEX provided concentrated liquidity', + icon: 'https://invariant.app/favicon-192x192.png' }, - true -) + url: 'https://nc2.nightly.app' +}) export const openWalletSelectorModal = async () => { try { diff --git a/src/web3/wallet.ts b/src/utils/web3/wallet.ts similarity index 100% rename from src/web3/wallet.ts rename to src/utils/web3/wallet.ts diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 000000000..11f02fe2a --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.json b/tsconfig.json index 2585d91f4..1e4118fc5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,44 @@ { - "extends": "./tsconfig.paths.json", "compilerOptions": { - "target": "es2020", - "lib": ["es2018", "dom", "esnext", "es2020"], - "allowJs": true, + "target": "ES2020", + "baseUrl": "./", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", "skipLibCheck": true, - "downlevelIteration": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "commonjs", - "moduleResolution": "node", + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, - "jsx": "react" + "jsx": "react-jsx", + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "paths": { + "@components/*": ["src/components/*"], + "@containers/*": ["src/containers/*"], + "@pages/*": ["src/pages/*"], + "@static/*": ["src/static/*"], + "@store/*": ["src/store/*"], + "@web3/*": ["src/web3/*"], + "@utils/*": ["src/utils/*"], + "@/*": ["src/*"] + }, + "noImplicitAny": false }, - "include": ["src"] + "include": ["src"], + "exclude": [ + "node_modules/**/*", + "src/components/FarmsList/**/*", + "src/components/Modals/SelectModals/SortFarmsModal/**/*" + ], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] } diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 000000000..97ede7ee6 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true + }, + "include": ["vite.config.ts"] +} diff --git a/tsconfig.paths.json b/tsconfig.paths.json deleted file mode 100644 index 73aae5af2..000000000 --- a/tsconfig.paths.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@components/*": ["./src/components/*"], - "@containers/*": ["./src/containers/*"], - "@reducers/*": ["./src/store/reducers/*"], - "@selectors/*": ["./src/store/selectors/*"], - "@sagas/*": ["./src/store/sagas/*"], - "@consts/*": ["./src/store/consts/*"], - "@web3/*": ["./src/web3/*"], - "@static/*": ["./src/static/*"], - "@store/*": ["./src/store/*"] - } - } -} diff --git a/vite.config.ts b/vite.config.ts index 5ad3a01bc..a22277ddb 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,23 +1,54 @@ +import react from '@vitejs/plugin-react-swc' import { defineConfig } from 'vite' -import { ViteAliases } from 'vite-aliases' -import react from '@vitejs/plugin-react' +import topLevelAwait from 'vite-plugin-top-level-await' +import wasm from 'vite-plugin-wasm' +import { compression } from 'vite-plugin-compression2' import inject from '@rollup/plugin-inject' +import { nodePolyfills } from 'vite-plugin-node-polyfills' +// https://vitejs.dev/config/ export default defineConfig({ plugins: [ react(), - ViteAliases({ - adjustDuplicates: true, - depth: 4 - }) + topLevelAwait(), + wasm(), + compression(), + inject({ + assert: ['assert', 'default'] + }), + nodePolyfills() ], define: { - 'process.env.NODE_DEBUG': 'false' + 'process.env.NODE_DEBUG': 'false', + 'process.browser': `"test"`, + 'process.version': `"test"` + }, + resolve: { + alias: { + '@components': '/src/components', + '@containers': '/src/containers', + '@pages': '/src/pages', + '@static': '/src/static', + '@store': '/src/store', + '@web3': '/src/web3', + '@utils': '/src/utils', + '@/': '/src' + } + }, + server: { + host: 'localhost', + port: 3000 }, build: { target: 'es2020', rollupOptions: { + external: ['fs/promises', 'path'], plugins: [inject({ Buffer: ['buffer', 'Buffer'] })] } + }, + optimizeDeps: { + esbuildOptions: { + target: 'es2020' + } } }) diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..d9819e19a --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,14 @@ +import { defineConfig, mergeConfig } from 'vitest/config' +import viteConfig from './vite.config.ts' + +export default mergeConfig( + viteConfig, + defineConfig({ + test: { + globals: true, + environment: 'jsdom', + setupFiles: './src/test/setup.ts', + css: true + } + }) +) From 2af2338cdf7577d4c7f9f87fa55c89c9a8ae0ea7 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 09:03:08 +0100 Subject: [PATCH 02/30] trunk format --- index.html | 2 +- src/components/FarmsList/FarmList.stories.tsx | 2 +- .../PositionDetails/PositionDetails.tsx | 4 +- src/components/PriceRangePlot/Brush/Brush.tsx | 37 ++++++++++--------- .../Stats/PoolListItem/PoolListItem.tsx | 4 +- .../Swap/ExchangeRate/ExchangeRate.tsx | 4 +- src/components/Swap/Swap.tsx | 27 ++++++++++---- .../TransactionDetailsBox.tsx | 6 ++- src/store/index.ts | 8 ++-- src/store/sagas/positions.ts | 32 ++++++++-------- src/store/sagas/swap.ts | 8 ++-- 11 files changed, 76 insertions(+), 58 deletions(-) diff --git a/index.html b/index.html index 9a0c8c6bb..8bf00f1f8 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ - + diff --git a/src/components/FarmsList/FarmList.stories.tsx b/src/components/FarmsList/FarmList.stories.tsx index bad4a37ea..87b943657 100644 --- a/src/components/FarmsList/FarmList.stories.tsx +++ b/src/components/FarmsList/FarmList.stories.tsx @@ -73,4 +73,4 @@ // // ) // }) -export default {} \ No newline at end of file +export default {} diff --git a/src/components/PositionDetails/PositionDetails.tsx b/src/components/PositionDetails/PositionDetails.tsx index 1bbc857d5..b5a44358c 100644 --- a/src/components/PositionDetails/PositionDetails.tsx +++ b/src/components/PositionDetails/PositionDetails.tsx @@ -230,8 +230,8 @@ const PositionDetails: React.FC = ({ .fill(1) .map((_e, index) => ({ x: index, y: index, index })) } - leftRange={memoizedLeftRange} - rightRange={memoizedRightRange} + leftRange={memoizedLeftRange} + rightRange={memoizedRightRange} midPrice={{ ...midPrice, x: midPrice.x ** (xToY ? 1 : -1) diff --git a/src/components/PriceRangePlot/Brush/Brush.tsx b/src/components/PriceRangePlot/Brush/Brush.tsx index b2628b491..53c14f8ea 100644 --- a/src/components/PriceRangePlot/Brush/Brush.tsx +++ b/src/components/PriceRangePlot/Brush/Brush.tsx @@ -116,8 +116,8 @@ export const Handle: React.FC = ({ disabled ? colors.invariant.light : isHovered - ? colors.invariant.lightPink - : colors.invariant.pink + ? colors.invariant.lightPink + : colors.invariant.pink } textColor={disabled ? colors.invariant.lightHover : colors.invariant.componentBcg} isReversed={isReversed()} @@ -130,8 +130,8 @@ export const Handle: React.FC = ({ disabled ? colors.invariant.light : isHovered - ? colors.invariant.lightPink - : colors.invariant.pink + ? colors.invariant.lightPink + : colors.invariant.pink } textColor={disabled ? colors.invariant.lightHover : colors.invariant.componentBcg} isReversed={isReversed()} @@ -144,8 +144,8 @@ export const Handle: React.FC = ({ drag ? 0 : (isStart && !isReversed()) || (!isStart && isReversed()) - ? currentPosition - 40 - : currentPosition + ? currentPosition - 40 + : currentPosition } y={0} width={drag ? plotWidth : 42} @@ -262,17 +262,18 @@ export const Brush = plotMax: number, disabled: boolean = false ): React.FC => - layerProps => ( - - ) + layerProps => + ( + + ) export default Brush diff --git a/src/components/Stats/PoolListItem/PoolListItem.tsx b/src/components/Stats/PoolListItem/PoolListItem.tsx index 3e1c378bf..2380a016d 100644 --- a/src/components/Stats/PoolListItem/PoolListItem.tsx +++ b/src/components/Stats/PoolListItem/PoolListItem.tsx @@ -71,7 +71,9 @@ const PoolListItem: React.FC = ({ const handleOpenPosition = () => { navigate( - `/newPosition/${symbolFrom ?? ''}/${symbolTo ?? ''}/${parseFeeToPathFee(Math.round(fee * 10 ** (DECIMAL - 2)))}` + `/newPosition/${symbolFrom ?? ''}/${symbolTo ?? ''}/${parseFeeToPathFee( + Math.round(fee * 10 ** (DECIMAL - 2)) + )}` ) } diff --git a/src/components/Swap/ExchangeRate/ExchangeRate.tsx b/src/components/Swap/ExchangeRate/ExchangeRate.tsx index 3de7e86c2..552ce8a98 100644 --- a/src/components/Swap/ExchangeRate/ExchangeRate.tsx +++ b/src/components/Swap/ExchangeRate/ExchangeRate.tsx @@ -33,8 +33,8 @@ const ExchangeRate: React.FC = ({ {isNaN(amount) ? 0 : formatNumber(amount.toFixed(tokenToDecimals)) === '0' - ? '~0' - : formatNumber(amount.toFixed(tokenToDecimals))}{' '} + ? '~0' + : formatNumber(amount.toFixed(tokenToDecimals))}{' '} {tokenToSymbol} ) diff --git a/src/components/Swap/Swap.tsx b/src/components/Swap/Swap.tsx index 5f370485c..8307572b0 100644 --- a/src/components/Swap/Swap.tsx +++ b/src/components/Swap/Swap.tsx @@ -208,7 +208,15 @@ export const Swap: React.FC = ({ useEffect(() => { navigate( - `/exchange/${tokenFrom !== null ? addressToTicker(network, tokens[tokenFrom.toString()].assetAddress.toString()) : '-'}/${tokenTo !== null ? addressToTicker(network, tokens[tokenTo.toString()].assetAddress.toString()) : '-'}`, + `/exchange/${ + tokenFrom !== null + ? addressToTicker(network, tokens[tokenFrom.toString()].assetAddress.toString()) + : '-' + }/${ + tokenTo !== null + ? addressToTicker(network, tokens[tokenTo.toString()].assetAddress.toString()) + : '-' + }`, { replace: true } @@ -224,7 +232,6 @@ export const Swap: React.FC = ({ } }, [Object.keys(tokens).length]) - useEffect(() => { onSetPair(tokenFrom, tokenTo) }, [tokenFrom, tokenTo, pools.length]) @@ -809,7 +816,9 @@ export const Swap: React.FC = ({ {tokens[tokenFrom?.toString() ?? '']?.isUnknown && ( + text={`${ + tokens[tokenFrom?.toString() ?? ''].symbol + } is unknown, make sure address is correct before trading`}> {tokens[tokenFrom?.toString() ?? ''].symbol} is not verified @@ -817,7 +826,9 @@ export const Swap: React.FC = ({ )} {tokens[tokenTo?.toString() ?? '']?.isUnknown && ( + text={`${ + tokens[tokenTo?.toString() ?? ''].symbol + } is unknown, make sure address is correct before trading`}> {tokens[tokenTo?.toString() ?? ''].symbol} is not verified @@ -935,8 +946,8 @@ export const Swap: React.FC = ({ getStateMessage() === 'Connect a wallet' ? `${classes.swapButton}` : getStateMessage() === 'Exchange' && progress === 'none' - ? `${classes.swapButton} ${classes.ButtonSwapActive}` - : classes.swapButton + ? `${classes.swapButton} ${classes.ButtonSwapActive}` + : classes.swapButton } disabled={getStateMessage() !== 'Exchange' || progress !== 'none'} onClick={() => { @@ -966,8 +977,8 @@ export const Swap: React.FC = ({ getStateMessage() === 'Connect a wallet' ? `${classes.swapButton}` : getStateMessage() === 'Exchange' && progress === 'none' - ? `${classes.swapButton} ${classes.ButtonSwapActive}` - : classes.swapButton + ? `${classes.swapButton} ${classes.ButtonSwapActive}` + : classes.swapButton } disabled={getStateMessage() !== 'Exchange' || progress !== 'none'} onClick={() => { diff --git a/src/components/Swap/TransactionDetailsBox/TransactionDetailsBox.tsx b/src/components/Swap/TransactionDetailsBox/TransactionDetailsBox.tsx index b373db340..13024cd5a 100644 --- a/src/components/Swap/TransactionDetailsBox/TransactionDetailsBox.tsx +++ b/src/components/Swap/TransactionDetailsBox/TransactionDetailsBox.tsx @@ -39,7 +39,11 @@ const TransactionDetailsBox: React.FC = ({ {exchangeRate.val === Infinity ? '-' - : `${formatNumber(exchangeRate.val.toFixed(exchangeRate.decimal)) === '0' ? '~0' : formatNumber(exchangeRate.val.toFixed(exchangeRate.decimal))} ${exchangeRate.symbol}`} + : `${ + formatNumber(exchangeRate.val.toFixed(exchangeRate.decimal)) === '0' + ? '~0' + : formatNumber(exchangeRate.val.toFixed(exchangeRate.decimal)) + } ${exchangeRate.symbol}`} )} diff --git a/src/store/index.ts b/src/store/index.ts index eba3d318c..4660804f5 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -53,10 +53,10 @@ const configureAppStore = (initialState = {}) => { typeof value === 'bigint' ? value.toString() : value instanceof PublicKey - ? (value as PublicKey).toBase58() - : value instanceof BN - ? (value as BN).toString() - : value, + ? (value as PublicKey).toBase58() + : value instanceof BN + ? (value as BN).toString() + : value, options: true } } diff --git a/src/store/sagas/positions.ts b/src/store/sagas/positions.ts index ce776038a..82f674da4 100644 --- a/src/store/sagas/positions.ts +++ b/src/store/sagas/positions.ts @@ -114,8 +114,8 @@ function* handleInitPositionAndPoolWithSOL(action: PayloadAction): Ge allTokens[data.tokenX.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[data.tokenX.toString()] - ? tokensAccounts[data.tokenX.toString()].address - : null + ? tokensAccounts[data.tokenX.toString()].address + : null if (userTokenX === null) { userTokenX = yield* call(createAccount, data.tokenX) @@ -426,8 +426,8 @@ function* handleInitPositionWithSOL(action: PayloadAction): Ge allTokens[data.tokenY.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[data.tokenY.toString()] - ? tokensAccounts[data.tokenY.toString()].address - : null + ? tokensAccounts[data.tokenY.toString()].address + : null if (userTokenY === null) { userTokenY = yield* call(createAccount, data.tokenY) @@ -936,8 +936,8 @@ export function* handleClaimFeeWithSOL(positionIndex: number) { allTokens[positionForIndex.tokenX.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenX.toString()] - ? tokensAccounts[positionForIndex.tokenX.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenX.toString()].address + : null if (userTokenX === null) { userTokenX = yield* call(createAccount, positionForIndex.tokenX) @@ -947,8 +947,8 @@ export function* handleClaimFeeWithSOL(positionIndex: number) { allTokens[positionForIndex.tokenY.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenY.toString()] - ? tokensAccounts[positionForIndex.tokenY.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenY.toString()].address + : null if (userTokenY === null) { userTokenY = yield* call(createAccount, positionForIndex.tokenY) @@ -1281,8 +1281,8 @@ export function* handleClosePositionWithSOL(data: ClosePositionData) { allTokens[positionForIndex.tokenX.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenX.toString()] - ? tokensAccounts[positionForIndex.tokenX.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenX.toString()].address + : null if (userTokenX === null) { userTokenX = yield* call(createAccount, positionForIndex.tokenX) @@ -1292,8 +1292,8 @@ export function* handleClosePositionWithSOL(data: ClosePositionData) { allTokens[positionForIndex.tokenY.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenY.toString()] - ? tokensAccounts[positionForIndex.tokenY.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenY.toString()].address + : null if (userTokenY === null) { userTokenY = yield* call(createAccount, positionForIndex.tokenY) diff --git a/src/store/sagas/swap.ts b/src/store/sagas/swap.ts index 3a4491a91..d533a070b 100644 --- a/src/store/sagas/swap.ts +++ b/src/store/sagas/swap.ts @@ -145,8 +145,8 @@ export function* handleSwapWithSOL(): Generator { allTokens[tokenFrom.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[tokenFrom.toString()] - ? tokensAccounts[tokenFrom.toString()].address - : null + ? tokensAccounts[tokenFrom.toString()].address + : null if (fromAddress === null) { fromAddress = yield* call(createAccount, tokenFrom) } @@ -154,8 +154,8 @@ export function* handleSwapWithSOL(): Generator { allTokens[tokenTo.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[tokenTo.toString()] - ? tokensAccounts[tokenTo.toString()].address - : null + ? tokensAccounts[tokenTo.toString()].address + : null if (toAddress === null) { toAddress = yield* call(createAccount, tokenTo) } From a9a2b6227026f81e9342087aec7636c2a24de5e4 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 12:06:18 +0100 Subject: [PATCH 03/30] fix errors --- .eslintrc.cjs | 11 ++-- .trunk/.gitignore | 9 +++- .trunk/trunk.yaml | 40 +++++++++++---- index.html | 2 +- package-lock.json | 24 ++++----- public/logo192.png | Bin 140369 -> 112174 bytes .../AnimatedButton/AnimatedButton.stories.tsx | 4 +- src/components/FarmsList/FarmList.tsx | 1 + .../DepositSelector/DepositSelector.tsx | 47 ++++++++++-------- src/components/NewPosition/NewPosition.tsx | 18 +++---- .../RangeSelector/RangeSelector.tsx | 3 ++ .../NewPosition/RangeSelector/style.ts | 7 +++ src/components/PriceRangePlot/Brush/Brush.tsx | 37 +++++++------- .../Swap/ExchangeRate/ExchangeRate.tsx | 4 +- src/components/Swap/Swap.tsx | 8 +-- src/containers/EventsHandlers/market.ts | 35 ++++++------- .../NewPositionWrapper/NewPositionWrapper.tsx | 19 ++----- src/static/png/coming-soon.png | Bin 21444 -> 8472 bytes src/static/png/invariant-logo.png | Bin 140369 -> 112174 bytes src/store/index.ts | 8 +-- src/store/reducers/index.ts | 2 +- src/store/reducers/solanaConnection.ts | 2 +- src/store/reducers/solanaWallet.ts | 2 +- src/store/sagas/connection.ts | 3 +- src/store/sagas/positions.ts | 32 ++++++------ src/store/sagas/swap.ts | 8 +-- src/store/selectors/solanaWallet.ts | 4 +- tsconfig.json | 6 +-- 28 files changed, 179 insertions(+), 157 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 20f01098e..2f35b6b79 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -40,18 +40,23 @@ module.exports = { 'error', { varsIgnorePattern: '^_', - argsIgnorePattern: '^_' + argsIgnorePattern: '^_', + destructuredArrayIgnorePattern: '^_', + caughtErrorsIgnorePattern: '^_' } ], 'no-extra-semi': 'off', - '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }] + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], + 'no-empty': 'off' }, overrides: [ { files: ['**/*.stories.tsx'], rules: { '@typescript-eslint/no-unused-vars': 'off', - 'import/no-unresolved': 'off' + 'import/no-unresolved': 'off', + 'react-hooks/rules-of-hooks': 'off', + 'storybook/story-exports': 'off' } } ] diff --git a/.trunk/.gitignore b/.trunk/.gitignore index fdc13c2e9..15966d087 100644 --- a/.trunk/.gitignore +++ b/.trunk/.gitignore @@ -1,2 +1,9 @@ *out -/dev-logs \ No newline at end of file +*logs +*actions +*notifications +*tools +plugins +user_trunk.yaml +user.yaml +tmp diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 6c5d00e5d..f8d81214e 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -1,13 +1,35 @@ +# This file controls the behavior of Trunk: https://docs.trunk.io/cli +# To learn more about the format of this file, see https://docs.trunk.io/reference/trunk-yaml version: 0.1 cli: - version: 0.4.3-beta + version: 1.22.7 +# Trunk provides extensibility via plugins. (https://docs.trunk.io/plugins) +plugins: + sources: + - id: trunk + ref: v1.6.4 + uri: https://github.com/trunk-io/plugins +# Many linters and tools depend on runtimes - configure them here. (https://docs.trunk.io/runtimes) +runtimes: + enabled: + - node@18.12.1 + - python@3.10.8 +# This is the section where you manage your linters. (https://docs.trunk.io/check/configuration) lint: enabled: - - actionlint@1.6.4 - - eslint@7.32.0 - - gitleaks@7.6.1 - - prettier@2.4.1 - ignore: - - linters: [gitleaks, prettier] - paths: - - src/store/consts/tokenLists/** + - actionlint@1.7.3 + - checkov@3.2.269 + - eslint@8.57.0 + - git-diff-check + - markdownlint@0.42.0 + - oxipng@9.1.2 + - prettier@3.3.3 + - trufflehog@3.82.13 + - yamllint@1.35.1 +actions: + disabled: + - trunk-announce + - trunk-check-pre-push + - trunk-fmt-pre-commit + enabled: + - trunk-upgrade-available diff --git a/index.html b/index.html index 8bf00f1f8..9a0c8c6bb 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ - + diff --git a/package-lock.json b/package-lock.json index 9038573f0..36834cdc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5978,9 +5978,9 @@ "dev": true }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "22.8.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.1.tgz", - "integrity": "sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==", + "version": "22.8.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.2.tgz", + "integrity": "sha512-NzaRNFV+FZkvK/KLCsNdTvID0SThyrs5SHB6tsD/lajr22FGC73N2QeDPM2wHtVde8mgcXuSsHQkH5cX1pbPLw==", "dev": true, "dependencies": { "undici-types": "~6.19.8" @@ -6578,9 +6578,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.17.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.1.tgz", - "integrity": "sha512-j2VlPv1NnwPJbaCNv69FO/1z4lId0QmGvpT41YxitRtWlg96g/j8qcv2RKsLKe2F6OJgyXhupN1Xo17b2m139Q==", + "version": "20.17.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.2.tgz", + "integrity": "sha512-OOHK4sjXqkL7yQ7VEEHcf6+0jSvKjWqwnaCtY7AKD/VLEvRHMsxxu7eI8ErnjxHS8VwmekD4PeVCpu4qZEZSxg==", "dependencies": { "undici-types": "~6.19.2" } @@ -8289,9 +8289,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001673", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001673.tgz", - "integrity": "sha512-WTrjUCSMp3LYX0nE12ECkV0a+e6LC85E0Auz75555/qr78Oc8YWhEPNfDd6SHdtlCMSzqtuXY0uyEMNRcsKpKw==", + "version": "1.0.30001674", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001674.tgz", + "integrity": "sha512-jOsKlZVRnzfhLojb+Ykb+gyUSp9Xb57So+fAiFlLzzTKpqg8xxSav0e40c8/4F/v9N8QSvrRRaLeVzQbLqomYw==", "funding": [ { "type": "opencollective", @@ -9298,9 +9298,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.47", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.47.tgz", - "integrity": "sha512-zS5Yer0MOYw4rtK2iq43cJagHZ8sXN0jDHDKzB+86gSBSAI4v07S97mcq+Gs2vclAxSh1j7vOAHxSVgduiiuVQ==" + "version": "1.5.49", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", + "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==" }, "node_modules/elliptic": { "version": "6.6.0", diff --git a/public/logo192.png b/public/logo192.png index a0196bafee0cf9d2f847bd2e8f017ddb3ac0e9d4..08c0219d2c542dcff63cc36cbd9244e09abc5035 100644 GIT binary patch literal 112174 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 z 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 %r(O}d?tW5E1;jmv=! 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%0Do5=%T0t>b3mS59-5Tg@^Up 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 diff --git a/src/components/AnimatedButton/AnimatedButton.stories.tsx b/src/components/AnimatedButton/AnimatedButton.stories.tsx index fe3d59289..9b7991f8d 100644 --- a/src/components/AnimatedButton/AnimatedButton.stories.tsx +++ b/src/components/AnimatedButton/AnimatedButton.stories.tsx @@ -5,9 +5,7 @@ import AnimatedButton from './AnimatedButton' const meta = { title: 'Buttons/AnimatedButton', component: AnimatedButton, - args: { onClick: fn(), content: 'Test Button', sx: { width: '300px' } }, - - + args: { onClick: fn(), content: 'Test Button', sx: { width: '300px' } } } satisfies Meta export default meta diff --git a/src/components/FarmsList/FarmList.tsx b/src/components/FarmsList/FarmList.tsx index b234a656d..95a9ef5fa 100644 --- a/src/components/FarmsList/FarmList.tsx +++ b/src/components/FarmsList/FarmList.tsx @@ -117,3 +117,4 @@ // } // export default FarmList +export default {} diff --git a/src/components/NewPosition/DepositSelector/DepositSelector.tsx b/src/components/NewPosition/DepositSelector/DepositSelector.tsx index d2eb65873..d958b267f 100644 --- a/src/components/NewPosition/DepositSelector/DepositSelector.tsx +++ b/src/components/NewPosition/DepositSelector/DepositSelector.tsx @@ -17,7 +17,6 @@ import { WSOL_POSITION_INIT_LAMPORTS_TEST } from '@store/consts/static' import { Status } from '@store/reducers/solanaWallet' -import { canCreateNewPool, canCreateNewPosition } from '@store/selectors/solanaWallet' import { convertBalanceToBN, getScaleFromString, @@ -78,7 +77,7 @@ export interface IDepositSelector { isGetLiquidityError: boolean ticksLoading: boolean network: NetworkType - ethBalance: BN + solBalance: BN walletStatus: Status onConnectWallet: () => void onDisconnectWallet: () => void @@ -120,7 +119,7 @@ export const DepositSelector: React.FC = ({ walletStatus, onConnectWallet, onDisconnectWallet, - ethBalance + solBalance }) => { const { classes } = useStyles() @@ -181,12 +180,6 @@ export const DepositSelector: React.FC = ({ : 'Set higher fee tier' } - if ( - (poolIndex === null && !canCreateNewPool) || - (poolIndex !== null && !canCreateNewPosition) - ) { - return 'Insufficient SOL' - } if (isGetLiquidityError) { return 'Provide a smaller amount' } @@ -209,18 +202,24 @@ export const DepositSelector: React.FC = ({ return `Not enough ${tokens[tokenB.toString()].symbol}` } - // const tokenABalance = convertBalanceToBN(tokenAInputState.value, tokens[tokenAIndex].decimals) - // const tokenBBalance = convertBalanceToBN(tokenBInputState.value, tokens[tokenBIndex].decimals) + const tokenABalance = convertBalanceToBN( + tokenAInputState.value, + tokens[tokenA.toString()].decimals + ) + const tokenBBalance = convertBalanceToBN( + tokenBInputState.value, + tokens[tokenB.toString()].decimals + ) - // if ( - // (tokens[tokenAIndex].assetAddress.toString() === WRAPPED_ETH_ADDRESS && - // tokens[tokenAIndex].balance.lt(tokenABalance.add(WETH_MIN_FEE_LAMPORTS))) || - // (tokens[tokenBIndex].assetAddress.toString() === WRAPPED_ETH_ADDRESS && - // tokens[tokenBIndex].balance.lt(tokenBBalance.add(WETH_MIN_FEE_LAMPORTS))) || - // ethBalance.lt(WETH_MIN_FEE_LAMPORTS) - // ) { - // return `Insufficient ETH` - // } + if ( + (tokenA.toString() === WRAPPED_SOL_ADDRESS && + tokens[tokenA.toString()].balance.lt(tokenABalance.add(WSOL_MIN_FEE_LAMPORTS))) || + (tokenB.toString() === WRAPPED_SOL_ADDRESS && + tokens[tokenB.toString()].balance.lt(tokenBBalance.add(WSOL_MIN_FEE_LAMPORTS))) || + solBalance.lt(WSOL_MIN_FEE_LAMPORTS) + ) { + return `Insufficient SOL` + } if ( (!tokenAInputState.blocked && +tokenAInputState.value === 0) || @@ -362,7 +361,9 @@ export const DepositSelector: React.FC = ({ tokenPrice={priceA} currency={tokenA !== null ? tokens[tokenA.toString()].symbol : null} currencyIconSrc={tokenA !== null ? tokens[tokenA.toString()].logoURI : undefined} - currencyIsUnknown={tokenA !== null ? tokens[tokenA.toString()].isUnknown ?? false : false} + currencyIsUnknown={ + tokenA !== null ? (tokens[tokenA.toString()].isUnknown ?? false) : false + } placeholder='0.0' onMaxClick={() => { if (tokenA === null) { @@ -413,7 +414,9 @@ export const DepositSelector: React.FC = ({ tokenPrice={priceB} currency={tokenB !== null ? tokens[tokenB.toString()].symbol : null} currencyIconSrc={tokenB !== null ? tokens[tokenB.toString()].logoURI : undefined} - currencyIsUnknown={tokenB !== null ? tokens[tokenB.toString()].isUnknown ?? false : false} + currencyIsUnknown={ + tokenB !== null ? (tokens[tokenB.toString()].isUnknown ?? false) : false + } placeholder='0.0' onMaxClick={() => { if (tokenB === null) { diff --git a/src/components/NewPosition/NewPosition.tsx b/src/components/NewPosition/NewPosition.tsx index 6a4b98f04..8e977adc6 100644 --- a/src/components/NewPosition/NewPosition.tsx +++ b/src/components/NewPosition/NewPosition.tsx @@ -91,8 +91,6 @@ export interface INewPosition { currentPairReversed: boolean | null bestTiers: BestTier[] currentPriceSqrt: BN - canCreateNewPool: boolean - canCreateNewPosition: boolean handleAddToken: (address: string) => void commonTokens: PublicKey[] initialOpeningPositionMethod: PositionOpeningMethod @@ -112,7 +110,7 @@ export interface INewPosition { currentFeeIndex: number onSlippageChange: (slippage: string) => void initialSlippage: string - globalPrice?: number + globalPrice: number onRefresh: () => void isBalanceLoading: boolean shouldNotUpdatePriceRange: boolean @@ -122,7 +120,7 @@ export interface INewPosition { setOnlyUserPositions: (val: boolean) => void network: NetworkType isLoadingTokens: boolean - ethBalance: BN + solBalance: BN walletStatus: Status onConnectWallet: () => void onDisconnectWallet: () => void @@ -146,8 +144,6 @@ export const NewPosition: React.FC = ({ calcAmount, feeTiers, ticksLoading, - showNoConnected, - noConnectedBlockerProps, isXtoY, xDecimal, yDecimal, @@ -156,8 +152,6 @@ export const NewPosition: React.FC = ({ poolIndex, currentPairReversed, bestTiers, - canCreateNewPool, - canCreateNewPosition, handleAddToken, commonTokens, initialOpeningPositionMethod, @@ -185,7 +179,7 @@ export const NewPosition: React.FC = ({ setOnlyUserPositions, network, isLoadingTokens, - ethBalance, + solBalance, walletStatus, onConnectWallet, onDisconnectWallet @@ -374,11 +368,11 @@ export const NewPosition: React.FC = ({ const bestTierIndex = tokenA === null || tokenB === null ? undefined - : bestTiers.find( + : (bestTiers.find( tier => (tier.tokenX.equals(tokenA) && tier.tokenY.equals(tokenB)) || (tier.tokenX.equals(tokenB) && tier.tokenY.equals(tokenA)) - )?.bestTierIndex ?? undefined + )?.bestTierIndex ?? undefined) const getMinSliderIndex = () => { let minimumSliderIndex = 0 @@ -724,7 +718,7 @@ export const NewPosition: React.FC = ({ isGetLiquidityError={isGetLiquidityError} ticksLoading={ticksLoading} network={network} - ethBalance={ethBalance} + solBalance={solBalance} walletStatus={walletStatus} onConnectWallet={onConnectWallet} onDisconnectWallet={onDisconnectWallet} diff --git a/src/components/NewPosition/RangeSelector/RangeSelector.tsx b/src/components/NewPosition/RangeSelector/RangeSelector.tsx index b1852e0e7..49bb8d27b 100644 --- a/src/components/NewPosition/RangeSelector/RangeSelector.tsx +++ b/src/components/NewPosition/RangeSelector/RangeSelector.tsx @@ -454,6 +454,7 @@ export const RangeSelector: React.FC = ({ Current price ━━━ + Global price @@ -470,6 +471,7 @@ export const RangeSelector: React.FC = ({ x: calcPriceByTickIndex(rightRange, isXtoY, xDecimal, yDecimal) }} midPrice={midPrice} + globalPrice={globalPrice} plotMin={plotMin} plotMax={plotMax} zoomMinus={zoomMinus} @@ -482,6 +484,7 @@ export const RangeSelector: React.FC = ({ disabled={positionOpeningMethod === 'concentration'} hasError={hasTicksError} reloadHandler={reloadHandler} + volumeRange={volumeRange} /> {/* { }, activeLiquidityContainer: { width: 'auto' + }, + globalPrice: { + display: 'inline-block', + color: colors.invariant.blue, + ...typography.caption2, + textAlign: 'right', + marginLeft: 4 } } }) diff --git a/src/components/PriceRangePlot/Brush/Brush.tsx b/src/components/PriceRangePlot/Brush/Brush.tsx index 53c14f8ea..b2628b491 100644 --- a/src/components/PriceRangePlot/Brush/Brush.tsx +++ b/src/components/PriceRangePlot/Brush/Brush.tsx @@ -116,8 +116,8 @@ export const Handle: React.FC = ({ disabled ? colors.invariant.light : isHovered - ? colors.invariant.lightPink - : colors.invariant.pink + ? colors.invariant.lightPink + : colors.invariant.pink } textColor={disabled ? colors.invariant.lightHover : colors.invariant.componentBcg} isReversed={isReversed()} @@ -130,8 +130,8 @@ export const Handle: React.FC = ({ disabled ? colors.invariant.light : isHovered - ? colors.invariant.lightPink - : colors.invariant.pink + ? colors.invariant.lightPink + : colors.invariant.pink } textColor={disabled ? colors.invariant.lightHover : colors.invariant.componentBcg} isReversed={isReversed()} @@ -144,8 +144,8 @@ export const Handle: React.FC = ({ drag ? 0 : (isStart && !isReversed()) || (!isStart && isReversed()) - ? currentPosition - 40 - : currentPosition + ? currentPosition - 40 + : currentPosition } y={0} width={drag ? plotWidth : 42} @@ -262,18 +262,17 @@ export const Brush = plotMax: number, disabled: boolean = false ): React.FC => - layerProps => - ( - - ) + layerProps => ( + + ) export default Brush diff --git a/src/components/Swap/ExchangeRate/ExchangeRate.tsx b/src/components/Swap/ExchangeRate/ExchangeRate.tsx index 552ce8a98..3de7e86c2 100644 --- a/src/components/Swap/ExchangeRate/ExchangeRate.tsx +++ b/src/components/Swap/ExchangeRate/ExchangeRate.tsx @@ -33,8 +33,8 @@ const ExchangeRate: React.FC = ({ {isNaN(amount) ? 0 : formatNumber(amount.toFixed(tokenToDecimals)) === '0' - ? '~0' - : formatNumber(amount.toFixed(tokenToDecimals))}{' '} + ? '~0' + : formatNumber(amount.toFixed(tokenToDecimals))}{' '} {tokenToSymbol} ) diff --git a/src/components/Swap/Swap.tsx b/src/components/Swap/Swap.tsx index 8307572b0..365d302b5 100644 --- a/src/components/Swap/Swap.tsx +++ b/src/components/Swap/Swap.tsx @@ -946,8 +946,8 @@ export const Swap: React.FC = ({ getStateMessage() === 'Connect a wallet' ? `${classes.swapButton}` : getStateMessage() === 'Exchange' && progress === 'none' - ? `${classes.swapButton} ${classes.ButtonSwapActive}` - : classes.swapButton + ? `${classes.swapButton} ${classes.ButtonSwapActive}` + : classes.swapButton } disabled={getStateMessage() !== 'Exchange' || progress !== 'none'} onClick={() => { @@ -977,8 +977,8 @@ export const Swap: React.FC = ({ getStateMessage() === 'Connect a wallet' ? `${classes.swapButton}` : getStateMessage() === 'Exchange' && progress === 'none' - ? `${classes.swapButton} ${classes.ButtonSwapActive}` - : classes.swapButton + ? `${classes.swapButton} ${classes.ButtonSwapActive}` + : classes.swapButton } disabled={getStateMessage() !== 'Exchange' || progress !== 'none'} onClick={() => { diff --git a/src/containers/EventsHandlers/market.ts b/src/containers/EventsHandlers/market.ts index dd4658495..117a78901 100644 --- a/src/containers/EventsHandlers/market.ts +++ b/src/containers/EventsHandlers/market.ts @@ -2,18 +2,15 @@ import { useDispatch, useSelector } from 'react-redux' import { useEffect, useState } from 'react' import { network, rpcAddress, status } from '@store/selectors/solanaConnection' import { actions } from '@store/reducers/pools' -import { actions as walletActions } from '@store/reducers/solanaWallet' import { poolsArraySortedByFees, poolTicks, tickMaps } from '@store/selectors/pools' import { swap } from '@store/selectors/swap' import { findTickmapChanges, Pair } from '@invariant-labs/sdk' import { PublicKey } from '@solana/web3.js' import { Status, actions as solanaConnectionActions } from '@store/reducers/solanaConnection' -import { NetworkType } from '@store/consts/static' import { getMarketProgramSync } from '@utils/web3/programs/amm' import { findPairs, getFullNewTokensData, - getMainnetCommonTokens, getNetworkTokensList, getPoolsVolumeRanges } from '@utils/utils' @@ -33,23 +30,23 @@ const MarketEvents = () => { const [subscribedTick, _setSubscribeTick] = useState>(new Set()) const [subscribedTickmap, _setSubscribedTickmap] = useState>(new Set()) - useEffect(() => { - if (networkType !== NetworkType.Mainnet) { - return - } - const getCommonTokens = async () => { - try { - const mainnetCommonTokens = await getMainnetCommonTokens() - dispatch( - walletActions.setCommonTokens({ network: networkType, tokens: mainnetCommonTokens }) - ) - } catch (error) { - console.log(error) - } - } + // useEffect(() => { + // if (networkType !== NetworkType.Mainnet) { + // return + // } + // const getCommonTokens = async () => { + // try { + // const mainnetCommonTokens = await getMainnetCommonTokens() + // dispatch( + // walletActions.setCommonTokens({ network: networkType, tokens: mainnetCommonTokens }) + // ) + // } catch (error) { + // console.log(error) + // } + // } - void getCommonTokens() - }, [networkType]) + // void getCommonTokens() + // }, [networkType]) useEffect(() => { const connection = getCurrentSolanaConnection() diff --git a/src/containers/NewPositionWrapper/NewPositionWrapper.tsx b/src/containers/NewPositionWrapper/NewPositionWrapper.tsx index 1b72fa39f..a3c2e28d8 100644 --- a/src/containers/NewPositionWrapper/NewPositionWrapper.tsx +++ b/src/containers/NewPositionWrapper/NewPositionWrapper.tsx @@ -33,14 +33,7 @@ import { volumeRanges } from '@store/selectors/pools' import { initPosition, plotTicks, shouldNotUpdateRange } from '@store/selectors/positions' -import { - balanceLoading, - status, - balance, - swapTokensDict, - canCreateNewPool, - canCreateNewPosition -} from '@store/selectors/solanaWallet' +import { balanceLoading, status, balance, swapTokensDict } from '@store/selectors/solanaWallet' import { openWalletSelectorModal } from '@utils/web3/selector' import { VariantType } from 'notistack' import React, { useEffect, useMemo, useRef, useState } from 'react' @@ -68,7 +61,7 @@ export const NewPositionWrapper: React.FC = ({ }) => { const dispatch = useDispatch() const connection = getCurrentSolanaConnection() - const ethBalance = useSelector(balance) + const solBalance = useSelector(balance) const tokens = useSelector(swapTokensDict) const walletStatus = useSelector(status) const allPools = useSelector(poolsArraySortedByFees) @@ -76,8 +69,6 @@ export const NewPositionWrapper: React.FC = ({ const loadingTicksAndTickMaps = useSelector(isLoadingTicksAndTickMaps) const isBalanceLoading = useSelector(balanceLoading) - const canUserCreateNewPool = useSelector(canCreateNewPool) - const canUserCreateNewPosition = useSelector(canCreateNewPosition) const shouldNotUpdatePriceRange = useSelector(shouldNotUpdateRange) const currentNetwork = useSelector(network) const { success, inProgress } = useSelector(initPosition) @@ -414,6 +405,7 @@ export const NewPositionWrapper: React.FC = ({ useEffect(() => { getGlobalPrice() }, [tokenB, tokenA]) + useEffect(() => { if (tokenB === null || (tokenB !== null && !tokens[tokenB.toString()])) { return @@ -748,7 +740,7 @@ export const NewPositionWrapper: React.FC = ({ setOnlyUserPositions={() => {}} //TODO implement logic network={currentNetwork} isLoadingTokens={isCurrentlyLoadingTokens} - ethBalance={ethBalance} + solBalance={solBalance} walletStatus={walletStatus} onConnectWallet={openWalletSelectorModal} onDisconnectWallet={() => { @@ -775,8 +767,6 @@ export const NewPositionWrapper: React.FC = ({ ? allPools[poolIndex].sqrtPrice.v : calculatePriceSqrt(midPrice.index).v } - canCreateNewPool={canUserCreateNewPool} - canCreateNewPosition={canUserCreateNewPosition} handleAddToken={addTokenHandler} commonTokens={commonTokensForNetworks[currentNetwork]} initialOpeningPositionMethod={initialIsConcentrationOpening ? 'concentration' : 'range'} @@ -804,6 +794,7 @@ export const NewPositionWrapper: React.FC = ({ currentFeeIndex={feeIndex} onSlippageChange={onSlippageChange} initialSlippage={initialSlippage} + globalPrice={globalPrice} /> ) } diff --git a/src/static/png/coming-soon.png b/src/static/png/coming-soon.png index a36b3cc7d92a538f0c1ed0341a9899a29c417c0a..4cb2fd1ebfab14a257ec550940a3fae4668f2b4d 100644 GIT binary patch literal 8472 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 literal 21444 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 diff --git a/src/static/png/invariant-logo.png b/src/static/png/invariant-logo.png index a0196bafee0cf9d2f847bd2e8f017ddb3ac0e9d4..08c0219d2c542dcff63cc36cbd9244e09abc5035 100644 GIT binary patch literal 112174 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 z zIK7aJ>HtgD;5stFxx+mXvc`d-*cd_j~0W2aAFeWkV(+%SGJQDPo<<>ZHRk zyL|Pf>zsggpSH50U|gSzuW=cA&L+8b#AAKns6Cs_&L`U4B}y?n+~^IV|~?+T_~U1>hJ8j=^vl^C2N_zi^a84K&5qYt9`jtN}*8cDQ^hEz%e@a^H z9^0|s-&y7s@m7Ponk&n;yeiPjJH;moz$G9OhY;>P)o7-nt-b12ne_gP%%q-OvHL?r zP%*9sD&zv0-Wo-W+;*Zy7B1alN16~oA;lck{>&i&5JSBO(F}k)^sQZ`V|YumC+U4K z)kmmRBOHGDD!q})KBa<-Fjr1gO89KwrQUjjYpB4P$lw*Bof6 zoeg;hn(1TijyP!Ehrjq83Kec}6SP$dH&8VHDlh6#jA?>PktPfyyaxRRIAqJ{;Lm3N z8T{cOKln2l`5KLH#1y13j%dPp`u!jRft!NZTi-gizjFFc(mmumr#?pR_MR!3$I2s( zh&V{J64@We0I-+a`1b3Ss0ciIm57v9324sVtpB)y?HX6;$bjb?M%YAsz3~4*iA3Oj zSHHU1R%xAPigVlj;GpOyny~7NFXSRtpG>{qt-0bA7e3CWPGK&a_ezsVNS>NYrAho) zgFK2sKg#DE2EVKk;jIHuTtc%=>iKK*wAJWdfx$T>Nm?g`WhlXtQsrA6hzO$tqZpF6 zd7YB`(YxvFttTrIPEV{$4xQ3zig6$4_c%1OeD`0 zyBAbG->(m$FK<9yVu^HPl`mWc7mH?(RX=~1<;^02(}}4;cC%RrJ>%cfihU$zj^@f? zbOes=_e5jf+<1ur3=T%BNl{(_{-af=gjz(YtL-5FcNUGxygII7O4CBk%DS@XL6OoN z=^+779tZe8eHZLk{gW{?=C>fv#9KXy3n^4G5^`jLs+^%I%hs{_#XVc{R*-Ke-hpgVq%e`|gt95j>ahIt*O?w|iZ_($xwAFHP2{ zh47w_0|jiZ9wyqPb2lQdH+yHtLik5+A$Fx4tG{q5dN2!-^QG6!dt4j^Ny19zlK#TQ z0YECO*D3;cuk+qW0^&Mr05jpv0drOA3lS9D1|J_7>bvq;)H|O?wxV^e;MEfbFW7!K zRK$X0{x|{uQUc8UoR9M2wAUy|YIfS>!0c-S(@##m`q^~g&(VVaM3GD*cos6JH~F1^ zs>Hw=sp|62*Etgmd5$#V=0XLuMbpxL7F)MIlA;!aIkh?Wdy2GkoD9_)@P=75~f8pK){Gh5tvsNC^J?tme40B)`^XHk(l`+WBHNA?@1 z_o1L@XiJ>-7ES+qWJ?%g%+JEX9xq;E*|~V0SO=14$&OyAK1Z}JxIc3M19}4?8Q(lL zL*HF?5e;2bK=T=UU<$L@V5og#7?a=Ts#;QcZ{&x4qBFqUkv{fA@g3jI1LClT;yDmi zk5<(Yd*WCPmca~ZEZ#Okwwf)+@4;M!z>j{S`c(ffl&s-+Fp&iwSLQDqP~p43 z1bf?<0R$(wztWB32(oN!hIcU}BfBycoWu`h=Rkgx;~IQ7p@7Tg9%vcguxS#P6hQGt ztq{p1B0k)h6GVR{euUuIU)_iCyzcx1;Y*1z5O>ZEtddB2TWX#6%W_cIAdpH^b zn({;x!JeuFiGg1&vC^+RYDt07DwO!Wp{))EX`0zQ(XHQCFbssdkeqT{+v@$XsTL?D zg#^=1;Y}c8xV6NgaroIKEL6(g;v+7_%0r^a`?=Q^H_UND=`kS!A9Au3O-JVm=s}#r z;;r{ComT>0p20izvDZEZX<>BJe)l=`8u6P)Jv*gRxwwVFTl|w#R0>5MMrh!9{rG7S zExs2KO7-Jke!w`2?2RI-ys{s7rs704?d#6Rq6ogNOo&q|VYWs?80&#YNr+6TorLK` z%PN)DV2ep4^X8`Bx(|3?na9t~65LflFh5oKfbMm@M}v^sEKL8)nq(lAK(GFJwQl_W z8QC%acPwABBnQ$LT}P4fYtQ6}&eKvP+_QBkGdMq`#Q$g#^bU2vPqaGm3cOm!aQ%Hq zo~n$B^>aX1eA+6MX~)z=Lncf>E+haLHnCqRPZ|22hWvID8A@`i>0XL(*~_;{J$sI7 zn+OZq>eiTCg)Qx)`&@ICCFCxFQ(k1w0-6N_va9+x#c&RrTSdn-X^%)|*=>dGj}u#A z&0x2Te>`W9JWZ|LGcUD6Nx!6CD%_sL;31O$fw5dK_G6*F?d-I|nKVH8rttYm??)p; zj7A~}ebB*q)q{HfT;06PI*?&rOao@{kM4JtLG=LHE&p6y`d#{^G7v?AJva-zm=118 z-M*SCEp2qA4LG=gol~OL5F%7oR0z%Mr=r)1uoy>xa;x{G%y|x2$##RjOq#&q8On0` z!8(K(oUgNhxdW>R-2jWGby!|PcMxt0Y5XA)T*UK4HCJ8L8|>X~H)$+Sqd@iH!pFtG zX&v3bjC~q7i-Ex@_J1CZ^6Kk0HzU#dR^joqFD}oR)YSmI%vFa34d`Fw%A%Ygj4%Pb zwhxFtQd23lk&$V!E8qF)8@9q?+xgeN-E~~G==_t*s0}({RTSgi_TpX>vwT}ysex)W>ROb2sLEP61j)K33!naNVmC#Y14Y#h1Mu1i) zrF|os0wXh&za;umWc+X$y(FVyJ0p*6MBsZl12->xp^rOCttqeIbMfGX$1U}GN8t;( zrdjPt0iJX!&p8wp*Lu2{+C=cUc>ir_XV{?uA!ly{g|@9!+6beuO_i)Uqyf(Cs;6m}^Stt!9th$xO_afx zx9Ht`;%Mci;+ddD{O}m~KQ@@Ex7vA$pte`pA7Gfn(-2m|?E)Hk(V@#Lnc(N_#YRO+!Tbg=Oa%^4A@2XW|o@z3-4&ZK7`P zQ7t?z4&vMt?CmpYUfU5E6OV8A!ggmG{y?|kP^x9O7^&~jvuW=}ip;K0Rc08KzdGHs z=U@w)#AIr%lX_5CZlwC1pR$-zxsVNo@ILD(rv^`_7dg4VqGvt}!c2?>_Goh6ol>#7 zl}TuI6vmRXb)U;zsj8sqeK2=ElEwkTF1RT0KqmTlStpJkQoBJ@vmYMXe(qS7K4+65 z2>U0y(0*v=#ei>v6!a=uy9E0B@&~~ZWp0me9FDxnvL~J)&5fq&uVv%`n@lu4ykujl zyYE`@ooNKSC5nVp<$~)L%hqw4mue8{*Ad2X4n@Z4n1N3j#&yGN07cw^zp3}%06^HR zOp<*4b4C%tTNEK$rD@Ke4P+i1=ksC8qF&htT)cj;tnNStVD;2z5S$_=s9qx~JBMpv zeo}=X@(sk;+RY{^K*sR#)NYo znQ_PfTBHg7YzL8jv&Zu{g{PfE$G3)~zFvEgUsZVy>+)v1z79p#O9X7E!qG^rxfd6# zOUBjs;h|qxZ~iTQA#&|s&9{m25~?;(gs>wwdB7t4z+PePQTgJp&G(3H5-`{%7_|er z<2@Bou;oHI_8J+#K~O{_XKMez7Kl6eUFR%9`5jxwTi~hDw_Ut7Tj=R z-`?T9J1H?s?@TI@ZTr>}+?fYW9bp--9dtR1z$FCwMF8yJU>6XZGj49zCt!WDyudD_Y+?MBhe8fvIJ_oTfyt_(KoGISctKmy_Ip z+})Ozj%Zzvhzp09i*Su^g=UiuwYE?@ohbIay#n<(#vg~c>Sn*}!pklJ8Id}?ax)i$15RSVP z4~cmg%qL4V!MAD^fkq&FKtFz9QInWjxxUQRND?l4G$H(J5g{V#toff&E#vU#$y5}R zdVM~x>meb5Wv!Bem-n_5jcyh{YX*)^hVu4EJy8=jjjm~4(7zPo*`L_h8`-gbG}~NF zZ~nmKrwWs4dqZBbfp-~$j+N0{JRO+JWbbd6VSI4+fAqSq%^YV#Hm=~l(rS9Pazd2* zWbwvWyuHi1HDZ+dO;cZR00s7LqD@THv?^FW*H}{bUf6y$X9-M&uds6*z3YkNtr@mO z1oqTRwTEkxVM_x5KQgv2Qg=vzH^imJkwv|dpExiU^MQ%B!hkx`Pzc|Z9i%V@+V#Jh zzg||8&*D|kix@`gEAqEu?pqB?35^R#`?yep!x`oQtN3!N+B^(%j}3S1h=X%Hy`6e7 zQ7VMDvmuTjXg-o+i(A+Eo}$?^74Jk}zc{2#!}wJTvkaR%VXfjN8JOang)IHNI9%k* zDoVfZe?%t|1v=lP6xAv~2b~qaga(FjK>@?hY8~3811)9fZ4{s$fn*ox%s{+uU`k#0g5|0p%2c1@I)=<6lv_Ps zlxxxy(~Aq1?^g`TOBp}*MwzRzzpdzzV5Oz^Z_tt(!wCOJdIfFAgYfc z^hur7zKy1;I`t|B@=`OZgJYKQFnLdVe-*Y=TWnM=wnofWC&b;2^}QET}wM*q_fo)8U;Riep1^ACGq0 z>7D?Pu3OZX*03Ntd^8&Hw==4TZo1&1s1=k5+52kvYwqd3{#S2DT>5oYvpg}5K?`>% zgK=@Q4cEzx-JC5ci|)&xRWJaZNPY1+Jh_5SbUkg_EO}jyejKZ9$7k#~K!5f;K#RE1ofl=FX_(1DkbKc`Zo!nKXP;F7`i| z0jMq~9IQ#E)}&j=iJjQGmt@I|u^~-!DKu~0*Q-^b>=wL<}M7 zqJNy5TJvw|UTj-iFVj*8H^OH-2)zm*>2s8N)wQh#JcqJ^LJ{n~*lFJ)ifx4Fhkefs zgq`&T(e=qn493hOJ)hKn`V->sf&Ty6L$`oJeN5J0>KwXs*Q2i6g$=ibJIhl^qSWqT zP!W++i>@&B*6DSN12PD0eYI(qb~C2G1|)GlvWAuT<4ZPT-Wd{pHGOO?o7~T!sF#;W z+mOyMlbqZWiT9Wgp-Jv4^AyA0M8ECcLnvk-n$36L=99xNkPT&xb5kk+J(YPiei+#V z6Jb_>B%_c)twFKF7037pD7qRpDHwXt4iJx)F0q_wAl#7O{*DFJ3i{Tg`Xae!F*>KM zgp4v>h>bKxD!r>{b0q@zO$cZziHs~88eUEDawC0gNm=yyDa-a9vN?BZi_)+maN?Tc zszrB#*2BPKrha!1e~W8#DmOS2ha`C>tu31KzvA6#kX0{fpy8Qs zM@q#rO>+zCngfciT9iEO-^wxT%Ncn(5GOBrCn1sGVE#8E^lL1tRK-rbzNsdfg{Acw zL;u%mV(60o*9-sX=}C$Ez=_&b%+^X{a92MEzzGpa@Kp*9N4Drsz+79PMFMqZs!pBE z?K4`QEUk{MVd$rwT?LjBs@_8u4T`mRS1O?Dy5eRuE`3BrN@RXaXb%vE6 z(aNU}rQoaXnnQ!~-cuP3ot<2mW`rArjISq^u|5;+Y-KG388H#Y4)5S3n4eXB1N{ z(y-EE!xEDp^(+Iuec~0VeaS0)+=yf`1ZalkSj-h+!i05{W`mG@gyBV%dm*XiREJ_L zfSm!NM!3b3IGC1sd#V3=ewU(NT(fLS!6@;JDNXdt5EOeV44(pRLH2hQn=QXLdRhhY zt0EdGMw}TD?u*6ydZFDwdLcP=!Hq8Ai_G8Wr?|fS?4EaC7jx@=^d6d-OW#JWEOoTn zI-+sRh&brk>nB8n*@w$+FJWYICc=~b(^L}COZjj@Kt_So+=IEp)}Zo-@VO~gHZe@Q z6KA41haZ`^_dTUlT>8n5#Na{MWY`)Q{Ue;bSWFr(;{vRDD-NlmhtS$6^Thj(Zas-$ zr=ESTY9u9uChp%Cf89s!7Qxnit+9^**_|O5*F-xFe(`^r&P8Px(e)%Nx+2KBP&!sl-loxl9PAcOxR5HU23UH_yR-g$%>jr@G@y- zLvwy8_VfnN9-9aekWa6KINZ2N4Q7a%8zoN4fp9p@@^m`FuIT1{=HTLuMG2#uE_X2< zgs1~j&m5~-H=S!uD;;z>D7(Y{DyVzl*nZcKn~s~4EpzoYbHO^{T(M(T408NTRZy3R zt)V;$yLUf&y*JRUIRF%18_L2dHHptTvQ&%`snTtK&RHa?lewIhu1D6@rFNfSO*0&; z2MURDUJ9<2$W&Gu5dGs_E0npe0shT&r+p-a2k-WEf;g)m-Dj%)bbk0>2M{ap7n7QR zp|8GPBjYRcz`U3)%4`98_1>}4;NLBRt#amWmZaLt3DbSNep}H%qc*xwA05#GIgV-nr^~r7MFO72Zk2xDxYd$hN2o)%d@`DkwGT8hl$U>}K|pA( z!M%C?jDuF8b;-z8ZpmAr(H-W;Zg=T?#?!^}*3oMq`_u*MhS<2Ah8dFo5ZD(DB^FT&Y&j3F@8e=iS#POR zefpEF`#lk1_86HLdS8mxUWBU$D)5i6rZ;rG6mS6XZEzFw`6=n#qv28X(MVpN1*vGR zpzylp)a|cv-7Y}}oVjVYB6XIsg@c6@HC~eL{F;H;pEfzR_c|gT(>1`I{mr(AcC7Lh zg}=er0%qhYzYwqkO<(ccCmUgQ{L5|v z>C)}^d&>QmP@28GKlVXJ*iI6YSQ+dqJAG}uk^NZVXG5z)n7vKhhez8)ZI10FsQ$u! zR%z?Vd5PX7#t$CBz-qk3r|4@-bL!2l%K$N>6|JcfhK>ivN0qPZEc{LV+3n0z@>tRa)i zLHc1xyN_fXnjMm1z@#Y*Vl0Wra`moauM?1R^gsYqnH{f%iWAu?a}7DM2?QQ(Gp^#Y zV0#Nhc!v;r=S;&!g2;v~^2!5pgca=R@M+x7ZfW@;4XfqIem9XW9h{@ZVE_#5 zOP;dqSoo0)%ZBoMiqxX4l@1iOKe5_E7CfE1k^b1W^8nv6J_7<;YVDt|hVFZsAq#*d6QV*xqmg zB}*foHmdQ(=^pmHv9pcn$avrii(lpmWUcg};2u>Ym5W8(H0)`nYKte{a~y!t@#vL& zTz7Q!;LnDwIy_lewfKMDN|GWvg`5@)5@%OjIFX{BX6GS%u2?>ZiDp6+?)FtY)7tw( zjg!S&q|%BxQ^Yo=+B4=@k?~Mxo|5#u?m&7iX6o_AP?pRT5ccE(~+N*J>E1$dyi{7!* zqLe>mE>gNXB$*~Ee+Nyl<0&Zx4pmNkvYc~FyO1Ju5E5QGu;hXL;sF;;Y_Swu`8GS7 z5)^I6o}{P`B{7hj+3j*b_8x%>qg4ej#9S8Dm^T(kcO-SPn48DGGR^wFVzO+%Q)PUL zl|=pB2z2${jMs(-%eCvf_vo%6hv9l6?)8OnS#XEI1LR3Y=JbdMZq$2@5MSxA&}r5wJ|v(s$qYRg=q zT=#U^Yl(vH{DeJYRg)n1;fzb*9n<4O zXy##q?s+A*8i;@;LmS(>WU7H)0o`)EUgA=yhlp1ivLJaBTURq}ei~AOjMPf{k@$Jb zGPiwT=&j7}9Jb{`GXgE5EolTN zK8sS3#7W$LjPkHo_(Qk)K`5mZUQV{03x6f*qqi?6bnzxe&1=S4JGXu_A>Dx^MMTbZk=~s9_QD zFsVs|z_o!+Lb9ew_NhcwwtkzR_8_fr~Kg^JJ*^ofY`YW14|GeKoR*xzjpC6LE_&ea%renq^W zi-vq~%s^`4l9Y)^jn6i+5zZQbKpS>%u9p{K20?eiz5pzUKNi({Vufj1E{*0`d%!jz z+yrYEzA$y`n=fnX32mee1+A)|*6o#xi|#2B1S|JOO^0V{RX}w_8d(I-M6Dl$@i1Y^ zHr0*sCi(SZe2z8!ErIMDIyu5=MGZ`gh$fPy8mOtY@EI=B#Qt(5^g{G$M~!_p)C6o_n3aUm~l$Qg9m&-I6$e%N^1)R4urKK0UH z5wsKTB@B4_jxm2igulIs_B+@i)t8{~bPg3C>+XPmvh?4sd+|boO9J%frC6v@Hu;UE zs3XS4+jPkri#>@f;5+mI4`B%*jp`LA&DNy+QN1F1a_6Vu=l|T>{~}ry5275Zn#2GF zh#_n4pNs>_m3MYhAgjU_EZ89}7Nn%vO;sXa6zP+GlI$HU1{#z?jw#Rg;$d%r5=zowvUss z=Wr8M3AB(!qTIvmOeJ2nCPP_j;fj>spZk*F4iVf_boGskays=~L4PCOCmq^EiwR@t z7cqlB*0MXspxyHsQSxG>-JAb;DJ!b25~M+xT+?6`y7%YAw+3-54X-5$z#Q#9oxGK^ z;SUvPbf=VA6mY4TS`-p~3Oe+2FI3*x`ILEpaAb_yB!#8_(>_SWv9o{D>N+Pf~4(si8DZOqBr+FUcEHB^_@Le+P zVL=uMl!nwt{>8$@9+EKb*fC&uK4pv}Hb>w88M&lSV)QbK5A1g;$g=>`+BMzrMDGiy zC{v`dl!2$jZBur zVO&iG=V%1Qb;FW7lb}v{{*JY9AXVd78Q#K2+<_(K;`Y@RSo(xWPrt4hzDC5R!+Br2pt8~UZ8bnc))EN(^+7mg=6ZlcNq z?CJO9mleWJXDGY5GSav@MNBW=!^2x>!v|UrpmsMcwoDy_`^`<GSchD@$( zz^~YLMC+|2$*q*p5WZy5sMV7m_56ZQ@Fkm#DArDKk1tzio1iy|%bL>QYz#p7T6c+T zBMSn`QQmvn8K;<>XFl8N6jlk;lhd`Wgq9@3+QW8^NQ3cx7ltWYcpK*ouH+{*K)GVk z>I$7*wjmv7*`ezVQY@*! z?6+7B|Mk3ON0d;2*w@PY&?L6Zf$68*E2GTy6!AUQXeZxQgqf%n)?2E;xFh`cNhgZi z1b690Q2)+NmioUSatx7^Wl1eKh0Z#q9BC&@a<93NJ-tI{q|4B3()yM!GtoxBWaoDn z^$!W|=sA8X`*E$z-FpZjT!F0$59(UQ?Prji48M7<0QNhgbzXnNnQoUS!`*1a8dPFFN4L^078vFw#C3T;b7a>o+5vv z5ptgUY+G89%g1Yz0R>rHVY<#1@7LmAYKQ^EpfU-`HxQ*yLz4eBD8Y{!3Xh{zeJ_k@ z2;MX1tkXDD@+h{wT$Bf7y>%S^AuYD0Ou8IZO>IZ@T~`?BVf_*+!f31=c@sSY(j>@@ zHtmQ(FyzA?tR9iFRI(-*iP=6q22Jlr&@Pp^?vt({|GZ;*g}Evkd8D1I*qH^zNx}4| z@9;5Vyi?M%%T};r_?BrYpt=?+#iVf+D3mn z#hc`qtmNT|AAi`6M)2gg$49+u{sFk zZ+TbDg2AkS8w$XZo#VKT$%f2h#9o)r!VA5xPh4H;QYhXOhG}HR*B%0t^7ySL z#WrKn&$nFvSnliF^OHeuXKd_sg8Rzeodj+skbDahMIa(|x>XJ$vhb*vrQ4M7PVr)P%O>YMXJ?U_08M_!bzwm%?+)Ta6LKD>gK*ykvoPwpA$p!Qr)3urIjU$n_A`GmHY+)6JwNAA9lW~6!Pqo2ZX9%cA({aQR` zGEri5pdkX4G(#54(lKMqPiaZyhPOa*`I@PJ=Al;%mK|OnkU?x6UM@DYOWE%y#mq~) zia*dq7S{{44xWmirBbC>3dd-3su36oA;-!{A5;_lUX*p$53LEMIU4%}ZK!i7xYDq> zDTsA_BqhTr1X=5I#l)t-XGoO^qShDA`SBR4KmGJZuO#PE(lAwZka4$&0_@C+sOqIB z%A%3H;i5>PZVS=uOI>#XV&iv4=0pT%E^?RoCs+Ba?Y z(i}}AMyd+EtggwENV(o?R4zaX$|YBI_Ey;FSJY0Lrqsa=_t_BzM&f}(r|S`%BOgu_ z*-cY!t45H&HF)H(Od=i?NrU4a^{f!1S*4B0ZEUH{)UF(~v$riJ>b#7o$g1D-BNSiT z$zY=#hFzX9Bqz6OjSbNI@EUPbh%1o}x;*zq*ct1{Q0BZrq9-cZ`Z>J*s4X~i@fO|~4*V0ZcBR>kg4~SsSi%~&^nMro+{WHC08QLuPf%Y?RL&Ya$cFlLY-|jA($>MFc z7tR)G9NdsgC{Y>pk9^IP4n;<7r8}cX_UTLVu)bd(K@6Q7i1C${@Rx$ToWh0`5S8a5=`&T$cqqRTfBt@PurL`0P?ND+)~jUpi;v}?CF zwB~ycg|LAVJcjhWnv<@(3Hq;@ercl+QSYhjct4FSflsbwKOc{A*jO^46k4Gi+)5+ZfM(p+)Ryv^7c2JY~WT47$t=C@0cf%w(OMQ`9Z(XYo-glP{dL#|Dw zFY*$nS-gN$xAW*^C|Jp&*jxeU*oRxzb#H0>i6{}#an)j^lK?{FwnQw5kz9lNr(BIh z^%wbl<042j_va?q!G_&<4=U1AivAM?reec@ED&Pe*qWg#q}TiL#(QU*v=RYC+|qM} zuBc;!pZdTjjr(|-HCH`ZA7pAU9C@jHbQ9hnMYm1$EvWkVxH5|cGiTec*%ZP`krsbNBcC@O2Pv#n=iYGRa*R9g;X z*pkMk9L5x4MmfZgnbO!P!tc7<=l6S_@9+QJZM)~bKcDyEx?WeS?4Gcyd!85NTR5<3 zWtTb+VV>}EgLo@wi;>$cm}w#*k9k7997v8Y(`m4g_O(3nZq_Lc$6SvMS)UlZ#yk@s z?z*N1%Un3+pq;?CF0D^#i$5aoz>zV8^(eVz6(6fU`i+48ew#sWH^LJP2mLyuYOrkF3S z_Qv08UUU$Fz}kpcS7(=spbSL?5PR(FQCKk3lMi*-g)Bf&c!Qg7JtkNix}JLD68H&^ z$7ga5_pKf8WX8_pj2&-EM$3BGYsAp6LYQ~P13i7xZ(CW%vQwB#(~JlMn;1J)#8j?B z3KII^t{<^YuC$}YRLl=}iIKwZyNrmyvsteFtt%C!!?YN>%@EAuGa7)gAY@`dbo#Z6 z-e_S?(;S{qp}1@>Z~;z&fQOMkw{|Muo#ozg3ZE}U)s9;UW%GxbECUQz&vtFf*=>|y za+tOOpo2!RqH>rsbSN93N*BwG@nrt;&Jr?bmMIoEq|fr*Xe7u&y3V^7>{L2(_?%BL zkKg=;js@y$@wu^{2zN+2x>Bt^Yb%XZZ~tG@^`9dxr1-bN|NJQX$IXD|MJvLEIXO2Q zbt(5(F^o~r#lG}S2|C;LmhdIm3M!q+0JAI|RAPMpnFwh404cT8m3w^Lbh_zw?so_*`%!Q|scnL@KW_ny{rb~Jpc*s2+`?F^B)DGq* zj+^3C2s3dQngZkzl=_HC7_eY`^Hbtd$Sk|vYyAPFx|+v18vYit>OF{^B$WBnAj`HH zx`5%{WEvz$=$~)4in@~%Xj52<=pI4X5y{nW=&iu535g2Y$G3T(=1~vBIuc_~qy+c` zke|QZ*HX^CK&W4Ne_%1*bR$?XwSUvRD=fw8A_`@K))aLAZf50P`waJSD0p{Xwl+*}`Z?8+GLF_ARWD6VgUVJvJR;7Akgft$t`r zJfUm8nxf8Y!<>b1ACikFNOmz@{iw*bJ=(-(=xIhDAg^ zatv^7&&1aItPmF6CV9 z5Jc1H_4ntR6A6H;1hf7f2CVz{Z*x-$V$Wu3I&+mk;s>(M2=h8=BR6J+mm`po?htd} z`ViO&j>pqEcVgA{S&!!m4z|nGMvELcMwyz$E^q=6XvF_l@$VA^Vbj|{mLBtG;VeO= z&doQ?<#`ScpxtDaa~)WU#b2lCdXW7;>hQ4)bQqbHK-lG&mp-jf3A$=O99)nD_d*^w zu6LpMp0*_2cJL1ZH?#3syBY^O>;m2{map4&%l;5@?IuNn>@m#H9Pg@$ zRSB#X_L~&48cn61)t+#dFNPoL*0-+J`!eF*B!h5j1riN4dPh~Kt0V@Ht(f2iXyoL9 zb67t35AN_lfFH|P^=YI(Cn6*|hc1Ztwg}W6Yj^y(M; z=KFLC5p{y9%gL?$`$_K zUx)Sle({^xZhQZFvghLB9!K%N_e@6!c!*$D_~7*-E)83Z{ynD=jcY{QinpVO!<0ik zwON6h?-rjMS!JK6tRLOU{@5SyOYXG)jU&x}=dJIFl7rq1-JEaGz382GN)Np~(!fe@sTJUtGyuXxTxNX79_%lj{E$lrAJ=dyUa zKn-bzWX(Pg4IL{&C!nOLSzkMUkxv!4nmo#&^XuriHLUhjxoK1UI+f}0BUNfP8Y=kY zfB%p=D;!!@jtJnWOtj&{TVqZOxyKppEk#_kuXu_)^1DU*F{IQkY%ARq zh}Lq<@FInLlPL9ug6JU2=iIZcF$b#|A5DpZq2SJ2io*6R9Z7BJ@8GP4HTFx4m#hp) z698`8;6K}mqsa|fqQ|)=*Pe8>c>CDgut!gt?MeCV@$kUs^XcWY_}8E0_AvN|xvMj# z;(pEp?k-Ssz~22=@iIYib~0d6zj|PZ;YmXHCHIj#mRtK;@X=c%Fj8GHoKdkz5Nm@2 zZvc$KC@WimYQ4NQ5UGOOmJG>X0&$8DJ5aBm53I@zK1fa;vUYXQm7s}%|ND5&klj~4 z{?`+#W5l%@w?)5-snW6cNuU_ZFQ=x`X(Qg&Sl~@Xk`+0saVfBD*&tlyl?dtix_>y~ zhZ_hf)1h=+2C5H&e=?8ReUq7dw9Ic!;>+4+Jm!`?8MND)Yp!*6E$^-;$nkExb_iL( zU^*!pN4hRT6Os8Q6|h`1mmxlRRW-*ksvxLL!i{ zdh>n@&zKn`h{nB1JSCn0?YyPn?lCyJ;e;}k)KV%hgH%^a4Z^wkliut2%l|z$Htdy- z-Hn-+GAA-UQ-kGHA3q2iguajYHLlyKL}sXlERDx)EWqcJoU-^T0lz<+nGGAouCBz(wr3a@At0o|I+ zoP^)pJ18+ydViIPC&E28-F+Wn5Yh18F?ipZZg-KEuQBX1 zev+ep{aY#qt(rbNIYbtPJOF1zLnStk@TdCo)ZU)#8!u(gyh*-3qVV2OPw#+2XGs;R z*}jkG2&D8?E=|%|Vvb$E0HxF0Z;L+FU|KoTW=t@0rT?;lFBnXng7nVI#n2B|P(zty z%gX+OEF^3_^G>G`8TB=>>)Ss3&lBaHP&-zR-K^5qviy-A(@qTvaA99Pa7>e75(?)V zBgXj0jJjYz3S1Do7W=wD*uP<>3wz1i+&pEWmSRbXALhv9vA0jUmh{ipw(Li&!-^Px(hW1VWaTkge(6%&5>I6y-o0_70UiE>+wtMFi8)c8p-eFV1%9H%x&B zbTot0aj2c3mJYt{L63a$H5T0TXWrFXRQ9D0p=-0@?%vCLoofHxqizeIRqWKuV@UbwM8 z;KP~Q&>9H%MCTwPT8b5P!dpP7APmkxLYt}w=!_K@jvi) zmr<9=imEr2)?37`333W=eg?J~r68hRFStvKchBX)dQIOuV=zwLaG(|R2{!60s=eir z$u}JcQ^8|-8$|5dFB&~HGYK`v+sj~GK9UV|mb|2PT-+_Z@VM?!{>6RT%$Yi6i5R;A zl0~Rxv$LV?Y5w=<+K1Wd-R3M7{Exj`7#5xsKf1(cX?pgd#G5T4n38}upx*SX=(!6K zQj{V8Ug)-%qVU7L{zU0t_7}GQk*ynid=cPe`|a)h`**l)X0+D~D%JPWm=*q^54WOL zsGo-wRCA~63?d5PWBt)A$IyzO%dTv?`rYC@<=+)vH>6gDhOV;Eo#^ac3AT*baOv6CkA+%4f`s1qJ3~KMZIIAubZAP%UiGsiGrt)y(v0 z9x9>jYgy1Ar!Cs#Te)R^%1m;Ive9!U@{!M?>3aZ}<;dVYM`mO+8arM&)FIuxX?C}bAO^HP6GyxBO{IjYgK{T=Q`VTqe3 z-QF z#LScnim&I5XEgr(KlR?kzVc9Ti?m~$CLSH09uWUw^U)8-5GN|r1CeS@ZY9Qn zZqtw33LLi(31Ovulm5){w5)bf>`pXZ@wl_(-ZypDB8;v&w^Fgq{i(I`3&H{iax3o)C3tt1FiITIn^IC&M2)JfEj+ zS=%+Iff`GT`H2Z_+mqR+-pQ+NUbCDSwI z!TT*%DxNKwg_IPbwcfUceBbmf%Y zC6XipA_~zJuWT2jPM6GR5WO=41-HPJQ%!?N$OyeS9GLe}0-Om`$KH9BsPUgT4gAJf^X#irOZNOhf=F=oDBS?k2Of zTp>ZQfz7v(Se2C)j5a@_hK=1RpdY*V$&M|5S~Qto?*PvQ?XXgdSF!idG4cvHfsyD0 zq@+h96&>=PZV|TGD15U~Mtn~qi*zD?-wliWH5svI5ROub>ZV@(K1e>!B2MpExu(mC zJ*=s`9$)Y+8X9SF;l+=|9Ut!rkJrzOy!d3mYL@S`Ox9rn(<0J>)npByYjPNmd(5A5 z9A+FdNj545s?_pSk+Ku(d;OTHv=PYTptNCSep@u-1{d@jRG_KCW>{OKK%cr`WBXtP5gDurtIed(pA`Wtv*~XC4w&?CNdwyu)mx|?!$^Rs$s}QQF2dU2(1PMj z8lojaoYUztmv=p}%$HE*fSw|!PW0GsS_f2N_^*zme}YUN@gV8uWmqr{H&@&RB@GQ8!ektHQ=@iU$lGc>75Y9p8O zQCQHVSl>)?5o!24k@l>ORRIjAhKSVu>i1oHX7JZIZ|O!T<8k4rgP;rYc&t`za$MeF z$0cN%d5p|mM~g8!3+Em-MK+gG>!wsQyaqazow?Y6JjO&fWF1VAL}X|X61Ai7PS;-F zyrODf#;vshm{#{Zspj z?@L@V2ykMs8NMDXR(*}$CEPNY!z3Pyyz7el$6ELh7 zWv@>B+gv^{q%k%<#};#gXdBmic#DPkZLoM^|jfjjy9HYX)^-~ zdFtOHznWW+w4fhvb?YG(nJN^Xdwht%eImRI0vbO4)9){Kbrl}Z`9F7J<*fQ#<+A}R zZ{N^`^cc}O+ESG!Vr#&fxBf-EtF9cVO8TctMma?GS71^K$Z(+^C7HK0eVQQIhC*b| zh!AdmQ$4;YWBfZHaQZt-D9X5BiNT+Dx=BN$_q0IGV-FDkyN&)BkN8!&*?(KKVus{; zr|aimxN#WC6eh-q5uch@d>tF8Y?xyBNiBgGggGacwNVRefuu#FN1`&?`MBWw&Sjf~ zhDSl*b!~l@a@o+%B}$q@jMtjNYR21K=zxf|5#ruT04{YR@_pp`%@QQ39iUYQ8-f6_&k}THSne&EP1D|7-rOXt^no3Z;3-`Q0cF6x0IYH6@>=(i zN5*g@(%cjQ7GdB>`9w+zkto!|fK>E-2&Dj0We3il$%4?2euGL&C_$R`MCTZ&aWQMv zfgZ5M?ELOjbA|QC3&QK`<(}B&PR3Acmf-qX5A4KJ^&q)Sw+=W53 zgnqP}_fjSVn9fasli(|orH7@BJ2Z>8WxV*+$F@{6K(&wcHTX-<{HpdcOq|S3#n=wX zfF(&Mh$52+f-rBF%(JXxgB8|eXA;Kd@tDj8#lb=4NBHOr``^!p3-wMS#V}8)r+_?) z-elB~myO?88x5B%A3+;Q5SxiMCmKh*}2MfZW9%L(uzj`D* z{%Pp1|F-4IRjFl3-0|3MyAX@WC24I(At)Zz&3f#fvp(QwLRH{f+ZDsxb$71w`CWM} zVDLk8WGvMbOP&+a#4nX5mChcTj0z-TAfrs}Cr+q?vG9XYJl1!d@*p?Gq(_6wYfUrf z$qjzrWsgbzc{w_U^Sk$uEqgpg5jR$GY@k-cZ0X%3Lj#X=kld)qkHvWnP?LK?jCokg z9O*q*+BXNPVu75#$&6|O-*+?_z~Ab?HKRJEKk#>+6W_j;%_PN&VJ-H4FFscOC#>DIDE8~*+BL=v8xbUVM5;}!c6|^r%sYv&2a|^dZiXRD zY0^=U=dONp%U2ltb6G8^OF1t(0^sLBjgw+>{P@IEB8-(3U095ycTroJVpy-OCV|s& zsfcjy>h*RL0-FRT%Gb1VH0Dw1N{vJeO`f-{FGgqmt8EAy+Y|nVlu4K#mRxVIuf1ll5^Nwzos}W6qer+5Y?bb{UmSW`|ElmYOG%TbFT*p=ldb zZnbFE=CfYqrX-^lBN^{b9^4WMW|1$D&K!ErP0i3CDI>0j6^&cVRGSO=1<&C4t}uR&FBPM^k$}2fsb6ymv}{qPKZ1V~5dM zCzy8}yDtOP+(#?>YfASI`z`*;RW5(9bt*^#)IRVzO@{amE{f+{NA}zKisR!|n9#94 z?3KEsv*sef-U9jRt1NziTCE;k@sR!}OV(yJLW zB#nWHnj!J_D1}bpT3A7aL8$qI@IdsAX(p7lloKm`5O3?cmi|&DM*XWM`t9uw!M_ukLSv&-Ua^hh+ zy{yBp1MY^fv*ob?DTRm!gu`uh!f~NccG=M)w(zA4w7vt4)Qc07Pg`U33^Z-tiIFuy z0bw2_S0rMOJC%oUd-F<JDfNvzTUInuF~G6L!U+tZT;=B#9ubf< zxR>?;xwhM~dJu<=6)$@yN$fuZOl*ah(-wqa9xbJ+vZF;lR{+Nu^%r6RUu;y0AfCI~ zIC84R7~qQ%xll3dD*|txW?_~rT1Q6zf5sDwk@fUrR>J%P$9#riMGI@$-Z)gOuLY`3 z@EmD$vT>JkXqYdj_2-VpssjqVx56o>zRugg6o}ebW}7cG$sg}|#@K_TlEsZWB=W5PE9f45rc?R=ApT939|4m+>1-MFrFVcM{{=B9O{NX0fM`LB7Xk3tGzRPQ zSu|_(419C%pE+1bN za4PdH*DVEC?o<>$-x*STIR4Egu>#kbIxcRnCVjX@<1-Q2W??ZQkr+3@pSdXq%5T&Ls+s-+u(^ z6hVJ*=CClS{-T@n0##TOtmwIR8>3H2eN(4!1tbH1eapU<0$BTKk+C`3*Hx0EMj{#<4xVCjRbkxpy}81~o{ z!4adc7$#f`u?f%^PP^?&-%@;IbGV_xyIp;-=Q1`K$5S0bH{p?p{#+T4ut6XtETYK) zpo=q_#QxpvNyB^B4AJN#n}iA&=yPDa4ssD$3sO6$w$<>#vDO{ln6v9(@2ktBvCI?0 z+S;PqZA@OMy*+<)?)|K4G`p$9WP95jEJK3ej9>FcXCPP+rYRDYvP1jpzXe0X)pJ_pv4($7R*+4eTZa!%&AkECPk9)GtefOFdXPsx=hI`gjphy5HZLAu*q>ONrmpJ~kVA)%%i^D9WWpLvm|D zHl(afn*gMo6Ow5c{QKB`=QEf@NDNphKMSY9aGR;cZWO8+P489@`BUOn4BdLBTyk2N zt}Ve>f9Yv*3;Z_Uf#!J1+H&u0%{^C>{A$J((}rdq^K@xa_k0-wC{Wh`Dzz zu0Y1jAo%b1xtvg@q?jPjA;rj}l4+f+Hu4&&b}7#qxUv==m`&CO%LC%SvdJ+j=z{Ri zbL?qRoc?qE&ibNEC2$L&lZFTVDWA7rY0+z#{DN@qUfiDy)I;INo7Q7G*T7xt6Xg8} zjcwx$DVvdl9ne0O)?ag25oCw7yF#Qk>MIuO4gbbM6v`oc(GrVDgYOAKs*kUgTiXVo z-O(1_V9??(ziEW)w zU1lRD;Cx|0rArxD*pZj6#$tQm@+`qLFe@iX288N60qr43#=`m%pAk)#6)dV~H3K zQ-P+G|4RT~l{85R!IHWD@U%K~kOfu#BL-ndn$Z1_#FIf74@TqI5;MkBewCIu1*1S;f@;k}SDaj>{||(HTT(?%pS?JWha2hqDR^Msb}r4v&SI zEG_1VNI-cY{5sR<@pHYM^L(U*JZ zK$hl{ffl*I+eYS$S!y*kv>2i@5j+1EG<`6i=U!ZQ_h3|tXoF&5g%Tens{|R*(A%(r^i8Ji>)p3_EMY3?>AC-ox7)w`JN5dl_KUr?#QojI-sLb}1JE&fELd zQjQzi?gikE16MPsgp{0D>PmlsY|4hSTx_yoRZaPgl@R%>PR#30*PqLa&7!A4JM4=` z`X;wnNAb}~7n|C<{19=xBk73;X$)4WUm>_? zDXkItu=kX6$BTMVYjY^9vU4!yYD=kEbvbIAwIgxumfAe#^P16PJ8UfXsFpvlGbyv@ z=sqY8@kExu$ey2ts*e0nwVkZ0^f&R`g5avyZ3~n%I_$h{LaI*?(0UQ6T?>?T%fY?N zH@^YW%SxaXf_!^R+#qu4Tfh-=^Gq^PvS~BTs^#?n+ibrAtm8JrUU(PaEDx5iP&&*C z-*b>pC)|V3hCzJzC}Zb6qzQ~8r{E+~DgnH~Wl{u{30l__b;G-zZ|%_fkY=0K*a(vP zu_q`O7mVs~P)f`~Z2_*Lv!|tUiRj|5Rx5ShRG%Tm9LgIuEDG?shzAlJBEkcJz8?c_Fr{0dYU*pksWf3fYX(0HvOTJFy z3e`u0y+%p_%<{lcBFKepvs)-kjDZVq51BRsO7`!&HoI8DZ(4AaJS%*ORcyrSF^3SN zZVP_iBY&$&FWOECh_#f9$21}vHw%d*lGp=LE|Ue*2B-Ar$@23GWb9qOVQiT$#-qGl zU9nh^ew;_VHsFdC%uMZS@b7iQ;cEVf3V?0v1{gKBB<%dnwR-Ds@qIQxSSD%39CT55 z`6Z0AE<*=!k?7?#vf=;p^=nc>%Rd`Z6l2<2B5OXz)|pymH7WsOf2wHvcbKwB->Y84 zVwYx0(Ax-Jv;J4Ug%Czj#g4i$#<(8oOb%tyAHqDMz>j2D^zRJ|WNjjKDjTV561jDm zEF^9nnA(6Xf@jP&?XjN^ctC_w5tX&mvrMt!VTn*iczTaY$Wf9j&-B{VA0+P(p;JF! zx^Z(m)e(hikAu4hWRv0fTtIH9+hs^^+X2=~R%eN8Rg^D}1@?Y0*uGkyBbcb9og^ z!g2=L(%T{C#J}C1%#%kFOGNwh0jQO73xtFDJ^`u{SFA)AXBgeq#9*2fa;2p|ij_FL zFVNTLQc|6Z;%zQ^$RtXs;#m54%`@e2$jBC=Qt&P(5b-k>uoSkwT7(k29UD0#v5aK{ z@Hw>|S*NgSPeC+E@Xtc-H_Dy2ZplOy{tyHPjr3zL@}M~4vRT|ta?1`N8_=$?nVBr1 zUueN98o6a&z&4Q58MGK(kVv(y-Afd&_#gwQ1jzQ_)^$vg{NABiMskMmGIO5e(xReuEv$A zJJi@4?T_WIt~_R$!~7iMG11~JbH9P6>WhO(2Zl2Q36arhxLw$t2P{Zxc`y;G;WPbV zbY?d5XydS-F~kg2z;)y+Y{Rw2~nV9qknM;2AFz% zbE17_@IUy&d!KUj)8m@a=Q2U4sU#NKw{lI|iILNxhgd!cgC&Wh1IR9--+xR-0fr#) zY6h#!-v>(yb7Y0(=te@{VN`JaC9x{y&VSW@pMbtd;eW|iddR#Wz|<+TaNcmcxZ(@zr&qx4GF@>(fXfaD~_uk{L^-cI-V4aeyAvp*UwcB&WrR}23`QW zO*#Kc%K`qsGGA>(S|Lr z+A7OW15!b<3^?(|ohsohWC0^=ps^0(@J`b}r%Ts}x3wAC0 zbePgV^BG>LGeJ_ss&B2i0?v$UFd%g(IWK8N%LLqHeH&nm%aI^ov9?T?Ig`?dys&Cn zkDX-?GL!5f>Ui-dK=V(!UIA(qmwadyOsBUK)xYN{U2400V{uA4H6di$1{oJ=OA-Nr zb;87G|J_)v;Q$M-MAJa#olE#5aW;W>{LWU9|hQWs^d#!lq+P4&@j4{4M|&gG>2QDMFjowOJgG{0>( z)f^cTcb8=UkPY-~!pQzWEbc-6_3II!=`$7IgF`iA^&LH__!(`a=<76d&l!>d1p4&O zmtal!Igti3`rUK1Wtx3U({aa0)HGJHexhz!(}yodsDv_IJ3emls5s z%MBn9oy*@NwfxS%Xp%=^r}Cu|Ez3#|jRU05Sd23p2M9|zBRS2e`_;NmqW@Rb|K~;2 z;6-$*d|f@{#<0S6#!yk{iOgXlVqV~~W_So_tEyOa2^Z|N%k)W+dT0`xKdperkR(b( z!{>7oL4-aquyqTJ_`xT3gjk3*L_p&{7rgV4!q}c%);t!d2IkqjxP|LvqX@&!ff3PI zI=2BL$o29`5(O^B1s6g=Z$w7&zmypKBFIXwcXlNHA0Ei^Y;Rl)?s&Hv{cZv>I|fz~ z(Rr9MhqV;+h$ivOM6j3&+hMGY0ad88Bs*AvYEpmTjbQWLSSKvON?hrTYK9-OsEHT? z=m|R((t$b8K0(>=Ql_x8yw|$H%9+6mnp13qg6uvfhc_rC47y3mGhJ^~STpyAP+f z&AnIZ2hRor5&$vo5BBln z%q7$$j~Hzi49Rg6p?eG>gj-FfdWSiDIj}JW2aZ9j7b!tdS;IRHVdFiN?7xFKV%ECh z3Y+<{EJ~A@&v=u|J!_wS&|`2)pE}Yh{L*X7N^|59Mo3_+LT*u0L2TwtG$;dGDfLCa zXVdw#1e4H7gfE2z83KfjwknBob&ET+3ALZkC%|<-S+XWyW*MTM@?x^IcMi*OY9GYG zXN68kWJ3I8;l7sdpNCLBhYf#u&3gayn0oP=-7PK)Eo%;4_o)V?Kg3R7O=RkPaIMPFH#&3okiZQa+QAi2ufd>}vW#>#fLf08`3e`|+D3Gu4IW%)Duaru{Z(zro8%eY%giGc_W)hMLM(>=>j z`zEc8K@KKDIV)UgU#Z>*>TQ$+REF{(+6}L7B8_5b&AVqFjsAYf=u0CW|G$m+Cu4)N zAaL38ku-n5JR(o&=-MAwBmsUL&>uGJJ)Ro(*l{o)QB&UXtN@GR zCt2dwt(3EbtlkGU*O(syTwGx4)EaAlT;t{~bBk(92Q>Y)0}o-%T$#Wn)vRXNXF5Em zw+|6Aq&vv2tD}#M(GnvAZ3xFt0}MIQd2Pne(8cg#|Q2LHc3e zHS}10x!gs6n`G4SD+UBfvm4&m<^xFu=v7fBrz2n-oPb7`Iemxjo%x=-3qfVrCBs4FY%|yEq}BE_~q>(dnq#jC=oM~ zPxl^X$P={cFsp2MdXKyFDb?p+*vlM|yw^+&%sqsfW-R`nshlPl`xCjQaAp4&s?S9* zd-$oxr6CLWIlLjYb=bvWg<$W#$rVBy4b{0G z(%?xX%Y_Mbv%gz^l^bCPO!!m09B;zx%5tKrb}Y+b(aXW@S++^-31?l2wL4H3 zJR)4u=yy7SU2*d&twdT=1X<`4@f7=MgFxxnAM0g*Q6su %r(O}d?tW5E1;jmv=! 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%0Do5=%T0t>b3mS59-5Tg@^Up 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 diff --git a/src/store/index.ts b/src/store/index.ts index 4660804f5..eba3d318c 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -53,10 +53,10 @@ const configureAppStore = (initialState = {}) => { typeof value === 'bigint' ? value.toString() : value instanceof PublicKey - ? (value as PublicKey).toBase58() - : value instanceof BN - ? (value as BN).toString() - : value, + ? (value as PublicKey).toBase58() + : value instanceof BN + ? (value as BN).toString() + : value, options: true } } diff --git a/src/store/reducers/index.ts b/src/store/reducers/index.ts index 6de43e7c3..a54345315 100644 --- a/src/store/reducers/index.ts +++ b/src/store/reducers/index.ts @@ -30,7 +30,7 @@ const transformNetwork = createTransform( ) const migrations: MigrationManifest = { - // @ts-expect-error + // @ts-expect-error: migration state type mismatch 1: (state: ISolanaConnectionStore) => { const network = typeof state?.network !== 'undefined' && Object.values(NetworkType).includes(state.network) diff --git a/src/store/reducers/solanaConnection.ts b/src/store/reducers/solanaConnection.ts index 2d8a32957..aaafd5df9 100644 --- a/src/store/reducers/solanaConnection.ts +++ b/src/store/reducers/solanaConnection.ts @@ -1,4 +1,4 @@ -import { NetworkType, RECOMMENDED_RPC_ADDRESS, RPC } from '@store/consts/static' +import { NetworkType, RECOMMENDED_RPC_ADDRESS } from '@store/consts/static' import { PayloadAction, createSlice } from '@reduxjs/toolkit' import { PayloadType } from '@store/consts/types' diff --git a/src/store/reducers/solanaWallet.ts b/src/store/reducers/solanaWallet.ts index 17cee82e1..21d59c68e 100644 --- a/src/store/reducers/solanaWallet.ts +++ b/src/store/reducers/solanaWallet.ts @@ -74,7 +74,7 @@ const solanaWalletSlice = createSlice({ getBalance(state) { return state }, - setIsBalanceLoading(state, action: PayloadAction) { + setIsBalanceLoading(state, action: PayloadAction) { action.payload ? (state.balanceLoading = true) : (state.balanceLoading = false) return state }, diff --git a/src/store/sagas/connection.ts b/src/store/sagas/connection.ts index e71349c84..5b7ddb2a2 100644 --- a/src/store/sagas/connection.ts +++ b/src/store/sagas/connection.ts @@ -1,5 +1,4 @@ -import { all, call, put, SagaGenerator, select, takeLeading, spawn, delay } from 'typed-redux-saga' - +import { all, call, put, SagaGenerator, select, takeLeading, spawn } from 'typed-redux-saga' import { actions, Status, PayloadTypes, RpcStatus } from '@store/reducers/solanaConnection' import { getSolanaConnection } from '@utils/web3/connection' import { actions as snackbarsActions } from '@store/reducers/snackbars' diff --git a/src/store/sagas/positions.ts b/src/store/sagas/positions.ts index 82f674da4..ce776038a 100644 --- a/src/store/sagas/positions.ts +++ b/src/store/sagas/positions.ts @@ -114,8 +114,8 @@ function* handleInitPositionAndPoolWithSOL(action: PayloadAction): Ge allTokens[data.tokenX.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[data.tokenX.toString()] - ? tokensAccounts[data.tokenX.toString()].address - : null + ? tokensAccounts[data.tokenX.toString()].address + : null if (userTokenX === null) { userTokenX = yield* call(createAccount, data.tokenX) @@ -426,8 +426,8 @@ function* handleInitPositionWithSOL(action: PayloadAction): Ge allTokens[data.tokenY.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[data.tokenY.toString()] - ? tokensAccounts[data.tokenY.toString()].address - : null + ? tokensAccounts[data.tokenY.toString()].address + : null if (userTokenY === null) { userTokenY = yield* call(createAccount, data.tokenY) @@ -936,8 +936,8 @@ export function* handleClaimFeeWithSOL(positionIndex: number) { allTokens[positionForIndex.tokenX.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenX.toString()] - ? tokensAccounts[positionForIndex.tokenX.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenX.toString()].address + : null if (userTokenX === null) { userTokenX = yield* call(createAccount, positionForIndex.tokenX) @@ -947,8 +947,8 @@ export function* handleClaimFeeWithSOL(positionIndex: number) { allTokens[positionForIndex.tokenY.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenY.toString()] - ? tokensAccounts[positionForIndex.tokenY.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenY.toString()].address + : null if (userTokenY === null) { userTokenY = yield* call(createAccount, positionForIndex.tokenY) @@ -1281,8 +1281,8 @@ export function* handleClosePositionWithSOL(data: ClosePositionData) { allTokens[positionForIndex.tokenX.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenX.toString()] - ? tokensAccounts[positionForIndex.tokenX.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenX.toString()].address + : null if (userTokenX === null) { userTokenX = yield* call(createAccount, positionForIndex.tokenX) @@ -1292,8 +1292,8 @@ export function* handleClosePositionWithSOL(data: ClosePositionData) { allTokens[positionForIndex.tokenY.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[positionForIndex.tokenY.toString()] - ? tokensAccounts[positionForIndex.tokenY.toString()].address - : null + ? tokensAccounts[positionForIndex.tokenY.toString()].address + : null if (userTokenY === null) { userTokenY = yield* call(createAccount, positionForIndex.tokenY) diff --git a/src/store/sagas/swap.ts b/src/store/sagas/swap.ts index d533a070b..3a4491a91 100644 --- a/src/store/sagas/swap.ts +++ b/src/store/sagas/swap.ts @@ -145,8 +145,8 @@ export function* handleSwapWithSOL(): Generator { allTokens[tokenFrom.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[tokenFrom.toString()] - ? tokensAccounts[tokenFrom.toString()].address - : null + ? tokensAccounts[tokenFrom.toString()].address + : null if (fromAddress === null) { fromAddress = yield* call(createAccount, tokenFrom) } @@ -154,8 +154,8 @@ export function* handleSwapWithSOL(): Generator { allTokens[tokenTo.toString()].address.toString() === WRAPPED_SOL_ADDRESS ? wrappedSolAccount.publicKey : tokensAccounts[tokenTo.toString()] - ? tokensAccounts[tokenTo.toString()].address - : null + ? tokensAccounts[tokenTo.toString()].address + : null if (toAddress === null) { toAddress = yield* call(createAccount, tokenTo) } diff --git a/src/store/selectors/solanaWallet.ts b/src/store/selectors/solanaWallet.ts index c3e9033dd..296847ab0 100644 --- a/src/store/selectors/solanaWallet.ts +++ b/src/store/selectors/solanaWallet.ts @@ -69,7 +69,7 @@ export const swapTokens = createSelector( balance: token.address.toString() === WRAPPED_SOL_ADDRESS ? solBalance - : allAccounts[token.address.toString()]?.balance ?? new BN(0) + : (allAccounts[token.address.toString()]?.balance ?? new BN(0)) })) } ) @@ -88,7 +88,7 @@ export const swapTokensDict = createSelector( balance: val.address.toString() === WRAPPED_SOL_ADDRESS ? solBalance - : allAccounts[val.address.toString()]?.balance ?? new BN(0) + : (allAccounts[val.address.toString()]?.balance ?? new BN(0)) } }) diff --git a/tsconfig.json b/tsconfig.json index 1e4118fc5..300e7e11f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -31,11 +31,7 @@ "noImplicitAny": false }, "include": ["src"], - "exclude": [ - "node_modules/**/*", - "src/components/FarmsList/**/*", - "src/components/Modals/SelectModals/SortFarmsModal/**/*" - ], + "exclude": ["node_modules/**/*"], "references": [ { "path": "./tsconfig.node.json" From d374d8c168224cb6e2dcdb4cc2f88814208d7457 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 14:04:43 +0100 Subject: [PATCH 04/30] update explorer link --- .eslintrc.cjs | 2 -- .../Modals/SelectModals/SelectTokenModal/SelectTokenModal.tsx | 2 +- src/components/Snackbar/CustomSnackbar/CustomSnackbar.tsx | 2 +- src/components/Swap/TokensInfo/SingleToken/SingleToken.tsx | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 2f35b6b79..fe17dba91 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -23,7 +23,6 @@ module.exports = { indent: 'off', '@typescript-eslint/indent': 'off', 'multiline-ternary': 'off', - 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': 'off', '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/prefer-reduce-type-parameter': 'off', @@ -46,7 +45,6 @@ module.exports = { } ], 'no-extra-semi': 'off', - '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], 'no-empty': 'off' }, overrides: [ diff --git a/src/components/Modals/SelectModals/SelectTokenModal/SelectTokenModal.tsx b/src/components/Modals/SelectModals/SelectTokenModal/SelectTokenModal.tsx index cadd318b3..8d30a5684 100644 --- a/src/components/Modals/SelectModals/SelectTokenModal/SelectTokenModal.tsx +++ b/src/components/Modals/SelectModals/SelectTokenModal/SelectTokenModal.tsx @@ -332,7 +332,7 @@ export const SelectTokenModal: React.FC = ({ { diff --git a/src/components/Snackbar/CustomSnackbar/CustomSnackbar.tsx b/src/components/Snackbar/CustomSnackbar/CustomSnackbar.tsx index f616fbbe1..eeb35d218 100644 --- a/src/components/Snackbar/CustomSnackbar/CustomSnackbar.tsx +++ b/src/components/Snackbar/CustomSnackbar/CustomSnackbar.tsx @@ -77,7 +77,7 @@ const CustomSnackbar = React.forwardRef( { window.open( - `https://eclipsescan.xyz/tx/${txid.toString()}${networkUrl}`, + `https://solscan.io/tx/${txid.toString()}${networkUrl}`, '_blank' ) }}> diff --git a/src/components/Swap/TokensInfo/SingleToken/SingleToken.tsx b/src/components/Swap/TokensInfo/SingleToken/SingleToken.tsx index 047afb570..bae9d696f 100644 --- a/src/components/Swap/TokensInfo/SingleToken/SingleToken.tsx +++ b/src/components/Swap/TokensInfo/SingleToken/SingleToken.tsx @@ -69,7 +69,7 @@ const SingleToken: React.FC = ({ token, network, tokenPrice, copyTokenAd {token && ( { From f3bf56042013dd3bf52867a8f184de4dd83ce38e Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 14:15:59 +0100 Subject: [PATCH 05/30] fix global price label --- src/components/NewPosition/RangeSelector/RangeSelector.tsx | 4 ++-- .../SinglePositionPlot/SinglePositionPlot.tsx | 6 ++++-- src/components/Swap/Swap.tsx | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/NewPosition/RangeSelector/RangeSelector.tsx b/src/components/NewPosition/RangeSelector/RangeSelector.tsx index 49bb8d27b..c365d56a9 100644 --- a/src/components/NewPosition/RangeSelector/RangeSelector.tsx +++ b/src/components/NewPosition/RangeSelector/RangeSelector.tsx @@ -452,9 +452,9 @@ export const RangeSelector: React.FC = ({ Active liquidity i - + Current price ━━━ - Global price + Global price ━━━ diff --git a/src/components/PositionDetails/SinglePositionPlot/SinglePositionPlot.tsx b/src/components/PositionDetails/SinglePositionPlot/SinglePositionPlot.tsx index 7550ec25f..15fcd7260 100644 --- a/src/components/PositionDetails/SinglePositionPlot/SinglePositionPlot.tsx +++ b/src/components/PositionDetails/SinglePositionPlot/SinglePositionPlot.tsx @@ -184,8 +184,10 @@ const SinglePositionPlot: React.FC = ({ Active liquidity i - Current price ━━━ - Global price + + Current price ━━━ + Global price ━━━ + diff --git a/src/components/Swap/Swap.tsx b/src/components/Swap/Swap.tsx index 365d302b5..d8bfb053b 100644 --- a/src/components/Swap/Swap.tsx +++ b/src/components/Swap/Swap.tsx @@ -656,7 +656,7 @@ export const Swap: React.FC = ({ Date: Tue, 29 Oct 2024 14:27:57 +0100 Subject: [PATCH 06/30] fix reseting the chart --- src/components/NewPosition/NewPosition.tsx | 8 ++++---- .../NewPosition/RangeSelector/RangeSelector.tsx | 13 ++++++++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/components/NewPosition/NewPosition.tsx b/src/components/NewPosition/NewPosition.tsx index 8e977adc6..23ea91f9c 100644 --- a/src/components/NewPosition/NewPosition.tsx +++ b/src/components/NewPosition/NewPosition.tsx @@ -368,11 +368,11 @@ export const NewPosition: React.FC = ({ const bestTierIndex = tokenA === null || tokenB === null ? undefined - : (bestTiers.find( + : bestTiers.find( tier => (tier.tokenX.equals(tokenA) && tier.tokenY.equals(tokenB)) || (tier.tokenX.equals(tokenB) && tier.tokenY.equals(tokenA)) - )?.bestTierIndex ?? undefined) + )?.bestTierIndex ?? undefined const getMinSliderIndex = () => { let minimumSliderIndex = 0 @@ -787,8 +787,8 @@ export const NewPosition: React.FC = ({ concentrationIndex={concentrationIndex} minimumSliderIndex={minimumSliderIndex} getTicksInsideRange={getTicksInsideRange} - // shouldResetPlot={shouldResetPlot} - // setShouldResetPlot={setShouldResetPlot} + shouldResetPlot={shouldResetPlot} + setShouldResetPlot={setShouldResetPlot} shouldReversePlot={shouldReversePlot} setShouldReversePlot={setShouldReversePlot} shouldNotUpdatePriceRange={shouldNotUpdatePriceRange} diff --git a/src/components/NewPosition/RangeSelector/RangeSelector.tsx b/src/components/NewPosition/RangeSelector/RangeSelector.tsx index c365d56a9..69aa15889 100644 --- a/src/components/NewPosition/RangeSelector/RangeSelector.tsx +++ b/src/components/NewPosition/RangeSelector/RangeSelector.tsx @@ -61,6 +61,8 @@ export interface IRangeSelector { unblockUpdatePriceRange: () => void onlyUserPositions: boolean setOnlyUserPositions: (onlyUserPositions: boolean) => void + shouldResetPlot: boolean + setShouldResetPlot: (val: boolean) => void } export const RangeSelector: React.FC = ({ @@ -88,13 +90,12 @@ export const RangeSelector: React.FC = ({ concentrationIndex, setConcentrationIndex, getTicksInsideRange, - shouldReversePlot, setShouldReversePlot, shouldNotUpdatePriceRange, - unblockUpdatePriceRange - // onlyUserPositions, - // setOnlyUserPositions + unblockUpdatePriceRange, + shouldResetPlot, + setShouldResetPlot }) => { const { classes } = useStyles() @@ -262,11 +263,13 @@ export const RangeSelector: React.FC = ({ isMountedRef.current && poolIndex !== null && currentMidPrice !== midPrice && - !shouldReversePlot + !shouldReversePlot && + shouldResetPlot ) { if (!shouldNotUpdatePriceRange) { resetPlot() setCurrentMidPrice(midPrice) + setShouldResetPlot(false) } } }, [triggerReset]) From 95dfc0f58a5ec9df706d1e5e29622a2e670cd287 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 14:58:18 +0100 Subject: [PATCH 07/30] refactor min lamports for devnet --- .../DepositSelector/DepositSelector.tsx | 16 ++++++---------- src/components/Swap/Swap.tsx | 6 +++--- src/fetchMainnetList.js | 4 ++-- src/serviceWorker.ts | 3 +++ src/store/consts/static.ts | 6 +++--- 5 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/components/NewPosition/DepositSelector/DepositSelector.tsx b/src/components/NewPosition/DepositSelector/DepositSelector.tsx index d958b267f..af549d7fc 100644 --- a/src/components/NewPosition/DepositSelector/DepositSelector.tsx +++ b/src/components/NewPosition/DepositSelector/DepositSelector.tsx @@ -12,9 +12,9 @@ import FeeSwitch from '../FeeSwitch/FeeSwitch' import { NetworkType, WSOL_POOL_INIT_LAMPORTS_MAIN, - WSOL_POOL_INIT_LAMPORTS_TEST, + WSOL_POOL_INIT_LAMPORTS_DEV, WSOL_POSITION_INIT_LAMPORTS_MAIN, - WSOL_POSITION_INIT_LAMPORTS_TEST + WSOL_POSITION_INIT_LAMPORTS_DEV } from '@store/consts/static' import { Status } from '@store/reducers/solanaWallet' import { @@ -127,8 +127,8 @@ export const DepositSelector: React.FC = ({ const [tokenB, setTokenB] = useState(null) const WSOL_MIN_FEE_LAMPORTS = useMemo(() => { - if (network === NetworkType.Testnet) { - return poolIndex === null ? WSOL_POOL_INIT_LAMPORTS_TEST : WSOL_POSITION_INIT_LAMPORTS_TEST + if (network === NetworkType.Devnet) { + return poolIndex === null ? WSOL_POOL_INIT_LAMPORTS_DEV : WSOL_POSITION_INIT_LAMPORTS_DEV } else { return poolIndex === null ? WSOL_POOL_INIT_LAMPORTS_MAIN : WSOL_POSITION_INIT_LAMPORTS_MAIN } @@ -361,9 +361,7 @@ export const DepositSelector: React.FC = ({ tokenPrice={priceA} currency={tokenA !== null ? tokens[tokenA.toString()].symbol : null} currencyIconSrc={tokenA !== null ? tokens[tokenA.toString()].logoURI : undefined} - currencyIsUnknown={ - tokenA !== null ? (tokens[tokenA.toString()].isUnknown ?? false) : false - } + currencyIsUnknown={tokenA !== null ? tokens[tokenA.toString()].isUnknown ?? false : false} placeholder='0.0' onMaxClick={() => { if (tokenA === null) { @@ -414,9 +412,7 @@ export const DepositSelector: React.FC = ({ tokenPrice={priceB} currency={tokenB !== null ? tokens[tokenB.toString()].symbol : null} currencyIconSrc={tokenB !== null ? tokens[tokenB.toString()].logoURI : undefined} - currencyIsUnknown={ - tokenB !== null ? (tokens[tokenB.toString()].isUnknown ?? false) : false - } + currencyIsUnknown={tokenB !== null ? tokens[tokenB.toString()].isUnknown ?? false : false} placeholder='0.0' onMaxClick={() => { if (tokenB === null) { diff --git a/src/components/Swap/Swap.tsx b/src/components/Swap/Swap.tsx index d8bfb053b..b972c6ca6 100644 --- a/src/components/Swap/Swap.tsx +++ b/src/components/Swap/Swap.tsx @@ -14,7 +14,7 @@ import { REFRESHER_INTERVAL, WRAPPED_SOL_ADDRESS, WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT_MAIN, - WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT_TEST + WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT_DEV } from '@store/consts/static' import { addressToTicker, @@ -188,8 +188,8 @@ export const Swap: React.FC = ({ }) const WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT = useMemo(() => { - if (network === NetworkType.Testnet) { - return WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT_TEST + if (network === NetworkType.Devnet) { + return WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT_DEV } else { return WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT_MAIN } diff --git a/src/fetchMainnetList.js b/src/fetchMainnetList.js index e493f0712..94a1a4a63 100644 --- a/src/fetchMainnetList.js +++ b/src/fetchMainnetList.js @@ -1,5 +1,5 @@ -const fs = require('fs') -const axios = require('axios') +import * as fs from 'node:fs' +import axios from 'axios' const run = async () => { const tokensObject = await ( diff --git a/src/serviceWorker.ts b/src/serviceWorker.ts index df0eb29c1..76e929f88 100644 --- a/src/serviceWorker.ts +++ b/src/serviceWorker.ts @@ -26,6 +26,9 @@ type Config = { export function register(config?: Config) { if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { // The URL constructor is available in all browsers that support SW. + if (!process.env.PUBLIC_URL) { + return + } const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href) if (publicUrl.origin !== window.location.origin) { // Our service worker won't work if PUBLIC_URL is on a different origin diff --git a/src/store/consts/static.ts b/src/store/consts/static.ts index c1e832099..b7a66f257 100644 --- a/src/store/consts/static.ts +++ b/src/store/consts/static.ts @@ -298,14 +298,14 @@ export const WSOL_POSITION_INIT_LAMPORTS = new BN(6164600) export const WSOL_POOL_INIT_LAMPORTS = new BN(106000961) -export const WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT_TEST = new BN(9200961) +export const WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT_DEV = new BN(9200961) export const WSOL_MIN_DEPOSIT_SWAP_FROM_AMOUNT_MAIN = new BN(9200961) export const WSOL_POSITION_INIT_LAMPORTS_MAIN = new BN(6164600) -export const WSOL_POSITION_INIT_LAMPORTS_TEST = new BN(6164600) +export const WSOL_POSITION_INIT_LAMPORTS_DEV = new BN(6164600) export const WSOL_POOL_INIT_LAMPORTS_MAIN = new BN(106000961) -export const WSOL_POOL_INIT_LAMPORTS_TEST = new BN(106000961) +export const WSOL_POOL_INIT_LAMPORTS_DEV = new BN(106000961) export const ALL_FEE_TIERS_DATA = FEE_TIERS.map((tier, index) => ({ tier, From 024d056f61b055bc0cbd3f94c996d6452b887667 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 15:25:24 +0100 Subject: [PATCH 08/30] update CI --- .github/workflows/deploy-master.yml | 4 +++- .github/workflows/deploy-staging.yml | 4 +++- .github/workflows/preview.yml | 8 +++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy-master.yml b/.github/workflows/deploy-master.yml index 673e21809..82cb27e1b 100644 --- a/.github/workflows/deploy-master.yml +++ b/.github/workflows/deploy-master.yml @@ -1,5 +1,7 @@ name: preview +permissions: read-all + on: push: branches: [master] @@ -9,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install Vercel CLI run: npm install -g vercel@22.0.1 - name: Deploy to Vercel Action diff --git a/.github/workflows/deploy-staging.yml b/.github/workflows/deploy-staging.yml index d1fe161c6..7821fc47f 100644 --- a/.github/workflows/deploy-staging.yml +++ b/.github/workflows/deploy-staging.yml @@ -1,5 +1,7 @@ name: preview +permissions: read-all + on: push: branches: [staging] @@ -9,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install Vercel CLI run: npm install -g vercel@22.0.1 - name: Deploy to Vercel Action diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 68cf966d2..457e4f4ed 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -1,5 +1,7 @@ name: preview +permissions: read-all + on: pull_request: types: [opened, synchronize, reopened] @@ -9,9 +11,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Use Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: '20' - name: install @@ -25,7 +27,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install Vercel CLI run: npm install -g vercel@22.0.1 - name: Deploy to Vercel Action From 696ea0ae1559cda59e7129cb4e1a65a759348797 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 15:34:31 +0100 Subject: [PATCH 09/30] update permissions --- .github/workflows/deploy-master.yml | 3 ++- .github/workflows/deploy-staging.yml | 3 ++- .github/workflows/deploy.yml | 3 +++ .github/workflows/preview.yml | 3 ++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy-master.yml b/.github/workflows/deploy-master.yml index 82cb27e1b..3f66fd75f 100644 --- a/.github/workflows/deploy-master.yml +++ b/.github/workflows/deploy-master.yml @@ -1,6 +1,7 @@ name: preview -permissions: read-all +permissions: + contents: write on: push: diff --git a/.github/workflows/deploy-staging.yml b/.github/workflows/deploy-staging.yml index 7821fc47f..792bcb1ad 100644 --- a/.github/workflows/deploy-staging.yml +++ b/.github/workflows/deploy-staging.yml @@ -1,6 +1,7 @@ name: preview -permissions: read-all +permissions: + contents: write on: push: diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index b2b5e1979..31a685ecc 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,5 +1,8 @@ name: deploy +permissions: + contents: write + on: push: branches: diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 457e4f4ed..1c5b5bf65 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -1,6 +1,7 @@ name: preview -permissions: read-all +permissions: + contents: write on: pull_request: From 804ce27e0ba7dc110d4a0f59b6361daf38039ed7 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 15:47:15 +0100 Subject: [PATCH 10/30] format trunk --- .github/workflows/deploy-master.yml | 3 --- .github/workflows/deploy-staging.yml | 3 --- .github/workflows/deploy.yml | 3 --- .github/workflows/preview.yml | 3 --- .../NewPosition/DepositSelector/DepositSelector.tsx | 8 ++++++-- src/components/NewPosition/NewPosition.tsx | 4 ++-- src/components/Snackbar/CustomSnackbar/CustomSnackbar.tsx | 5 +---- 7 files changed, 9 insertions(+), 20 deletions(-) diff --git a/.github/workflows/deploy-master.yml b/.github/workflows/deploy-master.yml index 3f66fd75f..6b8087bd3 100644 --- a/.github/workflows/deploy-master.yml +++ b/.github/workflows/deploy-master.yml @@ -1,8 +1,5 @@ name: preview -permissions: - contents: write - on: push: branches: [master] diff --git a/.github/workflows/deploy-staging.yml b/.github/workflows/deploy-staging.yml index 792bcb1ad..a236fa37f 100644 --- a/.github/workflows/deploy-staging.yml +++ b/.github/workflows/deploy-staging.yml @@ -1,8 +1,5 @@ name: preview -permissions: - contents: write - on: push: branches: [staging] diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 31a685ecc..b2b5e1979 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,8 +1,5 @@ name: deploy -permissions: - contents: write - on: push: branches: diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 1c5b5bf65..aaeb9aceb 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -1,8 +1,5 @@ name: preview -permissions: - contents: write - on: pull_request: types: [opened, synchronize, reopened] diff --git a/src/components/NewPosition/DepositSelector/DepositSelector.tsx b/src/components/NewPosition/DepositSelector/DepositSelector.tsx index af549d7fc..6e93d51d9 100644 --- a/src/components/NewPosition/DepositSelector/DepositSelector.tsx +++ b/src/components/NewPosition/DepositSelector/DepositSelector.tsx @@ -361,7 +361,9 @@ export const DepositSelector: React.FC = ({ tokenPrice={priceA} currency={tokenA !== null ? tokens[tokenA.toString()].symbol : null} currencyIconSrc={tokenA !== null ? tokens[tokenA.toString()].logoURI : undefined} - currencyIsUnknown={tokenA !== null ? tokens[tokenA.toString()].isUnknown ?? false : false} + currencyIsUnknown={ + tokenA !== null ? (tokens[tokenA.toString()].isUnknown ?? false) : false + } placeholder='0.0' onMaxClick={() => { if (tokenA === null) { @@ -412,7 +414,9 @@ export const DepositSelector: React.FC = ({ tokenPrice={priceB} currency={tokenB !== null ? tokens[tokenB.toString()].symbol : null} currencyIconSrc={tokenB !== null ? tokens[tokenB.toString()].logoURI : undefined} - currencyIsUnknown={tokenB !== null ? tokens[tokenB.toString()].isUnknown ?? false : false} + currencyIsUnknown={ + tokenB !== null ? (tokens[tokenB.toString()].isUnknown ?? false) : false + } placeholder='0.0' onMaxClick={() => { if (tokenB === null) { diff --git a/src/components/NewPosition/NewPosition.tsx b/src/components/NewPosition/NewPosition.tsx index 23ea91f9c..b9db91079 100644 --- a/src/components/NewPosition/NewPosition.tsx +++ b/src/components/NewPosition/NewPosition.tsx @@ -368,11 +368,11 @@ export const NewPosition: React.FC = ({ const bestTierIndex = tokenA === null || tokenB === null ? undefined - : bestTiers.find( + : (bestTiers.find( tier => (tier.tokenX.equals(tokenA) && tier.tokenY.equals(tokenB)) || (tier.tokenX.equals(tokenB) && tier.tokenY.equals(tokenA)) - )?.bestTierIndex ?? undefined + )?.bestTierIndex ?? undefined) const getMinSliderIndex = () => { let minimumSliderIndex = 0 diff --git a/src/components/Snackbar/CustomSnackbar/CustomSnackbar.tsx b/src/components/Snackbar/CustomSnackbar/CustomSnackbar.tsx index eeb35d218..a2c8c086f 100644 --- a/src/components/Snackbar/CustomSnackbar/CustomSnackbar.tsx +++ b/src/components/Snackbar/CustomSnackbar/CustomSnackbar.tsx @@ -76,10 +76,7 @@ const CustomSnackbar = React.forwardRef( { - window.open( - `https://solscan.io/tx/${txid.toString()}${networkUrl}`, - '_blank' - ) + window.open(`https://solscan.io/tx/${txid.toString()}${networkUrl}`, '_blank') }}> Details From 5e016f0c16a3509bd90088e8e97f7ba38107cd72 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 15:50:59 +0100 Subject: [PATCH 11/30] update config trunk --- .trunk/trunk.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index f8d81214e..14db144e3 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -1,20 +1,15 @@ -# This file controls the behavior of Trunk: https://docs.trunk.io/cli -# To learn more about the format of this file, see https://docs.trunk.io/reference/trunk-yaml version: 0.1 cli: version: 1.22.7 -# Trunk provides extensibility via plugins. (https://docs.trunk.io/plugins) plugins: sources: - id: trunk ref: v1.6.4 uri: https://github.com/trunk-io/plugins -# Many linters and tools depend on runtimes - configure them here. (https://docs.trunk.io/runtimes) runtimes: enabled: - node@18.12.1 - python@3.10.8 -# This is the section where you manage your linters. (https://docs.trunk.io/check/configuration) lint: enabled: - actionlint@1.7.3 From 515ecc29df20550d1b65c1d0d50a97e0e024b3de Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 16:36:41 +0100 Subject: [PATCH 12/30] fix build --- .eslintrc.cjs | 4 +- .trunk/trunk.yaml | 2 +- src/components/Header/Header.stories.tsx | 7 +- .../Inputs/Select/Select.stories.tsx | 10 +- .../Modals/Priority/Priority.stories.tsx | 68 +++++--- src/components/Modals/Priority/Priority.tsx | 4 +- .../SelectTokenModal.stories.tsx | 10 +- .../DepositSelector.stories.tsx | 18 +- .../NewPosition/NewPosition.stories.tsx | 28 ++- src/components/NewPosition/NewPosition.tsx | 6 +- .../RangeSelector/RangeSelector.stories.tsx | 4 +- .../PositionDetails.stories.tsx | 164 +++++++++++++----- src/components/Swap/Swap.stories.tsx | 22 ++- .../Swap/TokensInfo/TokensInfo.stories.tsx | 24 ++- .../TransactionPriorityButton.stories.tsx | 61 ++++--- src/containers/EventsHandlers/market.ts | 5 +- src/store/reducers/farms.ts | 1 - src/store/sagas/wallet.ts | 2 - src/store/selectors/helpers.ts | 1 - src/store/selectors/positions.ts | 1 - src/store/selectors/stats.ts | 2 +- src/utils/utils.ts | 3 - src/utils/web3/wallet.ts | 1 - 23 files changed, 266 insertions(+), 182 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index fe17dba91..907826cf2 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -39,9 +39,7 @@ module.exports = { 'error', { varsIgnorePattern: '^_', - argsIgnorePattern: '^_', - destructuredArrayIgnorePattern: '^_', - caughtErrorsIgnorePattern: '^_' + argsIgnorePattern: '^_' } ], 'no-extra-semi': 'off', diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 14db144e3..ea286ce36 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -13,7 +13,7 @@ runtimes: lint: enabled: - actionlint@1.7.3 - - checkov@3.2.269 + - checkov@3.2.270 - eslint@8.57.0 - git-diff-check - markdownlint@0.42.0 diff --git a/src/components/Header/Header.stories.tsx b/src/components/Header/Header.stories.tsx index 3307f214f..2c7ea6f5b 100644 --- a/src/components/Header/Header.stories.tsx +++ b/src/components/Header/Header.stories.tsx @@ -47,7 +47,10 @@ export const Primary: Story = { }, onChainSelect: fn(), network: NetworkType.Testnet, - defaultDevnetRPC: RPC.DEV_EU, - rpcStatus: RpcStatus.Uninitialized + defaultDevnetRPC: RPC.DEV, + rpcStatus: RpcStatus.Uninitialized, + defaultMainnetRPC: RPC.MAIN, + onPrioritySave: fn(), + recentPriorityFee: '1' } } diff --git a/src/components/Inputs/Select/Select.stories.tsx b/src/components/Inputs/Select/Select.stories.tsx index d68b4b24c..cec2ae364 100644 --- a/src/components/Inputs/Select/Select.stories.tsx +++ b/src/components/Inputs/Select/Select.stories.tsx @@ -9,8 +9,8 @@ import { Provider } from 'react-redux' import { store } from '@store/index' import { MemoryRouter } from 'react-router-dom' -const tokens: SwapToken[] = [ - { +const tokens: Record = { + So11111111111111111111111111111111111111112: { balance: new BN(100).mul(new BN(34786)), decimals: 6, symbol: 'SOL', @@ -19,7 +19,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png' }, - { + '9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E': { balance: new BN(100).mul(new BN(126)), decimals: 6, symbol: 'BTC', @@ -28,7 +28,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E/logo.png' }, - { + EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: { balance: new BN(10).mul(new BN(5342)), decimals: 6, symbol: 'USDC', @@ -37,7 +37,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png' } -] +} const meta = { title: 'Inputs/Select', diff --git a/src/components/Modals/Priority/Priority.stories.tsx b/src/components/Modals/Priority/Priority.stories.tsx index 0866bd766..877e7d136 100644 --- a/src/components/Modals/Priority/Priority.stories.tsx +++ b/src/components/Modals/Priority/Priority.stories.tsx @@ -1,28 +1,42 @@ -import { storiesOf } from '@storybook/react' -import { withKnobs } from '@storybook/addon-knobs' -import { toBlur } from '@consts/uiUtils' -import React from 'react' -import Priority from './Priority' +import type { Meta, StoryObj } from '@storybook/react' +import { fn } from '@storybook/test' +import Priority, { IPriority } from './Priority' +import { Provider } from 'react-redux' +import { MemoryRouter } from 'react-router-dom' +import { store } from '@store/index' -storiesOf('newUi/priority', module) - .addDecorator(withKnobs) - .add('priority', () => ( -

- )) +const meta = { + title: 'Modals/Priority', + component: Priority, + decorators: [ + Story => ( + + + + + + ) + ], + args: { + handleClose: fn(), + open: true + } +} satisfies Meta + +export default meta +type Story = StoryObj + +const PrimaryComponent: React.FC = args => { + return +} + +export const Primary: Story = { + args: { + handleClose: fn(), + open: true, + anchorEl: null, + onPrioritySave: fn(), + recentPriorityFee: '1' + }, + render: args => +} diff --git a/src/components/Modals/Priority/Priority.tsx b/src/components/Modals/Priority/Priority.tsx index 1b0ab41b8..e6087530e 100644 --- a/src/components/Modals/Priority/Priority.tsx +++ b/src/components/Modals/Priority/Priority.tsx @@ -6,7 +6,7 @@ import useStyles from './style' import { IPriorityFeeOptions } from '@store/consts/types' import { Box, Button, Grid, Input, Popover, Typography } from '@mui/material' -interface Props { +export interface IPriority { open: boolean handleClose: () => void anchorEl: HTMLButtonElement | null @@ -14,7 +14,7 @@ interface Props { onPrioritySave: () => void } -const Priority: React.FC = ({ +const Priority: React.FC = ({ open, handleClose, anchorEl, diff --git a/src/components/Modals/SelectModals/SelectTokenModal/SelectTokenModal.stories.tsx b/src/components/Modals/SelectModals/SelectTokenModal/SelectTokenModal.stories.tsx index 4b3e888b0..f4c4a6207 100644 --- a/src/components/Modals/SelectModals/SelectTokenModal/SelectTokenModal.stories.tsx +++ b/src/components/Modals/SelectModals/SelectTokenModal/SelectTokenModal.stories.tsx @@ -6,8 +6,8 @@ import { SwapToken } from '@store/selectors/solanaWallet' import { BN } from '@project-serum/anchor' import { PublicKey } from '@solana/web3.js' -const tokens: SwapToken[] = [ - { +const tokens: Record = { + So11111111111111111111111111111111111111112: { balance: new BN(100).mul(new BN(34786)), decimals: 6, symbol: 'SOL', @@ -16,7 +16,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png' }, - { + '9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E': { balance: new BN(100).mul(new BN(126)), decimals: 6, symbol: 'BTC', @@ -25,7 +25,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E/logo.png' }, - { + EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: { balance: new BN(10).mul(new BN(5342)), decimals: 6, symbol: 'USDC', @@ -34,7 +34,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png' } -] +} const meta = { title: 'Modals/SelectTokenModal', diff --git a/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx b/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx index d6773e0ff..d6335a694 100644 --- a/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx +++ b/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx @@ -12,8 +12,8 @@ import { BN } from '@project-serum/anchor' import { NetworkType } from '@store/consts/static' import { Status } from '@store/reducers/solanaWallet' -const tokens: SwapToken[] = [ - { +const tokens: Record = { + So11111111111111111111111111111111111111112: { balance: new BN(100).mul(new BN(34786)), decimals: 6, symbol: 'SOL', @@ -22,7 +22,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png' }, - { + '9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E': { balance: new BN(100).mul(new BN(126)), decimals: 6, symbol: 'BTC', @@ -31,7 +31,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E/logo.png' }, - { + EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: { balance: new BN(10).mul(new BN(5342)), decimals: 6, symbol: 'USDC', @@ -40,7 +40,8 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png' } -] +} + const meta = { title: 'Components/DepositSelector', component: DepositSelector, @@ -121,14 +122,11 @@ export const Primary: Story = { isGetLiquidityError: false, ticksLoading: false, network: NetworkType.Testnet, - ethBalance: 20000000000, + solBalance: 20000000000, walletStatus: Status.Initialized, onConnectWallet: () => {}, onDisconnectWallet: () => {}, - setTokenAIndex: fn(), - setTokenBIndex: fn(), - tokenAIndex: 0, - tokenBIndex: 1 + setShouldResetPlot: fn() }, render: args => } diff --git a/src/components/NewPosition/NewPosition.stories.tsx b/src/components/NewPosition/NewPosition.stories.tsx index 88c4777a8..0a9aba9bb 100644 --- a/src/components/NewPosition/NewPosition.stories.tsx +++ b/src/components/NewPosition/NewPosition.stories.tsx @@ -23,8 +23,8 @@ const meta = { export default meta type Story = StoryObj -const tokens: SwapToken[] = [ - { +const tokens: Record = { + So11111111111111111111111111111111111111112: { balance: new BN(100).mul(new BN(34786)), decimals: 6, symbol: 'SOL', @@ -33,7 +33,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png' }, - { + '9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E': { balance: new BN(100).mul(new BN(126)), decimals: 6, symbol: 'BTC', @@ -42,7 +42,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E/logo.png' }, - { + EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: { balance: new BN(10).mul(new BN(5342)), decimals: 6, symbol: 'USDC', @@ -51,7 +51,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png' } -] +} export const Primary: Story = { args: { @@ -106,11 +106,16 @@ export const Primary: Story = { setOnlyUserPositions: fn(), network: NetworkType.Testnet, isLoadingTokens: false, - ethBalance: 200000000, + solBalance: 200000000, walletStatus: Status.Initialized, onConnectWallet: () => {}, onDisconnectWallet: () => {}, - poolAddress: '' + poolAddress: '', + calculatePoolAddress: fn(), + globalPrice: 1000000, + noConnectedBlockerProps: { + onConnect: fn() + } }, render: () => { return ( @@ -166,11 +171,16 @@ export const Primary: Story = { setOnlyUserPositions={fn()} network={NetworkType.Testnet} isLoadingTokens={false} - ethBalance={2000000000} + solBalance={2000000000} walletStatus={Status.Initialized} onConnectWallet={() => {}} onDisconnectWallet={() => {}} - poolAddress='' + poolAddress={''} + calculatePoolAddress={fn()} + globalPrice={1000000} + noConnectedBlockerProps={{ + onConnect: fn() + }} /> ) } diff --git a/src/components/NewPosition/NewPosition.tsx b/src/components/NewPosition/NewPosition.tsx index b9db91079..1bf199dfb 100644 --- a/src/components/NewPosition/NewPosition.tsx +++ b/src/components/NewPosition/NewPosition.tsx @@ -110,7 +110,7 @@ export interface INewPosition { currentFeeIndex: number onSlippageChange: (slippage: string) => void initialSlippage: string - globalPrice: number + globalPrice?: number onRefresh: () => void isBalanceLoading: boolean shouldNotUpdatePriceRange: boolean @@ -368,11 +368,11 @@ export const NewPosition: React.FC = ({ const bestTierIndex = tokenA === null || tokenB === null ? undefined - : (bestTiers.find( + : bestTiers.find( tier => (tier.tokenX.equals(tokenA) && tier.tokenY.equals(tokenB)) || (tier.tokenX.equals(tokenB) && tier.tokenY.equals(tokenA)) - )?.bestTierIndex ?? undefined) + )?.bestTierIndex ?? undefined const getMinSliderIndex = () => { let minimumSliderIndex = 0 diff --git a/src/components/NewPosition/RangeSelector/RangeSelector.stories.tsx b/src/components/NewPosition/RangeSelector/RangeSelector.stories.tsx index 4e950bc34..254760870 100644 --- a/src/components/NewPosition/RangeSelector/RangeSelector.stories.tsx +++ b/src/components/NewPosition/RangeSelector/RangeSelector.stories.tsx @@ -67,7 +67,9 @@ export const Primary: Story = { shouldNotUpdatePriceRange: false, unblockUpdatePriceRange: fn(), onlyUserPositions: false, - setOnlyUserPositions: fn() + setOnlyUserPositions: fn(), + setShouldResetPlot: fn(), + shouldResetPlot: false }, render: args => } diff --git a/src/components/PositionDetails/PositionDetails.stories.tsx b/src/components/PositionDetails/PositionDetails.stories.tsx index 3dbcb761c..4a0f06a59 100644 --- a/src/components/PositionDetails/PositionDetails.stories.tsx +++ b/src/components/PositionDetails/PositionDetails.stories.tsx @@ -3,54 +3,8 @@ import { fn } from '@storybook/test' import { MemoryRouter } from 'react-router-dom' import PositionDetails from './PositionDetails' import { NetworkType } from '@store/consts/static' -import { BN } from '@project-serum/anchor' import { PublicKey } from '@solana/web3.js' -const defaultArgs = { - currentPrice: new BN(10000), - leftRange: { index: new BN(2), x: new BN(23) }, - rightRange: { index: new BN(2), x: new BN(45354) }, - max: 100, - min: 0, - midPrice: { index: new BN(3), x: new BN(4535) }, - reloadHandler: fn(), - ticksLoading: false, - tickSpacing: new BN(1), - closePosition: fn(), - tokenX: { - name: 'BTC', - balance: new BN(10000), - claimValue: new BN(10000), - decimal: new BN(9), - icon: 'https://assets.coingecko.com/coins/images/1/large/bitcoin.png?1547033579', - liqValue: new BN(10000), - usdValue: new BN(123) - }, - tokenY: { - name: 'ETH', - balance: new BN(432), - claimValue: new BN(21), - decimal: new BN(9), - icon: 'https://assets.coingecko.com/coins/images/1/large/bitcoin.png?1547033579', - liqValue: new BN(321), - usdValue: new BN(3246) - }, - hasTicksError: false, - copyPoolAddressHandler: fn(), - detailsData: [ - { x: new BN(12), y: new BN(1234), index: new BN(1) }, - { x: new BN(123), y: new BN(432), index: new BN(2) } - ], - fee: new BN(1), - onClickClaimFee: fn(), - onRefresh: fn(), - isBalanceLoading: false, - network: NetworkType.Testnet, - tokenXAddress: new PublicKey('32'), - tokenYAddress: new PublicKey('22'), - poolAddress: new PublicKey('32') -} - const meta = { title: 'Components/PositionDetails', component: PositionDetails, @@ -67,6 +21,120 @@ export default meta type Story = StoryObj export const Primary: Story = { - args: defaultArgs, - render: args => + args: { + currentPrice: 10000 as any, + leftRange: { + index: 2 as any, + x: 23 as any + }, + rightRange: { + index: 2 as any, + x: 45354 as any + }, + max: 100, + min: 0, + midPrice: { + index: 2 as any, + x: 45354 as any + }, + reloadHandler: fn(), + ticksLoading: false, + tickSpacing: 1 as any, + closePosition: fn(), + tokenX: { + name: 'BTC', + balance: 10000, + claimValue: 10000, + decimal: 9 as any, + icon: 'https://assets.coingecko.com/coins/images/1/large/bitcoin.png?1547033579', + liqValue: 10000, + usdValue: 123 + }, + tokenY: { + name: 'ETH', + balance: 432, + claimValue: 21, + decimal: 9 as any, + icon: 'https://assets.coingecko.com/coins/images/1/large/bitcoin.png?1547033579', + liqValue: 321, + usdValue: 3246 + }, + hasTicksError: false, + copyPoolAddressHandler: fn(), + detailsData: [ + { + x: 12 as any, + y: 1234 as any, + index: 1 as any + }, + { + x: 123 as any, + y: 432 as any, + index: 2 as any + } + ], + fee: 1 as any, + onClickClaimFee: fn(), + + onRefresh: fn(), + isBalanceLoading: false, + network: NetworkType.Testnet, + poolAddress: new PublicKey('9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E'), + setXToY: fn(), + tokenXAddress: new PublicKey('9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E'), + tokenYAddress: new PublicKey('9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E'), + xToY: true + }, + render: args => { + return ( + + ) + } } diff --git a/src/components/Swap/Swap.stories.tsx b/src/components/Swap/Swap.stories.tsx index 8a02b4e27..6bcbedec5 100644 --- a/src/components/Swap/Swap.stories.tsx +++ b/src/components/Swap/Swap.stories.tsx @@ -6,14 +6,14 @@ import { Provider } from 'react-redux' import { store } from '@store/index' import { MemoryRouter } from 'react-router-dom' import { NetworkType } from '@store/consts/static' -import { DEFAULT_PUBLIC_KEY } from '@invariant-labs/sdk-eclipse/lib/market' -import { fromFee } from '@invariant-labs/sdk-eclipse/lib/utils' import { BN } from '@project-serum/anchor' import { PublicKey } from '@solana/web3.js' import { SwapToken } from '@store/selectors/solanaWallet' +import { fromFee } from '@invariant-labs/sdk/lib/utils' +import { DEFAULT_PUBLIC_KEY } from '@invariant-labs/sdk/lib/market' -const tokens: SwapToken[] = [ - { +const tokens: Record = { + So11111111111111111111111111111111111111112: { balance: new BN(100).mul(new BN(34786)), decimals: 6, symbol: 'SOL', @@ -22,7 +22,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png' }, - { + '9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E': { balance: new BN(100).mul(new BN(126)), decimals: 6, symbol: 'BTC', @@ -31,7 +31,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E/logo.png' }, - { + EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: { balance: new BN(10).mul(new BN(5342)), decimals: 6, symbol: 'USDC', @@ -40,7 +40,7 @@ const tokens: SwapToken[] = [ logoURI: 'https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png' } -] +} const meta = { title: 'PageComponent/Swap', @@ -70,8 +70,8 @@ export const Primary: Story = { initialHideUnknownTokensValue: false, onSwap: fn(), initialSlippage: '0.5', - initialTokenFromIndex: null, - initialTokenToIndex: null, + initialTokenFrom: null, + initialTokenTo: null, isBalanceLoading: false, isFetchingNewPool: false, isWaitingForNewPool: false, @@ -98,12 +98,10 @@ export const Primary: Story = { walletStatus: Status.Initialized, copyTokenAddressHandler: fn(), network: NetworkType.Testnet, - ethBalance: 2000000000, + solBalance: 2000000000, poolTicks: {}, priceFromLoading: false, priceToLoading: false, - unwrapWETH: fn(), - wrappedETHAccountExist: true, deleteTimeoutError: fn(), isTimeoutError: false }, diff --git a/src/components/Swap/TokensInfo/TokensInfo.stories.tsx b/src/components/Swap/TokensInfo/TokensInfo.stories.tsx index 0e92b23c3..0e7d205e6 100644 --- a/src/components/Swap/TokensInfo/TokensInfo.stories.tsx +++ b/src/components/Swap/TokensInfo/TokensInfo.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from '@storybook/react' import TokensInfo from './TokensInfo' import { fn } from '@storybook/test' -import { BTC_TEST, NetworkType, USDC_TEST } from '@store/consts/static' +import { NetworkType, SOL_DEV, USDT_DEV } from '@store/consts/static' import { Provider } from 'react-redux' import { store } from '@store/index' import { MemoryRouter } from 'react-router-dom' @@ -28,22 +28,20 @@ export const Primary: Story = { copyTokenAddressHandler: fn(), tokenFrom: { balance: 234234000343400000, - symbol: BTC_TEST.symbol, - assetAddress: BTC_TEST.address, - name: BTC_TEST.name, - logoURI: BTC_TEST.logoURI, - coingeckoId: BTC_TEST.coingeckoId, - decimals: BTC_TEST.decimals, + symbol: USDT_DEV.symbol, + assetAddress: USDT_DEV.address, + name: USDT_DEV.name, + logoURI: USDT_DEV.logoURI, + decimals: USDT_DEV.decimals, isUnknown: false }, tokenTo: { balance: 23435345450000400, - symbol: USDC_TEST.symbol, - assetAddress: USDC_TEST.address, - name: USDC_TEST.name, - logoURI: USDC_TEST.logoURI, - coingeckoId: USDC_TEST.coingeckoId, - decimals: USDC_TEST.decimals, + symbol: SOL_DEV.symbol, + assetAddress: SOL_DEV.address, + name: SOL_DEV.name, + logoURI: SOL_DEV.logoURI, + decimals: SOL_DEV.decimals, isUnknown: false }, tokenFromPrice: 53433, diff --git a/src/components/TransactionPriorityButton/TransactionPriorityButton.stories.tsx b/src/components/TransactionPriorityButton/TransactionPriorityButton.stories.tsx index a07b4e9f7..aec8ecdd3 100644 --- a/src/components/TransactionPriorityButton/TransactionPriorityButton.stories.tsx +++ b/src/components/TransactionPriorityButton/TransactionPriorityButton.stories.tsx @@ -1,31 +1,36 @@ -import React from 'react' -import { storiesOf } from '@storybook/react' -import { withKnobs } from '@storybook/addon-knobs' -import { colors } from '@static/theme' +import type { Meta, StoryObj } from '@storybook/react' +import { MemoryRouter } from 'react-router-dom' import TransactionPriorityButton from './TransactionPriorityButton' +import { store } from '@store/index' +import { Provider } from 'react-redux' +import { fn } from '@storybook/test' -const buttonsParams = [ - { label: 'High', value: 0.05, description: '5x Market fee' }, - { label: 'Turbo', value: 0.1, description: '10x Market fee' } -] +const meta = { + title: 'Buttons/TransactionPriorityButton', + component: TransactionPriorityButton, + decorators: [ + Story => ( + + + + + + ) + ] +} satisfies Meta -storiesOf('buttons/transactionPriorityButton', module) - .addDecorator(withKnobs) - .add('set priority', () => ( -
- {buttonsParams.map((params, index) => { - return ( - {}} - areButtonsSelected={false} - saveValue={0} - /> - ) - })} -
- )) +export default meta +type Story = StoryObj + +export const Primary: Story = { + args: { + areButtonsSelected: false, + description: 'mocked description', + index: 1, + label: 'mocked label', + onClick: fn(), + saveValue: 8, + selected: false, + value: 3 + } +} diff --git a/src/containers/EventsHandlers/market.ts b/src/containers/EventsHandlers/market.ts index 117a78901..c611c5604 100644 --- a/src/containers/EventsHandlers/market.ts +++ b/src/containers/EventsHandlers/market.ts @@ -112,7 +112,6 @@ const MarketEvents = () => { const connectEvents = () => { allPools.forEach(pool => { - // eslint-disable-next-line @typescript-eslint/no-floating-promises marketProgram.onPoolChange(pool.tokenX, pool.tokenY, { fee: pool.fee.v }, poolStructure => { dispatch( actions.updatePool({ @@ -168,7 +167,7 @@ const MarketEvents = () => { }) } } - // eslint-disable-next-line @typescript-eslint/no-floating-promises + connectEvents() }, [networkStatus, marketProgram, Object.values(poolTicksArray).length]) @@ -234,7 +233,7 @@ const MarketEvents = () => { }) } } - // eslint-disable-next-line @typescript-eslint/no-floating-promises + connectEvents() }, [networkStatus, marketProgram, Object.values(tickmaps).length]) diff --git a/src/store/reducers/farms.ts b/src/store/reducers/farms.ts index 40f568479..c981e38e7 100644 --- a/src/store/reducers/farms.ts +++ b/src/store/reducers/farms.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/restrict-plus-operands */ import { createSlice, PayloadAction } from '@reduxjs/toolkit' import { PublicKey } from '@solana/web3.js' import { IncentiveStructure, Stake } from '@invariant-labs/staker-sdk/lib/staker' diff --git a/src/store/sagas/wallet.ts b/src/store/sagas/wallet.ts index 044784509..a9b170345 100644 --- a/src/store/sagas/wallet.ts +++ b/src/store/sagas/wallet.ts @@ -155,7 +155,6 @@ export function* handleAirdrop(): Generator { yield* call(sleep, 2000) let retries = 30 for (;;) { - // eslint-disable-next-line eqeqeq if (0.05 * 1e9 < (yield* call([connection, connection.getBalance], wallet.publicKey))) { break } @@ -384,7 +383,6 @@ export function* init(): Generator { yield* put(actions.setIsBalanceLoading(false)) } -// eslint-disable-next-line @typescript-eslint/promise-function-async export const sleep = (ms: number) => { return new Promise(resolve => setTimeout(resolve, ms)) } diff --git a/src/store/selectors/helpers.ts b/src/store/selectors/helpers.ts index 719851073..a804a4d59 100644 --- a/src/store/selectors/helpers.ts +++ b/src/store/selectors/helpers.ts @@ -11,5 +11,4 @@ export const keySelectors = (store: (s: AnyProps) => S, keys: keys.reduce((acc, k) => { acc[k] = createSelector(store, (s: S) => s[k]) return acc - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions }, {} as Selected) diff --git a/src/store/selectors/positions.ts b/src/store/selectors/positions.ts index e99e5a0cb..264e02b03 100644 --- a/src/store/selectors/positions.ts +++ b/src/store/selectors/positions.ts @@ -63,7 +63,6 @@ export const positionsWithPoolsData = createSelector( export const singlePositionData = (id: string) => createSelector(positionsWithPoolsData, positions => - // eslint-disable-next-line @typescript-eslint/restrict-plus-operands positions.find(position => id === position.id.toString() + '_' + position.pool.toString()) ) diff --git a/src/store/selectors/stats.ts b/src/store/selectors/stats.ts index 5f06e754a..dd237fbb1 100644 --- a/src/store/selectors/stats.ts +++ b/src/store/selectors/stats.ts @@ -1,8 +1,8 @@ -import { Token } from '@store/consts/static' import { createSelector } from '@reduxjs/toolkit' import { IStatsStore, PoolStatsData, statsSliceName, TokenStatsData } from '../reducers/stats' import { keySelectors, AnyProps } from './helpers' import { tokens } from './pools' +import { Token } from '@store/consts/types' const store = (s: AnyProps) => s[statsSliceName] as IStatsStore diff --git a/src/utils/utils.ts b/src/utils/utils.ts index cc6960813..38bccf5e5 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -48,7 +48,6 @@ import { CoingeckoPriceData, Token } from '@store/consts/types' import { sqrt } from '@invariant-labs/sdk/lib/math' export const transformBN = (amount: BN): string => { - // eslint-disable-next-line new-cap return (amount.div(new BN(1e2)).toNumber() / 1e4).toString() } export const printBN = (amount: BN, decimals: number): string => { @@ -59,14 +58,12 @@ export const printBN = (amount: BN, decimals: number): string => { if (balanceString.length <= decimals) { return ( - // eslint-disable-next-line @typescript-eslint/restrict-plus-operands (isNegative ? '-' : '') + '0.' + '0'.repeat(decimals - balanceString.length) + balanceString ) } else { return ( (isNegative ? '-' : '') + trimZeros( - // eslint-disable-next-line @typescript-eslint/restrict-plus-operands balanceString.substring(0, balanceString.length - decimals) + '.' + balanceString.substring(balanceString.length - decimals) diff --git a/src/utils/web3/wallet.ts b/src/utils/web3/wallet.ts index 00a5e3b84..a9cdcaaeb 100644 --- a/src/utils/web3/wallet.ts +++ b/src/utils/web3/wallet.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-case-declarations */ import { WalletAdapter } from './adapters/types' import { StandardAdapter } from './adapters/standard' From fa2cde6b1da4add0d719a0a04f8679e47893504f Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 16:44:53 +0100 Subject: [PATCH 13/30] update eclipse logo --- src/static/svg/eclipseLogo.svg | 78 ++++------------------------------ 1 file changed, 9 insertions(+), 69 deletions(-) diff --git a/src/static/svg/eclipseLogo.svg b/src/static/svg/eclipseLogo.svg index 9a8c94dba..28ff9c3eb 100644 --- a/src/static/svg/eclipseLogo.svg +++ b/src/static/svg/eclipseLogo.svg @@ -1,79 +1,19 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - + - - + + From e0c3d8ade31405d70abb88f38ed7a9884c03615a Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 16:45:17 +0100 Subject: [PATCH 14/30] format trunk --- src/components/NewPosition/NewPosition.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/NewPosition/NewPosition.tsx b/src/components/NewPosition/NewPosition.tsx index 1bf199dfb..1e4f91828 100644 --- a/src/components/NewPosition/NewPosition.tsx +++ b/src/components/NewPosition/NewPosition.tsx @@ -368,11 +368,11 @@ export const NewPosition: React.FC = ({ const bestTierIndex = tokenA === null || tokenB === null ? undefined - : bestTiers.find( + : (bestTiers.find( tier => (tier.tokenX.equals(tokenA) && tier.tokenY.equals(tokenB)) || (tier.tokenX.equals(tokenB) && tier.tokenY.equals(tokenA)) - )?.bestTierIndex ?? undefined + )?.bestTierIndex ?? undefined) const getMinSliderIndex = () => { let minimumSliderIndex = 0 From 82988ede75d9079246715b68c5d333b08e9d45f7 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 16:53:14 +0100 Subject: [PATCH 15/30] fix positon list number, optimize sagas --- .../WrappedPositionsList.tsx | 2 +- src/store/sagas/positions.ts | 42 +++++++------------ src/store/sagas/wallet.ts | 9 +--- 3 files changed, 17 insertions(+), 36 deletions(-) diff --git a/src/containers/WrappedPositionsList/WrappedPositionsList.tsx b/src/containers/WrappedPositionsList/WrappedPositionsList.tsx index 35b75efdc..13da037ed 100644 --- a/src/containers/WrappedPositionsList/WrappedPositionsList.tsx +++ b/src/containers/WrappedPositionsList/WrappedPositionsList.tsx @@ -169,7 +169,7 @@ export const WrappedPositionsList: React.FC = () => { // ) // } // }} - length={length} + length={list.length} // loadedPages={loadedPages} // getRemainingPositions={() => { // dispatch(actions.getRemainingPositions({ setLoaded: true })) diff --git a/src/store/sagas/positions.ts b/src/store/sagas/positions.ts index ce776038a..0988ec89a 100644 --- a/src/store/sagas/positions.ts +++ b/src/store/sagas/positions.ts @@ -832,20 +832,15 @@ export function* handleGetPositionsList() { const { head } = yield* call([marketProgram, marketProgram.getPositionList], wallet.publicKey) - const list = yield* call( - [marketProgram, marketProgram.getPositionsFromRange], - wallet.publicKey, - 0, - head - 1 - ) - - const addresses = yield* call( - getPositionsAddressesFromRange, - marketProgram, - wallet.publicKey, - 0, - head - 1 - ) + const { list, addresses } = yield* all({ + list: call( + [marketProgram, marketProgram.getPositionsFromRange], + wallet.publicKey, + 0, + head - 1 + ), + addresses: call(getPositionsAddressesFromRange, marketProgram, wallet.publicKey, 0, head - 1) + }) const positions = list.map((position, index) => ({ ...position, @@ -1631,6 +1626,8 @@ export function* handleGetSinglePosition(action: PayloadAction) { const marketProgram = yield* call(getMarketProgram, networkType, rpc) const wallet = yield* call(getWallet) + yield put(actions.getCurrentPositionRangeTicks(action.payload.toString())) + const position = yield* call( [marketProgram, marketProgram.getPosition], wallet.publicKey, @@ -1643,8 +1640,6 @@ export function* handleGetSinglePosition(action: PayloadAction) { position }) ) - - yield put(actions.getCurrentPositionRangeTicks(position.id.toString())) } catch (error) { console.log(error) @@ -1669,17 +1664,10 @@ export function* handleGetCurrentPositionRangeTicks(action: PayloadAction { From 652b5d46724b0e1fbaa3b8d71c7e78d67dfaed94 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 17:02:09 +0100 Subject: [PATCH 16/30] update trimDecimalZeros function --- src/utils/utils.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 38bccf5e5..75f931609 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1478,13 +1478,16 @@ export const trimDecimalZeros = (numStr: string): string => { const withoutTrailingDot = numStr.replace(/\.$/, '') if (!withoutTrailingDot.includes('.')) { - return withoutTrailingDot + return withoutTrailingDot.replace(/^0+/, '') || '0' } const [integerPart, decimalPart] = withoutTrailingDot.split('.') const trimmedDecimal = decimalPart.replace(/0+$/, '') - return trimmedDecimal ? `${integerPart}.${trimmedDecimal}` : integerPart + + const trimmedInteger = integerPart.replace(/^0+/, '') + + return trimmedDecimal ? `${trimmedInteger || '0'}.${trimmedDecimal}` : trimmedInteger || '0' } export const stringToFixed = (string: string, numbersAfterDot: number): string => { From ddec252adabf64154e69f8469f0b722be3270786 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 29 Oct 2024 18:42:28 +0100 Subject: [PATCH 17/30] bump sdk --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36834cdc2..be3a4ce53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.5", "@invariant-labs/bonds-sdk": "0.1.0", - "@invariant-labs/sdk": "0.9.67", + "@invariant-labs/sdk": "^0.9.69", "@invariant-labs/staker-sdk": "0.2.11", "@mui/icons-material": "^5.15.15", "@mui/material": "^5.15.15", @@ -2973,9 +2973,9 @@ } }, "node_modules/@invariant-labs/sdk": { - "version": "0.9.67", - "resolved": "https://registry.npmjs.org/@invariant-labs/sdk/-/sdk-0.9.67.tgz", - "integrity": "sha512-9TWjh9A00qfMWun5cTZ09wxccoJcdzSOVsmR83d3J+NW5SIOV7bPvuG5xT2lPn3BdvB7K92Q9ojewND5JuRN/w==", + "version": "0.9.69", + "resolved": "https://registry.npmjs.org/@invariant-labs/sdk/-/sdk-0.9.69.tgz", + "integrity": "sha512-eI5rDR2eIrdJNT9lxB36WxDQ86wFvZ0WZYbLOMgX9B02misxlhA+/Dtx1qYixU02CGtr+DIqT5KwvKNg0Nahig==", "dependencies": { "@project-serum/anchor": "0.21.0", "@solana/spl-token-registry": "^0.2.4484", diff --git a/package.json b/package.json index 7ef865fd5..3f9c4dc13 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.5", "@invariant-labs/bonds-sdk": "0.1.0", - "@invariant-labs/sdk": "0.9.67", + "@invariant-labs/sdk": "^0.9.69", "@invariant-labs/staker-sdk": "0.2.11", "@mui/icons-material": "^5.15.15", "@mui/material": "^5.15.15", From 5817874433cfb0a4721479df4e3dd6d202ec76ae Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Wed, 6 Nov 2024 08:38:42 +0100 Subject: [PATCH 18/30] update checkout version in CI --- .github/workflows/deploy-master.yml | 2 +- .github/workflows/deploy-staging.yml | 2 +- .github/workflows/preview.yml | 6 +- .../RangeSelector/RangeSelector.tsx | 5 +- src/store/consts/tokenLists/mainnet.json | 11025 +++++++++++++++- src/utils/utils.ts | 2 - 6 files changed, 11031 insertions(+), 11 deletions(-) diff --git a/.github/workflows/deploy-master.yml b/.github/workflows/deploy-master.yml index 15fba176c..ec184e45f 100644 --- a/.github/workflows/deploy-master.yml +++ b/.github/workflows/deploy-master.yml @@ -10,7 +10,7 @@ jobs: permissions: write-all steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Vercel CLI run: npm install -g vercel@22.0.1 - name: Deploy to Vercel Action diff --git a/.github/workflows/deploy-staging.yml b/.github/workflows/deploy-staging.yml index a25423017..eacd23d3c 100644 --- a/.github/workflows/deploy-staging.yml +++ b/.github/workflows/deploy-staging.yml @@ -10,7 +10,7 @@ jobs: permissions: write-all steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Vercel CLI run: npm install -g vercel@22.0.1 - name: Deploy to Vercel Action diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 5cc298e45..e2d89b117 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -9,9 +9,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Use Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: '20' - name: install @@ -26,7 +26,7 @@ jobs: permissions: write-all steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Vercel CLI run: npm install -g vercel@22.0.1 - name: Deploy to Vercel Action diff --git a/src/components/NewPosition/RangeSelector/RangeSelector.tsx b/src/components/NewPosition/RangeSelector/RangeSelector.tsx index 63192ba2c..65478b8e1 100644 --- a/src/components/NewPosition/RangeSelector/RangeSelector.tsx +++ b/src/components/NewPosition/RangeSelector/RangeSelector.tsx @@ -461,11 +461,10 @@ export const RangeSelector: React.FC = ({ - Current price ━━━ - Global price ━━━ + Current price + Global price Buy/sell price - > => { const maxTokensPerRequest = 100 From 1a821e1c3b1d646f9042d773ef36417e7e26936e Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Wed, 6 Nov 2024 10:20:16 +0100 Subject: [PATCH 19/30] align changes --- .trunk/trunk.yaml | 2 +- src/components/Inputs/Select/Select.tsx | 19 +++++++++++-------- src/components/Inputs/Select/style.ts | 14 ++++++++++++++ .../DepositSelector/DepositSelector.tsx | 8 ++------ src/components/Swap/Swap.tsx | 2 +- src/store/reducers/solanaWallet.ts | 7 +++++++ src/store/sagas/positions.ts | 14 +++++++------- src/store/sagas/swap.ts | 4 ++-- src/utils/utils.ts | 4 ++-- src/utils/web3/adapters/standard.ts | 4 ++++ src/utils/web3/adapters/types.ts | 1 + 11 files changed, 52 insertions(+), 27 deletions(-) diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 8a030db8b..8d98dccce 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -1,6 +1,6 @@ version: 0.1 cli: - version: 1.22.7 + version: 1.22.8 plugins: sources: - id: trunk diff --git a/src/components/Inputs/Select/Select.tsx b/src/components/Inputs/Select/Select.tsx index d248735c8..19954a91e 100644 --- a/src/components/Inputs/Select/Select.tsx +++ b/src/components/Inputs/Select/Select.tsx @@ -3,7 +3,7 @@ import icons from '@static/icons' import classNames from 'classnames' import useStyles from './style' import { blurContent, unblurContent } from '@utils/uiUtils' -import { Button } from '@mui/material' +import { Box, Button } from '@mui/material' import ExpandMoreIcon from '@mui/icons-material/ExpandMore' import SelectTokenModal from '@components/Modals/SelectModals/SelectTokenModal/SelectTokenModal' import { SwapToken } from '@store/selectors/solanaWallet' @@ -75,13 +75,16 @@ export const Select: React.FC = ({ onClick={handleClick} startIcon={ !current ? null : ( - {current.name + + {current.name + {current.isUnknown && } + ) } endIcon={} diff --git a/src/components/Inputs/Select/style.ts b/src/components/Inputs/Select/style.ts index 21cbc4676..ccf7c9e9b 100644 --- a/src/components/Inputs/Select/style.ts +++ b/src/components/Inputs/Select/style.ts @@ -36,11 +36,25 @@ export const useStyles = makeStyles()((theme: Theme) => { top: 1, color: colors.white.main }, + imageContainer: { + minWidth: 20, + maxWidth: 20, + height: 20, + marginRight: 5, + position: 'relative' + }, icon: { marginRight: 5, minWidth: 20, height: 20, borderRadius: '100%' + }, + warningIcon: { + position: 'absolute', + width: 12, + height: 12, + bottom: -6, + right: -6 } } }) diff --git a/src/components/NewPosition/DepositSelector/DepositSelector.tsx b/src/components/NewPosition/DepositSelector/DepositSelector.tsx index 6e93d51d9..af549d7fc 100644 --- a/src/components/NewPosition/DepositSelector/DepositSelector.tsx +++ b/src/components/NewPosition/DepositSelector/DepositSelector.tsx @@ -361,9 +361,7 @@ export const DepositSelector: React.FC = ({ tokenPrice={priceA} currency={tokenA !== null ? tokens[tokenA.toString()].symbol : null} currencyIconSrc={tokenA !== null ? tokens[tokenA.toString()].logoURI : undefined} - currencyIsUnknown={ - tokenA !== null ? (tokens[tokenA.toString()].isUnknown ?? false) : false - } + currencyIsUnknown={tokenA !== null ? tokens[tokenA.toString()].isUnknown ?? false : false} placeholder='0.0' onMaxClick={() => { if (tokenA === null) { @@ -414,9 +412,7 @@ export const DepositSelector: React.FC = ({ tokenPrice={priceB} currency={tokenB !== null ? tokens[tokenB.toString()].symbol : null} currencyIconSrc={tokenB !== null ? tokens[tokenB.toString()].logoURI : undefined} - currencyIsUnknown={ - tokenB !== null ? (tokens[tokenB.toString()].isUnknown ?? false) : false - } + currencyIsUnknown={tokenB !== null ? tokens[tokenB.toString()].isUnknown ?? false : false} placeholder='0.0' onMaxClick={() => { if (tokenB === null) { diff --git a/src/components/Swap/Swap.tsx b/src/components/Swap/Swap.tsx index b972c6ca6..adfd4fa82 100644 --- a/src/components/Swap/Swap.tsx +++ b/src/components/Swap/Swap.tsx @@ -598,7 +598,7 @@ export const Swap: React.FC = ({ {/* {wrappedETHAccountExist && ( - You have wrapped ETH.{' '} + You have wrapped SOL.{' '} Unwrap now. diff --git a/src/store/reducers/solanaWallet.ts b/src/store/reducers/solanaWallet.ts index 21d59c68e..943856140 100644 --- a/src/store/reducers/solanaWallet.ts +++ b/src/store/reducers/solanaWallet.ts @@ -88,6 +88,13 @@ const solanaWalletSlice = createSlice({ }) return state }, + setTokenAccounts(state, action: PayloadAction) { + state.accounts = {} + action.payload.forEach(account => { + state.accounts[account.programId.toString()] = account + }) + return state + }, setTokenBalance(state, action: PayloadAction) { state.accounts[action.payload.programId].balance = action.payload.balance return state diff --git a/src/store/sagas/positions.ts b/src/store/sagas/positions.ts index 0988ec89a..9a49854b5 100644 --- a/src/store/sagas/positions.ts +++ b/src/store/sagas/positions.ts @@ -320,7 +320,7 @@ function* handleInitPositionAndPoolWithSOL(action: PayloadAction): Ge yield put( snackbarsActions.add({ message: TIMEOUT_ERROR_MESSAGE, - variant: 'error', + variant: 'info', persist: true, txid: error.signature }) @@ -757,7 +757,7 @@ export function* handleInitPosition(action: PayloadAction): Ge yield put( snackbarsActions.add({ message: TIMEOUT_ERROR_MESSAGE, - variant: 'error', + variant: 'info', persist: true, txid: error.signature }) @@ -1041,7 +1041,7 @@ export function* handleClaimFeeWithSOL(positionIndex: number) { yield put( snackbarsActions.add({ message: TIMEOUT_ERROR_MESSAGE, - variant: 'error', + variant: 'info', persist: true, txid: error.signature }) @@ -1200,7 +1200,7 @@ export function* handleClaimFee(action: PayloadAction) { yield put( snackbarsActions.add({ message: TIMEOUT_ERROR_MESSAGE, - variant: 'error', + variant: 'info', persist: true, txid: error.signature }) @@ -1408,7 +1408,7 @@ export function* handleClosePositionWithSOL(data: ClosePositionData) { yield put( snackbarsActions.add({ message: TIMEOUT_ERROR_MESSAGE, - variant: 'error', + variant: 'info', persist: true, txid: error.signature }) @@ -1599,7 +1599,7 @@ export function* handleClosePosition(action: PayloadAction) { yield put( snackbarsActions.add({ message: TIMEOUT_ERROR_MESSAGE, - variant: 'error', + variant: 'info', persist: true, txid: error.signature }) diff --git a/src/store/sagas/swap.ts b/src/store/sagas/swap.ts index 3a4491a91..60c60a42e 100644 --- a/src/store/sagas/swap.ts +++ b/src/store/sagas/swap.ts @@ -333,7 +333,7 @@ export function* handleSwapWithSOL(): Generator { yield put( snackbarsActions.add({ message: TIMEOUT_ERROR_MESSAGE, - variant: 'error', + variant: 'info', persist: true, txid: error.signature }) @@ -518,7 +518,7 @@ export function* handleSwap(): Generator { yield put( snackbarsActions.add({ message: TIMEOUT_ERROR_MESSAGE, - variant: 'error', + variant: 'info', persist: true, txid: error.signature }) diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 09ca1d9fb..df43f7313 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -19,7 +19,7 @@ import { PoolWithAddress } from '@store/reducers/pools' import { PlotTickData, PositionWithAddress } from '@store/reducers/positions' import { Token as SPLToken, TOKEN_PROGRAM_ID } from '@solana/spl-token' import { Connection, Keypair, PublicKey } from '@solana/web3.js' -import axios, { AxiosResponse } from 'axios' +import axios from 'axios' import bs58 from 'bs58' import { BTC_DEV, @@ -45,7 +45,7 @@ import { } from '@store/consts/static' import mainnetList from '@store/consts/tokenLists/mainnet.json' import { FormatConfig, subNumbers } from '@store/consts/static' -import { CoingeckoPriceData, Token } from '@store/consts/types' +import { Token } from '@store/consts/types' import { sqrt } from '@invariant-labs/sdk/lib/math' export const transformBN = (amount: BN): string => { diff --git a/src/utils/web3/adapters/standard.ts b/src/utils/web3/adapters/standard.ts index 881364acf..a9a1a75a5 100644 --- a/src/utils/web3/adapters/standard.ts +++ b/src/utils/web3/adapters/standard.ts @@ -24,6 +24,10 @@ export class StandardAdapter implements WalletAdapter { return await nightlyConnectAdapter.signTransaction(transaction) } + async signMessage(message: Uint8Array) { + return await nightlyConnectAdapter.signMessage(message) + } + connect = async () => { if (!nightlyConnectAdapter.connected) { try { diff --git a/src/utils/web3/adapters/types.ts b/src/utils/web3/adapters/types.ts index b41808de1..ee36a4ba7 100644 --- a/src/utils/web3/adapters/types.ts +++ b/src/utils/web3/adapters/types.ts @@ -5,6 +5,7 @@ export interface WalletAdapter { connected: boolean signTransaction: (transaction: Transaction) => Promise signAllTransactions: (transaction: Transaction[]) => Promise + signMessage: (message: Uint8Array) => Promise connect: () => any disconnect: () => any } From b72c8dedfa4df45a79fd78c52405ba50a8eccf8d Mon Sep 17 00:00:00 2001 From: zielvna Date: Wed, 6 Nov 2024 12:03:02 +0100 Subject: [PATCH 20/30] add dynamic fee --- src/components/Header/Header.tsx | 4 + .../HeaderButton/SelectPriorityButton.tsx | 8 +- src/components/Modals/Priority/Priority.tsx | 82 ++++++++++++++++--- .../HeaderWrapper/HeaderWrapper.tsx | 11 ++- 4 files changed, 91 insertions(+), 14 deletions(-) diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx index c28326552..e3d25ada3 100644 --- a/src/components/Header/Header.tsx +++ b/src/components/Header/Header.tsx @@ -33,6 +33,7 @@ export interface IHeader { onDisconnectWallet: () => void defaultMainnetRPC: string recentPriorityFee: string + recentIsDynamic: boolean onPrioritySave: () => void rpcStatus: RpcStatus } @@ -49,6 +50,7 @@ export const Header: React.FC = ({ onDisconnectWallet, defaultMainnetRPC, recentPriorityFee, + recentIsDynamic, onPrioritySave, rpcStatus }) => { @@ -159,6 +161,7 @@ export const Header: React.FC = ({ {typeOfNetwork === NetworkType.MAINNET ? ( ) : null} @@ -259,6 +262,7 @@ export const Header: React.FC = ({ open={priorityModal} anchorEl={routesModalAnchor} recentPriorityFee={recentPriorityFee} + recentIsDynamic={recentIsDynamic} handleClose={() => { unblurContent() setPriorityModal(false) diff --git a/src/components/HeaderButton/SelectPriorityButton.tsx b/src/components/HeaderButton/SelectPriorityButton.tsx index a2c0bc699..5ffa33804 100644 --- a/src/components/HeaderButton/SelectPriorityButton.tsx +++ b/src/components/HeaderButton/SelectPriorityButton.tsx @@ -7,10 +7,15 @@ import useStyles from './style' export interface Props { recentPriorityFee: string + recentIsDynamic: boolean onPrioritySave: () => void } -export const SelectPriorityButton: React.FC = ({ recentPriorityFee, onPrioritySave }) => { +export const SelectPriorityButton: React.FC = ({ + recentPriorityFee, + recentIsDynamic, + onPrioritySave +}) => { const classes = useStyles() const [anchorEl, setAnchorEl] = useState(null) @@ -40,6 +45,7 @@ export const SelectPriorityButton: React.FC = ({ recentPriorityFee, onPri open={priorityModal} anchorEl={anchorEl} recentPriorityFee={recentPriorityFee} + recentIsDynamic={recentIsDynamic} handleClose={handleClose} onPrioritySave={onPrioritySave} /> diff --git a/src/components/Modals/Priority/Priority.tsx b/src/components/Modals/Priority/Priority.tsx index 950366975..8a8c88cc2 100644 --- a/src/components/Modals/Priority/Priority.tsx +++ b/src/components/Modals/Priority/Priority.tsx @@ -11,6 +11,7 @@ interface Props { handleClose: () => void anchorEl: HTMLButtonElement | null recentPriorityFee: string + recentIsDynamic: boolean onPrioritySave: () => void } @@ -19,6 +20,7 @@ const Priority: React.FC = ({ handleClose, anchorEl, recentPriorityFee, + recentIsDynamic, onPrioritySave }) => { const classes = useStyles() @@ -29,19 +31,31 @@ const Priority: React.FC = ({ const [inputValue, setInputValue] = useState('') const [saveButtonContent, setSaveButtonContent] = useState('Save settings') const [timerId, setTimerId] = useState(0) + const [dynamicFee, setDynamicFee] = useState(null) + const [isDynamic, setIsDynamic] = useState(recentIsDynamic) const maxFee = 2 useEffect(() => { - const index = priorityFeeOptions.findIndex(option => option.saveValue === +recentPriorityFee) + const index = priorityFeeOptions.findIndex(option => + isDynamic ? option.saveValue === 'DYNAMIC' : option.saveValue === +recentPriorityFee + ) setSelectedIndex(index) if (index !== -1) { - setSelectedFee(priorityFeeOptions[index].saveValue) + if (typeof priorityFeeOptions[index].saveValue === 'string') { + setSelectedFee(dynamicFee ?? 0) + } else { + setSelectedFee(priorityFeeOptions[index].saveValue) + } } else { setInputValue(recentPriorityFee) setSelectedFee(+recentPriorityFee) } + + console.log(recentPriorityFee.toString(), recentIsDynamic.toString()) + localStorage.setItem('INVARIANT_MAINNET_PRIORITY_FEE', recentPriorityFee.toString()) + localStorage.setItem('IS_DYNAMIC_FEE', recentIsDynamic.toString()) }, []) useEffect(() => { @@ -71,6 +85,11 @@ const Priority: React.FC = ({ const handleClick = (index: number) => { setInputValue('') + if (index === 4) { + setIsDynamic(true) + } else { + setIsDynamic(false) + } setSelectedIndex(index) } @@ -90,20 +109,55 @@ const Priority: React.FC = ({ } if (+inputValue > 0) { + setIsDynamic(false) setSelectedFee(+inputValue) localStorage.setItem('INVARIANT_MAINNET_PRIORITY_FEE', inputValue) } else { - setSelectedFee(priorityFeeOptions[selectedIndex].saveValue) - localStorage.setItem( - 'INVARIANT_MAINNET_PRIORITY_FEE', - priorityFeeOptions[selectedIndex].saveValue.toString() - ) + if (typeof priorityFeeOptions[selectedIndex].saveValue === 'string') { + setIsDynamic(true) + setSelectedFee(dynamicFee ?? 0) + localStorage.setItem('INVARIANT_MAINNET_PRIORITY_FEE', (dynamicFee ?? 0).toString()) + localStorage.setItem('IS_DYNAMIC_FEE', 'true') + } else { + setIsDynamic(false) + setSelectedFee(priorityFeeOptions[selectedIndex].saveValue) + localStorage.setItem( + 'INVARIANT_MAINNET_PRIORITY_FEE', + priorityFeeOptions[selectedIndex].saveValue.toString() + ) + localStorage.setItem('IS_DYNAMIC_FEE', 'false') + } } onPrioritySave() handleClose() } + useEffect(() => { + const loadDynamicFee = async () => { + const dynamicFee = await getCurrentDynamicFee() + const fee = +(dynamicFee / 10 ** 9).toFixed(9) + setDynamicFee(fee) + + if (isDynamic) { + localStorage.setItem('INVARIANT_MAINNET_PRIORITY_FEE', fee.toString()) + } + } + + void loadDynamicFee() + const interval = setInterval(() => { + void loadDynamicFee() + }, 60 * 1000) + + return () => clearInterval(interval) + }) + + const getCurrentDynamicFee = async () => { + const response = await fetch('https://solanacompass.com/api/fees') + const data = await response.json() + return data['15'].avg + } + const priorityFeeOptions: IPriorityFeeOptions[] = [ { label: 'Normal', value: 0.000005, saveValue: 0, description: '1x Market fee' }, { @@ -113,7 +167,13 @@ const Priority: React.FC = ({ description: '85% percentile fees from last 20 blocks' }, { label: 'High', value: 0.05, saveValue: 0.05, description: '5x Market fee' }, - { label: 'Turbo', value: 0.1, saveValue: 0.1, description: '10x Market fee' } + { label: 'Turbo', value: 0.1, saveValue: 0.1, description: '10x Market fee' }, + { + label: 'Dynamic', + value: 'DYNAMIC', + saveValue: 'DYNAMIC', + description: 'Custom fee based on market demand' + } ] return ( @@ -146,11 +206,11 @@ const Priority: React.FC = ({ diff --git a/src/containers/HeaderWrapper/HeaderWrapper.tsx b/src/containers/HeaderWrapper/HeaderWrapper.tsx index b66102aef..423bf3896 100644 --- a/src/containers/HeaderWrapper/HeaderWrapper.tsx +++ b/src/containers/HeaderWrapper/HeaderWrapper.tsx @@ -13,8 +13,8 @@ import { useLocation } from 'react-router-dom' export interface IPriorityFeeOptions { label: string - value: number - saveValue: number + value: number | string + saveValue: number | string description: string } @@ -59,6 +59,12 @@ export const HeaderWrapper: React.FC = () => { return lastFee === null ? '' : lastFee }, []) + const recentIsDynamic = useMemo(() => { + const lastIsDynamic = localStorage.getItem('IS_DYNAMIC_FEE') + + return lastIsDynamic === null ? true : lastIsDynamic === 'true' + }, []) + const currentRpcStatus = useSelector(rpcStatus) const useDefaultRpc = () => { @@ -110,6 +116,7 @@ export const HeaderWrapper: React.FC = () => { rpc={currentRpc} defaultMainnetRPC={defaultMainnetRPC} recentPriorityFee={recentPriorityFee} + recentIsDynamic={recentIsDynamic} onPrioritySave={() => { dispatch( snackbarsActions.add({ From e1901f45328dcae5307ca9529e1735acd14a3955 Mon Sep 17 00:00:00 2001 From: zielvna Date: Wed, 6 Nov 2024 12:26:38 +0100 Subject: [PATCH 21/30] rename local storage keys of priority fee data --- src/components/Modals/Priority/Priority.tsx | 16 ++++++++-------- src/containers/HeaderWrapper/HeaderWrapper.tsx | 4 ++-- src/store/sagas/positions.ts | 14 +++++++------- src/store/sagas/swap.ts | 4 ++-- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/components/Modals/Priority/Priority.tsx b/src/components/Modals/Priority/Priority.tsx index 8a8c88cc2..0e4928c3b 100644 --- a/src/components/Modals/Priority/Priority.tsx +++ b/src/components/Modals/Priority/Priority.tsx @@ -54,8 +54,8 @@ const Priority: React.FC = ({ } console.log(recentPriorityFee.toString(), recentIsDynamic.toString()) - localStorage.setItem('INVARIANT_MAINNET_PRIORITY_FEE', recentPriorityFee.toString()) - localStorage.setItem('IS_DYNAMIC_FEE', recentIsDynamic.toString()) + localStorage.setItem('INVARIANT_PRIORITY_FEE', recentPriorityFee.toString()) + localStorage.setItem('INVARIANT_IS_DYNAMIC_FEE', recentIsDynamic.toString()) }, []) useEffect(() => { @@ -111,21 +111,21 @@ const Priority: React.FC = ({ if (+inputValue > 0) { setIsDynamic(false) setSelectedFee(+inputValue) - localStorage.setItem('INVARIANT_MAINNET_PRIORITY_FEE', inputValue) + localStorage.setItem('INVARIANT_PRIORITY_FEE', inputValue) } else { if (typeof priorityFeeOptions[selectedIndex].saveValue === 'string') { setIsDynamic(true) setSelectedFee(dynamicFee ?? 0) - localStorage.setItem('INVARIANT_MAINNET_PRIORITY_FEE', (dynamicFee ?? 0).toString()) - localStorage.setItem('IS_DYNAMIC_FEE', 'true') + localStorage.setItem('INVARIANT_PRIORITY_FEE', (dynamicFee ?? 0).toString()) + localStorage.setItem('INVARIANT_IS_DYNAMIC_FEE', 'true') } else { setIsDynamic(false) setSelectedFee(priorityFeeOptions[selectedIndex].saveValue) localStorage.setItem( - 'INVARIANT_MAINNET_PRIORITY_FEE', + 'INVARIANT_PRIORITY_FEE', priorityFeeOptions[selectedIndex].saveValue.toString() ) - localStorage.setItem('IS_DYNAMIC_FEE', 'false') + localStorage.setItem('INVARIANT_IS_DYNAMIC_FEE', 'false') } } @@ -140,7 +140,7 @@ const Priority: React.FC = ({ setDynamicFee(fee) if (isDynamic) { - localStorage.setItem('INVARIANT_MAINNET_PRIORITY_FEE', fee.toString()) + localStorage.setItem('INVARIANT_PRIORITY_FEE', fee.toString()) } } diff --git a/src/containers/HeaderWrapper/HeaderWrapper.tsx b/src/containers/HeaderWrapper/HeaderWrapper.tsx index 423bf3896..6dfbf2e07 100644 --- a/src/containers/HeaderWrapper/HeaderWrapper.tsx +++ b/src/containers/HeaderWrapper/HeaderWrapper.tsx @@ -54,13 +54,13 @@ export const HeaderWrapper: React.FC = () => { }, []) const recentPriorityFee = useMemo(() => { - const lastFee = localStorage.getItem('INVARIANT_MAINNET_PRIORITY_FEE') + const lastFee = localStorage.getItem('INVARIANT_PRIORITY_FEE') return lastFee === null ? '' : lastFee }, []) const recentIsDynamic = useMemo(() => { - const lastIsDynamic = localStorage.getItem('IS_DYNAMIC_FEE') + const lastIsDynamic = localStorage.getItem('INVARIANT_IS_DYNAMIC_FEE') return lastIsDynamic === null ? true : lastIsDynamic === 'true' }, []) diff --git a/src/store/sagas/positions.ts b/src/store/sagas/positions.ts index e605e6eb9..5edc4e2a7 100644 --- a/src/store/sagas/positions.ts +++ b/src/store/sagas/positions.ts @@ -131,7 +131,7 @@ function* handleInitPositionAndPoolWithSOL(action: PayloadAction): Ge combinedTransaction.add(createIx).add(transferIx).add(initIx) - const fee = localStorage.getItem('INVARIANT_MAINNET_PRIORITY_FEE') + const fee = localStorage.getItem('INVARIANT_PRIORITY_FEE') const initPositionTx = yield* call([marketProgram, marketProgram.initPositionTx], { pair: new Pair(data.tokenX, data.tokenY, { @@ -623,7 +623,7 @@ export function* handleInitPosition(action: PayloadAction): Ge let tx: Transaction let poolSigners: Keypair[] = [] - const fee = localStorage.getItem('INVARIANT_MAINNET_PRIORITY_FEE') + const fee = localStorage.getItem('INVARIANT_PRIORITY_FEE') if (action.payload.initPool) { const { transaction, signers } = yield* call( @@ -963,7 +963,7 @@ export function* handleClaimFeeWithSOL(positionIndex: number) { let tx = new Transaction().add(createIx).add(initIx).add(ix).add(unwrapIx) - const fee = localStorage.getItem('INVARIANT_MAINNET_PRIORITY_FEE') + const fee = localStorage.getItem('INVARIANT_PRIORITY_FEE') if (fee) { tx = yield* call([marketProgram, marketProgram.addPriorityFee], solToPriorityFee(+fee), tx) @@ -1125,7 +1125,7 @@ export function* handleClaimFee(action: PayloadAction) { let tx = new Transaction().add(ix) - const fee = localStorage.getItem('INVARIANT_MAINNET_PRIORITY_FEE') + const fee = localStorage.getItem('INVARIANT_PRIORITY_FEE') if (fee) { tx = yield* call([marketProgram, marketProgram.addPriorityFee], solToPriorityFee(+fee), tx) @@ -1324,7 +1324,7 @@ export function* handleClosePositionWithSOL(data: ClosePositionData) { tx = new Transaction().add(createIx).add(initIx).add(ix).add(unwrapIx) } - const fee = localStorage.getItem('INVARIANT_MAINNET_PRIORITY_FEE') + const fee = localStorage.getItem('INVARIANT_PRIORITY_FEE') if (fee) { tx = yield* call([marketProgram, marketProgram.addPriorityFee], solToPriorityFee(+fee), tx) @@ -1517,7 +1517,7 @@ export function* handleClosePosition(action: PayloadAction) { tx = new Transaction().add(ix) } - const fee = localStorage.getItem('INVARIANT_MAINNET_PRIORITY_FEE') + const fee = localStorage.getItem('INVARIANT_PRIORITY_FEE') if (fee) { tx = yield* call([marketProgram, marketProgram.addPriorityFee], solToPriorityFee(+fee), tx) diff --git a/src/store/sagas/swap.ts b/src/store/sagas/swap.ts index 7ece6c1be..8b70718e1 100644 --- a/src/store/sagas/swap.ts +++ b/src/store/sagas/swap.ts @@ -98,7 +98,7 @@ export function* handleSwapWithSOL(): Generator { ? new Transaction().add(createIx).add(transferIx).add(initIx) : new Transaction().add(createIx).add(initIx) - const fee = localStorage.getItem('INVARIANT_MAINNET_PRIORITY_FEE') + const fee = localStorage.getItem('INVARIANT_PRIORITY_FEE') if (fee) { initialTx = yield* call( @@ -423,7 +423,7 @@ export function* handleSwap(): Generator { swapTx.recentBlockhash = blockhash.blockhash swapTx.feePayer = wallet.publicKey - const fee = localStorage.getItem('INVARIANT_MAINNET_PRIORITY_FEE') + const fee = localStorage.getItem('INVARIANT_PRIORITY_FEE') if (fee) { swapTx = yield* call( From e868e5f653dea750c45acd9377fd39c5af3edc07 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Wed, 6 Nov 2024 13:18:40 +0100 Subject: [PATCH 22/30] refactor select tokens from url --- .../DepositSelector.stories.tsx | 3 +- .../DepositSelector/DepositSelector.tsx | 24 +++++- .../NewPosition/NewPosition.stories.tsx | 4 +- src/components/NewPosition/NewPosition.tsx | 63 +++++++------- src/components/Stats/PoolList/PoolList.tsx | 13 ++- .../Stats/PoolListItem/PoolListItem.tsx | 23 ++--- .../Stats.PoolListItem.stories.tsx | 8 +- .../Stats/TokenListItem/TokenListItem.tsx | 8 +- src/components/Swap/Swap.stories.tsx | 3 +- src/components/Swap/Swap.tsx | 36 ++++---- src/containers/EventsHandlers/market.ts | 35 ++++---- .../NewPositionWrapper/NewPositionWrapper.tsx | 86 +++++++++++++------ src/containers/WrappedStats/WrappedStats.tsx | 11 +-- src/containers/WrappedSwap/WrappedSwap.tsx | 46 ++++++++-- src/store/index.ts | 7 +- src/store/reducers/pools.ts | 31 ++++++- src/store/sagas/pool.ts | 29 ++++++- src/store/sagas/stats.ts | 24 +----- src/store/sagas/swap.ts | 17 ---- src/store/sagas/wallet.ts | 5 +- src/store/selectors/pools.ts | 3 + src/utils/utils.ts | 20 ++--- 22 files changed, 312 insertions(+), 187 deletions(-) diff --git a/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx b/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx index d6335a694..81e187e51 100644 --- a/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx +++ b/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx @@ -126,7 +126,8 @@ export const Primary: Story = { walletStatus: Status.Initialized, onConnectWallet: () => {}, onDisconnectWallet: () => {}, - setShouldResetPlot: fn() + setShouldResetPlot: fn(), + canNavigate: true }, render: args => } diff --git a/src/components/NewPosition/DepositSelector/DepositSelector.tsx b/src/components/NewPosition/DepositSelector/DepositSelector.tsx index af549d7fc..90676d6b4 100644 --- a/src/components/NewPosition/DepositSelector/DepositSelector.tsx +++ b/src/components/NewPosition/DepositSelector/DepositSelector.tsx @@ -81,6 +81,7 @@ export interface IDepositSelector { walletStatus: Status onConnectWallet: () => void onDisconnectWallet: () => void + canNavigate: boolean } export const DepositSelector: React.FC = ({ @@ -119,7 +120,8 @@ export const DepositSelector: React.FC = ({ walletStatus, onConnectWallet, onDisconnectWallet, - solBalance + solBalance, + canNavigate }) => { const { classes } = useStyles() @@ -165,6 +167,26 @@ export const DepositSelector: React.FC = ({ setIsLoaded(true) }, [tokens]) + const [wasRunTokenA, setWasRunTokenA] = useState(false) + const [wasRunTokenB, setWasRunTokenB] = useState(false) + + useEffect(() => { + if (canNavigate) { + const tokenA = tokens[tickerToAddress(network, initialTokenFrom)] + + if (!wasRunTokenA && !!tokenA) { + setTokenA(tokenA.assetAddress) + setWasRunTokenA(true) + } + + const tokenB = tokens[tickerToAddress(network, initialTokenTo)] + if (!wasRunTokenB && !!tokenB) { + setTokenB(tokenB.assetAddress) + setWasRunTokenB(true) + } + } + }, [wasRunTokenA, wasRunTokenB, canNavigate, tokens.length]) + const getButtonMessage = useCallback(() => { if (tokenA === null || tokenB === null) { return 'Select tokens' diff --git a/src/components/NewPosition/NewPosition.stories.tsx b/src/components/NewPosition/NewPosition.stories.tsx index 0a9aba9bb..49b7253f3 100644 --- a/src/components/NewPosition/NewPosition.stories.tsx +++ b/src/components/NewPosition/NewPosition.stories.tsx @@ -115,7 +115,8 @@ export const Primary: Story = { globalPrice: 1000000, noConnectedBlockerProps: { onConnect: fn() - } + }, + canNavigate: true }, render: () => { return ( @@ -181,6 +182,7 @@ export const Primary: Story = { noConnectedBlockerProps={{ onConnect: fn() }} + canNavigate={true} /> ) } diff --git a/src/components/NewPosition/NewPosition.tsx b/src/components/NewPosition/NewPosition.tsx index baf24a7ca..44b29cb4e 100644 --- a/src/components/NewPosition/NewPosition.tsx +++ b/src/components/NewPosition/NewPosition.tsx @@ -124,6 +124,7 @@ export interface INewPosition { walletStatus: Status onConnectWallet: () => void onDisconnectWallet: () => void + canNavigate: boolean } export const NewPosition: React.FC = ({ @@ -182,7 +183,8 @@ export const NewPosition: React.FC = ({ solBalance, walletStatus, onConnectWallet, - onDisconnectWallet + onDisconnectWallet, + canNavigate }) => { const { classes } = useStyles() const navigate = useNavigate() @@ -368,11 +370,11 @@ export const NewPosition: React.FC = ({ const bestTierIndex = tokenA === null || tokenB === null ? undefined - : (bestTiers.find( + : bestTiers.find( tier => (tier.tokenX.equals(tokenA) && tier.tokenY.equals(tokenB)) || (tier.tokenX.equals(tokenB) && tier.tokenY.equals(tokenA)) - )?.bestTierIndex ?? undefined) + )?.bestTierIndex ?? undefined const getMinSliderIndex = () => { let minimumSliderIndex = 0 @@ -444,32 +446,34 @@ export const NewPosition: React.FC = ({ } const updatePath = (address1: PublicKey | null, address2: PublicKey | null, fee: number) => { - const parsedFee = parseFeeToPathFee(+ALL_FEE_TIERS_DATA[fee].tier.fee) - - if (address1 != null && address2 != null) { - const token1Symbol = addressToTicker( - network, - tokens[address1.toString()].assetAddress.toString() - ) - const token2Symbol = addressToTicker( - network, - tokens[address2.toString()].assetAddress.toString() - ) - navigate(`/newPosition/${token1Symbol}/${token2Symbol}/${parsedFee}`, { replace: true }) - } else if (address1 != null) { - const tokenSymbol = addressToTicker( - network, - tokens[address1.toString()].assetAddress.toString() - ) - navigate(`/newPosition/${tokenSymbol}/${parsedFee}`, { replace: true }) - } else if (address2 != null) { - const tokenSymbol = addressToTicker( - network, - tokens[address2.toString()].assetAddress.toString() - ) - navigate(`/newPosition/${tokenSymbol}/${parsedFee}`, { replace: true }) - } else if (fee != null) { - navigate(`/newPosition/${parsedFee}`, { replace: true }) + if (canNavigate) { + const parsedFee = parseFeeToPathFee(+ALL_FEE_TIERS_DATA[fee].tier.fee) + + if (address1 != null && address2 != null) { + const token1Symbol = addressToTicker( + network, + tokens[address1.toString()].assetAddress.toString() + ) + const token2Symbol = addressToTicker( + network, + tokens[address2.toString()].assetAddress.toString() + ) + navigate(`/newPosition/${token1Symbol}/${token2Symbol}/${parsedFee}`, { replace: true }) + } else if (address1 != null) { + const tokenSymbol = addressToTicker( + network, + tokens[address1.toString()].assetAddress.toString() + ) + navigate(`/newPosition/${tokenSymbol}/${parsedFee}`, { replace: true }) + } else if (address2 != null) { + const tokenSymbol = addressToTicker( + network, + tokens[address2.toString()].assetAddress.toString() + ) + navigate(`/newPosition/${tokenSymbol}/${parsedFee}`, { replace: true }) + } else if (fee != null) { + navigate(`/newPosition/${parsedFee}`, { replace: true }) + } } } @@ -723,6 +727,7 @@ export const NewPosition: React.FC = ({ onConnectWallet={onConnectWallet} onDisconnectWallet={onDisconnectWallet} setShouldResetPlot={setShouldResetPlot} + canNavigate={canNavigate} /> diff --git a/src/components/Stats/PoolList/PoolList.tsx b/src/components/Stats/PoolList/PoolList.tsx index 2c90bdce3..08f96ab37 100644 --- a/src/components/Stats/PoolList/PoolList.tsx +++ b/src/components/Stats/PoolList/PoolList.tsx @@ -15,6 +15,8 @@ interface PoolListInterface { volume: number TVL: number fee: number + addressFrom: string + addressTo: string apy: number apyData: { fees: number @@ -79,7 +81,12 @@ const PoolList: React.FC = ({ data, network }) => { return ( - + {paginator(page).map((element, index) => ( = ({ data, network }) => { hideBottomLine={pages === 1 && index + 1 === data.length} apyData={element.apyData} key={index} - // addressFrom={element.addressFrom} - // addressTo={element.addressTo} + addressFrom={element.addressFrom} + addressTo={element.addressTo} network={network} isUnknownFrom={element.isUnknownFrom} isUnknownTo={element.isUnknownTo} diff --git a/src/components/Stats/PoolListItem/PoolListItem.tsx b/src/components/Stats/PoolListItem/PoolListItem.tsx index 2380a016d..6dbb03a7d 100644 --- a/src/components/Stats/PoolListItem/PoolListItem.tsx +++ b/src/components/Stats/PoolListItem/PoolListItem.tsx @@ -8,7 +8,7 @@ import { useNavigate } from 'react-router-dom' import icons from '@static/icons' import { NetworkType, SortTypePoolList } from '@store/consts/static' -import { parseFeeToPathFee } from '@utils/utils' +import { addressToTicker, parseFeeToPathFee, shortenAddress } from '@utils/utils' import { formatNumber } from '@utils/utils' import { DECIMAL } from '@invariant-labs/sdk/lib/utils' import { TooltipHover } from '@components/TooltipHover/TooltipHover' @@ -28,7 +28,7 @@ interface IProps { hideBottomLine?: boolean addressFrom?: string addressTo?: string - network?: NetworkType + network: NetworkType apy?: number apyData?: { fees: number @@ -52,9 +52,9 @@ const PoolListItem: React.FC = ({ sortType, onSort, hideBottomLine = false, - // addressFrom, - // addressTo, - // network + addressFrom, + addressTo, + network, // apy = 0, // apyData = { // fees: 0, @@ -71,16 +71,17 @@ const PoolListItem: React.FC = ({ const handleOpenPosition = () => { navigate( - `/newPosition/${symbolFrom ?? ''}/${symbolTo ?? ''}/${parseFeeToPathFee( - Math.round(fee * 10 ** (DECIMAL - 2)) - )}` + `/newPosition/${addressToTicker(network, addressFrom ?? '')}/${addressToTicker(network, addressTo ?? '')}/${parseFeeToPathFee(Math.round(fee * 10 ** (DECIMAL - 2)))}`, + { state: { referer: 'stats' } } ) } const handleOpenSwap = () => { - navigate(`/exchange/${symbolFrom ?? ''}/${symbolTo ?? ''}`) + navigate( + `/exchange/${addressToTicker(network, addressFrom ?? '')}/${addressToTicker(network, addressTo ?? '')}`, + { state: { referer: 'stats' } } + ) } - return ( {displayType === 'token' ? ( @@ -104,7 +105,7 @@ const PoolListItem: React.FC = ({ )} - {symbolFrom}/{symbolTo} + {shortenAddress(symbolFrom ?? '')}/{shortenAddress(symbolTo ?? '')} diff --git a/src/components/Stats/PoolListItem/Stats.PoolListItem.stories.tsx b/src/components/Stats/PoolListItem/Stats.PoolListItem.stories.tsx index 27f22e92b..d949f75f6 100644 --- a/src/components/Stats/PoolListItem/Stats.PoolListItem.stories.tsx +++ b/src/components/Stats/PoolListItem/Stats.PoolListItem.stories.tsx @@ -4,7 +4,7 @@ import PoolListItem from './PoolListItem' import { store } from '@store/index' import { Provider } from 'react-redux' import { fn } from '@storybook/test' -import { SortTypePoolList } from '@store/consts/static' +import { NetworkType, SortTypePoolList } from '@store/consts/static' const meta = { title: 'Stats/PoolListItem', @@ -29,7 +29,8 @@ export const Header: Story = { args: { displayType: 'header', onSort: fn(), - sortType: SortTypePoolList.TVL_DESC + sortType: SortTypePoolList.TVL_DESC, + network: NetworkType.Mainnet } } @@ -46,6 +47,7 @@ export const Token: Story = { fee: 0.3, volume: 1000000000, TVL: 500000000, - hideBottomLine: false + hideBottomLine: false, + network: NetworkType.Mainnet } } diff --git a/src/components/Stats/TokenListItem/TokenListItem.tsx b/src/components/Stats/TokenListItem/TokenListItem.tsx index 0b634b34e..3cf66f20a 100644 --- a/src/components/Stats/TokenListItem/TokenListItem.tsx +++ b/src/components/Stats/TokenListItem/TokenListItem.tsx @@ -4,7 +4,7 @@ import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown' import ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp' import { useStyles } from './style' import { Box, Grid, Typography, useMediaQuery } from '@mui/material' -import { formatNumber } from '@utils/utils' +import { formatNumber, shortenAddress } from '@utils/utils' import { SortTypeTokenList } from '@store/consts/static' import icons from '@static/icons' @@ -61,8 +61,10 @@ const TokenListItem: React.FC = ({ )} - {hideName ? symbol : name} - {!hideName && {` (${symbol})`}} + {hideName ? shortenAddress(symbol) : name} + {!hideName && ( + {` (${shortenAddress(symbol)})`} + )} {`~$${formatNumber(price)}`} diff --git a/src/components/Swap/Swap.stories.tsx b/src/components/Swap/Swap.stories.tsx index 6bcbedec5..2caf28f81 100644 --- a/src/components/Swap/Swap.stories.tsx +++ b/src/components/Swap/Swap.stories.tsx @@ -103,7 +103,8 @@ export const Primary: Story = { priceFromLoading: false, priceToLoading: false, deleteTimeoutError: fn(), - isTimeoutError: false + isTimeoutError: false, + canNavigate: true }, render: args => { return diff --git a/src/components/Swap/Swap.tsx b/src/components/Swap/Swap.tsx index adfd4fa82..66c5208bc 100644 --- a/src/components/Swap/Swap.tsx +++ b/src/components/Swap/Swap.tsx @@ -108,6 +108,7 @@ export interface ISwap { // wrappedETHAccountExist: boolean isTimeoutError: boolean deleteTimeoutError: () => void + canNavigate: boolean } export const Swap: React.FC = ({ @@ -143,7 +144,8 @@ export const Swap: React.FC = ({ // unwrapWETH, // wrappedETHAccountExist, isTimeoutError, - deleteTimeoutError + deleteTimeoutError, + canNavigate }) => { const { classes } = useStyles() enum inputTarget { @@ -207,30 +209,22 @@ export const Swap: React.FC = ({ }, [isTimeoutError]) useEffect(() => { - navigate( - `/exchange/${ - tokenFrom !== null - ? addressToTicker(network, tokens[tokenFrom.toString()].assetAddress.toString()) - : '-' - }/${ - tokenTo !== null - ? addressToTicker(network, tokens[tokenTo.toString()].assetAddress.toString()) - : '-' - }`, - { - replace: true - } - ) - }, [tokenFrom, tokenTo]) + if (canNavigate) { + navigate( + `/exchange/${tokenFrom !== null ? addressToTicker(network, tokenFrom.toString()) : '-'}/${tokenTo !== null ? addressToTicker(network, tokenTo.toString()) : '-'}`, + { + replace: true + } + ) + } + }, [tokenTo, tokenFrom]) useEffect(() => { - if (Object.keys(tokens).length && tokenFrom === null && tokenTo === null) { - const firstCommonToken = commonTokens[0] || null - - setTokenFrom(initialTokenFrom !== null ? initialTokenFrom : firstCommonToken) + if (!!Object.keys(tokens).length && tokenFrom === null && tokenTo === null && canNavigate) { + setTokenFrom(initialTokenFrom) setTokenTo(initialTokenTo) } - }, [Object.keys(tokens).length]) + }, [tokens.length, canNavigate, initialTokenFrom, initialTokenTo]) useEffect(() => { onSetPair(tokenFrom, tokenTo) diff --git a/src/containers/EventsHandlers/market.ts b/src/containers/EventsHandlers/market.ts index c611c5604..d7f671f52 100644 --- a/src/containers/EventsHandlers/market.ts +++ b/src/containers/EventsHandlers/market.ts @@ -144,25 +144,22 @@ const MarketEvents = () => { return } poolTicksArray[address].forEach(singleTick => { - marketProgram - .onTickChange( - new Pair(pool.tokenX, pool.tokenY, { - fee: pool.fee.v, - tickSpacing: pool.tickSpacing - }), - singleTick.index, - tickObject => { - dispatch( - actions.updateTicks({ - address: address, - index: singleTick.index, - tick: tickObject - }) - ) - } - ) - .then(() => {}) - .catch(() => {}) + marketProgram.onTickChange( + new Pair(pool.tokenX, pool.tokenY, { + fee: pool.fee.v, + tickSpacing: pool.tickSpacing + }), + singleTick.index, + tickObject => { + dispatch( + actions.updateTicks({ + address: address, + index: singleTick.index, + tick: tickObject + }) + ) + } + ) }) }) } diff --git a/src/containers/NewPositionWrapper/NewPositionWrapper.tsx b/src/containers/NewPositionWrapper/NewPositionWrapper.tsx index a3c2e28d8..69f343133 100644 --- a/src/containers/NewPositionWrapper/NewPositionWrapper.tsx +++ b/src/containers/NewPositionWrapper/NewPositionWrapper.tsx @@ -27,6 +27,7 @@ import { actions as walletActions } from '@store/reducers/solanaWallet' import { network, timeoutError } from '@store/selectors/solanaConnection' import { isLoadingLatestPoolsForTransaction, + isLoadingPathTokens, isLoadingTicksAndTickMaps, isLoadingTokens, poolsArraySortedByFees, @@ -38,7 +39,7 @@ import { openWalletSelectorModal } from '@utils/web3/selector' import { VariantType } from 'notistack' import React, { useEffect, useMemo, useRef, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' -import { useNavigate } from 'react-router-dom' +import { useLocation, useNavigate } from 'react-router-dom' import { getCurrentSolanaConnection, networkTypetoProgramNetwork } from '@utils/web3/connection' import { PublicKey } from '@solana/web3.js' import { Decimal } from '@invariant-labs/sdk/lib/market' @@ -80,6 +81,10 @@ export const NewPositionWrapper: React.FC = ({ const isTimeoutError = useSelector(timeoutError) const isCurrentlyLoadingTokens = useSelector(isLoadingTokens) + const isPathTokensLoading = useSelector(isLoadingPathTokens) + const { state } = useLocation() + const [block, setBlock] = useState(state?.referer === 'stats') + const [poolIndex, setPoolIndex] = useState(null) const [progress, setProgress] = useState('none') @@ -96,32 +101,64 @@ export const NewPositionWrapper: React.FC = ({ const navigate = useNavigate() useEffect(() => { - const tokenFromAddress = tickerToAddress(currentNetwork, initialTokenFrom) - const tokenToAddress = tickerToAddress(currentNetwork, initialTokenTo) + const pathTokens: string[] = [] - const tokenFromIndex = Object.values(tokens).findIndex( - token => token.assetAddress.toString() === tokenFromAddress - ) + if (initialTokenFrom !== '' && !tokens[tickerToAddress(currentNetwork, initialTokenFrom)]) { + pathTokens.push(initialTokenFrom) + } - const tokenToIndex = Object.values(tokens).findIndex( - token => token.assetAddress.toString() === tokenToAddress - ) + if (initialTokenTo !== '' && !tokens[tickerToAddress(currentNetwork, initialTokenTo)]) { + pathTokens.push(initialTokenTo) + } - if ( - tokenFromAddress !== null && - tokenFromIndex !== -1 && - (tokenToAddress === null || tokenToIndex === -1) - ) { - navigate(`/newPosition/${initialTokenFrom}/${initialFee}`) - } else if ( - tokenFromAddress !== null && - tokenFromIndex !== -1 && - tokenToAddress !== null && - tokenToIndex !== -1 - ) { - navigate(`/newPosition/${initialTokenFrom}/${initialTokenTo}/${initialFee}`) - } else { - navigate(`/newPosition/${initialFee}`) + if (pathTokens.length) { + dispatch(poolsActions.getPathTokens(pathTokens)) + } + + setBlock(false) + }, [tokens]) + + const canNavigate = connection !== null && !isPathTokensLoading && !block + + useEffect(() => { + if (canNavigate) { + const tokenA = tokens[initialTokenFrom] + if (tokenA?.assetAddress) { + setTokenA(tokenA.assetAddress) + } + + const tokenB = tokens[initialTokenTo] + if (tokenB?.assetAddress) { + setTokenB(tokenB.assetAddress) + } + } + }, [canNavigate]) + + useEffect(() => { + if (canNavigate) { + const tokenFromAddress = tickerToAddress(currentNetwork, initialTokenFrom) + const tokenToAddress = tickerToAddress(currentNetwork, initialTokenTo) + + const tokenFrom = tokens[tokenFromAddress] + + const tokenTo = tokens[tokenToAddress] + + if ( + tokenFromAddress !== null && + tokenFrom?.assetAddress && + (tokenToAddress === null || !tokenTo?.assetAddress) + ) { + navigate(`/newPosition/${initialTokenFrom}/${initialFee}`) + } else if ( + tokenFromAddress !== null && + tokenFrom?.assetAddress && + tokenToAddress !== null && + tokenTo?.assetAddress + ) { + navigate(`/newPosition/${initialTokenFrom}/${initialTokenTo}/${initialFee}`) + } else { + navigate(`/newPosition/${initialFee}`) + } } }, [tokens]) @@ -795,6 +832,7 @@ export const NewPositionWrapper: React.FC = ({ onSlippageChange={onSlippageChange} initialSlippage={initialSlippage} globalPrice={globalPrice} + canNavigate={canNavigate} /> ) } diff --git a/src/containers/WrappedStats/WrappedStats.tsx b/src/containers/WrappedStats/WrappedStats.tsx index 0f289b88a..a8cdc58c1 100644 --- a/src/containers/WrappedStats/WrappedStats.tsx +++ b/src/containers/WrappedStats/WrappedStats.tsx @@ -24,7 +24,6 @@ import PoolList from '@components/Stats/PoolList/PoolList' import icons from '@static/icons' import { farms } from '@store/selectors/farms' import { actions as farmsActions } from '@store/reducers/farms' -import { shortenAddress } from '@utils/utils' export const WrappedStats: React.FC = () => { const { classes } = useStyles() @@ -139,17 +138,15 @@ export const WrappedStats: React.FC = () => { Top pools ({ - symbolFrom: - poolData.tokenXDetails?.symbol ?? shortenAddress(poolData.tokenX.toString()), - symbolTo: - poolData.tokenYDetails?.symbol ?? shortenAddress(poolData.tokenY.toString()), + symbolFrom: poolData.tokenXDetails?.symbol ?? poolData.tokenX.toString(), + symbolTo: poolData.tokenYDetails?.symbol ?? poolData.tokenY.toString(), iconFrom: poolData.tokenXDetails?.logoURI ?? icons.unknownToken, iconTo: poolData.tokenYDetails?.logoURI ?? icons.unknownToken, volume: poolData.volume24, TVL: poolData.tvl, fee: poolData.fee, - // addressFrom: poolData.tokenX, - // addressTo: poolData.tokenY + addressFrom: poolData.tokenX.toString(), + addressTo: poolData.tokenY.toString(), apy: poolData.apy + (accumulatedSingleTickAPY?.[poolData.poolAddress.toString()] ?? 0), apyData: { diff --git a/src/containers/WrappedSwap/WrappedSwap.tsx b/src/containers/WrappedSwap/WrappedSwap.tsx index 57f06b98a..be10269b6 100644 --- a/src/containers/WrappedSwap/WrappedSwap.tsx +++ b/src/containers/WrappedSwap/WrappedSwap.tsx @@ -1,6 +1,10 @@ import { ProgressState } from '@components/AnimatedButton/AnimatedButton' import { Swap } from '@components/Swap/Swap' -import { commonTokensForNetworks, DEFAULT_SWAP_SLIPPAGE } from '@store/consts/static' +import { + commonTokensForNetworks, + DEFAULT_SWAP_SLIPPAGE, + WRAPPED_SOL_ADDRESS +} from '@store/consts/static' import { actions as poolsActions } from '@store/reducers/pools' import { actions as snackbarsActions } from '@store/reducers/snackbars' import { actions as walletActions } from '@store/reducers/solanaWallet' @@ -8,6 +12,7 @@ import { actions as connectionActions } from '@store/reducers/solanaConnection' import { actions } from '@store/reducers/swap' import { isLoadingLatestPoolsForTransaction, + isLoadingPathTokens, poolsArraySortedByFees, poolTicks, tickMaps @@ -28,6 +33,7 @@ import { TokenPriceData } from '@store/consts/types' import { openWalletSelectorModal } from '@utils/web3/selector' import { getCurrentSolanaConnection } from '@utils/web3/connection' import { VariantType } from 'notistack' +import { useLocation } from 'react-router-dom' type Props = { initialTokenFrom: string @@ -55,6 +61,9 @@ export const WrappedSwap = ({ initialTokenFrom, initialTokenTo }: Props) => { const [tokenTo, setTokenTo] = useState(null) const solBalance = useSelector(balance) const isTimeoutError = useSelector(timeoutError) + const isPathTokensLoading = useSelector(isLoadingPathTokens) + const { state } = useLocation() + const [block, setBlock] = useState(state?.referer === 'stats') useEffect(() => { let timeoutId1: NodeJS.Timeout @@ -92,15 +101,37 @@ export const WrappedSwap = ({ initialTokenFrom, initialTokenTo }: Props) => { const lastTokenFrom = tickerToAddress(networkType, initialTokenFrom) && initialTokenFrom !== '-' ? tickerToAddress(networkType, initialTokenFrom) - : localStorage.getItem(`INVARIANT_LAST_TOKEN_FROM_${networkType}`) + : localStorage.getItem(`INVARIANT_LAST_TOKEN_FROM_${networkType}`) ?? WRAPPED_SOL_ADDRESS const lastTokenTo = tickerToAddress(networkType, initialTokenTo) && initialTokenTo !== '-' ? tickerToAddress(networkType, initialTokenTo) - : localStorage.getItem(`INVARIANT_LAST_TOKEN_TO_${networkType}`) + : localStorage.getItem(`INVARIANT_LAST_TOKEN_TO_${networkType}`) ?? '' + + const initTokenFrom = + lastTokenFrom === null ? null : tokensDict[lastTokenFrom]?.assetAddress ?? null + + const initTokenTo = lastTokenTo === null ? null : tokensDict[lastTokenTo]?.assetAddress ?? null + + useEffect(() => { + const tokens: string[] = [] + + if (initTokenFrom === null && lastTokenFrom && !tokensDict[lastTokenFrom]) { + tokens.push(lastTokenFrom) + } + + if (initTokenTo === null && lastTokenTo && !tokensDict[lastTokenTo]) { + tokens.push(lastTokenTo) + } + + if (tokens.length) { + dispatch(poolsActions.getPathTokens(tokens)) + } + + setBlock(false) + }, [tokensDict]) - const initTokenFrom = lastTokenFrom ? new PublicKey(lastTokenFrom) : null - const initTokenTo = lastTokenTo ? new PublicKey(lastTokenTo) : null + const canNavigate = connection !== null && !isPathTokensLoading && !block const addTokenHandler = (address: string) => { if (connection !== null && !tokensDict[address]) { @@ -155,7 +186,7 @@ export const WrappedSwap = ({ initialTokenFrom, initialTokenTo }: Props) => { return } - const id = tokensDict[tokenFrom.toString()].assetAddress.toString() ?? '' + const id = tokensDict[tokenFrom.toString()]?.assetAddress.toString() ?? '' if (id) { setPriceFromLoading(true) getJupTokenPrice(id) @@ -175,7 +206,7 @@ export const WrappedSwap = ({ initialTokenFrom, initialTokenTo }: Props) => { return } - const id = tokensDict[tokenTo.toString()].assetAddress.toString() ?? '' + const id = tokensDict[tokenTo.toString()]?.assetAddress.toString() ?? '' if (id) { setPriceToLoading(true) getJupTokenPrice(id) @@ -340,6 +371,7 @@ export const WrappedSwap = ({ initialTokenFrom, initialTokenTo }: Props) => { deleteTimeoutError={() => { dispatch(connectionActions.setTimeoutError(false)) }} + canNavigate={canNavigate} /> ) } diff --git a/src/store/index.ts b/src/store/index.ts index eba3d318c..53c7086ac 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -42,7 +42,12 @@ const configureAppStore = (initialState = {}) => { serializableCheck: { isSerializable, getEntries, - ignoredActions: ['positions/closePosition', 'pools/setTickMaps', 'pools/getPoolData'] + ignoredActions: [ + 'positions/closePosition', + 'pools/setTickMaps', + 'pools/getPoolData', + 'solanaConnection/handleRpcError' + ] } }).concat(middleware), preloadedState: initialState, diff --git a/src/store/reducers/pools.ts b/src/store/reducers/pools.ts index 97f7bf46e..693cc0b53 100644 --- a/src/store/reducers/pools.ts +++ b/src/store/reducers/pools.ts @@ -6,6 +6,8 @@ import { PublicKey } from '@solana/web3.js' import * as R from 'remeda' import { Range } from '@invariant-labs/sdk/lib/utils' import { PayloadType, Token } from '@store/consts/types' +import { NetworkType } from '@store/consts/static' +import { getNetworkTokensList } from '@utils/utils' export interface PoolWithAddress extends PoolStructure { address: PublicKey @@ -18,6 +20,7 @@ export interface IPoolsStore { isLoadingLatestPoolsForTransaction: boolean isLoadingTicksAndTickMaps: boolean isLoadingTokens: boolean + isLoadingPathTokens: boolean isLoadingTokensError: boolean tickMaps: { [key in string]: Tickmap } volumeRanges: Record @@ -50,13 +53,18 @@ export interface UpdateTickmap { bitmap: number[] } +const network = + NetworkType[localStorage.getItem('INVARIANT_NETWORK_ECLIPSE') as keyof typeof NetworkType] ?? + NetworkType.Mainnet + export const defaultState: IPoolsStore = { - tokens: {}, + tokens: { ...getNetworkTokensList(network) }, pools: {}, poolTicks: {}, isLoadingLatestPoolsForTransaction: false, isLoadingTicksAndTickMaps: false, isLoadingTokens: false, + isLoadingPathTokens: false, isLoadingTokensError: false, tickMaps: {}, volumeRanges: {} @@ -95,6 +103,15 @@ const poolsSlice = createSlice({ state.isLoadingTokens = false return state }, + addPathTokens(state, action: PayloadAction>) { + for (const token in action.payload) { + if (!state.tokens[token]) { + state.tokens[token] = action.payload[token] + } + } + state.isLoadingPathTokens = false + return state + }, setVolumeRanges(state, action: PayloadAction>) { state.volumeRanges = action.payload return state @@ -161,6 +178,18 @@ const poolsSlice = createSlice({ }, updateTickmap(state, action: PayloadAction) { state.tickMaps[action.payload.address].bitmap = action.payload.bitmap + }, + getTokens(state, _action: PayloadAction) { + state.isLoadingTokens = true + return state + }, + getPathTokens(state, _action: PayloadAction) { + state.isLoadingPathTokens = true + return state + }, + setTokensError(state, action: PayloadAction) { + state.isLoadingTokensError = action.payload + return state } } }) diff --git a/src/store/sagas/pool.ts b/src/store/sagas/pool.ts index 28b126c85..c273ac4fe 100644 --- a/src/store/sagas/pool.ts +++ b/src/store/sagas/pool.ts @@ -92,6 +92,24 @@ export function* fetchPoolsDataForList(action: PayloadAction) ) } +export function* handleGetPathTokens(action: PayloadAction) { + const tokens = action.payload + console.log('tokens', tokens) + const connection = yield* getConnection() + + try { + const tokensData = yield* call( + getFullNewTokensData, + tokens.map(token => new PublicKey(token)), + connection + ) + + yield* put(actions.addPathTokens(tokensData)) + } catch (e) { + yield* put(actions.setTokensError(true)) + } +} + export function* getPoolsDataForListHandler(): Generator { yield* takeEvery(actions.getPoolsDataForList, fetchPoolsDataForList) } @@ -104,8 +122,17 @@ export function* getPoolDataHandler(): Generator { yield* takeLatest(actions.getPoolData, fetchPoolData) } +export function* getPathTokensHandler(): Generator { + yield* takeLatest(actions.getPathTokens, handleGetPathTokens) +} + export function* poolsSaga(): Generator { yield all( - [getPoolDataHandler, getAllPoolsForPairDataHandler, getPoolsDataForListHandler].map(spawn) + [ + getPoolDataHandler, + getAllPoolsForPairDataHandler, + getPoolsDataForListHandler, + getPathTokensHandler + ].map(spawn) ) } diff --git a/src/store/sagas/stats.ts b/src/store/sagas/stats.ts index bf7a161dd..ba9009814 100644 --- a/src/store/sagas/stats.ts +++ b/src/store/sagas/stats.ts @@ -1,15 +1,12 @@ import { actions } from '@store/reducers/stats' import { call, put, select, takeEvery } from 'typed-redux-saga' import { network } from '@store/selectors/solanaConnection' -import { getFullNewTokensData, getFullSnap } from '@utils/utils' -import { tokens } from '@store/selectors/pools' +import { getFullSnap } from '@utils/utils' import { PublicKey } from '@solana/web3.js' -import { actions as poolsActions } from '@store/reducers/pools' -import { getConnection, handleRpcError } from './connection' +import { handleRpcError } from './connection' export function* getStats(): Generator { try { - const connection = yield* call(getConnection) const currentNetwork = yield* select(network) const fullSnap = yield* call(getFullSnap, currentNetwork.toLowerCase()) @@ -28,23 +25,6 @@ export function* getStats(): Generator { } yield* put(actions.setCurrentStats(parsedFullSnap)) - - const allTokens = yield* select(tokens) - - const unknownTokens = new Set() - - parsedFullSnap.poolsData.forEach(pool => { - if (!allTokens[pool.tokenX.toString()]) { - unknownTokens.add(pool.tokenX) - } - - if (!allTokens[pool.tokenY.toString()]) { - unknownTokens.add(pool.tokenY) - } - }) - - const newTokens = yield* call(getFullNewTokensData, [...unknownTokens], connection) - yield* put(poolsActions.addTokens(newTokens)) } catch (error) { console.log(error) yield* call(handleRpcError, (error as Error).message) diff --git a/src/store/sagas/swap.ts b/src/store/sagas/swap.ts index 60c60a42e..194dcde65 100644 --- a/src/store/sagas/swap.ts +++ b/src/store/sagas/swap.ts @@ -56,23 +56,6 @@ export function* handleSwapWithSOL(): Generator { (tokenFrom.equals(pool.tokenX) && tokenTo.equals(pool.tokenY)) || (tokenFrom.equals(pool.tokenY) && tokenTo.equals(pool.tokenX)) ) - console.log('allTokens', allTokens) - console.log('allPools', allPools) - console.log('slippage', slippage) - console.log('tokenFrom', tokenFrom) - console.log('tokenTo', tokenTo) - console.log('amountIn', amountIn) - console.log('estimatedPriceAfterSwap', estimatedPriceAfterSwap) - console.log('poolIndex', poolIndex) - console.log('byAmountIn', byAmountIn) - console.log('amountOut', amountOut) - console.log('wallet', wallet) - console.log('tokensAccounts', tokensAccounts) - console.log('connection', connection) - console.log('networkType', networkType) - console.log('rpc', rpc) - console.log('marketProgram', marketProgram) - console.log('swapPool', swapPool) if (!swapPool) { return diff --git a/src/store/sagas/wallet.ts b/src/store/sagas/wallet.ts index d4db353b6..2ab3fde6b 100644 --- a/src/store/sagas/wallet.ts +++ b/src/store/sagas/wallet.ts @@ -117,7 +117,7 @@ export function* getToken(tokenAddress: PublicKey): SagaGenerator { export function* handleAirdrop(): Generator { const walletStatus = yield* select(status) - console.log('walletStatus', walletStatus) + if (walletStatus !== Status.Initialized) { yield put( snackbarsActions.add({ @@ -142,9 +142,6 @@ export function* handleAirdrop(): Generator { const connection = yield* call(getConnection) const networkType = yield* select(network) const wallet = yield* call(getWallet) - console.log('connectipon', connection) - console.log('wallet', wallet) - console.log('networkType', networkType) let balance = 0 try { diff --git a/src/store/selectors/pools.ts b/src/store/selectors/pools.ts index 87e6ed49e..723951324 100644 --- a/src/store/selectors/pools.ts +++ b/src/store/selectors/pools.ts @@ -13,6 +13,7 @@ export const { volumeRanges, isLoadingTicksAndTickMaps, isLoadingTokens, + isLoadingPathTokens, isLoadingTokensError } = keySelectors(store, [ 'pools', @@ -23,6 +24,7 @@ export const { 'volumeRanges', 'isLoadingTicksAndTickMaps', 'isLoadingTokens', + 'isLoadingPathTokens', 'isLoadingTokensError' ]) @@ -41,6 +43,7 @@ export const poolsSelectors = { volumeRanges, isLoadingTicksAndTickMaps, isLoadingTokens, + isLoadingPathTokens, isLoadingTokensError } diff --git a/src/utils/utils.ts b/src/utils/utils.ts index df43f7313..325196865 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -85,7 +85,7 @@ export const convertBalanceToBN = (amount: string, decimals: number): BN => { if (balanceString.length !== 2) { return new BN(balanceString[0] + '0'.repeat(decimals)) } - // console.log(balanceString[1].length) + if (balanceString[1].length <= decimals) { return new BN( balanceString[0] + balanceString[1] + '0'.repeat(decimals - balanceString[1].length) @@ -1115,14 +1115,14 @@ export const getFullNewTokensData = async ( const tokens: Record = {} - await Promise.allSettled(promises).then(results => - results.forEach((result, index) => { - tokens[addresses[index].toString()] = generateUnknownTokenDataObject( - addresses[index], - result.status === 'fulfilled' ? result.value.decimals : 6 - ) - }) - ) + const results = await Promise.allSettled(promises) + + for (const [index, result] of results.entries()) { + tokens[addresses[index].toString()] = generateUnknownTokenDataObject( + addresses[index], + result.status === 'fulfilled' ? result.value.decimals : 6 + ) + } return tokens } @@ -1546,4 +1546,4 @@ export const parsePathFeeToFeeString = (pathFee: string): string => { } export const shortenAddress = (address: string, chars = 4) => - `${address.slice(0, chars)}...${address.slice(-chars)}` + address.length > 8 ? `${address.slice(0, chars)}...${address.slice(-chars)}` : address From 5409646944b68589ff6289c88ac5c23b93d20af9 Mon Sep 17 00:00:00 2001 From: zielvna Date: Wed, 6 Nov 2024 13:18:52 +0100 Subject: [PATCH 23/30] update stats apy text when apy is zero --- .../Stats/PoolListItem/PoolListItem.tsx | 70 ++++++++++--------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/src/components/Stats/PoolListItem/PoolListItem.tsx b/src/components/Stats/PoolListItem/PoolListItem.tsx index 039bc0b03..a97647865 100644 --- a/src/components/Stats/PoolListItem/PoolListItem.tsx +++ b/src/components/Stats/PoolListItem/PoolListItem.tsx @@ -87,40 +87,42 @@ const PoolListItem: React.FC = ({ {!isXs ? ( - {`${apy > 1000 ? '>1000' : apy.toFixed(2)}%`} - - Pool APY - - Pool fees: {`${apyData.fees > 1000 ? '>1000' : apyData.fees.toFixed(2)}%`} - {apyData.accumulatedFarmsAvg > 0 ? ( - <> -
+ All farms rewards with single tick position:{' '} - {`${ - apyData.accumulatedFarmsSingleTick > 1000 - ? '>1000' - : apyData.accumulatedFarmsSingleTick.toFixed(2) - }%`} -
- (All farms rewards with average position:{' '} - {`${ - apyData.accumulatedFarmsAvg > 1000 - ? '>1000' - : apyData.accumulatedFarmsAvg.toFixed(2) - }%`} - ) - - ) : null} -
- - } - placement='bottom' - classes={{ - tooltip: classes.liquidityTooltip - }}> - i -
+ {`${apy > 1000 ? '>1000%' : apy === 0 ? '-' : apy.toFixed(2) + '%'}`} + {apy !== 0 && ( + + Pool APY + + Pool fees: {`${apyData.fees > 1000 ? '>1000' : apyData.fees.toFixed(2)}%`} + {apyData.accumulatedFarmsAvg > 0 ? ( + <> +
+ All farms rewards with single tick position:{' '} + {`${ + apyData.accumulatedFarmsSingleTick > 1000 + ? '>1000' + : apyData.accumulatedFarmsSingleTick.toFixed(2) + }%`} +
+ (All farms rewards with average position:{' '} + {`${ + apyData.accumulatedFarmsAvg > 1000 + ? '>1000' + : apyData.accumulatedFarmsAvg.toFixed(2) + }%`} + ) + + ) : null} +
+ + } + placement='bottom' + classes={{ + tooltip: classes.liquidityTooltip + }}> + i +
+ )}
) : null} {fee}% From 3ff9cfe2b6415c35c9967b775f6459b4c304bbbd Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Wed, 6 Nov 2024 13:20:04 +0100 Subject: [PATCH 24/30] trunk format --- .../NewPosition/DepositSelector/DepositSelector.tsx | 8 ++++++-- src/components/NewPosition/NewPosition.tsx | 4 ++-- src/containers/WrappedSwap/WrappedSwap.tsx | 8 ++++---- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/components/NewPosition/DepositSelector/DepositSelector.tsx b/src/components/NewPosition/DepositSelector/DepositSelector.tsx index 90676d6b4..18b46d0be 100644 --- a/src/components/NewPosition/DepositSelector/DepositSelector.tsx +++ b/src/components/NewPosition/DepositSelector/DepositSelector.tsx @@ -383,7 +383,9 @@ export const DepositSelector: React.FC = ({ tokenPrice={priceA} currency={tokenA !== null ? tokens[tokenA.toString()].symbol : null} currencyIconSrc={tokenA !== null ? tokens[tokenA.toString()].logoURI : undefined} - currencyIsUnknown={tokenA !== null ? tokens[tokenA.toString()].isUnknown ?? false : false} + currencyIsUnknown={ + tokenA !== null ? (tokens[tokenA.toString()].isUnknown ?? false) : false + } placeholder='0.0' onMaxClick={() => { if (tokenA === null) { @@ -434,7 +436,9 @@ export const DepositSelector: React.FC = ({ tokenPrice={priceB} currency={tokenB !== null ? tokens[tokenB.toString()].symbol : null} currencyIconSrc={tokenB !== null ? tokens[tokenB.toString()].logoURI : undefined} - currencyIsUnknown={tokenB !== null ? tokens[tokenB.toString()].isUnknown ?? false : false} + currencyIsUnknown={ + tokenB !== null ? (tokens[tokenB.toString()].isUnknown ?? false) : false + } placeholder='0.0' onMaxClick={() => { if (tokenB === null) { diff --git a/src/components/NewPosition/NewPosition.tsx b/src/components/NewPosition/NewPosition.tsx index 44b29cb4e..2f6bc4698 100644 --- a/src/components/NewPosition/NewPosition.tsx +++ b/src/components/NewPosition/NewPosition.tsx @@ -370,11 +370,11 @@ export const NewPosition: React.FC = ({ const bestTierIndex = tokenA === null || tokenB === null ? undefined - : bestTiers.find( + : (bestTiers.find( tier => (tier.tokenX.equals(tokenA) && tier.tokenY.equals(tokenB)) || (tier.tokenX.equals(tokenB) && tier.tokenY.equals(tokenA)) - )?.bestTierIndex ?? undefined + )?.bestTierIndex ?? undefined) const getMinSliderIndex = () => { let minimumSliderIndex = 0 diff --git a/src/containers/WrappedSwap/WrappedSwap.tsx b/src/containers/WrappedSwap/WrappedSwap.tsx index be10269b6..42a593ba7 100644 --- a/src/containers/WrappedSwap/WrappedSwap.tsx +++ b/src/containers/WrappedSwap/WrappedSwap.tsx @@ -101,17 +101,17 @@ export const WrappedSwap = ({ initialTokenFrom, initialTokenTo }: Props) => { const lastTokenFrom = tickerToAddress(networkType, initialTokenFrom) && initialTokenFrom !== '-' ? tickerToAddress(networkType, initialTokenFrom) - : localStorage.getItem(`INVARIANT_LAST_TOKEN_FROM_${networkType}`) ?? WRAPPED_SOL_ADDRESS + : (localStorage.getItem(`INVARIANT_LAST_TOKEN_FROM_${networkType}`) ?? WRAPPED_SOL_ADDRESS) const lastTokenTo = tickerToAddress(networkType, initialTokenTo) && initialTokenTo !== '-' ? tickerToAddress(networkType, initialTokenTo) - : localStorage.getItem(`INVARIANT_LAST_TOKEN_TO_${networkType}`) ?? '' + : (localStorage.getItem(`INVARIANT_LAST_TOKEN_TO_${networkType}`) ?? '') const initTokenFrom = - lastTokenFrom === null ? null : tokensDict[lastTokenFrom]?.assetAddress ?? null + lastTokenFrom === null ? null : (tokensDict[lastTokenFrom]?.assetAddress ?? null) - const initTokenTo = lastTokenTo === null ? null : tokensDict[lastTokenTo]?.assetAddress ?? null + const initTokenTo = lastTokenTo === null ? null : (tokensDict[lastTokenTo]?.assetAddress ?? null) useEffect(() => { const tokens: string[] = [] From 2dcd4ed1692044ed026c00fa663ad6c64c8739dc Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Wed, 6 Nov 2024 14:51:22 +0100 Subject: [PATCH 25/30] add apy to stats --- .trunk/trunk.yaml | 4 +- src/components/Stats/PoolList/PoolList.tsx | 8 ++-- .../Stats/PoolListItem/PoolListItem.tsx | 41 +++++++++---------- src/components/Stats/PoolListItem/style.ts | 6 ++- src/store/consts/static.ts | 6 +-- 5 files changed, 34 insertions(+), 31 deletions(-) diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 8d98dccce..86e119d3e 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -13,13 +13,13 @@ runtimes: lint: enabled: - actionlint@1.7.4 - - checkov@3.2.278 + - checkov@3.2.280 - eslint@8.57.0 - git-diff-check - markdownlint@0.42.0 - oxipng@9.1.2 - prettier@3.3.3 - - trufflehog@3.83.2 + - trufflehog@3.83.3 - yamllint@1.35.1 actions: disabled: diff --git a/src/components/Stats/PoolList/PoolList.tsx b/src/components/Stats/PoolList/PoolList.tsx index 08f96ab37..501597619 100644 --- a/src/components/Stats/PoolList/PoolList.tsx +++ b/src/components/Stats/PoolList/PoolList.tsx @@ -56,10 +56,10 @@ const PoolList: React.FC = ({ data, network }) => { return data.sort((a, b) => (a.TVL === b.TVL ? a.volume - b.volume : a.TVL - b.TVL)) case SortTypePoolList.TVL_DESC: return data.sort((a, b) => (a.TVL === b.TVL ? b.volume - a.volume : b.TVL - a.TVL)) - // case SortType.APY_ASC: - // return data.sort((a, b) => a.apy - b.apy) - // case SortType.APY_DESC: - // return data.sort((a, b) => b.apy - a.apy) + case SortTypePoolList.APY_ASC: + return data.sort((a, b) => a.apy - b.apy) + case SortTypePoolList.APY_DESC: + return data.sort((a, b) => b.apy - a.apy) } }, [data, sortType]) diff --git a/src/components/Stats/PoolListItem/PoolListItem.tsx b/src/components/Stats/PoolListItem/PoolListItem.tsx index 6dbb03a7d..2f052cd84 100644 --- a/src/components/Stats/PoolListItem/PoolListItem.tsx +++ b/src/components/Stats/PoolListItem/PoolListItem.tsx @@ -1,7 +1,7 @@ import React from 'react' import { theme } from '@static/theme' import { useStyles } from './style' -import { Box, Grid, Typography, useMediaQuery } from '@mui/material' +import { Box, Grid, Tooltip, Typography, useMediaQuery } from '@mui/material' import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown' import ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp' import { useNavigate } from 'react-router-dom' @@ -55,12 +55,12 @@ const PoolListItem: React.FC = ({ addressFrom, addressTo, network, - // apy = 0, - // apyData = { - // fees: 0, - // accumulatedFarmsAvg: 0, - // accumulatedFarmsSingleTick: 0 - // } + apy = 0, + apyData = { + fees: 0, + accumulatedFarmsAvg: 0, + accumulatedFarmsSingleTick: 0 + }, isUnknownFrom, isUnknownTo }) => { @@ -68,6 +68,7 @@ const PoolListItem: React.FC = ({ const navigate = useNavigate() const isSm = useMediaQuery(theme.breakpoints.down('sm')) + const isMd = useMediaQuery(theme.breakpoints.down('md')) const handleOpenPosition = () => { navigate( @@ -89,7 +90,7 @@ const PoolListItem: React.FC = ({ container classes={{ container: classes.container }} style={hideBottomLine ? { border: 'none' } : undefined}> - {!isSm ? {tokenIndex} : null} + {!isMd ? {tokenIndex} : null} {!isSm && ( @@ -109,12 +110,10 @@ const PoolListItem: React.FC = ({ - {/* {!isSm ? ( + {!isSm ? ( {`${apy > 1000 ? '>1000' : apy.toFixed(2)}%`} Pool APY @@ -148,7 +147,7 @@ const PoolListItem: React.FC = ({ i - ) : null} */} + ) : null} {fee}% {`$${formatNumber(volume)}`} {`$${formatNumber(TVL)}`} @@ -169,7 +168,7 @@ const PoolListItem: React.FC = ({ ) : ( - {!isSm && ( + {!isMd && ( No @@ -190,24 +189,24 @@ const PoolListItem: React.FC = ({ ) : null} - {/* {!isXs ? ( + {!isSm ? ( { - if (sortType === SortType.APY_DESC) { - onSort?.(SortType.APY_ASC) + if (sortType === SortTypePoolList.APY_DESC) { + onSort?.(SortTypePoolList.APY_ASC) } else { - onSort?.(SortType.APY_DESC) + onSort?.(SortTypePoolList.APY_DESC) } }}> - APY - {sortType === SortType.APY_ASC ? ( + 7-days APY + {sortType === SortTypePoolList.APY_ASC ? ( - ) : sortType === SortType.APY_DESC ? ( + ) : sortType === SortTypePoolList.APY_DESC ? ( ) : null} - ) : null} */} + ) : null} { diff --git a/src/components/Stats/PoolListItem/style.ts b/src/components/Stats/PoolListItem/style.ts index e8063d0ac..8d7f6bc1a 100644 --- a/src/components/Stats/PoolListItem/style.ts +++ b/src/components/Stats/PoolListItem/style.ts @@ -5,7 +5,7 @@ export const useStyles = makeStyles()(() => ({ container: { color: colors.white.main, display: 'grid', - gridTemplateColumns: '5% auto 15% 15% 15% 80px', + gridTemplateColumns: '5% auto 15% 15% 15% 15% 80px', padding: '18px 0', backgroundColor: colors.invariant.component, borderBottom: `1px solid ${colors.invariant.light}`, @@ -22,6 +22,10 @@ export const useStyles = makeStyles()(() => ({ justifyContent: 'flex-end' }, + [theme.breakpoints.down('md')]: { + gridTemplateColumns: 'auto 15% 15% 15% 15% 80px' + }, + [theme.breakpoints.down('sm')]: { gridTemplateColumns: '32.5% 17.5% 35% 15% ', diff --git a/src/store/consts/static.ts b/src/store/consts/static.ts index 5eb580b80..d9c52866f 100644 --- a/src/store/consts/static.ts +++ b/src/store/consts/static.ts @@ -433,9 +433,9 @@ export const enum SortTypePoolList { VOLUME_ASC, VOLUME_DESC, TVL_ASC, - TVL_DESC - // APY_ASC, - // APY_DESC + TVL_DESC, + APY_ASC, + APY_DESC } export const enum SortTypeTokenList { From 94d5676c276d0b24789d38ba555c89ea60202f03 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Wed, 6 Nov 2024 15:19:15 +0100 Subject: [PATCH 26/30] trunk format --- src/components/Modals/Priority/Priority.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Modals/Priority/Priority.tsx b/src/components/Modals/Priority/Priority.tsx index a6e2caef6..e1c1d7d9f 100644 --- a/src/components/Modals/Priority/Priority.tsx +++ b/src/components/Modals/Priority/Priority.tsx @@ -209,8 +209,8 @@ const Priority: React.FC = ({ selected={isDynamic ? params.saveValue === 'DYNAMIC' : selectedIndex === index} index={index} label={params.label} - value={typeof params.value === 'string' ? dynamicFee ?? 0 : params.value} - saveValue={typeof params.value === 'string' ? dynamicFee ?? 0 : params.value} + value={typeof params.value === 'string' ? (dynamicFee ?? 0) : params.value} + saveValue={typeof params.value === 'string' ? (dynamicFee ?? 0) : params.value} description={params.description} onClick={handleClick} /> From 4c27314b58cc999f8b8d2f78e791bef4103f3030 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Wed, 6 Nov 2024 15:23:23 +0100 Subject: [PATCH 27/30] add set fee on mobile --- src/components/Header/Header.tsx | 8 ++++++++ src/components/Modals/RoutesModal/RoutesModal.tsx | 9 ++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx index 13d872578..6a2b78aae 100644 --- a/src/components/Header/Header.tsx +++ b/src/components/Header/Header.tsx @@ -322,6 +322,14 @@ export const Header: React.FC = ({ } : undefined } + onPriority={ + typeOfNetwork === NetworkType.Mainnet && isMdDown + ? () => { + setRoutesModalOpen(false) + setPriorityModal(true) + } + : undefined + } /> {typeOfNetwork === NetworkType.Mainnet ? ( void onRPC?: () => void onChainSelect?: () => void + onPriority?: () => void } export const RoutesModal: React.FC = ({ routes, @@ -24,7 +25,8 @@ export const RoutesModal: React.FC = ({ current, onFaucet, onRPC, - onChainSelect + onChainSelect, + onPriority }) => { const { classes } = useStyles() @@ -97,6 +99,11 @@ export const RoutesModal: React.FC = ({ Change chain ) : null} + {typeof onPriority !== 'undefined' ? ( + + Set Fee + + ) : null} ) From d63c9870d56bd9b6c94860c7bf6ab844df86f9ab Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Wed, 6 Nov 2024 15:26:57 +0100 Subject: [PATCH 28/30] fix build --- src/components/Header/Header.stories.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/Header/Header.stories.tsx b/src/components/Header/Header.stories.tsx index 2c7ea6f5b..3bc662e7f 100644 --- a/src/components/Header/Header.stories.tsx +++ b/src/components/Header/Header.stories.tsx @@ -51,6 +51,7 @@ export const Primary: Story = { rpcStatus: RpcStatus.Uninitialized, defaultMainnetRPC: RPC.MAIN, onPrioritySave: fn(), - recentPriorityFee: '1' + recentPriorityFee: '1', + recentIsDynamic: true } } From f142f544d59fed6e5de59aa9eba6f3f0a402db80 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Wed, 6 Nov 2024 15:55:23 +0100 Subject: [PATCH 29/30] fix get minial lamports --- .../NewPosition/DepositSelector/DepositSelector.tsx | 10 ++++++---- src/components/NewPosition/NewPosition.tsx | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/NewPosition/DepositSelector/DepositSelector.tsx b/src/components/NewPosition/DepositSelector/DepositSelector.tsx index 18b46d0be..18611aa52 100644 --- a/src/components/NewPosition/DepositSelector/DepositSelector.tsx +++ b/src/components/NewPosition/DepositSelector/DepositSelector.tsx @@ -82,6 +82,7 @@ export interface IDepositSelector { onConnectWallet: () => void onDisconnectWallet: () => void canNavigate: boolean + isCurrentPoolExisting: boolean } export const DepositSelector: React.FC = ({ @@ -121,7 +122,8 @@ export const DepositSelector: React.FC = ({ onConnectWallet, onDisconnectWallet, solBalance, - canNavigate + canNavigate, + isCurrentPoolExisting }) => { const { classes } = useStyles() @@ -130,11 +132,11 @@ export const DepositSelector: React.FC = ({ const WSOL_MIN_FEE_LAMPORTS = useMemo(() => { if (network === NetworkType.Devnet) { - return poolIndex === null ? WSOL_POOL_INIT_LAMPORTS_DEV : WSOL_POSITION_INIT_LAMPORTS_DEV + return isCurrentPoolExisting ? WSOL_POSITION_INIT_LAMPORTS_DEV : WSOL_POOL_INIT_LAMPORTS_DEV } else { - return poolIndex === null ? WSOL_POOL_INIT_LAMPORTS_MAIN : WSOL_POSITION_INIT_LAMPORTS_MAIN + return isCurrentPoolExisting ? WSOL_POSITION_INIT_LAMPORTS_MAIN : WSOL_POOL_INIT_LAMPORTS_MAIN } - }, [network]) + }, [network, isCurrentPoolExisting]) const [hideUnknownTokens, setHideUnknownTokens] = useState(initialHideUnknownTokensValue) diff --git a/src/components/NewPosition/NewPosition.tsx b/src/components/NewPosition/NewPosition.tsx index 2f6bc4698..e16b5508d 100644 --- a/src/components/NewPosition/NewPosition.tsx +++ b/src/components/NewPosition/NewPosition.tsx @@ -728,6 +728,7 @@ export const NewPosition: React.FC = ({ onDisconnectWallet={onDisconnectWallet} setShouldResetPlot={setShouldResetPlot} canNavigate={canNavigate} + isCurrentPoolExisting={isCurrentPoolExisting} /> From 44625df544a2953fa0665d65ca78a2822b6f827a Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Wed, 6 Nov 2024 16:08:08 +0100 Subject: [PATCH 30/30] fix build --- .../NewPosition/DepositSelector/DepositSelector.stories.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx b/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx index 81e187e51..2ff27b56d 100644 --- a/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx +++ b/src/components/NewPosition/DepositSelector/DepositSelector.stories.tsx @@ -127,7 +127,8 @@ export const Primary: Story = { onConnectWallet: () => {}, onDisconnectWallet: () => {}, setShouldResetPlot: fn(), - canNavigate: true + canNavigate: true, + isCurrentPoolExisting: false }, render: args => }