{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/_global/BalToggle/BalToggle.vue?a65c","webpack:///./src/components/_global/BalChip/BalChip.vue?d0a8","webpack:///./src/assets/images/investments-headline.svg","webpack:///./src/lib/utils/date.ts","webpack:///./src/lib/utils/liquidityMining/index.ts","webpack:///./src/assets/images/pool-composer.svg","webpack:///./src/constants/queryKeys.ts","webpack:///./src/components/_global/icons/IntercomIcon.vue?762a","webpack:///./src/components/_global/icons/IntercomIcon.vue","webpack:///./src/components/_global/icons/IntercomIcon.vue?922a","webpack:///./src/components/_global/BalToggle/BalToggle.vue?3f84","webpack:///./src/components/_global/BalToggle/BalToggle.vue","webpack:///./src/components/_global/BalToggle/BalToggle.vue?0369","webpack:///./src/assets/images/gitbook-logo.png","webpack:///./src/components/heros/AppHeaderBg.vue?0ba5","webpack:///./src/components/_global/BalTextInput/BalTextInput.vue?203f","webpack:///./src/pages/FreshBeets.vue?71a4","webpack:///./src/components/cards/TradeCard/TradePairToggle.vue?0887","webpack:///./src/assets/images/icons/tokens_black.svg","webpack:///./src/components/_global/BalTabs/BalTabs.vue?5b6b","webpack:///./src/components/_global/BalTabs/BalTabs.vue","webpack:///./src/components/_global/BalTabs/BalTabs.vue?89e2","webpack:///./src/components/_global/BalLbpLineChart/BalLbpLineChart.vue?d455","webpack:///./src/components/_global/BalLbpLineChart/BalLbpLineChart.vue","webpack:///./src/components/_global/BalLbpLineChart/BalLbpLineChart.vue?9a69","webpack:///./src/components/_global/BalTable/BalTable.vue?3fad","webpack:///./src/components/_global/BalBtnGroup/BalBtnGroup.vue?e415","webpack:///./src/components/_global/BalBtnGroup/BalBtnGroup.vue","webpack:///./src/components/_global/BalBtnGroup/BalBtnGroup.vue?6563","webpack:///./src/components/_global/BalSelectInput/BalSelectInput.vue?195e","webpack:///./src/components/_global/BalSelectInput/BalSelectInput.vue","webpack:///./src/components/_global/BalSelectInput/BalSelectInput.vue?ed1a","webpack:///./src/components/cards/TradeCard/TradePair.vue?ac63","webpack:///./src/components/navs/AppNav/AppNavSettings.vue?8630","webpack:///./src/services/web3/web3.service.ts","webpack:///./src/services/web3/useWeb3.ts","webpack:///./src/assets/images/connectors/walletlink.svg","webpack:///./src/components/_global/BalLoadingBlock/BalLoadingBlock.vue?3af6","webpack:///./src/components/_global/BalTooltip/BalTooltip.vue?d2ab","webpack:///./src/components/_global/BalAlert/BalAlert.vue?b7b5","webpack:///./src/assets/images/connectors/frame.svg","webpack:///./src/components/_global/BalRangeInput/BalRangeInput.vue?3e88","webpack:///./src/composables/useDarkMode.ts","webpack:///./src/pages/LiquidityMining.vue?06e5","webpack:///./src/assets/images/connectors/status.svg","webpack:///./src/components/_global/BalCheckbox/BalCheckbox.vue?e2a8","webpack:///./src/store/modules/trade.ts","webpack:///./src/constants/symbol.keys.ts","webpack:///./src/assets/images/connectors/metamask.svg","webpack:///./src/store/modules sync nonrecursive \\.ts$","webpack:///./src/assets/images/connectors/default.svg","webpack:///./src/pages/Pool.vue?5de1","webpack:///./src/lib/utils/balancer/contract.ts","webpack:///./src/composables/useTime.ts","webpack:///./src/constants/vue-query.ts","webpack:///./src/components/_global/BalIcon/BalIcon.vue?1f49","webpack:///./src/components/_global/BalIcon/BalIcon.vue","webpack:///./src/components/_global/BalIcon/BalIcon.vue?93ce","webpack:///./src/components/_global/BalBlankSlate/BalBlankSlate.vue?1374","webpack:///./src/components/_global/BalBlankSlate/BalBlankSlate.vue","webpack:///./src/components/_global/BalBlankSlate/BalBlankSlate.vue?dbd3","webpack:///./src/components/heros/AppHero.vue?c540","webpack:///./src/constants/local-storage.keys.ts","webpack:///./src/assets/images/twitter-icon.png","webpack:///./src/components/_global/icons/ArrowDownIcon.vue","webpack:///./src/components/_global/icons/ArrowDownIcon.vue?b50f","webpack:///./src/assets/images/community-image.png","webpack:///./src/composables/useTokenLists.ts","webpack:///./src/assets/images/connectors/imtoken.svg","webpack:///./src/components/_global/icons/SpinnerIcon.vue","webpack:///./src/components/_global/icons/SpinnerIcon.vue?497c","webpack:///./src/components/_global/BalCard/BalCard.vue?f8c5","webpack:///./src/components/_global/BalCard/BalCard.vue","webpack:///./src/components/_global/BalCard/BalCard.vue?3e4c","webpack:///./src/components/_global/BalModal/BalModal.vue?3430","webpack:///./src/components/animate/AnimatePresence.vue?0fb6","webpack:///./src/components/animate/AnimatePresence.vue","webpack:///./src/components/animate/AnimatePresence.vue?6afe","webpack:///./src/components/_global/BalModal/BalModal.vue","webpack:///./src/components/_global/BalModal/BalModal.vue?cf34","webpack:///./src/components/navs/AppNav/AppNavClaimBtn.vue?6fe1","webpack:///./src/pages/Trade.vue?661f","webpack:///./src/components/_global/BalPopover/BalPopover.vue?4d35","webpack:///./src/components/_global/BalPopover/BalPopover.vue","webpack:///./src/components/_global/BalPopover/BalPopover.vue?5f31","webpack:///./src/lib/utils/balancer/helpers/sor/sorManager.ts","webpack:///./src/assets/images/github-logo.png","webpack:///./src/components/_global/BalRangeInput/BalRangeInput.vue","webpack:///./src/components/_global/BalRangeInput/BalRangeInput.vue?876b","webpack:///./src/components/_global/icons/MinusSquareIcon.vue","webpack:///./src/components/_global/icons/MinusSquareIcon.vue?f651","webpack:///./src/components/_global/BalBlankSlate/BalBlankSlate.vue?919a","webpack:///./src/components/_global/BalBtn/BalBtn.vue?3c86","webpack:///./src/pages/PoolCreate.vue?e0a2","webpack:///./src/components/_global/BalLoadingNumber/BalLoadingNumber.vue?8ca1","webpack:///./src/components/_global/BalLoadingNumber/BalLoadingNumber.vue","webpack:///./src/components/_global/BalLoadingNumber/BalLoadingNumber.vue?3dad","webpack:///./src/components/_global/icons/StarsIcon.vue?ea8c","webpack:///./src/components/_global/icons/StarsIcon.vue","webpack:///./src/components/_global/icons/StarsIcon.vue?7841","webpack:///./src/locales sync [\\w-]+\\.json$","webpack:///./src/components/_global/icons/WalletIcon.vue","webpack:///./src/components/_global/icons/WalletIcon.vue?6d3c","webpack:///./src/components/_global/BalChip/BalChip.vue?08af","webpack:///./src/components/_global/BalChip/BalChip.vue","webpack:///./src/components/_global/BalChip/BalChip.vue?6737","webpack:///./src/components/_global/BalLoadingBlock/BalLoadingBlock.vue?b612","webpack:///./src/components/_global/BalLoadingBlock/BalLoadingBlock.vue","webpack:///./src/components/_global/BalLoadingBlock/BalLoadingBlock.vue?050a","webpack:///./src/components/_global/icons/ActivityIcon.vue","webpack:///./src/components/_global/icons/ActivityIcon.vue?f6da","webpack:///./src/components/notifications/Notification.vue?d030","webpack:///./src/components/_global/BalTextInput/BalTextInput.vue?f443","webpack:///./src/components/_global/BalTextInput/BalTextInput.vue","webpack:///./src/components/_global/BalTextInput/BalTextInput.vue?0df6","webpack:///./src/services/web3/connectors/connector.ts","webpack:///./src/services/web3/connectors/metamask/metamask.connector.ts","webpack:///./src/services/web3/connectors/trustwallet/walletconnect.connector.ts","webpack:///./src/services/web3/connectors/gnosis/gnosis.connector.ts","webpack:///./src/services/web3/connectors/walletlink/walletlink.connector.ts","webpack:///./src/services/web3/connectors/portis/portis.connector.ts","webpack:///./src/services/web3/utils/helpers.ts","webpack:///./src/services/web3/web3.plugin.ts","webpack:///./src/constants/units.ts","webpack:///./src/services/gas-price/providers/blocknative.provider.ts","webpack:///./src/services/gas-price/providers/polygon.provider.ts","webpack:///./src/services/gas-price/providers/fantom.provider.ts","webpack:///./src/services/gas-price/gas-price.service.ts","webpack:///./src/components/navs/AppNav/AppNavActivityBtn/ActivityRows.vue?bdb9","webpack:///./src/components/_global/BalModal/BalModal.vue?df10","webpack:///./src/components/_global/icons/PlusSquareIcon.vue","webpack:///./src/components/_global/icons/PlusSquareIcon.vue?04e9","webpack:///./src/constants/currency.ts","webpack:///./src/assets/images/connectors/gnosis.svg","webpack:///./src/components/_global/BalLoadingIcon/BalLoadingIcon.vue","webpack:///./src/components/_global/BalLoadingIcon/BalLoadingIcon.vue?d552","webpack:///./src/assets/images/discord-icon.png","webpack:///./src/components/navs/AppNav/AppNav.vue?2c5c","webpack:///./src/components/images/Avatar.vue","webpack:///./src/components/images/Avatar.vue?1c02","webpack:///./src/store/modules/market.ts","webpack:///./src/pages/FarmDetail.vue?02a2","webpack:///./src/components/_global/BalTabs/BalTabs.vue?ce9e","webpack:///./src/components/_global/icons/BalCloseIcon.vue","webpack:///./src/components/_global/icons/BalCloseIcon.vue?1d5e","webpack:///./src/assets/images/icons/tokens_white.svg","webpack:///./src/composables/useNumbers.ts","webpack:///./src/components/_global/BalLoadingIcon/BalLoadingIcon.vue?e252","webpack:///./src/components/_global/BalCard/BalCard.vue?d5d5","webpack:///./src/composables/useConfig.ts","webpack:///./src/components/_global/BalTable/BalTable.vue?9681","webpack:///./src/components/_global/BalTable/BalTable.vue","webpack:///./src/components/_global/BalTable/BalTable.vue?0228","webpack:///./src/components/_global/BalForm/BalForm.vue?6645","webpack:///./src/components/_global/BalForm/BalForm.vue","webpack:///./src/components/_global/BalForm/BalForm.vue?d2e6","webpack:///./src/components/_global/BalLink/BalLink.vue","webpack:///./src/components/_global/BalLink/BalLink.vue?a32f","webpack:///./src/store/modules/app.ts","webpack:///./src/components/notifications/Notifications.vue?3ea6","webpack:///./src/components/_global/BalAlert/BalAlert.vue?53b9","webpack:///./src/components/_global/BalAlert/BalAlert.vue","webpack:///./src/components/_global/BalAlert/BalAlert.vue?ef5b","webpack:///./src/composables/useUserSettings.ts","webpack:///./src/assets/images/connectors sync ^\\.\\/.*\\.svg$","webpack:///./src/components/cards/TradeCard/TradeRoute.vue?ff22","webpack:///./src/components/forms/AppSlippageForm.vue?f44a","webpack:///./src/composables/useTokens.ts","webpack:///./src/assets/images/headline.svg","webpack:///./src/components/_global/BalRadio/BalRadio.vue?a6b4","webpack:///./src/components/_global/BalRadio/BalRadio.vue","webpack:///./src/components/_global/BalRadio/BalRadio.vue?a968","webpack:///./src/components/_global/icons/MoonIcon.vue","webpack:///./src/components/_global/icons/MoonIcon.vue?2150","webpack:///./src/constants/tokens.ts","webpack:///./src/components/modals/TradePreviewModal.vue?a2da","webpack:///./src/providers/user-settings.provider.ts","webpack:///./src/components/_global/icons/SunIcon.vue","webpack:///./src/components/_global/icons/SunIcon.vue?18b2","webpack:///./src/components/_global/BalBtn/BalBtn.vue?8cb0","webpack:///./src/components/_global/BalBtn/BalBtn.vue","webpack:///./src/components/_global/BalBtn/BalBtn.vue?abe5","webpack:///./src/components/_global/BalRadio/BalRadio.vue?5497","webpack:///./src/store/index.ts","webpack:///./src/pages/Pool.vue?afc2","webpack:///./src/components/pages/pool/PoolChart.vue?64fa","webpack:///./src/components/pages/pool/PoolChart.vue","webpack:///./src/components/pages/pool/PoolChart.vue?ac17","webpack:///./src/components/pages/pool/PoolStatCards.vue?0a5a","webpack:///./src/components/tooltips/LiquidityMiningTooltip.vue?c077","webpack:///./src/components/tooltips/LiquidityMiningTooltip.vue","webpack:///./src/components/tooltips/LiquidityMiningTooltip.vue?ca3c","webpack:///./src/components/pages/pool/PoolStatCards.vue","webpack:///./src/components/pages/pool/PoolStatCards.vue?c3a0","webpack:///./src/components/pages/pool/PoolBalancesCard.vue?af65","webpack:///./src/composables/useBreakpoints.ts","webpack:///./src/services/balancer/subgraph/types.ts","webpack:///./src/composables/usePool.ts","webpack:///./src/components/pages/pool/PoolBalancesCard.vue","webpack:///./src/components/pages/pool/PoolBalancesCard.vue?4246","webpack:///./src/components/pages/pool/PoolActionsCard/PoolActionsCard.vue?55d6","webpack:///./src/components/forms/pool_actions/InvestForm.vue?5cbb","webpack:///./src/lib/utils/validations.ts","webpack:///./src/lib/utils/logging.ts","webpack:///./src/lib/utils/balancer/web3.ts","webpack:///./src/lib/utils/balancer/tokens.ts","webpack:///./src/lib/utils/promise.ts","webpack:///./src/constants/network.ts","webpack:///./src/plugins/blocknative.ts","webpack:///./src/composables/useBlocknative.ts","webpack:///./src/services/gnosis/error.ts","webpack:///./src/constants/env.ts","webpack:///./src/services/gnosis/constants.ts","webpack:///./src/services/gnosis/signing.ts","webpack:///./src/services/gnosis/utils.ts","webpack:///./src/services/gnosis/operator.service.ts","webpack:///./src/services/gnosis/explorer.service.ts","webpack:///./src/composables/useNotifications.ts","webpack:///./src/composables/useTransactions.ts","webpack:///./src/composables/useEthers.ts","webpack:///./src/composables/pools/useTokenApprovals.ts","webpack:///./src/composables/useSlippage.ts","webpack:///./src/lib/utils/balancer/stablePoolEncoding.ts","webpack:///./src/lib/utils/balancer/weightedPoolEncoding.ts","webpack:///./src/services/pool/exchange/serializers/JoinParams.ts","webpack:///./src/services/pool/exchange/serializers/ExitParams.ts","webpack:///./src/services/pool/exchange/index.ts","webpack:///./src/services/pool/calculator/weighted.ts","webpack:///./src/services/pool/calculator/stable.ts","webpack:///./src/services/pool/calculator/calculator.sevice.ts","webpack:///./src/services/pool/pool.helper.ts","webpack:///./src/components/forms/pool_actions/shared/FormTypeToggle.vue?7f26","webpack:///./src/components/forms/pool_actions/shared/FormTypeToggle.vue","webpack:///./src/components/forms/pool_actions/shared/FormTypeToggle.vue?0f86","webpack:///./src/components/forms/pool_actions/InvestForm.vue","webpack:///./src/components/forms/pool_actions/InvestForm.vue?4354","webpack:///./src/components/forms/pool_actions/WithdrawForm.vue","webpack:///./src/components/forms/pool_actions/WithdrawForm.vue?7e0b","webpack:///./src/components/forms/pool_actions/WithdrawForm.vue?7825","webpack:///./src/components/cards/SuccessOverlay.vue?6ee2","webpack:///./src/components/cards/SuccessOverlay.vue","webpack:///./src/components/cards/SuccessOverlay.vue?e654","webpack:///./src/components/popovers/TradeSettingsPopover.vue?b1ac","webpack:///./src/components/forms/AppSlippageForm.vue","webpack:///./src/components/forms/AppSlippageForm.vue?0788","webpack:///./src/composables/useEthereumTxType.ts","webpack:///./src/components/popovers/TradeSettingsPopover.vue","webpack:///./src/constants/options.ts","webpack:///./src/components/popovers/TradeSettingsPopover.vue?9aee","webpack:///./src/components/forms/farm_actions/FarmWithdrawForm.vue?e028","webpack:///./src/services/erc20/contracts/erc20.ts","webpack:///./src/services/erc20/erc20-contracts.service.ts","webpack:///./src/services/farm/contracts/master-chef.ts","webpack:///./src/services/farm/contracts/beethovenx-token.ts","webpack:///./src/services/farm/contracts/hnd-rewarder.ts","webpack:///./src/services/farm/master-chef-contracts.service.ts","webpack:///./src/composables/farms/useFarm.ts","webpack:///./src/services/balancer/subgraph/farm-subgraph.client.ts","webpack:///./src/providers/app.provider.ts","webpack:///./src/composables/useApp.ts","webpack:///./src/services/balancer/subgraph/balancer-subgraph.client.ts","webpack:///./src/constants/pools.ts","webpack:///./src/services/balancer/subgraph/entities/pools/query.ts","webpack:///./src/lib/utils/balancer/price.ts","webpack:///./src/services/balancer/subgraph/entities/pools/index.ts","webpack:///./src/services/balancer/subgraph/entities/poolShares/query.ts","webpack:///./src/services/balancer/subgraph/entities/poolShares/index.ts","webpack:///./src/services/balancer/subgraph/entities/poolActivities/query.ts","webpack:///./src/services/balancer/subgraph/entities/poolActivities/index.ts","webpack:///./src/services/balancer/subgraph/entities/poolSnapshots/query.ts","webpack:///./src/services/balancer/subgraph/entities/poolSnapshots/index.ts","webpack:///./src/services/balancer/subgraph/entities/swaps/query.ts","webpack:///./src/services/balancer/subgraph/entities/swaps/index.ts","webpack:///./src/services/balancer/subgraph/entities/tokenPrices/query.ts","webpack:///./src/services/balancer/subgraph/entities/tokenPrices/index.ts","webpack:///./src/services/balancer/subgraph/entities/balancers/query.ts","webpack:///./src/services/balancer/subgraph/entities/balancers/index.ts","webpack:///./src/services/balancer/subgraph/balancer-subgraph.service.ts","webpack:///./src/composables/queries/useProtocolDataQuery.ts","webpack:///./src/composables/queries/useFarmUserQuery.ts","webpack:///./src/components/forms/farm_actions/FarmWithdrawForm.vue","webpack:///./src/components/forms/farm_actions/FarmWithdrawForm.vue?56a0","webpack:///./src/components/forms/farm_actions/FarmDepositForm.vue?a157","webpack:///./src/composables/queries/useAllowanceAvailableQuery.ts","webpack:///./src/components/forms/farm_actions/FarmDepositForm.vue","webpack:///./src/components/forms/farm_actions/FarmDepositForm.vue?2014","webpack:///./src/components/pages/pool/PoolActionsCard/PoolActionsCard.vue","webpack:///./src/components/pages/pool/PoolActionsCard/PoolActionsCard.vue?ff82","webpack:///./src/components/pages/pool/PoolActivitiesCard/PoolActivitiesCard.vue?4dda","webpack:///./src/components/pages/pool/PoolActivitiesCard/Activities.vue?3506","webpack:///./src/components/pages/pool/PoolActivitiesCard/Table.vue?138e","webpack:///./src/components/pages/pool/PoolActivitiesCard/Table.vue","webpack:///./src/components/pages/pool/PoolActivitiesCard/Table.vue?17b7","webpack:///./src/components/pages/pool/PoolActivitiesCard/types.ts","webpack:///./src/composables/queries/usePoolActivitiesQuery.ts","webpack:///./src/composables/queries/usePoolUserActivitiesQuery.ts","webpack:///./src/components/pages/pool/PoolActivitiesCard/Activities.vue","webpack:///./src/components/pages/pool/PoolActivitiesCard/Activities.vue?b458","webpack:///./src/components/pages/pool/PoolActivitiesCard/PoolActivitiesCard.vue","webpack:///./src/components/pages/pool/PoolActivitiesCard/PoolActivitiesCard.vue?2f3a","webpack:///./src/components/images/icons/GauntletIcon.vue?d5e1","webpack:///./src/components/images/icons/GauntletIcon.vue","webpack:///./src/components/images/icons/GauntletIcon.vue?4f15","webpack:///./src/services/balancer/contracts/contracts/vault.ts","webpack:///./src/services/balancer/contracts/balancer-contracts.service.ts","webpack:///./src/composables/queries/usePoolQuery.ts","webpack:///./src/composables/queries/usePoolSnapshotsQuery.ts","webpack:///./src/constants/links.ts","webpack:///./src/composables/queries/usePoolsQuery.ts","webpack:///./src/composables/queries/useUserPoolsQuery.ts","webpack:///./src/composables/queries/useFarmsQuery.ts","webpack:///./src/composables/queries/useAllFarmsForUserQuery.ts","webpack:///./src/composables/farms/useFarms.ts","webpack:///./src/lib/utils/farmHelper.ts","webpack:///./src/services/balancer/subgraph/block-subraph.client.ts","webpack:///./src/composables/queries/useAverageBlockTimeQuery.ts","webpack:///./src/composables/useAverageBlockTime.ts","webpack:///./src/composables/pools/usePools.ts","webpack:///./src/components/pages/farm/FarmStatCards.vue?42c3","webpack:///./src/components/pages/farm/FarmStatCards.vue","webpack:///./src/components/pages/farm/FarmStatCards.vue?8554","webpack:///./src/components/pages/farm/FarmStatCardsLoading.vue","webpack:///./src/components/pages/farm/FarmStatCardsLoading.vue?0c11","webpack:///./src/pages/Pool.vue","webpack:///./src/pages/Pool.vue?8bf4","webpack:///./src/pages/LiquidityMining.vue?ba12","webpack:///./src/components/tables/LMTable/LMTable.vue?abee","webpack:///./src/components/tables/PoolsTable/TokenPills/TokenPills.vue?32ec","webpack:///./src/components/tables/PoolsTable/TokenPills/WeightedTokenPill.vue?59bd","webpack:///./src/components/tables/PoolsTable/TokenPills/WeightedTokenPill.vue","webpack:///./src/components/tables/PoolsTable/TokenPills/WeightedTokenPill.vue?0cbb","webpack:///./src/components/tables/PoolsTable/TokenPills/StableTokenPill.vue?38bf","webpack:///./src/components/tables/PoolsTable/TokenPills/StableTokenPill.vue","webpack:///./src/components/tables/PoolsTable/TokenPills/StableTokenPill.vue?79bb","webpack:///./src/components/tables/PoolsTable/TokenPills/TokenPills.vue","webpack:///./src/components/tables/PoolsTable/TokenPills/TokenPills.vue?fba3","webpack:///./src/components/tables/LMTable/LMTable.vue","webpack:///./src/components/tables/LMTable/LMTable.vue?b320","webpack:///./src/pages/LiquidityMining.vue","webpack:///./src/pages/LiquidityMining.vue?3569","webpack:///./src/pages/Trade.vue?4a37","webpack:///./src/components/cards/TradeCard/TradeCard.vue?bb3e","webpack:///./src/composables/trade/useTokenApproval.ts","webpack:///./src/composables/trade/useValidation.ts","webpack:///./src/lib/utils/balancer/wrapper.ts","webpack:///./src/lib/utils/balancer/lido.ts","webpack:///./src/lib/utils/balancer/swapper.ts","webpack:///./src/composables/trade/useSor.ts","webpack:///./src/components/cards/TradeCard/TradePair.vue?41c4","webpack:///./src/components/cards/TradeCard/TradePairToggle.vue?089d","webpack:///./src/components/cards/TradeCard/TradePairToggle.vue","webpack:///./src/components/cards/TradeCard/TradePairToggle.vue?7cf1","webpack:///./src/components/modals/SelectTokenModal/SelectTokenModal.vue?9514","webpack:///./src/components/lists/TokenListItem.vue?d92a","webpack:///./src/components/lists/TokenListItem.vue","webpack:///./src/components/lists/TokenListItem.vue?2df3","webpack:///./src/components/lists/TokenListsListItem.vue?43b5","webpack:///./src/components/lists/TokenListsListItem.vue","webpack:///./src/components/lists/TokenListsListItem.vue?bc3e","webpack:///./src/components/modals/SelectTokenModal/Search.vue","webpack:///./src/components/modals/SelectTokenModal/Search.vue?3573","webpack:///./src/components/modals/SelectTokenModal/SelectTokenModal.vue","webpack:///./src/components/modals/SelectTokenModal/SelectTokenModal.vue?05d0","webpack:///./src/components/cards/TradeCard/TradeEthBufferModal.vue?ad69","webpack:///./src/components/cards/TradeCard/TradeEthBufferModal.vue","webpack:///./src/components/cards/TradeCard/TradeEthBufferModal.vue?2254","webpack:///./src/components/cards/TradeCard/TradePair.vue","webpack:///./src/components/cards/TradeCard/TradePair.vue?17df","webpack:///./src/components/modals/TradePreviewModal.vue?0196","webpack:///./src/composables/queries/useRelayerApprovalQuery.ts","webpack:///./src/composables/trade/useRelayerApproval.ts","webpack:///./src/components/modals/TradePreviewModal.vue","webpack:///./src/components/modals/TradePreviewModal.vue?35f9","webpack:///./src/components/cards/TradeCard/TradeRoute.vue?3338","webpack:///./src/components/cards/TradeCard/TradeRoute.vue","webpack:///./src/components/cards/TradeCard/TradeRoute.vue?f391","webpack:///./src/components/cards/TradeRatesCard/TradeRatesCard.vue?be1d","webpack:///./src/services/dex/contracts/uni-swap-router.ts","webpack:///./src/services/dex/dex-contracts.service.ts","webpack:///./src/composables/queries/useDexesQuery.ts","webpack:///./src/components/cards/TradeRatesCard/TradeRatesCard.vue","webpack:///./src/components/cards/TradeRatesCard/TradeRatesCard.vue?8482","webpack:///./src/components/cards/TradeCard/TradeCard.vue","webpack:///./src/components/cards/TradeCard/TradeCard.vue?bfcf","webpack:///./src/components/cards/TradeCardGP/TradeCardGP.vue?2a0f","webpack:///./src/composables/trade/useGnosis.ts","webpack:///./src/composables/trade/useTrading.ts","webpack:///./src/components/modals/TradePreviewModalGP.vue?ec2b","webpack:///./src/components/modals/TradePreviewModalGP.vue","webpack:///./src/components/modals/TradePreviewModalGP.vue?10d2","webpack:///./src/components/cards/TradeCardGP/TradePairGP.vue?6142","webpack:///./src/components/cards/TradeCardGP/TradePairGP.vue","webpack:///./src/components/cards/TradeCardGP/TradePairGP.vue?fc1b","webpack:///./src/components/cards/TradeCardGP/TradeCardGP.vue","webpack:///./src/components/cards/TradeCardGP/TradeCardGP.vue?8f9a","webpack:///./src/composables/pools/usePoolFilters.ts","webpack:///./src/pages/Trade.vue","webpack:///./src/pages/Trade.vue?5e64","webpack:///./src/pages/FarmDetail.vue?3801","webpack:///./src/components/pages/farm/FarmActionsCard.vue?ef30","webpack:///./src/components/pages/farm/FarmActionsCard.vue","webpack:///./src/components/pages/farm/FarmActionsCard.vue?6e0e","webpack:///./src/pages/FarmDetail.vue","webpack:///./src/pages/FarmDetail.vue?bc64","webpack:///./src/pages/BeetsLBP.vue?3bbc","webpack:///./src/components/pages/lbp/BeetsLBPChart.vue?99ea","webpack:///./src/components/pages/lbp/BeetsLBPChart.vue","webpack:///./src/components/pages/lbp/BeetsLBPChart.vue?e966","webpack:///./src/components/pages/lbp/BeetsLBPStatCards.vue?d466","webpack:///./src/components/pages/lbp/BeetsLBPStatCards.vue","webpack:///./src/components/pages/lbp/BeetsLBPStatCards.vue?856a","webpack:///./src/components/cards/LBPTradeCard/LBPTradeCard.vue?c876","webpack:///./src/components/cards/LBPTradeCard/LBPTradePair.vue?81a9","webpack:///./src/components/cards/LBPTradeCard/LBPTradePair.vue","webpack:///./src/components/cards/LBPTradeCard/LBPTradePair.vue?e0a3","webpack:///./src/components/cards/LBPTradeCard/LBPTradeCard.vue","webpack:///./src/components/cards/LBPTradeCard/LBPTradeCard.vue?fbcb","webpack:///./src/components/tables/LBPTable/LBPTable.vue?48c0","webpack:///./src/composables/queries/useSwapsQuery.ts","webpack:///./src/components/tables/LBPTable/LBPTable.vue","webpack:///./src/components/tables/LBPTable/LBPTable.vue?2b48","webpack:///./src/composables/queries/useSubgraphTokenPricesQuery.ts","webpack:///./src/pages/BeetsLBP.vue","webpack:///./src/pages/BeetsLBP.vue?c703","webpack:///./src/pages/Invest.vue?a186","webpack:///./src/components/inputs/TokenSearchInput.vue?abf6","webpack:///./src/components/inputs/TokenSearchInput.vue","webpack:///./src/components/inputs/TokenSearchInput.vue?d23d","webpack:///./src/components/tables/PoolsTable/PoolsTable.vue?5ea7","webpack:///./src/components/tables/PoolsTable/PoolsTable.vue","webpack:///./src/components/tables/PoolsTable/PoolsTable.vue?2f08","webpack:///./src/composables/queries/useBeethovenxConfigQuery.ts","webpack:///./src/composables/useBeethovenxConfig.ts","webpack:///./src/pages/Invest.vue","webpack:///./src/pages/Invest.vue?c6ad","webpack:///./src/pages/PoolCreate.vue?89d1","webpack:///./src/components/pages/pool-create/PoolCreateTokenRow.vue?a381","webpack:///./src/components/pages/pool-create/PoolCreateTokenRow.vue","webpack:///./src/components/pages/pool-create/PoolCreateTokenRow.vue?0f6e","webpack:///./src/components/pages/pool-create/PoolCreateDefinitionFields.vue?a2ce","webpack:///./src/components/pages/pool-create/PoolCreateDefinitionFields.vue","webpack:///./src/components/pages/pool-create/PoolCreateDefinitionFields.vue?8b76","webpack:///./src/lib/utils/poolCreateHelper.ts","webpack:///./src/components/pages/pool-create/PoolCreateActions.vue?d752","webpack:///./src/lib/utils/numbers.ts","webpack:///./src/services/pool/creator/pool-verifier.service.ts","webpack:///./src/services/pool/creator/pool-creator.service.ts","webpack:///./src/components/pages/pool-create/PoolCreateConfirmModal.vue?9416","webpack:///./src/components/pages/pool-create/PoolCreateConfirmModal.vue","webpack:///./src/components/pages/pool-create/PoolCreateConfirmModal.vue?afd5","webpack:///./src/components/pages/pool-create/PoolCreateActions.vue","webpack:///./src/components/pages/pool-create/PoolCreateActions.vue?86e2","webpack:///./src/components/pages/pool-create/PoolCreateSuccessOverlay.vue?dff1","webpack:///./src/components/pages/pool-create/PoolCreateSuccessOverlay.vue","webpack:///./src/components/pages/pool-create/PoolCreateSuccessOverlay.vue?7430","webpack:///./src/pages/PoolCreate.vue","webpack:///./src/pages/PoolCreate.vue?8d96","webpack:///./src/pages/FreshBeets.vue?04c3","webpack:///./src/services/governance/contracts/fbeets.ts","webpack:///./src/services/governance/governance-contracts.service.ts","webpack:///./src/composables/useGovernance.ts","webpack:///./src/pages/FreshBeets.vue","webpack:///./src/pages/FreshBeets.vue?da97","webpack:///./src/plugins/router.ts","webpack:///./src/plugins/mixins.ts","webpack:///./src/plugins/vueQuery.ts","webpack:///./src/plugins/sentry.ts","webpack:///./src/plugins/directives.ts","webpack:///./src/plugins/components.ts","webpack:///./src/App.vue?1568","webpack:///./src/composables/useWeb3Watchers.ts","webpack:///./src/components/navs/AppNav/AppNav.vue","webpack:///./src/components/images/AppLogo.vue?065c","webpack:///./src/components/images/AppIcon.vue?9c67","webpack:///./src/components/images/AppIcon.vue","webpack:///./src/components/images/AppIcon.vue?c5da","webpack:///./src/components/images/AppLogo.vue","webpack:///./src/components/images/AppLogo.vue?56e9","webpack:///./src/components/navs/AppNav/AppNavAlert.vue?3685","webpack:///./src/components/navs/AppNav/AppNavAlert.vue","webpack:///./src/components/navs/AppNav/AppNavAlert.vue?bbab","webpack:///./src/components/navs/AppNav/AppNavToggle.vue?10a5","webpack:///./src/components/navs/AppNav/AppNavToggle.vue","webpack:///./src/components/navs/AppNav/AppNavToggle.vue?74fe","webpack:///./src/components/navs/AppNav/AppNavActions.vue?3135","webpack:///./src/components/navs/AppNav/AppNavAccountBtn.vue?b90c","webpack:///./src/components/navs/AppNav/AppNavSettings.vue","webpack:///./src/constants/app.ts","webpack:///./src/services/nft/contracts/early-ludwig-nft.ts","webpack:///./src/services/nft/nft-contracts.service.ts","webpack:///./src/composables/nft/useNftQuery.ts","webpack:///./src/components/navs/AppNav/AppNavSettings.vue?6b2a","webpack:///./src/components/navs/AppNav/AppNavAccountBtn.vue","webpack:///./src/components/navs/AppNav/AppNavAccountBtn.vue?c587","webpack:///./src/components/navs/AppNav/AppNavActivityBtn/AppNavActivityBtn.vue?b239","webpack:///./src/components/navs/AppNav/AppNavActivityBtn/ActivityCounter.vue?586b","webpack:///./src/components/navs/AppNav/AppNavActivityBtn/ActivityCounter.vue","webpack:///./src/components/navs/AppNav/AppNavActivityBtn/ActivityCounter.vue?b775","webpack:///./src/components/navs/AppNav/AppNavActivityBtn/ActivityRows.vue?e246","webpack:///./src/components/navs/AppNav/AppNavActivityBtn/ActivityRows.vue","webpack:///./src/components/navs/AppNav/AppNavActivityBtn/ActivityRows.vue?e9e2","webpack:///./src/components/navs/AppNav/AppNavActivityBtn/AppNavActivityBtn.vue","webpack:///./src/components/navs/AppNav/AppNavActivityBtn/AppNavActivityBtn.vue?bc2e","webpack:///./src/components/navs/AppNav/AppNavClaimBtn.vue?09fe","webpack:///./src/components/navs/AppNav/AppNavClaimBtn.vue","webpack:///./src/components/navs/AppNav/AppNavClaimBtn.vue?b7a3","webpack:///./src/components/navs/AppNav/AppNavActions.vue","webpack:///./src/components/navs/AppNav/AppNavActions.vue?dad0","webpack:///./src/components/navs/AppNav/AppNav.vue?7bba","webpack:///./src/components/heros/AppHero.vue?bb5d","webpack:///./src/components/heros/AppHero.vue","webpack:///./src/components/heros/AppHero.vue?a420","webpack:///./src/components/web3/WalletSelectModal.vue?c847","webpack:///./src/components/web3/WalletButton.vue?a1ec","webpack:///./src/components/web3/WalletButton.vue","webpack:///./src/components/web3/WalletButton.vue?e0aa","webpack:///./src/components/web3/WalletSelectModal.vue","webpack:///./src/components/web3/WalletSelectModal.vue?6ca4","webpack:///./src/components/notifications/Notifications.vue?466b","webpack:///./src/components/notifications/Notification.vue?2a72","webpack:///./src/components/notifications/Notification.vue","webpack:///./src/components/notifications/Notification.vue?d508","webpack:///./src/components/notifications/Notifications.vue","webpack:///./src/components/notifications/Notifications.vue?d6c8","webpack:///./src/components/navs/AppFooterNav/AppFooterNav.vue?2e68","webpack:///./src/components/navs/AppFooterNav/AppFooterNav.vue","webpack:///./src/components/navs/AppFooterNav/AppFooterNav.vue?feac","webpack:///./src/components/stats/GlobalStats.vue?cb36","webpack:///./src/components/stats/GlobalStats.vue","webpack:///./src/components/stats/GlobalStats.vue?d13a","webpack:///./src/components/heros/AppHeaderBg.vue?40c2","webpack:///./src/components/heros/AppHeaderBg.vue","webpack:///./src/components/heros/AppHeaderBg.vue?9fb0","webpack:///./src/App.vue","webpack:///./src/App.vue?97f5","webpack:///./src/Root.ts","webpack:///./src/main.ts","webpack:///./src/components/_global/BalAsset/BalAsset.vue","webpack:///./src/components/_global/BalAsset/BalAsset.vue?3218","webpack:///./src/constants/fathom.ts","webpack:///./src/services/fathom/goals.ts","webpack:///./src/composables/useFathom.ts","webpack:///./src/components/_global/BalSelectInput/BalSelectInput.vue?d6ee","webpack:///./src/components/navs/AppNav/AppNavToggle.vue?8ee4","webpack:///stories).)*\\.(js|ts|vue)$/","webpack:///./src/assets/images/connectors/portis.svg","webpack:///./tailwind.config.js","webpack:///./src/components/_global/BalAsset/BalAssetSet.vue?eb3c","webpack:///./src/components/_global/icons/CheckIcon.vue","webpack:///./src/components/_global/icons/CheckIcon.vue?98e6","webpack:///./src/components/navs/AppNav/AppNavAlert.vue?c8fa","webpack:///./src/components/_global/BalPopover/BalPopover.vue?98d5","webpack:///./src/lib/config/index.ts","webpack:///./src/components/_global/BalLineChart/BalLineChart.vue?be04","webpack:///./src/components/_global/BalLineChart/BalLineChart.vue","webpack:///./src/components/_global/BalLineChart/BalLineChart.vue?2826","webpack:///./src/App.vue?9951","webpack:///./src/components/cards/LBPTradeCard/LBPTradePair.vue?5044","webpack:///./src/composables/useUrls.ts","webpack:///./src/assets/images/logo.svg","webpack:///./src/assets/images/medium-icon.png","webpack:///./src/services/ipfs/ipfs.service.ts","webpack:///./src/services/token-list/token-list.service.ts","webpack:///./src/composables/queries/useTokenListsQuery.ts","webpack:///./src/providers/token-lists.provider.ts","webpack:///./src/composables/queries/useTokenPricesQuery.ts","webpack:///./src/services/token/concerns/metadata.concern.ts","webpack:///./src/services/token/concerns/balances.concern.ts","webpack:///./src/services/token/concerns/allowances.concern.ts","webpack:///./src/services/token/token.service.ts","webpack:///./src/composables/queries/useBalancesQuery.ts","webpack:///./src/composables/queries/useAllowancesQuery.ts","webpack:///./src/providers/tokens.provider.ts","webpack:///./src/components/pages/pool-create/PoolCreateActions.vue?7bf3","webpack:///./src/assets/images/connectors/trustwallet.svg","webpack:///./src/components/popovers/TradeSettingsPopover.vue?9fc5","webpack:///./src/assets/images/ludwig-says-2.svg","webpack:///./src/components/_global/BalAsset/BalAssetSet.vue?9c88","webpack:///./src/components/_global/BalAsset/BalAssetSet.vue","webpack:///./src/components/_global/BalAsset/BalAssetSet.vue?529f","webpack:///./src/services/config/config.service.ts","webpack:///./src/components/modals/TradePreviewModalGP.vue?a3e1","webpack:///./src/store/modules/index.ts","webpack:///./src/components/_global/BalCheckbox/BalCheckbox.vue?65ae","webpack:///./src/components/_global/BalCheckbox/BalCheckbox.vue","webpack:///./src/components/_global/BalCheckbox/BalCheckbox.vue?e2b5","webpack:///./src/components/navs/AppFooterNav/AppFooterNav.vue?3bb6","webpack:///./src/composables/useTailwind.ts","webpack:///./src/lib/utils/index.ts","webpack:///./src/assets/images/connectors/fortmatic.svg","webpack:///./src/components/_global/BalTooltip/BalTooltip.vue?737e","webpack:///./src/components/_global/BalTooltip/BalTooltip.vue","webpack:///./src/components/_global/BalTooltip/BalTooltip.vue?54cf","webpack:///./src/components/_global/icons/LightBulbIcon.vue","webpack:///./src/components/_global/icons/LightBulbIcon.vue?b84d","webpack:///./src/components/web3/WalletButton.vue?a64d","webpack:///./src/services/beethovenx/beethovenx.service.ts","webpack:///./src/locales/index.ts","webpack:///./src/plugins/i18n.ts","webpack:///./src/store/modules/alerts.ts","webpack:///./src/services/rpc-provider/rpc-provider.service.ts","webpack:///./src/assets/images/connectors/walletconnect.svg"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","toUtcTime","date","Date","UTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","liquidityMiningStartTime","getCurrentLiquidityMiningWeek","differenceInWeeks","getWeek","miningWeek","computeAPRForPool","rewards","tokenPrice","totalLiquidity","div","times","toString","computeTotalAPRForPool","tokenRewards","prices","currency","reduce","totalRewards","amount","tokenAddress","plus","getLiquidityMiningRewards","week","miningRewards","liquidityMiningWeek","MultiTokenLiquidityMining","assign","find","pool","chainId","network","pools","currentLiquidityMiningRewards","tokenAddresses","values","flat","map","reward","Set","address","currentLiquidityMiningRewardTokens","POOLS_ROOT_KEY","FARMS_ROOT_KEY","CLAIMS_ROOT_KEY","SWAPS_ROOT_KEY","TOKEN_PRICES_ROOT_KEY","QUERY_KEYS","Farms","All","Current","id","ApprovalRequired","token","User","account","UserAllFarms","TokenBalance","Pools","tokens","poolIds","Snapshot","Activities","UserActivities","Swaps","TokenPrices","poolId","asset","TokenLists","Config","Claims","Tokens","Prices","Account","Balances","Allowances","contractAddresses","RelayerApprovals","relayer","Profile","Portfolio","Nft","App","Chains","ProtocolData","Dexes","GetAmountsOut","_hoisted_1","width","height","viewBox","fill","xmlns","_hoisted_2","x1","y1","x2","y2","gradientUnits","offset","render","_ctx","_cache","$props","$setup","$data","$options","darkMode","setup","useDarkMode","__exports__","for","class","onClick","type","checked","modelValue","$attrs","label","inheritAttrs","emits","props","String","required","Boolean","default","color","validator","val","includes","_","emit","event","target","containerClasses","tabs","tab","stateClasses","$event","alert","Array","noPad","activeTab","isActiveTab","_hoisted_3","_component_BalLoadingBlock","_component_ECharts","isLoading","showHeader","currentValue","change","numeral","format","ref","option","chartConfig","autoresize","onUpdateAxisPointer","handleAxisMoved","replaceMerge","onAxisMoved","Function","currentGraphingPeriod","Number","periodOptions","hideYAxis","hideXAxis","axisLabelFormatter","showLegend","legendState","components","ECharts","chartInstance","lineChart","useNumbers","fNum","tailwind","useTailwind","axisColor","theme","colors","gray","legend","show","left","top","icon","itemHeight","formatter","legendName","selected","textStyle","fontSize","inactiveColor","xAxis","axisTick","alignWithLabel","axisLine","onZero","lineStyle","axisLabel","yAxis","splitNumber","splitLine","position","undefined","nameGap","min","max","grid","right","bottom","containLabel","tooltip","trigger","axisPointer","backgroundColor","white","borderColor","params","param","marker","seriesName","join","series","smooth","showSymbol","symbolSize","markPoint","symbol","itemStyle","borderWidth","shadowColor","shadowBlur","coord","dataIndex","seriesIndex","prev","current","_change","isNaN","_component_BalBtn","options","onSelect","outline","size","attrs_","$t","attrs","_withId","hidden","_component_BalIcon","$slots","labelClasses","inputClasses","onChange","defaultText","valFor","textFor","BalIcon","validateOn","noMargin","rules","balSelectInput","errors","hasError","textSizeClasses","labelSizeClasses","inputHeightClasses","text","validate","forEach","rule","rpcProviderService","this","provider","jsonProvider","lookupAddress","getEnsName","ens","web3Service","blockNumber","isWalletSelectVisible","setBlockNumber","useWeb3","connector","walletState","signer","disconnectWallet","connectWallet","configService","appNetworkConfig","isV1Supported","userNetworkConfig","getNetworkConfig","isWalletReady","isMainnet","isPolygon","canLoadProfile","isMismatchedNetwork","isUnsupportedNetwork","explorerLinks","txLink","txHash","explorer","addressLink","tokenLink","getProvider","getSigner","toggleWalletSelectModal","getProfile","enabled","isLoadingProfile","profile","initBlockListener","setDarkMode","DarkMode","document","documentElement","classList","add","remove","toggleDarkMode","NETWORK","state","inputAsset","outputAsset","actions","init","commit","input","output","mutations","setInputAsset","setOutputAsset","namespaced","Providers","webpackContext","req","webpackContextResolve","e","Error","code","keys","resolve","abi","contract","Promise","reject","multicall","calls","multi","addresses","itf","aggregate","toLowerCase","encodeFunctionData","res","decodeFunctionResult","Multicaller","paths","path","fn","from","obj","oneSecondInMs","oneMinInMs","oneHourInMs","twentyFourHoursInMs","Math","floor","now","FETCH_ONCE_OPTIONS","refetchOnMount","refetchOnWindowFocus","refetchOnReconnect","staleTime","iconSize","filled","replace","textContent","Locale","TradeSlippage","TradeLiquidity","TradeInterface","TradeDeadline","EthereumTxType","UserSettings","Currency","Toggled","Transactions","script","defaultProviderResponse","useTokenLists","cx","cy","stroke","stroke-opacity","stroke-width","stroke-linecap","stroke-linejoin","stroke-dasharray","cardClasses","title","header","headerClasses","titleTag","contentClasses","footer","footerClasses","square","noContentPad","noBorder","darkBgColor","shadow","borderClasses","_component_BalCard","_component_AnimatePresence","hide","onKeyup","appear","showContent","initial","opacity","translateY","animate","delay","exit","isVisible","onOnExit","$emit","onEnter","enter","onLeave","leave","css","animateContainer","set","el","done","setTimeout","targets","easing","complete","BalCard","AnimatePresence","newVal","_directive_click_outside","togglePopover","onMouseenter","showPopover","onMouseleave","hidePopover","popoverWrapperClasses","handleClickOutside","align","popoverOpened","LiquiditySelection","SWAP_COST","VUE_APP_SWAP_COST","SorManager","gasPrice","maxPools","weth","poolsSourceV1","poolsSourceV2","subgraphUrlV2","disabledOptions","isOverRide","disabledTokens","fetchStatus","v1finishedFetch","v2finishedFetch","v1success","v2success","selectedPools","sorV1","sorV2","tokenAddr","tokenDecimals","manualCost","cost","tokenCost","console","log","setCostOutputToken","subgraphFetchV2","v1fetch","fetchPools","subgraphPoolsV2","time","v2result","message","timeEnd","v1result","onChainBalanceCache","tokenIn","tokenOut","tokenInDecimals","tokenOutDecimals","swapType","amountScaled","swapDecimals","liquiditySelection","amountNormalised","v1TokenIn","v1TokenOut","swapsV1","returnAmountV1","marketSpV1Scaled","returnAmountV1ConsideringFees","getSwaps","SwapExactIn","v2TokenIn","v2TokenOut","timestampSeconds","swapOptions","poolTypeFilter","timestamp","swapInfoV2","returnAmount","returnAmountConsideringFees","selectBestSwapIn","selectBestSwapOut","isV1best","isZero","swapAmount","lt","marketSpV1Normalised","v1return","isV1swap","returnDecimals","hasSwaps","marketSpNormalised","v2return","swaps","marketSp","V1","onChainCache","V2","leftLabel","rightLabel","range","dot-style","dotStyle","rail-style","railSyle","process-style","proccessStyle","VueSlider","extend","blue","backgroundImage","pink","background","immediate","version","xmlns:xlink","x","y","filterUnits","dx","dy","in","stdDeviation","fill-rule","transform","filter","rx","_hoisted_4","blockClasses","rounded","darker","currencySymbol","BalLoadingBlock","numberWidth","numberHeight","useUserSettings","green","stop-color","classes","closeable","iconClasses","useChipClasses","isGradient","sizeClasses","bgGradientClasses","bgColorClasses","outlineClasses","useCloseIcon","colorClass","bgClass","_hoisted_5","wrapperClasses","inputGroupClasses","prepend","prependClasses","inputContainerClasses","disabled","onBlur","onInput","onKeydown","info","infoClasses","append","appendClasses","fadedOut","isValid","squareTop","textRight","appendBorder","prependBorder","decimalLimit","slots","overflowProtectedVal","overflowProtected","blockInvalidChar","preventDefault","split","numberStr","decimalStr","maxLength","selectedAccount","active","handleAccountsChanged","accounts","warn","handleChainChanged","handleDisconnect","removeAllListeners","disconnect","close","on","ethereum","web3","currentProvider","request","method","error","enable","response","rpc","env","sdk","safe","getInfo","safeAddress","walletLink","appName","appLogoUrl","makeWeb3Provider","portis","PORTIS_DAPP_ID","switchToAppNetwork","hexChainId","importNetworkDetailsToWallet","jsonrpc","chainName","rpcUrls","publicRpc","iconUrls","nativeAsset","logoURI","nativeCurrency","decimals","SupportedWallets","WalletNameMap","metamask","walletconnect","gnosis","walletlink","Web3ProviderSymbol","WalletConnectorDictionary","install","app","useFathom","trackGoal","Goals","alreadyConnectedAccount","alreadyConnectedProvider","pluginState","getJsonProvider","wallet","connect","registerListeners","ConnectedWallet","payload","provide","getConnectorName","connectorId","isMetaMask","isImToken","isStatus","isTrust","isFrame","i18n","global","getConnectorLogo","GWEI_UNIT","confidence","a","headers","Authorization","estimatedPrices","blockPrices","gasPrice70","estimatedPrice","gasPrice90","price","maxFeePerGas","maxPriorityFeePerGas","txSpeed","standardgaspricegwei","blocknativeProvider","polygonProvider","fantomProvider","getLatest","FiatCurrency","FiatSymbol","usd","colorClasses","style","diameter","parseInt","Jazzicon","gasPriceService","loading","getGasPrice","setGasPrice","_state","setLoading","PresetFormats","number","adjustedPreset","preset","forcePreset","priceFor","toFiat","tokenAmount","toNumber","useConfig","networkConfig","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_component_router_link","filteredColumns","column","columnIndex","className","getHorizontalStickyClass","isColumnStuck","sortKey","currentSortColumn","currentSortDirection","setHeaderRef","handleSort","Header","skeletonClass","placeholderBlockWidth","tableData","noResultsLabel","dataItem","index","handleRowClick","onRowClick","link","to","getParams","Cell","accessor","shouldRenderTotals","tail","totalsCell","isPaginated","isLoadingMore","columns","sticky","initialState","sortColumn","sortDirection","stickyHeaderRef","tableRef","headerRef","bodyRef","columnId","updateDirection","sortedData","reverse","onscroll","offsetRatio","offsetWidth","offsetLeft","addEventListener","scrollLeft","some","newData","action","onSubmit","useFormValidations","validatable","handleInputErrors","_errors","validateInput","findValidatable","children","child","component","proxy","isArray","$","subTree","external","noStyle","rel","modalOpen","locale","tradeLiquidity","Best","transactionDeadline","tradeInterface","BALANCER","dispatch","root","toggleModal","setLocale","setTradeLiquidity","setTradeInterface","setTransactionDeadline","titleClasses","textSizeClass","description","descriptionColor","actionLabel","actionClasses","btnColor","BalBtn","raised","block","bgColorClass","paddingClasses","iconSizeClasses","iconColorClasses","useTokens","cursrorClass","TOKENS","Popular","Symbols","AddressMap","ETH","WETH","BAL","BUSD","BNB","WSDN","MATIC","WASTR","WBTC","USDC","USDT","DAI","CustomPlatformId","ChainMap","592","NATIVE_ASSET_ADDRESS","DEFAULT_TOKEN_DECIMALS","UserSettingsProviderSymbol","lsCurrency","lsSlippage","slippage","setCurrency","newCurrency","setSlippage","newSlippage","clip-path","_component_BalLoadingIcon","tag","btnClasses","iconColor","loadingLabel","BalLoadingIcon","circle","circleSizeClasses","fromColor","toColor","bgFlatClasses","textColorClasses","displayClasses","shapeClasses","cursorClasses","shadowClasses","strict","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_component_BalAsset","_component_LiquidityMiningTooltip","_component_GauntletIcon","_component_BalLink","_component_BalTooltip","_component_BalAlert","_component_PoolChart","_component_PoolStatCards","_component_FarmStatCardsLoading","_component_FarmStatCards","_component_PoolBalancesCard","_component_PoolActivitiesCard","_component_PoolActionsCard","loadingPool","poolName","titleTokens","tokenMeta","isStableLikePool","weight","innerHTML","poolFeeLabel","activator","feesManagedByGauntlet","href","EXTERNAL_LINKS","Gauntlet","Home","swapFeeToolTip","appLoading","missingPrices","noInitLiquidity","historicalPrices","snapshots","isLoadingSnapshots","farm","onOnTx","onNewTx","_component_BalLineChart","_component_BalBlankSlate","nonEmptySnapshots","isPeriodSelectionEnabled","chartColors","HODL","store","hodlColor","black","history","totalShares","getPoolValue","amounts","parseFloat","total","defaultState","timestamps","fromUnixTime","holdValues","firstState","firstValue","bptValues","firstShares","firstValuePerBpt","currentShares","currentValuePerBpt","stats","stat","_component_StarsIcon","hasLiquidityMiningRewards","dynamic","apr","liquidityMining","LiquidityMiningTooltip","volume","fees","_component_BalTable","upToLargeBreakpoint","tokenColumnCell","symbolFor","tokenWeightCell","weightFor","tokenBalanceCell","balanceFor","tokenValueCell","fiatValueFor","useBreakpoints","windowWidth","innerWidth","onWidthChange","removeEventListener","bp","upToMediumBreakpoint","upToSmallBreakpoint","PoolType","isStable","poolType","Stable","isMetaStable","MetaStable","isStableLike","isWeighted","Weighted","isWeth","networkId","isWstETH","wstETH","usePool","isStablePool","isMetaStablePool","isWeightedPool","isWethPool","isWstETHPool","onchain","balance","_component_BalTabs","_component_TradeSettingsPopover","_component_InvestForm","_component_SuccessOverlay","_component_WithdrawForm","_component_FarmDepositForm","_component_FarmWithdrawForm","context","TradeSettingsContext","invest","onSuccess","handleInvestment","hasUnstakedBpt","investmentSuccess","closeLabel","explorerLink","onClose","handleWithdrawal","hasStakedBpt","withdrawalSuccess","handleFarmInvestment","farmInvestmentSuccess","handleFarmWithdrawal","farmWithdrawalSuccess","_component_FormTypeToggle","_component_BalRangeInput","_component_BalTextInput","_component_BalCheckbox","_component_BalForm","onOnSubmit","submit","investType","formTypes","hasZeroBalance","isProportional","propPercentage","interval","formatBalance","amountUSD","tokenWeights","validInputs","amountRules","step","placeholder","tokenBalance","assetIn","assetOut","stETH","priceImpactClasses","priceImpact","requireApproval","requiredAllowances","approving","hasAmounts","hasValidInputs","approveAllowances","highPiAccepted","isRequired","ClickInvest","field","_field","v","minChar","minLength","isPositiveCheck","isPositive","isLessThanOrEqualTo","msg","isGreaterThanOrEqualTo","maxChar","isValidAddress","isSymbol","regex","test","logFailedTx","sender","overrides","ENV","GAS_LIMIT_BUFFER","VUE_APP_USE_BLOCKNATIVE_GAS_PLATFORM","sendTransaction","contractAddress","contractWithSigner","estimateGas","gasLimitNumber","gasLimit","UNPREDICTABLE_GAS_LIMIT","getAddress","callStatic","approveTokens","spender","all","retryPromiseWithDelay","promise","retryCount","delayTime","tryPromiseWithTimeout","timeout","race","Network","bnSdkSymbol","defaultOptions","dappId","onerror","blocknative","configuration","scope","filters","status","_not","catch","config","globalProperties","$blocknative","APP_NETWORK_ID","SUPPORTED_NETWORKS","MAINNET","KOVAN","useBlocknative","supportsBlocknative","ApiErrorCodes","IS_DEV","IS_STAGING","OPERATOR_URLS","RINKEBY","OPERATOR_URL","GP_SETTLEMENT_CONTRACT_ADDRESS","GP_RELAYER_CONTRACT_ADDRESS","API_ERROR_CODE_DESCRIPTIONS","DuplicateOrder","InsufficientFee","InvalidSignature","MissingOrderData","InsufficientValidTo","InsufficientFunds","UnsupportedToken","WrongOwner","apiError","errorType","OperatorError","apiErrorDetails","orderPostError","UNHANDLED_ERROR","getErrorMessage","METAMASK_SIGNATURE_ERROR_CODE","METHOD_NOT_FOUND_ERROR_CODE","V4_ERROR_MSG_REGEX","V3_ERROR_MSG_REGEX","RPC_REQUEST_FAILED_REGEX","MAX_VALID_TO_EPOCH","mapSigningSchema","Map","EIP712","libraryValue","apiValue","ETHSIGN","_getSigningSchemeInfo","ecdaSigningScheme","getSigningSchemeApiValue","getSigningSchemeLibValue","_signOrder","order","signingScheme","domain","signOrder","unsignedOrder","signingMethod","signature","_signer","signatureParams","calculateValidTo","deadlineInMinutes","validTo","normalizeTokenAddress","nativeAssetAddress","getMarket","sellToken","buyToken","kind","baseToken","quoteToken","apiVersion","baseURL","owner","post","validateStatus","errorMessage","getErrorForUnsuccessfulPostOrder","orderId","market","gnosisOperator","gnosisExplorer","DEFAULT_NOTIFICATION_TIMEOUT","notificationsState","newNotification","notificationsMap","getNotifications","notificationId","attemptToRemoveExistingNotification","addedTime","autoCloseAfterMs","setNotifications","transactionMetadata","previousNotificationFound","previousNotification","getNotification","clearAllNotifications","updateNotification","updates","notification","notifications","useNotifications","addNotification","removeNotification","WEEK_MS","TRANSACTIONS_SCHEMA_VERSION","transactionsState","getTransactions","isTransactionRecent","pendingOrderActivity","pendingTxActivity","normalizeTxReceipt","receipt","blockHash","transactionHash","transactionIndex","transaction","setTransactions","getId","transactionsMap","getTransaction","txId","newTxId","originalId","replacementReason","shouldCheckTx","lastBlockNumber","processedTxs","has","lastCheckedBlockNumber","blocksSinceCheck","minutesPending","useTransactions","getWeb3Provider","getSettledOrderSummary","details","tokenInAmount","executedSellAmount","tokenOutAmount","executedBuyAmount","summary","addTransaction","newTransaction","addNotificationForTransaction","finalizeTransaction","updateSuccessful","confirmedTime","transactionStatus","isSuccess","getExplorerLink","checkOrderActivity","getOrder","then","finally","checkTxActivity","getTransactionReceipt","tx","handlePendingTransactions","orderLink","clearAllTransactions","isSuccessfulTransaction","updateTransaction","pendingTransactions","transactions","useEthers","refetchBalances","txListener","callbacks","shouldRefetchBalances","hash","wait","txs","getBySafeTxHash","realTx","onTxConfirmed","onTxFailed","delete","useTokenApprovals","approvedAll","refetchAllowances","approvalsRequired","vault","useSlippage","slippageBasisPoints","minusSlippage","_amount","delta","mul","sub","addSlippage","JOIN_STABLE_POOL_INIT_TAG","JOIN_STABLE_POOL_EXACT_TOKENS_IN_FOR_BPT_OUT_TAG","JOIN_STABLE_POOL_TOKEN_IN_FOR_EXACT_BPT_OUT_TAG","encodeJoinStablePool","joinData","encode","amountsIn","minimumBPT","bptAmountOut","enterTokenIndex","EXIT_STABLE_POOL_EXACT_BPT_IN_FOR_ONE_TOKEN_OUT_TAG","EXIT_STABLE_POOL_EXACT_BPT_IN_FOR_TOKENS_OUT_TAG","EXIT_STABLE_POOL_BPT_IN_FOR_EXACT_TOKENS_OUT_TAG","encodeExitStablePool","exitData","bptAmountIn","exitTokenIndex","amountsOut","maxBPTAmountIn","JOIN_WEIGHTED_POOL_INIT_TAG","JOIN_WEIGHTED_POOL_EXACT_TOKENS_IN_FOR_BPT_OUT_TAG","JOIN_WEIGHTED_POOL_TOKEN_IN_FOR_EXACT_BPT_OUT_TAG","encodeJoinWeightedPool","EXIT_WEIGHTED_POOL_EXACT_BPT_IN_FOR_ONE_TOKEN_OUT_TAG","EXIT_WEIGHTED_POOL_EXACT_BPT_IN_FOR_TOKENS_OUT_TAG","EXIT_WEIGHTED_POOL_BPT_IN_FOR_EXACT_TOKENS_OUT_TAG","encodeExitWeightedPool","exchange","fromInternalBalance","dataEncodeFn","bptOut","parsedAmountsIn","parseAmounts","parsedBptOut","txData","assets","maxAmountsIn","userData","totalSupply","toInternalBalance","bptIn","exactOut","parsedAmountsOut","parsedBptIn","minAmountsOut","isSingleAssetOut","vaultAddress","helpersAddress","balancerHelpers","txParams","joinParams","serialize","exitParams","calculator","calc","tokenAmounts","balances","poolTokenBalances","b","weights","poolTokenWeights","w","denormAmounts","poolTokenDecimals","_calcBptOutGivenExactTokensIn","poolTotalSupply","poolSwapFee","_calcBptInGivenExactTokensOut","tokenIndex","tokenNormalizedWeight","bptTotalSupply","swapFee","_calcBptInGivenExactTokenOut","bptAmount","poolDecimals","_calcTokenOutGivenExactBptIn","opts","bptZeroPriceImpact","exactTokensInForBPTOut","bptForTokensZeroPriceImpact","minus","bptInForExactTokensOut","bptBalance","tokensList","exactBPTInForTokenOut","AMP_PRECISION","amp","ampAdjusted","adjustAmp","scaledBalances","scaledPoolTotalSupply","scaleOutput","ROUND_DOWN","ROUND_UP","eq","tokenAmountOut","isLessThan","normalizedBalance","denormBalance","bptZeroImpact","scaledBalance","priceRate","normalizedSupply","scaledSupply","rounding","normalizedAmount","toFixed","scaledAmount","allTokens","weightedClass","stableClass","types","weighted","stable","bptInForExactTokenOut","maxAmounts","send","receive","fixedToken","hasBalance","propAmountsGiven","amountIndex","greaterThanBalance","tokenOf","currentMaxAmount","thisAmount","fixedAmount","trim","fixedTokenAddress","fixedDenormAmount","fixedRatio","ratioOf","sendTokens","receiveTokens","sendRatios","receiveRatios","ratios","ratioType","ratio","gt","normalizedBalances","normalizedWeights","getPoolWeights","_component_BalRadio","FormTypes","BalAlert","FormTypeToggle","investForm","proportional","propMax","propToken","allBalances","poolExchange","poolCalculator","amountSum","fullAmounts","every","validInput","currentAmount","maxAmount","ceil","propMaxUSD","balanceMaxUSD","minBptOut","custom","setPropMax","resetSlider","setPropAmountsFor","fractionBasisPoints","calcMinBptOut","queryJoin","newTokens","setAllTokens","oldTokens","setPool","tokensChanged","newBalances","oldBalances","balancesChanged","newType","isAuth","_hoisted_20","withdrawType","formatPropBalance","isSingleAsset","singleAsset","setSingleAsset","singleAssetMaxes","singleAssetMaxLabel","inputAmountExceedsPoolBalance","ClickWithdraw","withdrawForm","singleMaxUSD","maxes","single","singleAssetMaxed","ignoreBptCheck","bpt","calcBptIn","queryExit","queryBptIn","isReady","_component_AppSlippageForm","_component_BalBtnGroup","_component_BalPopover","onActivatorClick","hideLiquidity","tradeLiquidityOptions","appTradeLiquidity","appTradeInterface","GNOSIS","appTransactionDeadline","expose","__props","FIXED_OPTIONS","fixedSlippage","customSlippage","isCustomInput","isFixedSlippage","customInputClasses","onFixedInput","onCustomInput","lsEthereumTxType","EIP1559","txType","useEthereumTxType","ethereumTxType","setEthereumTxType","tradeInterfaceOptions","ethereumTxTypeOptions","AppSlippageForm","trade","ClickTradeSettings","ClickInvestSettings","withdrawing","bptDeposited","ClickFarmWithdraw","service","multicaller","execute","allowance","user","balanceOf","erc20","fromEntries","row","erc20ContractService","masterChefMultiCaller","pendingBeets","farmId","masterChef","farmIds","pid","INITIAL_MINT","beethovenxToken","rewarderMulticaller","TimeBasedRewarder","pendingReward","pendingToken","rewardPerSecond","hndRewarder","masterChefContractsService","useFarm","pair","requiresApproval","approve","approveToken","checkAllowanceAndApprove","deposit","harvest","withdrawAndHarvest","url","farmSubgraph","query","userAddress","rewardDebt","beetsHarvested","farmData","farmSubgraphClient","AppProviderSymbol","loadingTokenLists","loadingTokens","useApp","subgraph","toPayload","JSON","stringify","balancerSubgraphClient","POOLS","Pagination","PerPage","DelegateOwner","ZeroAddress","DynamicFees","BlockList","AllowList","Factories","defaultArgs","first","orderBy","orderDirection","where","totalShares_gt","id_not_in","poolType_not","defaultAttrs","totalSwapVolume","totalSwapFee","factory","swapEnabled","POLYGON","args","__args","getPoolLiquidity","totalWeight","sumWeight","sumValue","liquidity","sumBalance","avgPrice","IS_LIQUIDITY_MINING_ENABLED","client","period","timeTravelBlock","isInPoolIds","id_in","pastPoolsQuery","pastPools","addressFor","formatPoolTokens","pastPool","calcVolume","poolAPR","calcAPR","calcFees","calcLiquidityMiningAPR","liquidityMiningAPR","totalAPR","calcTotalAPR","sort","dividedBy","multipliedBy","swapFees","liquidityMiningRewards","getBlockNumber","currentBlock","dayInSecs","blocksInDay","round","blockTime","balance_gt","poolShares","joinExits","serializeActivity","poolActivities","poolActivity","swapVolume","poolSnapshot","DAY","days","currentTimestamp","dayTimestamp","__aliasFor","timestampArgs","timestampFragment","snapshotData","entries","entry","substr","tokenInSym","tokenOutSym","tokenAmountIn","pricingAsset","tokenPrices","poolCount","balancers","poolSnapshots","balancerSubgraphService","useProtocolDataQuery","queryFn","beetsUsdcReferencePricePool","beetsPool","balancerData","getBeetsPrice","beets","usdc","beetsPrice","getCirculatingSupply","circulatingSupply","queryOptions","beetsAddress","usdcAddress","useFarmUserQuery","protocolDataQuery","dynamicDataLoading","queryKey","getUserDataForFarm","getPendingBeetsForFarm","getPendingReward","pendingRewardToken","hndPrice","hnd","pendingBeetsValue","pendingRewardTokenValue","refetchInterval","farmUserQuery","farmUser","approvalRequired","depositing","ClickFarmDeposit","useAllowanceAvailableQuery","depositForm","allowanceAvailableQuery","refetch","availableAllowance","InvestForm","WithdrawForm","SuccessOverlay","TradeSettingsPopover","FarmWithdrawForm","FarmDepositForm","share","txReceipt","Invested","Withdrawal","_component_Activities","PoolActivityTab","ALL_ACTIVITY","USER_ACTIVITY","_component_Table","isLoadingPoolActivities","poolActivitiesIsFetchingNextPage","poolActivitiesHasNextPage","onLoadMore","loadMorePoolActivities","poolActivityType","activityRows","actionCell","detailsCell","valueCell","timeCell","formattedDate","loadMore","sortable","isJoin","getJoinExitValue","formatDistanceToNow","getJoinExitDetails","amountNumber","abs","usePoolActivitiesQuery","balancerSubgraph","pageParam","skip","getNextPageParam","lastPage","usePoolUserActivitiesQuery","isQueryEnabled","Table","route","poolActivitiesQuery","pages","page","hasNextPage","isFetchingNextPage","fetchNextPage","poolAddress","vaultMultiCaller","tokenMultiCaller","allABIs","serializePoolData","_tokens","normalizeWeights","poolTokens","precision","balancerContractsService","usePoolQuery","getTokens","injectTokens","decorate","decoratedPool","getPoolData","onchainData","usePoolSnapshotsQuery","poolQuery","getHistoricalTokenPrices","Balancer","Farm","BalForGas","Claim","PoolsV1Dashboard","PoolsV1Explore","Ethereum","Wallets","usePoolsQuery","tokenList","filterOptions","queryArgs","pageSize","tokensList_contains","decoratedPools","useUserPoolsQuery","poolSharesIds","poolShare","poolSharesMap","poolsWithShares","shares","totalInvestedAmount","useFarmsQuery","getFarms","farms","useAllFarmsForUserQuery","getUserDataForAllFarms","userFarms","decoratedUserFarms","userFarm","useFarms","farmsQuery","allFarmsUserQuery","allFarmsForUser","isLoadingFarms","isIdle","harvestAllFarms","harvestAll","refetchFarmsForUser","calculateTvl","slpBalance","valuePerShare","calculateRewardsPerDay","blocksPerDay","totalBeetsPerDay","beetsPerBlock","allocPoint","totalAllocPoint","calculateApr","blocksPerYear","rewardTokenPrice","tvl","beetsPerYear","farmBeetsPerYear","rewardTokenPerYear","rewarder","valuePerYear","getPoolApr","liquidityMiningApr","decorateFarm","userShare","stake","decorateFarms","decorated","blockSubgraph","getBlocks","blocks","previousValue","currentIndex","difference","averageBlockTime","startOfHour","start","getUnixTime","subHours","end","blockSubgraphClient","useAverageBlockTimeQuery","getAverageBlockTime","SECONDS_PER_DAY","useAverageBlockTime","averageBlockTimeQuery","blocksPerSecond","blocksPerMinute","blocksPerHour","blocksPerWeek","blocksPerMonth","usePools","poolsTokenList","poolsQuery","userPoolsQuery","dynamicDataLoaded","flattened","decoratedFarms","poolsWithFarms","onlyPoolsWithFarms","userPools","userFarmPools","isLoadingPools","isLoadingUserPools","poolsHasNextPage","poolsIsFetchingNextPage","loadMorePools","refetchPools","harvesting","harvestRewards","pendingRewards","count","REFETCH_QUERIES_BLOCK_BUFFER","GauntletIcon","FarmStatCardsLoading","FarmStatCards","router","queryClient","poolSnapshotsQuery","refetchQueriesOnBlockNumber","poolWithFarm","communityManagedFees","feesFixed","poolTypeLabel","feeLabel","tokensWithPrice","invalidateQueries","_component_LMTable","currentWeek","currentWeekTotalFiat","shortNetworkName","isLoadingPoolsIdle","poolMetadata","weeks","totals","otherNetwork","_component_BalAssetSet","_component_TokenPills","latestWeek","iconColumnHeader","src","iconColumnCell","orderedTokenAddressesFor","poolNameCell","orderedPoolTokens","getWeekName","getWeekStart","distributions","distribution","tokenDist","calculatePricesFor","_component_StableTokenPill","_component_WeightedTokenPill","isLast","BalAsset","WeightedTokenPill","StableTokenPill","parts","TokenPills","noGrow","sortedTokens","totalFiat","usdValue","howManyWeeksToSubtract","startOfWeek","subWeeks","LMTable","weeksJSON","weeklyTotals","tokenTotals","allocation","fiatValue","poolsResponse","_component_TradeCard","_component_TradeCardGP","_component_TradePair","_component_TradeRoute","_component_TradeRatesCard","_component_TradePreviewModal","tradeCardShadow","tokenInAddress","tokenOutAddress","exactIn","onTokenInAmountChange","onTokenInAddressChange","onTokenOutAmountChange","onTokenOutAddressChange","onExactInChange","handleAmountChange","body","onActionClick","handleErrorButtonClick","poolsLoading","isLoadingApprovals","tradeDisabled","showTradePreviewModal","sorReturn","tradeSuccess","sorManagerIsInitialized","sorManagerRef","modalTradePreviewIsOpen","trading","slippageError","onTrade","useTokenApproval","approved","allowanceState","isUnlockedV1","isUnlockedV2","approvedSpenders","requiredAllowancesV1","exchangeProxy","requiredAllowancesV2","approveSpender","txHandler","approveV1","approveV2","TradeValidation","MIN_NATIVE_ASSET_REQUIRED","useValidation","tokensAmountsValid","isValidTokenAmount","validationStatus","NO_ACCOUNT","EMPTY","nativeAssetBalance","NO_NATIVE_ASSET","NO_BALANCE","NO_LIQUIDITY","VALID","WrapType","stEthAddress","wstEthAddress","isStETH","getWstETHByStETH","stETHAmount","getStETHByWstETH","wstETHAmount","nativeAddress","Wrap","Unwrap","NonWrap","wrapper","wrapType","wrapAmount","wrap","wrapNative","wrapLido","unwrap","unwrapLido","SWAP_KIND_IN","SWAP_KIND_OUT","swapIn","tokenOutAmountMin","lidoBatchSwapGivenIn","batchSwapGivenInV1","batchSwapGivenInV2","swapOut","tokenInAmountMax","lidoBatchSwapGivenOut","batchSwapGivenOutV1","batchSwapGivenOutV2","funds","recipient","limits","assetInIndex","assetOutIndex","lidoRelayer","GAS_PRICE","VUE_APP_GAS_PRICE","MAX_POOLS","VUE_APP_MAX_POOLS","MIN_PRICE_IMPACT","HIGH_PRICE_IMPACT_THRESHOLD","highPriceImpact","useSor","tokenInAddressInput","tokenInAmountInput","tokenOutAddressInput","tokenOutAmountInput","tokenInAmountScaled","tokenOutAmountScaled","sorConfig","handleAmountsOnFetchPools","slippageBufferRate","sorManager","confirming","latestTxHash","latestTx","sorManagerInitialized","resetState","initSor","poolsUrlV1","poolsUrlV2","subgraphUrl","zeroValueTrade","outputAmount","inputAmount","hasPoolData","setSwapCost","tokenInAmountNormalised","getBestSwap","swapReturn","tokenOutAmountNormalised","returnAmtNormalised","adjustedPiAmount","effectivePrice","priceImpactCalc","SwapExactOut","tradeAmount","tokenInAmountFormatted","tokenOutAmountFormatted","tokenInSymbol","tokenOutSymbol","quote","getQuote","Swapped","successCallback","ClickSwap","tokenInAmountNumber","tokenOutAmountNumber","minAmount","getMinOut","sr","isSlippageError","getMaxIn","calculateSwapCost","ethPriceFiat","tokenPriceFiat","gasPriceWei","gasPriceScaled","ethPriceToken","swapCost","costSwapToken","swapCostToken","integerValue","maximumInAmount","minimumOutAmount","feeAmountInToken","feeAmountOutToken","indexOf","denormAmount","denormStEthAmount","unknownAssets","_component_TradePairToggle","_component_SelectTokenModal","_component_TradeEthBufferModal","tokenInValue","handleInAmountChange","openModalSelectToken","handleMax","balanceLabel","onToggle","handleSwitchTokens","rateMessage","toggleRate","tokenOutValue","handleOutAmountChange","modalSelectTokenIsOpen","excludedTokens","handleSelectToken","modalEthBufferIsOpen","toggle","isRotated","_props","_component_Search","_component_TokenListsListItem","_component_TokenListItem","_component_RecycleScroller","_component_BalModal","selectTokenList","onListExit","toggleSelectTokenList","activeTokenLists","tokenlist","tokenLists","uri","isActive","isActiveList","onToggleList","items","buffer","item","onSelectToken","balanceLoading","_component_BalLoadingNumber","iconURI","animateRef","stagger","_component_BalToggle","_url","listUrl","notBalancer","useUrls","handleInput","autocorrect","autocapitalize","mounted","$refs","searchInput","focus","methods","TokenListItem","TokenListsListItem","Search","open","includeEther","results","approvedTokenLists","toggleTokenList","searchTokens","tokenListArray","tokensWithValues","newQuery","nativeAssetSymbol","ETH_BUFFER","ETH_MODAL_MESSAGE_BUFFER","TradePairToggle","SelectTokenModal","TradeEthBufferModal","isInRate","modalSelectTokenType","balanceNumber","rate","_hoisted_21","_hoisted_22","_hoisted_23","addressIn","addressOut","amountIn","symbolIn","amountOut","symbolOut","valueIn","totalRequiredTransactions","requiresLidoRelayerApproval","isLidoRelayerApproved","requiresTokenApproval","isTokenApproved","approvingLidoRelayer","approveLidoRelayer","approvingToken","useRelayerApprovalQuery","vaultContract","hasApprovedRelayer","Relayer","useRelayerApproval","isEnabled","relayerAddress","LIDO","relayerApproval","isUnlocked","isV1Swap","isWrap","isUnwrap","isStETHTrade","tokenApproval","lidoRelayerApproval","isEthTrade","txCount","routes","toggleVisibility","visible","margin","hops","hop","getPoolLink","formatShare","getV1Routes","getV2Routes","totalSwapAmount","rawHops","rawHop","rawPool","denormWeight","_token","constants","allHops","swap","isDirectSwap","prefixMap","1","42","137","4","250","prefix","idx","amountInNumberFormatted","spooky","spirit","amountOutFormat","routerAddress","inputs","UniswapV2Router02","spookySwap","spiritSwap","dexContractsService","useDexesQuery","amountInNumber","tokenInDecimal","tokenOutDecimal","getAmountsOut","spookyPath","spiritPath","WFTM","BTC","MIM","SPIRIT","SPELL","FUSDT","SWAPS","setInterval","TradeRatesCard","TradePair","TradePreviewModal","TradeRoute","isHighPriceImpact","redirectToInvest","populateInitialTokens","currentRoute","deeplinkId","_component_TradePairGP","_component_LightBulbIcon","_component_TradePreviewModalGP","effectivePriceMessage","warning","isGnosisTrade","isBalancerTrade","switchToWETH","HIGH_FEE_THRESHOLD","feeExceedsPrice","priceExceedsBalance","warnings","highFees","useGnosis","feeQuote","updatingQuotes","hasErrors","getFeeAmount","sellAmount","buyAmount","appData","feeAmount","SELL","BUY","receiver","partiallyFillable","sellTokenBalance","EXTERNAL","postSignedOrder","tokenInAmountEst","tokenOutAmountEst","shouldResetFees","amountToExchange","queryParams","getFeeQuote","feeQuoteResult","isNegative","getPriceQuote","priceQuoteResult","useTrading","tradeRoute","isWrapUnwrapTrade","hasTradeQuote","sor","isConfirming","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_component_ArrowDownIcon","labels","modalTitle","tokenInFiatValue","tokenOutFiatValue","tradeSummary","showSummaryInFiat","totalAfterFees","totalWithoutSlippage","totalWithSlippage","totalBeforeFees","amountBeforeFees","zeroFee","tradeFees","showPriceUpdateError","PRICE_UPDATE_THRESHOLD","cofirmPriceUpdate","showGnosisRelayerApprovalStep","requiresGnosisRelayerApproval","activeTransactionType","showTokenApprovalStep","gnosisRelayerApproval","confirmTrade","showTradeRoute","lastQuote","priceUpdated","priceUpdateAccepted","slippageRatePercent","summaryItems","itemValue","handlePriceUpdate","newQuote","handleInMax","tokenInBalance","handleOutMax","tokenOutBalance","getMaxAmount","TradePairGP","TradePreviewModalGP","dismissedErrors","hasValidationErrors","hasGnosisErrors","hasBalancerErrors","usePoolFilters","setSelectedTokens","addSelectedToken","removeSelectedToken","selectedTokens","TradeCard","TradeCardGP","_component_FarmActionsCard","FarmActionsCard","_component_BeetsLBPChart","_component_BeetsLBPStatCards","_component_LBPTradeCard","_component_LBPTable","loadingTokenPrices","lbpTokenName","lbpTokenAddress","lbpPoolId","lbpEndTime","lbpStartTime","lbpWeightStep","lbpTimeStep","lbpTokenStartingAmount","isBeforeLbpStart","onLbpStateChange","handleLbpStateChange","lbpTokenAddressFormatted","usdcAddressFormatted","_component_BalLbpLineChart","weightStep","timeStep","currentBeetsPrice","beetsBalance","beetsWeight","usdcBalance","usdcWeight","lastPriceTimestamp","formatISO","beetsPriceValues","fistTime","isBefore","parseISO","predicted","endTimestamp","addSeconds","paddingBottom","marketCap","timeRemaining","differenceInMilliseconds","countdownDateFormatted","countdownLabel","lbpData","remaining","sold","predictedPrice","percentSold","transformTime","slotProps","hours","minutes","seconds","_component_LbpTradePair","tokenInIsLbpToken","tokenOutIsLbpToken","LbpTradePair","loadMoreSwaps","isSortable","PAGE_SIZE","useSwapsQuery","tokenAmountIn_gt","poolId_in","swapsQuery","useSubgraphTokenPricesQuery","minTimestamp","numPricesFromResponse","timestamp_gt","BeetsLBPChart","BeetsLBPStatCards","LBPTradeCard","LBPTable","lbpConfig","lbp","isLbpOver","isAfter","endTime","startTime","tokenPricesQuery","subDays","startDateTimeFormatted","tokenSymbol","startingAmount","_component_PoolsTable","_component_TokenSearchInput","noPoolsLabel","showPoolShares","hideV1Links","onAdd","onRemove","filteredPools","goToPoolCreate","communityPools","_component_BalChip","onClosed","hasNoBalances","whiteListedTokens","addToken","sortedBalances","selectTokenModal","addressesWithBalance","tokensWithBalance","isTokenSelected","eth","aprCell","Infinity","ClickPoolsTableRow","useBeethovenxConfigQuery","getBeethovenxConfig","useBeethovenxConfig","beethovenxConfigQuery","beethovenxConfigLoading","beethovenxConfig","incentivizedPools","blacklistedPools","pausedPools","TokenSearchInput","PoolsTable","selectedToken","poolsWithUserInFarm","_component_PoolCreateDefinitionFields","_component_PoolCreateTokenRow","_component_PoolCreateSuccessOverlay","_component_PoolCreateActions","poolSymbol","poolOwner","swapFeePercentage","onPoolNameChange","handlePoolNameChange","onPoolSymbolChange","handlePoolSymbolChange","onPoolOwnerChange","handlePoolOwnerChange","onPoolSwapFeePercentageChange","handleSwapFeePercentageChange","onIsInputValid","handleIsInputValid","tokenListsLoaded","onTokenDelete","deleteToken","onTokenAddressChange","tokenAddressChange","onTokenAmountChange","tokenAmountChange","onTokenWeightChange","tokenWeightChange","onTokenApproved","handleTokenApproved","tokensError","editingDisabled","poolCreateComplete","canCreatePool","onCreatePoolTriggered","handlePoolCreateTriggered","onCreatePoolError","handlePoolCreateError","onCreatedPool","handlePoolCreated","onVerifiedPool","handlePoolVerified","tokenAmountInput","tokenAddressInput","tokenWeightInput","handleWeightChange","handleTokenDelete","canDelete","tokenValue","poolSymbolInfoText","poolSymbolValid","poolOwnerInfoText","poolOwnerValid","swapFeePercentageInfoText","swapFeePercentageValid","BalTextInput","handleIsValid","hasInput","getTokensErrorFromInputs","approvedTokens","poolToken","_component_PoolCreateConfirmModal","createModalVisible","creating","joined","joinPool","joining","onCreate","createPool","SCALING_FACTOR","fp","toFp","isBigNumber","stringified","parseScientific","integer","MaxWeightedTokens","bnToNormalizedWeights","sum","normalizedSum","num","numberSign","sign","coefficient","exponent","zeros","exponentSign","repeat","BUFFER_PERIOD_DURATION","weightedPoolFactoryAddress","weightedPoolFactory","etherscanApiKey","etherscan","apiKey","etherscanApiUrl","apiUrl","argTypes","WeightedPool","getPauseWindowDuration","pauseWindowDuration","constructorArguements","apikey","contractaddress","sourceCode","codeformat","contractname","compilerversion","verifyContract","pollRequest","toCheckStatusRequest","guid","getVerificationStatus","verificationStatus","pausedState","pauseWindowEndTime","blockTimestamp","parameters","URLSearchParams","requestDetails","fetch","ok","responseText","json","urlWithQuery","URL","search","poolVerifier","sorted","sortTokens","tokenInfoMap","joinPoolRequest","poolCreatedEvent","events","verifyPool","PoolCreateConfirmModal","poolCreatorService","verifying","verified","createWeightedPool","getPoolDataFromTransaction","navigateToPool","PoolCreateActions","PoolCreateDefinitionFields","PoolCreateTokenRow","PoolCreateSuccessOverlay","isDefinitionInputValid","defaultPoolOwner","toUpperCase","valid","onclick","approve100","enterFbeets","leaveFbeets","currentExchangeRate","currentExchangeAmount","currentFBeetsBalance","fbeetsAddress","vestingTokenAddress","fbeetsToken","fbeetsVestingToken","fbeets","governanceContractsService","useGovernance","fBeetsTotalSupply","getTotalFreshBeetsSupply","formatUnits","fBeetsBalance","fBeetsBalanceOf","totalVestedTokenAmount","getTotalVestedTokenAmount","approveVestingToken","exchangeRate","totalFBeetsSupply","totalVestedTokens","exchangeAmount","redirect","Invest","Trade","Pool","FarmDetail","LiquidityMining","BeetsLBP","PoolCreate","scrollBehavior","_shorten","str","limit","_ipfsUrl","ipfsHash","VUE_APP_IPFS_NODE","mount","$queryClient","networkMap","environment","release","initSentry","errorHandler","extra","dsn","integrations","BrowserTracing","tracesSampleRate","registerDirectives","directive","beforeMount","binding","__vueOnClickOutside","callback","composedPath","isClickOutside","contains","unmounted","registerGlobalComponents","filePath","componentName","componentConfig","_component_AppNav","_component_AppHeaderBg","_component_AppHero","_component_GlobalStats","_component_router_view","_component_AppFooterNav","_component_VueQueryDevTools","_component_WalletSelectModal","_component_Notifications","isInvestPage","showGlobalStats","$route","useWeb3Watchers","handleTransactionReplacement","originalHash","replaceHash","newAccount","oldAccount","unsubscribe","emitter","localeKey","persistant","ClickNavLogo","_component_AppIcon","AppIcon","iconName","handleClose","darkModeBg","activeClasses","isTradePage","ClickNavTrade","ClickNavInvest","isLoggedIn","isPortfolioPage","ClickNavHome","isFreshBeetsPage","ClickNavFreshBeets","isFarmPage","startsWith","isBeetsPage","isHomePage","_component_AppNavActivityBtn","_component_AppNavClaimBtn","_component_AppNavAccountBtn","_component_WalletIcon","_component_Avatar","_component_AppNavSettings","btn","nftImage","avatarSize","hideDisconnect","connectorLogo","copyAddress","copiedAddress","connectorName","locales","appLocale","appDarkMode","networkColorClass","networkName","APP","tokenOfOwnerByIndex","tokenId","tokenURI","earlyLudwigNft","nftContractService","useNftQuery","ipfsMetadataUri","metadataCid","metadataResponse","ipfsImageUri","image","imageCid","Avatar","nftQuery","shortName","navigator","clipboard","writeText","AppNavSettings","_component_ActivityIcon","_component_ActivityCounter","_component_ActivityRows","unconfirmedTransactions","confirmedTransactions","_component_SpinnerIcon","_component_CheckIcon","disablePending","ActivityCounter","ActivityRows","pendingRewardValue","hasPendingRewardToken","totalBalance","numFarms","dailyApr","hasFarmRewards","harvestAllRewards","averageApr","AppNavAccountBtn","AppNavActivityBtn","AppNavClaimBtn","liquidityMiningSupported","onClickConnect","ClickNavConnectWallet","AppLogo","AppNavAlert","AppNavToggle","AppNavActions","appNav","alerts","hideNetworkSelect","handleScroll","scrollY","isLoadingDecoratedFarms","totalInvestedAndFarmAmount","ClickHeroLearnMore","ClickHeroConnectWallet","_component_WalletButton","wallets","WalletButton","_component_Notification","_component_BalCloseIcon","closeNotification","progressClasses","progress","notificationTimeout","totalProgress","duration","transition","linear","clearTimeout","bgClasses","Notification","_component_AppNavToggle","DECIMAL_PLACES","isGnosisSafeApp","self","AppHeaderBg","AppNav","AppFooterNav","AppHero","VueQueryDevTools","WalletSelectModal","Notifications","GlobalStats","isFarmsPage","renderProviders","providers","remainingProviders","Root","use","vueQuery","mixin","mixins","iconSRC","newURL","MAINNET_GOALS","POLYGON_GOALS","GOALS_MAP","goalsMap","ClickNavFarm","ClickNavBeets","appNetworkGoals","goals","goal","fathom","defaultTheme","require","purge","content","safelist","fontFamily","display","boxShadow","sm","DEFAULT","lg","xl","inner","none","screens","xs","50","100","200","300","400","500","600","700","800","850","900","primary","red","variants","zIndex","plugins","latestValue","silent","animationEasing","k","pow","markLine","borderRadius","padding","IPFS_NODE","gateway","protocol","ipfsService","appNetworkKey","tokenListSanityUrl","tokenListService","useTokenListsQuery","getTokenListMap","TokenListsProviderSymbol","activeListKeys","tokenListsQuery","allTokenLists","defaultTokenList","vettedTokenList","balancerTokenLists","useTokenPricesQuery","getTokenPrices","tokenListTokens","tokenListsTokensFrom","metaDict","getMetaFromLists","unknownAddresses","getMetaOnchain","onchainMeta","lists","list","nativeAssetDecimals","paginatedAddresses","multicalls","fetchBalances","paginatedBalances","validPages","balanceMap","fetchNativeBalance","associateBalances","getBalance","getForContract","allContractAllowances","allowances","metadataConcernClass","balancesConcernClass","allowancesConcernClass","metadata","tokenService","useBalancesQuery","useAllowancesQuery","TokensProviderSymbol","injectedTokens","allowanceContracts","activeTokenListTokens","mapTokenListTokens","priceData","priceQuerySuccess","priceQueryLoading","refetchPrices","balanceData","balanceQuerySuccess","balanceQueryLoading","allowanceData","allowanceQuerySuccess","allowanceQueryLoading","tokensMap","injectable","excluded","removeExcluded","tokensArray","tokensToInject","leftOffsetFor","maxCount","radius","spacer","ConfigService","APP_ENV","APP_DOMAIN","BLOCKNATIVE_DAPP_ID","ALCHEMY_KEY","VUE_APP_ALCHEMY_KEY","ENABLE_STABLE_POOLS","VUE_APP_ENABLE_STABLE_POOLS","BACKEND_URL","requireModule","fileName","moduleName","shorten","sleep","lsAddVersion","_version","lsGetKey","lsSet","localStorage","setItem","lsGet","defaultValue","rawValue","getItem","parse","lsRemove","removeItem","bnum","scale","decimalPlaces","scalePow","scaleMul","scaleDown","shortenLabel","segLength","firstSegment","substring","lastSegment","forChange","reactiveVar","expected","checkCount","checkDelay","checkLimit","handleMouseEnter","handleMouseLeave","tooltipClasses","placement","onShow","onHide","popper","setAttribute","update","removeAttribute","modifiers","BeethovenxService","backendUrl","userProfileDataFragment","portfolio","mapPortfolioData","lowerCaseAddresses","tokenPricesMap","configSanityUrl","AccountAddress","totalValue","totalSwapFees","myFees","priceChange","pricePerShare","mapUserTokenData","pricePerToken","beethovenxService","requireFile","defaultLocale","messages","dateTimeFormats","short","year","month","day","hour","minute","setCurrent","RpcProviderService","wsProvider","ws","newBlockHandler","newBlockNumber","networkKey","rpcUrl"],"mappings":"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,GAAA,KAAQvkC,GAASiU,UAAU8oB,OAC3B,CAAC,4DACD,SACA,CAAC39B,EAAOP,cAVO,2CAAH,0D,uCE3IVm/D,GAAe,EACfC,GAAgB,EAkBf,SAAeC,GAAtB,2C,iEAAO,WACLl+D,EACAoP,EACAsrD,EACA5tB,EACAqxB,GALK,qFAODpB,GAAQrC,EAAU99C,SAASK,QAASy9C,EAAU99C,SAASM,UAPtD,yCAQIkhD,GACLp+D,EACAoP,EACAsrD,EAAU99C,SAASK,QACnBy9C,EAAU99C,SAASM,SACnB4vB,EACAqxB,EACAzD,EAAU99C,SAAS4C,MACnBk7C,EAAU99C,SAASzc,iBAhBlB,WAkBMu6D,EAAUv7C,SAlBhB,yCAmBIk/C,GACLr+D,EACAoP,EACAsrD,EAAUz9C,QACVy9C,EAAUx9C,SACV4vB,EACAqxB,EACAzD,EAAU39C,SAAS,KA1BlB,gCA6BIuhD,GACLt+D,EACAoP,EACAsrD,EAAU99C,SAASK,QACnBy9C,EAAU99C,SAASM,SACnB4vB,EACAqxB,EACAzD,EAAU99C,SAAS4C,MACnBk7C,EAAU99C,SAASzc,iBArClB,2C,yBA0CA,SAAeo+D,GAAtB,2C,iEAAO,WACLv+D,EACAoP,EACAsrD,EACA8D,EACAxxB,GALK,qFAOD+vB,GAAQrC,EAAU99C,SAASK,QAASy9C,EAAU99C,SAASM,UAPtD,yCAQIuhD,GACLz+D,EACAoP,EACAsrD,EAAU99C,SAASK,QACnBy9C,EAAU99C,SAASM,SACnBshD,EACAxxB,EACA0tB,EAAU99C,SAAS4C,MACnBk7C,EAAU99C,SAASzc,iBAhBlB,WAkBMu6D,EAAUv7C,SAlBhB,yCAmBIu/C,GACL1+D,EACAoP,EACAsrD,EAAUz9C,QACVy9C,EAAUx9C,SACVshD,EACA9D,EAAU39C,SAAS,KAzBlB,gCA4BI4hD,GACL3+D,EACAoP,EACAsrD,EAAU99C,SAASK,QACnBy9C,EAAU99C,SAASM,SACnBshD,EACAxxB,EACA0tB,EAAU99C,SAAS4C,MACnBk7C,EAAU99C,SAASzc,iBApClB,2C,yBAyCA,SAAek+D,GAAtB,+C,i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","file":"js/app.5f0d5d59.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalToggle.vue?vue&type=style&index=0&id=2a214289&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalChip.vue?vue&type=style&index=0&id=2a91ec5c&scoped=true&lang=css\"","module.exports = __webpack_public_path__ + \"img/investments-headline.153025d2.svg\";","export function toUtcTime(date: Date) {\n return Date.UTC(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds()\n );\n}\n","import { differenceInWeeks } from 'date-fns';\nimport { bnum } from '@/lib/utils';\nimport { toUtcTime } from '@/lib/utils/date';\nimport { NetworkId } from '@/constants/network';\nimport { configService } from '@/services/config/config.service';\nimport MultiTokenLiquidityMining from './MultiTokenLiquidityMining.json';\nimport { getAddress } from '@ethersproject/address';\nimport { FiatCurrency } from '@/constants/currency';\nimport { TokenPrices } from '@/services/beethovenx/beethovenx.service';\n\ntype PoolId = string;\n\ntype LiquidityMiningTokenRewards = {\n tokenAddress: string;\n amount: number;\n};\n\ntype LiquidityMiningPools = Record;\n\ntype LiquidityMiningWeek = Array<{\n chainId: NetworkId;\n pools: LiquidityMiningPools;\n}>;\n\n// Liquidity mining started on June 1, 2020 00:00 UTC\nconst liquidityMiningStartTime = Date.UTC(2020, 5, 1, 0, 0);\n\nfunction getCurrentLiquidityMiningWeek() {\n return differenceInWeeks(toUtcTime(new Date()), liquidityMiningStartTime) + 1;\n}\n\nfunction getWeek(miningWeek: number) {\n return `week_${miningWeek}`;\n}\n\nexport function computeAPRForPool(\n rewards: number,\n tokenPrice: number | null | undefined,\n totalLiquidity: string\n) {\n // Guard against null price\n return tokenPrice != null\n ? bnum(rewards)\n .div(7)\n .times(tokenPrice)\n .times(365)\n .div(totalLiquidity)\n .toString()\n : '0';\n}\n\nexport function computeTotalAPRForPool(\n tokenRewards: LiquidityMiningTokenRewards[],\n prices: TokenPrices,\n currency: FiatCurrency,\n totalLiquidity: string\n) {\n return tokenRewards\n .reduce(\n (totalRewards, { amount, tokenAddress }) =>\n totalRewards.plus(\n computeAPRForPool(\n amount,\n prices[getAddress(tokenAddress)][currency],\n totalLiquidity\n )\n ),\n bnum(0)\n )\n .toString();\n}\n\nexport function getLiquidityMiningRewards(\n week: number | 'current' = 'current'\n) {\n const miningWeek =\n week === 'current' ? getCurrentLiquidityMiningWeek() : week;\n\n const miningRewards: LiquidityMiningPools = {};\n\n const liquidityMiningWeek = MultiTokenLiquidityMining[\n getWeek(miningWeek)\n ] as LiquidityMiningWeek;\n\n if (liquidityMiningWeek) {\n Object.assign(\n miningRewards,\n liquidityMiningWeek.find(\n pool => pool.chainId === configService.network.chainId\n )?.pools\n );\n }\n\n return miningRewards;\n}\n\nexport const currentLiquidityMiningRewards = getLiquidityMiningRewards();\nlet tokenAddresses = Object.values(currentLiquidityMiningRewards)\n .flat()\n .map(reward => reward.tokenAddress);\ntokenAddresses = [...new Set(tokenAddresses)].map(address =>\n getAddress(address)\n);\nexport const currentLiquidityMiningRewardTokens = tokenAddresses;\n","module.exports = __webpack_public_path__ + \"img/pool-composer.ad38e95f.svg\";","import { Ref } from 'vue';\nimport { GetAmountsOutInput } from '@/services/dex/dex-contract-types';\nexport const POOLS_ROOT_KEY = 'pools';\nexport const FARMS_ROOT_KEY = 'farms';\nexport const BALANCES_ROOT_KEY = 'accountBalances';\nexport const CLAIMS_ROOT_KEY = 'claims';\nexport const SWAPS_ROOT_KEY = 'swaps';\nexport const TOKEN_PRICES_ROOT_KEY = 'tokenPrices';\n\nconst QUERY_KEYS = {\n Farms: {\n All: ['farms', 'all'],\n Current: (id: string) => [FARMS_ROOT_KEY, 'current', { id }],\n ApprovalRequired: (token: string) => [\n FARMS_ROOT_KEY,\n 'approvalRequired',\n { token }\n ],\n User: (id: string, account: Ref) => [\n FARMS_ROOT_KEY,\n 'user',\n { id, account }\n ],\n UserAllFarms: (account: Ref) => [\n FARMS_ROOT_KEY,\n 'userAllFarms',\n { account }\n ],\n TokenBalance: (address: string) => [\n FARMS_ROOT_KEY,\n 'token-balance',\n { address }\n ]\n },\n Pools: {\n All: (tokens: Ref, poolIds: Ref | undefined) => [\n POOLS_ROOT_KEY,\n 'all',\n { tokens, poolIds }\n ],\n User: (account: Ref) => [POOLS_ROOT_KEY, 'user', { account }],\n Current: (id: string) => [POOLS_ROOT_KEY, 'current', { id }],\n Snapshot: (id: string) => [POOLS_ROOT_KEY, 'snapshot', { id }],\n Activities: (id: string) => [POOLS_ROOT_KEY, 'activities', 'all', { id }],\n UserActivities: (id: string, account: Ref) => [\n POOLS_ROOT_KEY,\n 'activities',\n 'user',\n { account, id }\n ]\n },\n Swaps: {\n Current: (poolIds: Ref | undefined) => [\n SWAPS_ROOT_KEY,\n 'current',\n { poolIds }\n ]\n },\n TokenPrices: {\n Current: (poolId: Ref, asset: Ref) => [\n TOKEN_PRICES_ROOT_KEY,\n 'current',\n { poolId, asset }\n ]\n },\n TokenLists: {\n All: ['tokenLists', 'all']\n },\n Config: {\n All: ['config', 'all']\n },\n Claims: {\n All: (account: Ref) => [CLAIMS_ROOT_KEY, { account }]\n },\n Tokens: {\n Prices: (tokens: Ref) => ['tokens', 'prices', { tokens }]\n },\n Account: {\n Balances: (account: Ref, tokens: Ref) => [\n 'account',\n 'balances',\n { account, tokens }\n ],\n Allowances: (\n account: Ref,\n contractAddresses: Ref,\n tokens: Ref\n ) => ['account', 'allowances', { account, contractAddresses, tokens }],\n RelayerApprovals: (account: Ref, relayer: Ref) => [\n 'account',\n 'relayer',\n { account, relayer }\n ],\n Profile: (account: Ref, chainId: Ref) => [\n 'account',\n 'profile',\n { account, chainId }\n ],\n Portfolio: (account: Ref, chainId: Ref) => [\n 'account',\n 'portfolio',\n { account, chainId }\n ],\n Nft: (account: Ref) => ['account', 'nft', { account }]\n },\n App: {\n Chains: ['evm_chains']\n },\n ProtocolData: {\n All: ['protocolData', 'all']\n },\n Dexes: {\n GetAmountsOut: ['Dexes', 'GetAmountsOut', 'all']\n }\n};\n\nexport default QUERY_KEYS;\n","import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"21\",\n height: \"24\",\n viewBox: \"0 0 21 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createVNode(\"defs\", null, [\n /*#__PURE__*/_createVNode(\"linearGradient\", {\n id: \"intercom-gradient-light\",\n x1: \"10.2857\",\n y1: \"0\",\n x2: \"10.2857\",\n y2: \"24\",\n gradientUnits: \"userSpaceOnUse\"\n }, [\n /*#__PURE__*/_createVNode(\"stop\", { \"stop-color\": \"#EF7744\" }),\n /*#__PURE__*/_createVNode(\"stop\", {\n offset: \"1\",\n \"stop-color\": \"#FFB800\"\n })\n ]),\n /*#__PURE__*/_createVNode(\"linearGradient\", {\n id: \"intercom-gradient-dark\",\n x1: \"13.9768\",\n y1: \"8.5\",\n x2: \"6.47678\",\n y2: \"23\",\n gradientUnits: \"userSpaceOnUse\"\n }, [\n /*#__PURE__*/_createVNode(\"stop\", { \"stop-color\": \"#FFFDEB\" }),\n /*#__PURE__*/_createVNode(\"stop\", {\n offset: \"1\",\n \"stop-color\": \"#FFB800\"\n })\n ])\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"svg\", _hoisted_1, [\n _createVNode(\"path\", {\n d: \"M20.5714 24C20.5714 24 17.1081 22.6087 14.3067 21.495H2.52514C1.13143 21.495 0 20.2695 0 18.7598V2.733C0 1.22475 1.13143 0 2.52514 0H18.0456C19.44 0 20.5707 1.224 20.5707 2.73375V16.5368H20.5714V24ZM17.5305 15.0135C17.4755 14.9414 17.4064 14.8818 17.3276 14.8383C17.2489 14.7949 17.1621 14.7687 17.0729 14.7613C16.9836 14.7539 16.8939 14.7655 16.8092 14.7953C16.7246 14.8252 16.647 14.8727 16.5813 14.9347C16.5593 14.9543 14.3662 16.9455 10.285 16.9455C6.25445 16.9455 4.02759 14.9685 3.98792 14.9325C3.92214 14.8707 3.84454 14.8236 3.76002 14.794C3.67549 14.7644 3.58587 14.753 3.49681 14.7605C3.40775 14.7681 3.32119 14.7944 3.2426 14.8378C3.164 14.8812 3.09507 14.9408 3.04016 15.0128C2.92256 15.1625 2.86505 15.3523 2.87927 15.5438C2.89168 15.7342 2.97533 15.9125 3.1129 16.0417C3.21722 16.1378 5.71151 18.4042 10.285 18.4042C14.8592 18.4042 17.3535 16.1378 17.4578 16.0417C17.5951 15.9124 17.6785 15.7341 17.6907 15.5438C17.7049 15.3527 17.6477 15.1632 17.5305 15.0135Z\",\n fill: \n `url(#${\n _ctx.darkMode ? 'intercom-gradient-dark' : 'intercom-gradient-light'\n })`\n \n }, null, 8, [\"fill\"]),\n _hoisted_2\n ]))\n}","\nimport { defineComponent } from 'vue';\nimport useDarkMode from '@/composables/useDarkMode';\n\nexport default defineComponent({\n setup() {\n const { darkMode } = useDarkMode();\n\n return { darkMode };\n }\n});\n","import { render } from \"./IntercomIcon.vue?vue&type=template&id=790df9a8&ts=true\"\nimport script from \"./IntercomIcon.vue?vue&type=script&lang=ts\"\nexport * from \"./IntercomIcon.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { mergeProps as _mergeProps, createVNode as _createVNode, toDisplayString as _toDisplayString, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createVNode(\"label\", {\n for: \"toggle\",\n class: \"bal-toggle-label\"\n}, null, -1)\nconst _hoisted_2 = {\n for: \"toggle\",\n class: \"text-xs text-gray-700\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(\"div\", {\n class: \"bal-toggle\",\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.onClick && _ctx.onClick(...args)))\n }, [\n _createVNode(\"input\", _mergeProps({\n type: \"checkbox\",\n name: _ctx.name,\n checked: _ctx.modelValue\n }, _ctx.$attrs, { class: \"bal-toggle-checkbox\" }), null, 16, [\"name\", \"checked\"]),\n _hoisted_1\n ]),\n _createVNode(\"label\", _hoisted_2, _toDisplayString(_ctx.label), 1)\n ], 64))\n}","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'BalToggle',\n\n inheritAttrs: false,\n\n emits: ['update:modelValue', 'toggle'],\n\n props: {\n name: { type: String, required: true },\n modelValue: { type: Boolean, default: false },\n label: { type: String, default: '' },\n color: {\n type: String,\n default: 'green',\n validator: (val: string): boolean => ['green'].includes(val)\n }\n },\n\n setup(_, { emit }) {\n function onClick(event) {\n emit('update:modelValue', event.target.checked);\n emit('toggle', event.target.checked);\n }\n\n return { onClick };\n }\n});\n","import { render } from \"./BalToggle.vue?vue&type=template&id=2a214289&ts=true\"\nimport script from \"./BalToggle.vue?vue&type=script&lang=ts\"\nexport * from \"./BalToggle.vue?vue&type=script&lang=ts\"\n\nimport \"./BalToggle.vue?vue&type=style&index=0&id=2a214289&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","module.exports = __webpack_public_path__ + \"img/gitbook-logo.0e0cd4c7.png\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AppHeaderBg.vue?vue&type=style&index=0&id=5ff4ff9e&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalTextInput.vue?vue&type=style&index=0&id=247eebfd&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./FreshBeets.vue?vue&type=style&index=0&id=028bf765&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TradePairToggle.vue?vue&type=style&index=0&id=1f41cae6&scoped=true&lang=css\"","module.exports = __webpack_public_path__ + \"img/tokens_black.56ddd52f.svg\";","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"rounded-full h-2 w-2 flex bg-yellow-500 absolute top-4 -right-2\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"div\", null, [\n _createVNode(\"div\", {\n class: ['bal-tab-container', _ctx.containerClasses]\n }, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.tabs, (tab, i) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: i,\n class: ['bal-tab', 'relative', _ctx.stateClasses(tab)],\n onClick: ($event: any) => (_ctx.onClick(tab))\n }, [\n _createTextVNode(_toDisplayString(tab.label) + \" \", 1),\n (tab.alert)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_1))\n : _createCommentVNode(\"\", true)\n ], 10, [\"onClick\"]))\n }), 128))\n ], 2)\n ]))\n}","\nimport { defineComponent, ref, PropType, computed } from 'vue';\n\ninterface Tab {\n value: string;\n label: string;\n alert?: boolean;\n}\n\nexport default defineComponent({\n name: 'BalTabs',\n\n emits: ['selected', 'update:modelValue'],\n\n props: {\n tabs: { type: Array as PropType, required: true },\n modelValue: { type: String, default: '' },\n noPad: { type: Boolean, default: false }\n },\n\n setup(props, { emit }) {\n const activeTab = ref(props.modelValue);\n\n function isActiveTab(tab: Tab): boolean {\n return activeTab.value === tab.value;\n }\n\n function onClick(tab: Tab) {\n activeTab.value = tab.value;\n emit('selected', tab.value);\n emit('update:modelValue', tab.value);\n }\n\n const containerClasses = computed(() => {\n return {\n 'px-4': !props.noPad\n };\n });\n\n function stateClasses(tab: Tab): Record {\n return {\n 'border-green-500 text-green-500 hover:text-green-500': isActiveTab(\n tab\n ),\n 'dark:text-white hover:text-black dark:hover:text-gray-400 dark:border-gray-900 transition-colors': !isActiveTab(\n tab\n )\n };\n }\n\n return {\n activeTab,\n onClick,\n containerClasses,\n stateClasses\n };\n }\n});\n","import { render } from \"./BalTabs.vue?vue&type=template&id=5510b702&ts=true\"\nimport script from \"./BalTabs.vue?vue&type=script&lang=ts\"\nexport * from \"./BalTabs.vue?vue&type=script&lang=ts\"\n\nimport \"./BalTabs.vue?vue&type=style&index=0&id=5510b702&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { key: 1 }\nconst _hoisted_2 = {\n key: 0,\n id: \"lineChartHeader\",\n class: \"mb-4\"\n}\nconst _hoisted_3 = { class: \"text-gray-800 text-xl tracking-wider\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_ECharts = _resolveComponent(\"ECharts\")\n\n return (_ctx.isLoading)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-96 mt-16\"\n }))\n : (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n (_ctx.showHeader)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_2, [\n _createVNode(\"h3\", _hoisted_3, _toDisplayString(_ctx.currentValue), 1),\n _createVNode(\"span\", {\n class: {\n 'text-green-400': _ctx.change >= 0,\n 'text-red-400': _ctx.change < 0,\n 'font-medium': true\n }\n }, _toDisplayString(_ctx.numeral(_ctx.change).format('+0.0%')), 3)\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_ECharts, {\n ref: \"chartInstance\",\n class: [_ctx.height ? `h-${_ctx.height}` : '', 'w-full'],\n option: _ctx.chartConfig,\n autoresize: \"\",\n onUpdateAxisPointer: _ctx.handleAxisMoved,\n \"update-options\": { replaceMerge: 'series' }\n }, null, 8, [\"class\", \"option\", \"onUpdateAxisPointer\"])\n ]))\n}","\n//import 'echarts';\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport numeral from 'numeral';\nimport * as echarts from 'echarts/core';\nimport ECharts from 'vue-echarts';\nimport { last } from 'lodash';\nimport useNumbers, { Preset } from '@/composables/useNumbers';\nimport { format } from 'date-fns';\nimport useTailwind from '@/composables/useTailwind';\nimport useDarkMode from '@/composables/useDarkMode';\n\ntype AxisMoveEvent = {\n seriesIndex: number;\n dataIndex: number;\n};\n\ntype ChartData = {\n name: string;\n values: number[];\n};\n\ninterface AxisLabelFormat {\n xAxis?: 'datetime' | Preset | string;\n yAxis?: Preset | string;\n}\n\ntype PeriodOption = {\n option: string;\n value: string;\n};\n\nexport default defineComponent({\n emits: ['periodSelected'],\n props: {\n data: {\n type: Array as PropType,\n required: true\n },\n onAxisMoved: {\n type: Function\n },\n isLoading: {\n type: Boolean,\n default: () => false\n },\n currentGraphingPeriod: {\n type: Number\n },\n periodOptions: {\n type: Array as PropType\n },\n type: {\n type: String as PropType<'category' | 'time'>,\n default: () => 'category'\n },\n hideYAxis: { type: Boolean, default: false },\n hideXAxis: { type: Boolean, default: false },\n showHeader: {\n type: Boolean\n },\n axisLabelFormatter: {\n type: Object as PropType,\n default: () => ({})\n },\n color: {\n type: Array as PropType\n },\n height: {\n type: String\n },\n showLegend: {\n type: Boolean\n },\n legendState: {\n type: Object\n }\n },\n components: {\n ECharts\n },\n setup(props) {\n const chartInstance = ref();\n const lineChart = ref();\n const currentValue = ref('$0,00');\n const change = ref(0);\n const { fNum } = useNumbers();\n const tailwind = useTailwind();\n const { darkMode } = useDarkMode();\n\n const axisColor = computed(() =>\n darkMode.value\n ? tailwind.theme.colors.gray['600']\n : tailwind.theme.colors.gray['100']\n );\n\n // https://echarts.apache.org/en/option.html\n const chartConfig = computed(() => ({\n //animationDuration: 10000,\n // controls the legend you see at the top\n // formatter allows us to show the latest value for each series\n legend: {\n show: props.showLegend,\n left: -4,\n top: -4,\n icon: 'roundRect',\n itemHeight: 10,\n formatter: (legendName: string) => `${legendName}`,\n selected: props.legendState,\n textStyle: {\n color: darkMode.value\n ? tailwind.theme.colors.gray['100']\n : tailwind.theme.colors.gray['800'],\n fontSize: 14\n },\n inactiveColor: darkMode.value\n ? tailwind.theme.colors.gray['700']\n : tailwind.theme.colors.gray['300']\n },\n // controlling the display of the X-Axis\n xAxis: {\n type: 'time',\n show: !props.hideXAxis,\n axisTick: { show: true, alignWithLabel: true },\n axisLine: {\n onZero: false,\n lineStyle: { color: axisColor.value }\n },\n axisLabel: {\n formatter: value => format(value, 'HH:mm'),\n color: tailwind.theme.colors.gray[300],\n fontSize: 14\n }\n },\n // controlling the display of the Y-Axis\n yAxis: {\n axisLine: {\n show: false,\n lineStyle: { color: axisColor.value }\n },\n type: 'value',\n show: !props.hideYAxis,\n splitNumber: 4,\n splitLine: {\n show: false\n },\n position: 'left',\n axisLabel: {\n show: true,\n formatter: props.axisLabelFormatter.yAxis\n ? value =>\n fNum(value, null, { format: props.axisLabelFormatter.yAxis })\n : undefined,\n color: tailwind.theme.colors.gray[300],\n fontSize: 14\n },\n nameGap: 25,\n min: value => value.min * 0.99,\n max: value => value.max * 1.01\n },\n color: props.color,\n // Controls the boundaries of the chart from the HTML defined rectangle\n grid: {\n left: 0,\n right: '2.5%',\n top: '10%',\n bottom: '5%',\n containLabel: true\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow',\n label: {\n show: false\n }\n },\n backgroundColor: darkMode.value\n ? tailwind.theme.colors.gray['800']\n : tailwind.theme.colors.white,\n borderColor: darkMode.value\n ? tailwind.theme.colors.gray['900']\n : tailwind.theme.colors.white,\n formatter: params => {\n return `\n
\n ${params[0].value[0]}\n ${params\n .map(\n param => `\n \n ${param.marker} ${\n param.seriesName\n } ${fNum(param.value[1], null, {\n format: props.axisLabelFormatter.yAxis\n })}\n \n \n `\n )\n .join('')}\n
\n `;\n }\n },\n\n series: props.data.map((d, i) => ({\n data: d.values,\n type: 'line',\n smooth: 0.3,\n showSymbol: false,\n symbolSize: 8,\n name: d.name,\n lineStyle: {\n width: 2\n },\n\n markPoint:\n i === 0\n ? {\n symbol: 'circle',\n symbolSize: 8,\n itemStyle: {\n borderColor: (props.color || [])[i] || 'black',\n borderWidth: 2.5,\n color: 'white',\n shadowColor: 'white',\n shadowBlur: 8\n },\n label: {\n show: false\n },\n data: [{ name: 'Latest', coord: last(props.data[i].values) }]\n //animation: true,\n //animationDuration: 10000\n }\n : undefined\n }))\n }));\n\n // Triggered when hovering mouse over different xAxis points\n const handleAxisMoved = ({ dataIndex, seriesIndex }: AxisMoveEvent) => {\n if (!props.showHeader) return;\n props.onAxisMoved &&\n props.onAxisMoved(props.data[seriesIndex].values[dataIndex]);\n currentValue.value = numeral(props.data[dataIndex]).format('$0,0.00');\n\n // no change if first point in the chart\n if (dataIndex === 0) {\n change.value = 0;\n } else {\n const prev = props.data[seriesIndex].values[dataIndex - 1] as number;\n const current = props.data[seriesIndex].values[dataIndex] as number;\n const _change = (current - prev) / prev;\n\n // 100% increase if coming from a 0!\n if (prev === 0 && current !== 0) {\n change.value = 1;\n return;\n }\n\n // any errors or 0 division, fall back to 0\n if (isNaN(_change)) {\n change.value = 0;\n return;\n }\n change.value = _change;\n }\n };\n\n return {\n //refs\n chartInstance,\n lineChart,\n\n // methods\n handleAxisMoved,\n numeral,\n\n // data\n currentValue,\n change,\n\n // computed\n chartConfig\n };\n }\n});\n","import { render } from \"./BalLbpLineChart.vue?vue&type=template&id=7cd8eeba&ts=true\"\nimport script from \"./BalLbpLineChart.vue?vue&type=script&lang=ts\"\nexport * from \"./BalLbpLineChart.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalTable.vue?vue&type=style&index=0&id=54f2b76d&lang=css\"","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, mergeProps as _mergeProps, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.options, (option) => {\n return (_openBlock(), _createBlock(_component_BalBtn, _mergeProps({\n key: option.value,\n onClick: ($event: any) => (_ctx.onSelect(option)),\n outline: \"\",\n size: \"sm\",\n class: \"capitalize mr-2 w-18\"\n }, _ctx.attrs_, {\n color: _ctx.modelValue === option.value ? 'green' : 'gray'\n }), {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString('best' === option.label ? _ctx.$t(option.label) : option.label), 1)\n ]),\n _: 2\n }, 1040, [\"onClick\", \"color\"]))\n }), 128))\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue';\nimport omit from 'lodash/omit';\n\ninterface Option {\n value: string | number;\n label: string;\n}\n\nexport default defineComponent({\n name: 'BalBtnGroup',\n\n inheritAttrs: false,\n\n emits: ['update:modelValue'],\n\n props: {\n modelValue: { type: [String, Number], required: true },\n options: { type: Array as PropType, required: true }\n },\n\n setup(props, { emit, attrs }) {\n // COMPUTED\n const attrs_ = computed(() => omit(attrs, 'options'));\n\n // METHODS\n function onSelect(option: Option) {\n emit('update:modelValue', option.value);\n }\n\n return {\n // computed\n attrs_,\n\n // methods\n onSelect\n };\n }\n});\n","import { render } from \"./BalBtnGroup.vue?vue&type=template&id=667cc565&ts=true\"\nimport script from \"./BalBtnGroup.vue?vue&type=script&lang=ts\"\nexport * from \"./BalBtnGroup.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, mergeProps as _mergeProps, createVNode as _createVNode, resolveComponent as _resolveComponent, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-474f5c04\")\n\n_pushScopeId(\"data-v-474f5c04\")\nconst _hoisted_1 = { class: \"flex items-center h-full\" }\nconst _hoisted_2 = { class: \"flex flex-col justify-center h-full flex-1\" }\nconst _hoisted_3 = {\n key: 0,\n value: \"\",\n hidden: \"\"\n}\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n\n return (_openBlock(), _createBlock(\"div\", {\n class: ['bal-select-input', _ctx.containerClasses],\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.onClick && _ctx.onClick(...args)))\n }, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n (_ctx.label || _ctx.$slots.label)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n class: ['label', _ctx.labelClasses]\n }, [\n _renderSlot(_ctx.$slots, \"label\", {}, () => [\n _createTextVNode(_toDisplayString(_ctx.label), 1)\n ], {}, true)\n ], 2))\n : _createCommentVNode(\"\", true),\n _createVNode(\"select\", _mergeProps({\n ref: \"balSelectInput\",\n value: _ctx.modelValue,\n name: _ctx.name,\n class: [_ctx.inputClasses]\n }, _ctx.$attrs, {\n onChange: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.onChange && _ctx.onChange(...args)))\n }), [\n (_ctx.defaultText)\n ? (_openBlock(), _createBlock(\"option\", _hoisted_3, _toDisplayString(_ctx.defaultText), 1))\n : _createCommentVNode(\"\", true),\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.options, (option, i) => {\n return (_openBlock(), _createBlock(\"option\", {\n key: i,\n value: _ctx.valFor(option),\n class: \"\"\n }, _toDisplayString(_ctx.textFor(option)), 9, [\"value\"]))\n }), 128))\n ], 16, [\"value\", \"name\"])\n ]),\n _createVNode(_component_BalIcon, { name: \"chevron-down\" })\n ])\n ], 2))\n})","\nimport BalIcon from '../BalIcon/BalIcon.vue';\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { Rules, RuleFunction } from '@/types';\n\nexport default defineComponent({\n name: 'BalSelectInput',\n\n emits: ['change', 'update:modelValue'],\n\n components: {\n BalIcon\n },\n\n props: {\n modelValue: { type: String, default: '' },\n options: { type: Array, required: true },\n name: { type: String, required: true },\n label: { type: String, default: '' },\n validateOn: { type: String, default: 'change' },\n defaultText: { type: String, default: '' },\n noMargin: { type: Boolean, default: false },\n size: {\n type: String,\n default: 'md',\n validator: (val: string): boolean => ['sm', 'md', 'lg'].includes(val)\n },\n rules: {\n type: Array as PropType,\n default: () => []\n }\n },\n\n setup(props, { emit }) {\n const balSelectInput = ref({} as HTMLSelectElement);\n const errors = ref([] as string[]);\n\n const hasError = computed(() => errors.value.length > 0);\n\n const textSizeClasses = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'text-sm';\n case 'lg':\n return 'text-lg';\n default:\n return 'text-base';\n }\n });\n\n const labelSizeClasses = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'text-xs -mt-4';\n case 'lg':\n return 'text-base -mt-8';\n default:\n return 'text-sm -mt-6';\n }\n });\n\n const inputHeightClasses = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'h-10';\n case 'lg':\n return 'h-16';\n default:\n return 'h-12';\n }\n });\n\n const containerClasses = computed(() => {\n return {\n [textSizeClasses.value]: true,\n [inputHeightClasses.value]: true,\n 'mb-5': !props.noMargin\n };\n });\n\n const inputClasses = computed(() => {\n return {};\n });\n\n const labelClasses = computed(() => {\n return {\n [labelSizeClasses.value]: true\n };\n });\n\n function valFor(option) {\n if (typeof option === 'string' || option instanceof String) return option;\n return option.value;\n }\n\n function textFor(option) {\n if (typeof option === 'string' || option instanceof String) return option;\n return option.text;\n }\n\n function onChange(event): void {\n emit('change', event.target.value);\n emit('update:modelValue', event.target.value);\n }\n\n function validate(val: string): void {\n errors.value = [];\n props.rules.forEach((rule: RuleFunction) => {\n const result = rule(val);\n if (typeof result === 'string') errors.value.push(result);\n });\n }\n\n return {\n balSelectInput,\n hasError,\n containerClasses,\n inputClasses,\n valFor,\n textFor,\n validate,\n labelClasses,\n onChange\n };\n }\n});\n","import { render } from \"./BalSelectInput.vue?vue&type=template&id=474f5c04&scoped=true&ts=true\"\nimport script from \"./BalSelectInput.vue?vue&type=script&lang=ts\"\nexport * from \"./BalSelectInput.vue?vue&type=script&lang=ts\"\n\nimport \"./BalSelectInput.vue?vue&type=style&index=0&id=474f5c04&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-474f5c04\"]])\n\nexport default __exports__","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TradePair.vue?vue&type=style&index=0&id=ee704446&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AppNavSettings.vue?vue&type=style&index=0&id=5cc86466&scoped=true&lang=css\"","import { JsonRpcProvider } from '@balancer-labs/sor2/node_modules/@ethersproject/providers';\nimport { rpcProviderService as _rpcProviderService } from '../rpc-provider/rpc-provider.service';\n\ninterface Web3Profile {\n ens: string | null;\n}\n\nexport default class Web3Service {\n provider: JsonRpcProvider;\n\n constructor(readonly rpcProviderService = _rpcProviderService) {\n this.provider = this.rpcProviderService.jsonProvider;\n }\n\n async getEnsName(address: string): Promise {\n try {\n return await this.provider.lookupAddress(address);\n } catch (error) {\n return null;\n }\n }\n\n async getProfile(address: string): Promise {\n return {\n ens: await this.getEnsName(address)\n };\n }\n}\n\nexport const web3Service = new Web3Service();\n","import { computed, inject, reactive, ref, watch } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { Web3Plugin, Web3ProviderSymbol } from './web3.plugin';\nimport { Web3Provider } from '@ethersproject/providers';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport ConfigService from '../config/config.service';\nimport { web3Service } from './web3.service';\nimport { rpcProviderService } from '../rpc-provider/rpc-provider.service';\n\n/** STATE */\nconst blockNumber = ref(0);\nconst isWalletSelectVisible = ref(false);\n\n/** MUTATIONS */\nfunction setBlockNumber(n: number): void {\n blockNumber.value = n;\n}\n\n/** INIT STATE */\nrpcProviderService.initBlockListener(setBlockNumber);\n\nexport default function useWeb3() {\n const {\n account,\n chainId,\n connector,\n provider,\n walletState,\n signer,\n disconnectWallet,\n connectWallet\n } = inject(Web3ProviderSymbol) as Web3Plugin;\n const configService = new ConfigService();\n const appNetworkConfig = configService.network;\n const isV1Supported = false;\n\n // COMPUTED REFS + COMPUTED REFS\n const userNetworkConfig = computed(() => {\n if (chainId.value) {\n try {\n return configService.getNetworkConfig(String(chainId.value));\n } catch {\n return null;\n }\n }\n\n return null;\n });\n const isWalletReady = computed(() => walletState.value === 'connected');\n const isMainnet = computed(() => appNetworkConfig.chainId === 1);\n const isPolygon = computed(() => appNetworkConfig.chainId === 137);\n\n const canLoadProfile = computed(\n () => account.value !== '' && userNetworkConfig.value?.chainId !== 0\n );\n const isMismatchedNetwork = computed(() => {\n /*return (\n isWalletReady.value &&\n userNetworkConfig.value?.key !== appNetworkConfig.key\n );*/\n\n return false;\n });\n const isUnsupportedNetwork = computed(() => {\n return isWalletReady.value && appNetworkConfig.chainId !== chainId.value;\n });\n const explorerLinks = {\n txLink: (txHash: string) =>\n `${configService.network.explorer}/tx/${txHash}`,\n addressLink: (address: string) =>\n `${configService.network.explorer}/address/${address}`,\n tokenLink: (address: string) =>\n `${configService.network.explorer}/token/${address}`\n };\n\n // METHODS\n const getProvider = () => new Web3Provider(provider.value as any);\n const getSigner = () => getProvider().getSigner();\n const toggleWalletSelectModal = (value: boolean) => {\n if (value !== undefined && typeof value === 'boolean') {\n isWalletSelectVisible.value = value;\n return;\n }\n isWalletSelectVisible.value = !isWalletSelectVisible.value;\n };\n\n const { isLoading: isLoadingProfile, data: profile } = useQuery(\n QUERY_KEYS.Account.Profile(account, chainId),\n () => web3Service.getProfile(account.value),\n reactive({\n enabled: canLoadProfile\n })\n );\n\n // WATCHERS\n watch(account, () => {\n // if the account ref has changed, we know that\n // the user has successfully connected a wallet\n toggleWalletSelectModal(false);\n });\n\n return {\n // refs\n account,\n chainId,\n profile,\n connector,\n provider,\n walletState,\n userNetworkConfig,\n appNetworkConfig,\n isLoadingProfile,\n isWalletReady,\n isWalletSelectVisible,\n isMismatchedNetwork,\n isUnsupportedNetwork,\n explorerLinks,\n signer,\n blockNumber,\n isV1Supported,\n isMainnet,\n isPolygon,\n // methods\n connectWallet,\n getProvider,\n getSigner,\n disconnectWallet,\n toggleWalletSelectModal,\n setBlockNumber\n };\n}\n","module.exports = __webpack_public_path__ + \"img/walletlink.f40549fa.svg\";","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalLoadingBlock.vue?vue&type=style&index=0&id=7e725400&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalTooltip.vue?vue&type=style&index=0&id=e801fd3c&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalAlert.vue?vue&type=style&index=0&id=946232c0&lang=css\"","module.exports = __webpack_public_path__ + \"img/frame.d48644f2.svg\";","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalRangeInput.vue?vue&type=style&index=0&id=1e50ea6d&lang=css\"","import { ref } from 'vue';\nimport { lsSet } from '@/lib/utils';\nimport LS_KEYS from '@/constants/local-storage.keys';\n\n// STATE\nconst darkMode = ref(true);\n\n// MUTATIONS\nfunction setDarkMode(val: boolean): void {\n darkMode.value = val;\n lsSet(LS_KEYS.App.DarkMode, darkMode.value.toString());\n if (darkMode.value) {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n}\n\n// INIT\nsetDarkMode(true);\n\nexport default function useDarkMode() {\n function toggleDarkMode(): void {\n //setDarkMode(!darkMode.value);\n }\n\n return {\n darkMode,\n toggleDarkMode\n };\n}\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LiquidityMining.vue?vue&type=style&index=0&id=5bd94953&lang=css\"","module.exports = __webpack_public_path__ + \"img/status.ff6d023b.svg\";","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalCheckbox.vue?vue&type=style&index=0&id=3ceb9cb8&lang=css\"","import { lsGet, lsSet } from '@/lib/utils';\nimport initialTokens from '@/constants/initialTokens.json';\n\nconst NETWORK = process.env.VUE_APP_NETWORK || '1';\n\nexport interface TradeState {\n inputAsset: string;\n outputAsset: string;\n}\n\nconst state: TradeState = {\n inputAsset: '',\n outputAsset: ''\n};\n\nconst actions = {\n init({ commit }) {\n commit(\n 'setInputAsset',\n lsGet('trade.inputAsset', initialTokens[NETWORK].input)\n );\n commit(\n 'setOutputAsset',\n lsGet('trade.outputAsset', initialTokens[NETWORK].output)\n );\n }\n};\n\nconst mutations = {\n setInputAsset(state: TradeState, asset: string): void {\n state.inputAsset = asset;\n lsSet('trade.inputAsset', asset);\n },\n\n setOutputAsset(state: TradeState, asset: string): void {\n state.outputAsset = asset;\n lsSet('trade.outputAsset', asset);\n }\n};\n\nexport default {\n namespaced: true,\n state,\n mutations,\n actions\n};\n","export default {\n Providers: {\n App: 'providers.app',\n TokenLists: 'providers.tokenLists',\n Tokens: 'providers.tokens'\n }\n};\n","module.exports = __webpack_public_path__ + \"img/metamask.96518a15.svg\";","var map = {\n\t\"./alerts.ts\": \"fec2\",\n\t\"./app.ts\": \"ac1a\",\n\t\"./index.ts\": \"f33f\",\n\t\"./market.ts\": \"98d6\",\n\t\"./trade.ts\": \"3cc4\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"3f9b\";","module.exports = __webpack_public_path__ + \"img/default.f6aa4028.svg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Pool.vue?vue&type=style&index=0&id=76266212&scoped=true&lang=css\"","import set from 'lodash/set';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { Contract } from '@ethersproject/contracts';\nimport { Interface } from '@ethersproject/abi';\nimport { default as multicallAbi } from '@/lib/abi/Multicall.json';\nimport configs from '@/lib/config';\n\nexport async function call(provider, abi: any[], call: any[], options?) {\n const contract = new Contract(call[0], abi, provider);\n try {\n const params = call[2] || [];\n return await contract[call[1]](...params, options || {});\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nexport async function multicall(\n network: string,\n provider,\n abi: any[],\n calls: any[],\n options?\n): Promise {\n const multi = new Contract(\n configs[network].addresses.multicall,\n multicallAbi,\n provider\n );\n const itf = new Interface(abi);\n try {\n const [, res] = await multi.aggregate(\n calls.map(call => [\n call[0].toLowerCase(),\n itf.encodeFunctionData(call[1], call[2])\n ]),\n options || {}\n );\n return res.map((call, i) => itf.decodeFunctionResult(calls[i][1], call));\n } catch (e) {\n return Promise.reject(e);\n }\n}\n\nexport class Multicaller {\n public network: string;\n public provider: JsonRpcProvider;\n public abi: any[];\n public options: any = {};\n public calls: any[] = [];\n public paths: any[] = [];\n\n constructor(\n network: string,\n provider: JsonRpcProvider,\n abi: any[],\n options?\n ) {\n this.network = network;\n this.provider = provider;\n this.abi = abi;\n this.options = options || {};\n }\n\n call(path, address, fn, params?): Multicaller {\n this.calls.push([address, fn, params]);\n this.paths.push(path);\n return this;\n }\n\n async execute(from?: any): Promise {\n const obj = from || {};\n const result = await multicall(\n this.network,\n this.provider,\n this.abi,\n this.calls,\n this.options\n );\n result.forEach((r, i) => set(obj, this.paths[i], r.length > 1 ? r : r[0]));\n this.calls = [];\n this.paths = [];\n return obj;\n }\n}\n","export const oneSecondInMs = 1000;\nexport const oneMinInMs = 60 * oneSecondInMs;\nexport const oneHourInMs = 60 * oneMinInMs;\n\nexport const twentyFourHoursInMs = 24 * oneHourInMs;\nexport const twentyFourHourseInSecs = twentyFourHoursInMs / oneSecondInMs;\n\nexport const timeNowInMs = Math.floor(Date.now() / oneSecondInMs);\n\nexport default function useTime() {\n return {\n oneSecondInMs,\n oneMinInMs,\n oneHourInMs,\n twentyFourHoursInMs,\n twentyFourHourseInSecs\n };\n}\n","import { twentyFourHoursInMs } from '@/composables/useTime';\n\nexport const FETCH_ONCE_OPTIONS = {\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n staleTime: twentyFourHoursInMs\n};\n","import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"bal-icon inline-block\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"i\", {\n \"data-feather\": _ctx.name,\n width: _ctx.iconSize,\n height: _ctx.iconSize,\n fill: _ctx.fill\n }, null, 8, [\"data-feather\", \"width\", \"height\", \"fill\"])\n ]))\n}","\nimport feather from 'feather-icons';\nimport { computed, defineComponent, onMounted } from 'vue';\n\nexport default defineComponent({\n name: 'BalIcon',\n\n props: {\n name: { type: String, required: true },\n size: {\n type: String,\n default: 'md',\n validator: (val: string): boolean => {\n return ['xxs', 'xs', 'sm', 'md', 'lg', 'xl'].includes(val);\n }\n },\n filled: { type: Boolean, default: false }\n },\n\n setup(props) {\n const iconSize = computed(() => {\n switch (props.size) {\n case 'xxs':\n return '8';\n case 'xs':\n return '12';\n case 'sm':\n return '16';\n case 'lg':\n return '24';\n case 'xl':\n return '28';\n default:\n return '20';\n }\n });\n\n const fill = computed(() => (props.filled ? 'currentColor' : 'none'));\n\n onMounted(() => feather.replace());\n\n return { iconSize, fill };\n }\n});\n","import { render } from \"./BalIcon.vue?vue&type=template&id=527de920&ts=true\"\nimport script from \"./BalIcon.vue?vue&type=script&lang=ts\"\nexport * from \"./BalIcon.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, renderSlot as _renderSlot, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"bal-blank-slate\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _renderSlot(_ctx.$slots, \"default\", {\n textContent: _toDisplayString(_ctx.$t('noContent'))\n })\n ]))\n}","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'BalBlankSlate'\n});\n","import { render } from \"./BalBlankSlate.vue?vue&type=template&id=ea44f706&ts=true\"\nimport script from \"./BalBlankSlate.vue?vue&type=script&lang=ts\"\nexport * from \"./BalBlankSlate.vue?vue&type=script&lang=ts\"\n\nimport \"./BalBlankSlate.vue?vue&type=style&index=0&id=ea44f706&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AppHero.vue?vue&type=style&index=0&id=29171d76&lang=css\"","export default {\n App: {\n DarkMode: 'app.darkMode',\n Locale: 'app.locale',\n TradeSlippage: 'app.tradeSlippage',\n TradeLiquidity: 'app.tradeLiquidity',\n TradeInterface: 'app.tradeInterface',\n TradeDeadline: 'app.tradeDeadline',\n EthereumTxType: 'app.ethereumTxType'\n },\n UserSettings: {\n Currency: 'userSettings.currency'\n },\n TokenLists: {\n Toggled: 'tokenLists.toggled'\n },\n Transactions: 'transactions'\n};\n","module.exports = \"data:image/png;base64,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\"","\n","import { render } from \"./ArrowDownIcon.vue?vue&type=template&id=148bfb66\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","module.exports = __webpack_public_path__ + \"img/community-image.50a66d9c.png\";","import { inject } from 'vue';\nimport {\n TokenListsProviderResponse,\n TokenListsProviderSymbol\n} from '@/providers/token-lists.provider';\n\nconst defaultProviderResponse = {} as TokenListsProviderResponse;\n\nexport default function useTokenLists(): TokenListsProviderResponse {\n return inject(TokenListsProviderSymbol, defaultProviderResponse);\n}\n","module.exports = __webpack_public_path__ + \"img/imtoken.c3896985.svg\";","\n","import { render } from \"./SpinnerIcon.vue?vue&type=template&id=345d0661\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveDynamicComponent as _resolveDynamicComponent, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, createVNode as _createVNode, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-354a7ca8\")\n\n_pushScopeId(\"data-v-354a7ca8\")\nconst _hoisted_1 = {\n key: 1,\n class: \"flex-1 flex items-center\"\n}\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n return (_openBlock(), _createBlock(\"div\", {\n class: ['bal-card', _ctx.cardClasses]\n }, [\n (!!_ctx.title || _ctx.$slots.header)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n class: ['header', _ctx.headerClasses]\n }, [\n (!!_ctx.title)\n ? (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.titleTag), {\n key: 0,\n textContent: _toDisplayString(_ctx.title)\n }, null, 8, [\"textContent\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.$slots.header)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _renderSlot(_ctx.$slots, \"header\", {}, undefined, true)\n ]))\n : _createCommentVNode(\"\", true)\n ], 2))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", {\n class: ['content', _ctx.contentClasses]\n }, [\n _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n ], 2),\n (_ctx.$slots.footer)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 1,\n class: ['footer', _ctx.footerClasses]\n }, [\n _renderSlot(_ctx.$slots, \"footer\", {}, undefined, true)\n ], 2))\n : _createCommentVNode(\"\", true)\n ], 2))\n})","\nimport { defineComponent, computed } from 'vue';\n\nexport default defineComponent({\n name: 'BalCard',\n\n props: {\n title: { type: String, default: '' },\n titleTag: { type: String, default: 'h5' },\n square: { type: Boolean, default: false },\n noPad: { type: Boolean, default: false },\n noContentPad: { type: Boolean, default: false },\n noBorder: { type: Boolean, default: false },\n darkBgColor: { type: String, default: '850' },\n shadow: {\n type: String,\n default: '',\n validator: (val: string): boolean => {\n return ['', 'none', 'sm', 'md', 'lg', 'xl'].includes(val);\n }\n }\n },\n\n setup(props) {\n const borderClasses = computed(() => {\n return 'border dark:border-gray-900';\n });\n\n const cardClasses = computed(() => {\n return {\n 'rounded-lg': !props.square,\n [`bg-white dark:bg-gray-${props.darkBgColor}`]: true,\n [`shadow${props.shadow ? '-' : ''}${props.shadow}`]: true,\n [borderClasses.value]: !props.noBorder\n };\n });\n\n const headerClasses = computed(() => {\n return {\n 'p-4 pb-3': !props.noPad\n };\n });\n\n const contentClasses = computed(() => {\n return {\n 'p-4 pt-3': !props.noPad && !props.noContentPad\n };\n });\n\n const footerClasses = computed(() => {\n return {\n 'rounded-b-lg': !props.square,\n 'p-4 pt-3': !props.noPad\n };\n });\n\n return {\n cardClasses,\n contentClasses,\n headerClasses,\n footerClasses\n };\n }\n});\n","import { render } from \"./BalCard.vue?vue&type=template&id=354a7ca8&scoped=true&ts=true\"\nimport script from \"./BalCard.vue?vue&type=script&lang=ts\"\nexport * from \"./BalCard.vue?vue&type=script&lang=ts\"\n\nimport \"./BalCard.vue?vue&type=style&index=0&id=354a7ca8&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-354a7ca8\"]])\n\nexport default __exports__","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, renderSlot as _renderSlot, resolveComponent as _resolveComponent, createSlots as _createSlots, withModifiers as _withModifiers, withKeys as _withKeys, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-0d27bada\")\n\n_pushScopeId(\"data-v-0d27bada\")\nconst _hoisted_1 = { class: \"content-container\" }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalCard = _resolveComponent(\"BalCard\")\n const _component_AnimatePresence = _resolveComponent(\"AnimatePresence\")\n\n return (_ctx.show)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n class: \"bal-modal\",\n onClick: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_ctx.hide && _ctx.hide(...args))),\n onKeyup: _cache[5] || (_cache[5] = _withKeys(\n//@ts-ignore\n(...args) => (_ctx.hide && _ctx.hide(...args)), [\"esc\"]))\n }, [\n _createVNode(_Transition, {\n name: \"modal-bg\",\n mode: \"out-in\",\n appear: \"\"\n }, {\n default: _withId(() => [\n (_ctx.showContent)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n class: \"modal-bg\",\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.hide && _ctx.hide(...args)))\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(_component_AnimatePresence, {\n initial: { opacity: 0, translateY: 7.5 },\n animate: {\n opacity: 1,\n translateY: 0,\n delay: 100\n },\n exit: { opacity: 0, translateY: 15 },\n isVisible: _ctx.showContent,\n onOnExit: _cache[3] || (_cache[3] = ($event: any) => (_ctx.$emit('close'))),\n class: \"flex justify-center w-full\"\n }, {\n default: _withId(() => [\n _createVNode(\"div\", {\n class: \"content\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(() => {}, [\"stop\"]))\n }, [\n _createVNode(_component_BalCard, {\n title: _ctx.title,\n shadow: \"lg\",\n \"no-pad\": _ctx.noPad,\n \"no-content-pad\": _ctx.noContentPad,\n class: \"modal-card\",\n \"no-border\": \"\"\n }, _createSlots({\n default: _withId(() => [\n _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n ]),\n _: 2\n }, [\n (_ctx.$slots.header)\n ? {\n name: \"header\",\n fn: _withId(() => [\n _renderSlot(_ctx.$slots, \"header\", {}, undefined, true)\n ])\n }\n : undefined,\n (_ctx.$slots.footer)\n ? {\n name: \"footer\",\n fn: _withId(() => [\n _renderSlot(_ctx.$slots, \"footer\", {}, undefined, true)\n ])\n }\n : undefined\n ]), 1032, [\"title\", \"no-pad\", \"no-content-pad\"])\n ])\n ]),\n _: 1\n }, 8, [\"initial\", \"isVisible\"])\n ])\n ], 32))\n : _createCommentVNode(\"\", true)\n})","import { renderSlot as _renderSlot, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Transition as _Transition, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n id: \"animateContainer\",\n ref: \"animateContainer\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(_Transition, {\n appear: \"\",\n onEnter: _ctx.enter,\n onLeave: _ctx.leave,\n css: false\n }, {\n default: _withCtx(() => [\n (_ctx.isVisible)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _renderSlot(_ctx.$slots, \"default\")\n ], 512))\n : _createCommentVNode(\"\", true)\n ]),\n _: 3\n }, 8, [\"onEnter\", \"onLeave\"]))\n}","\nimport anime, { AnimeParams } from 'animejs';\nimport { defineComponent, onMounted, PropType, ref } from 'vue';\nexport default defineComponent({\n emits: ['on-exit'],\n props: {\n initial: {\n type: Object as PropType,\n required: true\n },\n animate: {\n type: Object as PropType,\n required: true\n },\n exit: {\n type: Object as PropType,\n required: true\n },\n isVisible: {\n type: Boolean,\n required: true\n }\n },\n setup(props, { emit }) {\n const animateContainer = ref();\n\n onMounted(() => {\n if (animateContainer.value) {\n anime.set(animateContainer.value, {\n ...props.initial\n });\n }\n });\n\n const enter = (el, done) => {\n // on mount we set initial values, but the issue is that enter will run at\n // the same time, setTimeout(0) makes the animation run on the next\n // available tick, so it's instant visually but on a tick delay for code\n setTimeout(\n () =>\n anime({\n targets: el,\n ...props.animate,\n easing: 'spring(0.2, 80, 10, 0)',\n complete: () => done()\n }),\n 0\n );\n };\n\n const leave = (el, done) => {\n anime.set(el, {\n 'pointer-events': 'none'\n });\n anime({\n targets: el,\n ...props.exit,\n easing: 'spring(0.2, 80, 10, 0)',\n complete: () => {\n done();\n emit('on-exit');\n }\n });\n };\n\n return {\n animateContainer,\n enter,\n leave\n };\n }\n});\n","import { render } from \"./AnimatePresence.vue?vue&type=template&id=7d4f02ca&ts=true\"\nimport script from \"./AnimatePresence.vue?vue&type=script&lang=ts\"\nexport * from \"./AnimatePresence.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport BalCard from '../BalCard/BalCard.vue';\nimport AnimatePresence from '@/components/animate/AnimatePresence.vue';\nimport { defineComponent, ref, toRefs, watch } from 'vue';\n\nexport default defineComponent({\n name: 'BalModal',\n\n components: {\n BalCard,\n AnimatePresence\n },\n\n props: {\n show: { type: Boolean, default: false },\n title: { type: String, default: '' },\n noPad: { type: Boolean, default: false },\n noContentPad: { type: Boolean, default: false }\n },\n\n setup(props) {\n const { show } = toRefs(props);\n const showContent = ref(show.value);\n\n // Watchers\n watch(show, newVal => {\n showContent.value = newVal;\n });\n\n // Methods\n function hide(): void {\n showContent.value = false;\n }\n\n return {\n showContent,\n hide\n };\n }\n});\n","import { render } from \"./BalModal.vue?vue&type=template&id=0d27bada&scoped=true&ts=true\"\nimport script from \"./BalModal.vue?vue&type=script&lang=ts\"\nexport * from \"./BalModal.vue?vue&type=script&lang=ts\"\n\nimport \"./BalModal.vue?vue&type=style&index=0&id=0d27bada&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0d27bada\"]])\n\nexport default __exports__","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AppNavClaimBtn.vue?vue&type=style&index=0&id=c82d7412&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Trade.vue?vue&type=style&index=0&id=3fd32942&scoped=true&lang=css\"","import { renderSlot as _renderSlot, createVNode as _createVNode, resolveComponent as _resolveComponent, mergeProps as _mergeProps, withCtx as _withCtx, resolveDirective as _resolveDirective, withDirectives as _withDirectives, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalCard = _resolveComponent(\"BalCard\")\n const _directive_click_outside = _resolveDirective(\"click-outside\")\n\n return _withDirectives((_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", {\n class: \"bal-popover-activator group\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.trigger === 'click' && _ctx.togglePopover())),\n onMouseenter: _cache[2] || (_cache[2] = ($event: any) => (_ctx.trigger === 'hover' && _ctx.showPopover())),\n onMouseleave: _cache[3] || (_cache[3] = ($event: any) => (_ctx.trigger === 'hover' && _ctx.hidePopover()))\n }, [\n _renderSlot(_ctx.$slots, \"activator\")\n ], 32),\n _createVNode(\"div\", { class: _ctx.popoverWrapperClasses }, [\n _createVNode(_component_BalCard, _mergeProps({ shadow: \"lg\" }, _ctx.$attrs, { darkBgColor: \"800\" }), {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _: 3\n }, 16)\n ], 2)\n ], 512)), [\n [_directive_click_outside, _ctx.handleClickOutside]\n ])\n}","\nimport { defineComponent, ref, computed, PropType, watch } from 'vue';\n\ntype PopoverTrigger = 'click' | 'hover';\n\nexport default defineComponent({\n name: 'BalPopover',\n\n props: {\n trigger: {\n type: String as PropType,\n default: 'click'\n },\n align: { type: String, default: 'right' }\n },\n emits: ['show', 'hide'],\n setup(props, { emit }) {\n // DATA\n const popoverOpened = ref(false);\n\n // METHODS\n function togglePopover() {\n popoverOpened.value = !popoverOpened.value;\n }\n\n function showPopover() {\n popoverOpened.value = true;\n }\n\n function hidePopover() {\n popoverOpened.value = false;\n }\n\n function handleClickOutside() {\n if (props.trigger === 'click') {\n hidePopover();\n }\n }\n\n // COMPUTED\n const popoverWrapperClasses = computed(() => ({\n 'bal-popover-wrapper': true,\n 'bal-popover-wrapper-visible': popoverOpened.value,\n [`${props.align}-0`]: true\n }));\n\n watch(popoverOpened, () => {\n if (popoverOpened.value) {\n emit('show');\n } else {\n emit('hide');\n }\n });\n\n return {\n // methods\n togglePopover,\n showPopover,\n hidePopover,\n handleClickOutside,\n\n // computed\n popoverWrapperClasses\n };\n }\n});\n","import { render } from \"./BalPopover.vue?vue&type=template&id=6f12ff38&ts=true\"\nimport script from \"./BalPopover.vue?vue&type=script&lang=ts\"\nexport * from \"./BalPopover.vue?vue&type=script&lang=ts\"\n\nimport \"./BalPopover.vue?vue&type=style&index=0&id=6f12ff38&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import {\n SOR as SORV2,\n SwapInfo,\n DisabledOptions,\n SubGraphPoolsBase,\n SubgraphPoolBase,\n SwapTypes,\n fetchSubgraphPools,\n SwapOptions,\n PoolFilter\n} from '@balancer-labs/sor2';\nimport { SOR as SORV1 } from '@balancer-labs/sor';\nimport { BaseProvider } from '@ethersproject/providers';\nimport { AddressZero } from '@ethersproject/constants';\nimport BigNumber from 'bignumber.js';\nimport { scale } from '@/lib/utils';\nimport { Swap, Pool } from '@balancer-labs/sor/dist/types';\nimport { NATIVE_ASSET_ADDRESS } from '@/constants/tokens';\n\nconst SWAP_COST = process.env.VUE_APP_SWAP_COST || '100000';\nexport enum LiquiditySelection {\n Best = 'best',\n V1 = 'v1',\n V2 = 'v2'\n}\n\nexport interface SorReturn {\n isV1swap: boolean;\n isV1best: boolean;\n tokenIn: string;\n tokenOut: string;\n returnDecimals: number;\n hasSwaps: boolean;\n returnAmount: BigNumber;\n marketSpNormalised: BigNumber;\n v1result: [Swap[][], BigNumber, BigNumber];\n v2result: SwapInfo;\n}\n\ninterface FetchStatus {\n v1finishedFetch: boolean;\n v2finishedFetch: boolean;\n v1success: boolean;\n v2success: boolean;\n}\n\n/*\nAims to manage liquidity between V1 & V2 using SOR.\n*/\nexport class SorManager {\n private sorV1: SORV1;\n private sorV2: SORV2;\n private weth: string;\n private subgraphUrlV2: string;\n private fetchStatus: FetchStatus = {\n v1finishedFetch: false,\n v2finishedFetch: false,\n v1success: false,\n v2success: false\n };\n private isV1Supported: boolean;\n selectedPools: (SubgraphPoolBase | Pool)[] = [];\n\n constructor(\n isV1Supported: boolean,\n provider: BaseProvider,\n gasPrice: BigNumber,\n maxPools: number,\n chainId: number,\n weth: string,\n poolsSourceV1: string,\n poolsSourceV2: SubGraphPoolsBase | string,\n subgraphUrlV2: string,\n disabledOptions: DisabledOptions = {\n isOverRide: false,\n disabledTokens: []\n }\n ) {\n this.isV1Supported = isV1Supported;\n\n // Initialises SOR. Note they use different SOR packages.\n this.sorV1 = new SORV1(\n provider,\n gasPrice,\n maxPools,\n chainId,\n poolsSourceV1\n );\n\n this.sorV2 = new SORV2(\n provider,\n gasPrice,\n maxPools,\n chainId,\n poolsSourceV2,\n new BigNumber(SWAP_COST),\n disabledOptions\n );\n this.weth = weth;\n this.subgraphUrlV2 = subgraphUrlV2;\n }\n\n // Uses SOR V2 to retrieve the cost & reuses for SOR V1 to save time (requires onchain call).\n // If previously called the cached value will be used.\n async setCostOutputToken(\n tokenAddr: string,\n tokenDecimals: number,\n manualCost: BigNumber | null = null\n ): Promise {\n tokenAddr = tokenAddr === NATIVE_ASSET_ADDRESS ? this.weth : tokenAddr;\n\n let cost = this.sorV2.tokenCost[tokenAddr.toLowerCase()];\n if (cost) {\n console.log(\n `[SorManager] Cost for token ${tokenAddr} (cache): ${cost.toString()}`\n );\n } else {\n if (manualCost) {\n cost = await this.sorV2.setCostOutputToken(\n tokenAddr,\n tokenDecimals,\n manualCost\n );\n console.log(\n `[SorManager] Cost for token ${tokenAddr} (new manual): ${cost.toString()}`\n );\n } else {\n cost = await this.sorV2.setCostOutputToken(tokenAddr, tokenDecimals);\n console.log(\n `[SorManager] Cost for token ${tokenAddr} (new): ${cost.toString()}`\n );\n }\n }\n if (this.isV1Supported)\n this.sorV1.setCostOutputToken(\n tokenAddr,\n cost.times(new BigNumber(10 ** tokenDecimals))\n );\n return cost;\n }\n\n // This fetches ALL pool with onchain info.\n async fetchPools(): Promise {\n let v1fetch;\n console.log(`[SorManager] fetch Subgraph (V1:${this.isV1Supported})`);\n // Starts fetch of all pools from V2 subgraph (non-blocking)\n const subgraphFetchV2 = fetchSubgraphPools(this.subgraphUrlV2);\n\n if (this.isV1Supported) {\n console.log('[SorManager] V1 fetchPools started');\n v1fetch = this.sorV1.fetchPools();\n }\n\n // This will catch any error fetching Subgraph or onChain data with V2\n try {\n // Wait for V2 subgraph fetch\n const subgraphPoolsV2 = await subgraphFetchV2;\n console.log(\n '[SorManager] SubgraphV2 fetched',\n subgraphPoolsV2.pools.slice(-3)\n );\n console.time('[SorManager] V2 fetchPools');\n // Use Subgraph pools data and fetch onChain\n const v2result = await this.sorV2.fetchPools(true, subgraphPoolsV2);\n this.fetchStatus.v2finishedFetch = true;\n this.fetchStatus.v2success = v2result;\n } catch (err) {\n console.log(`[SorManager] V2 fetchPools issue: ${err.message}`);\n this.fetchStatus.v2finishedFetch = true;\n this.fetchStatus.v2success = false;\n }\n console.log(\n `[SorManager] V2 fetchPools result: ${this.fetchStatus.v2success}`\n );\n console.timeEnd(`[SorManager] V2 fetchPools`);\n\n if (this.isV1Supported) {\n // This will catch any error with OnChain data with V1\n try {\n const v1result = await v1fetch;\n this.fetchStatus.v1finishedFetch = true;\n this.fetchStatus.v1success = v1result;\n } catch (err) {\n console.log(`[SorManager] V1 fetchPools issue: ${err.message}`);\n this.fetchStatus.v1finishedFetch = true;\n this.fetchStatus.v1success = false;\n }\n console.log(\n `[SorManager] V1 fetchPools result: ${this.fetchStatus.v1success}`\n );\n }\n\n this.selectedPools = this.sorV2.onChainBalanceCache.pools;\n }\n // Gets swaps for V1 & V2 liquidity and determined best result\n async getBestSwap(\n tokenIn: string,\n tokenOut: string,\n tokenInDecimals: number,\n tokenOutDecimals: number,\n swapType: SwapTypes,\n amountScaled: BigNumber,\n swapDecimals: number,\n liquiditySelection: LiquiditySelection\n ): Promise {\n console.log(\n `[SorManager] getBestSwap: ${tokenIn}/${tokenOut} (Liq: ${liquiditySelection}) (V1: ${this.isV1Supported})`\n );\n // V2 uses normalised values. V1 uses scaled values.\n const amountNormalised = scale(amountScaled, -swapDecimals);\n\n const v1TokenIn = tokenIn === NATIVE_ASSET_ADDRESS ? this.weth : tokenIn;\n const v1TokenOut = tokenOut === NATIVE_ASSET_ADDRESS ? this.weth : tokenOut;\n\n let swapsV1: Swap[][] = [];\n let returnAmountV1 = new BigNumber(0);\n let marketSpV1Scaled = new BigNumber(0);\n let returnAmountV1ConsideringFees = new BigNumber(0);\n\n if (this.isV1Supported)\n [\n swapsV1,\n returnAmountV1,\n marketSpV1Scaled,\n returnAmountV1ConsideringFees\n ] = await this.sorV1.getSwaps(\n v1TokenIn.toLowerCase(),\n v1TokenOut.toLowerCase(),\n swapType === SwapTypes.SwapExactIn ? 'swapExactIn' : 'swapExactOut',\n amountScaled\n );\n\n const v2TokenIn = tokenIn === NATIVE_ASSET_ADDRESS ? AddressZero : tokenIn;\n const v2TokenOut =\n tokenOut === NATIVE_ASSET_ADDRESS ? AddressZero : tokenOut;\n\n const timestampSeconds = Math.floor(Date.now() / 1000);\n\n // The poolTypeFilter can be used to filter to different pool types. Useful for debug/testing.\n const swapOptions: SwapOptions = {\n poolTypeFilter: PoolFilter.All,\n timestamp: timestampSeconds\n };\n\n const swapInfoV2: SwapInfo = await this.sorV2.getSwaps(\n v2TokenIn.toLowerCase(),\n v2TokenOut.toLowerCase(),\n swapType,\n amountNormalised,\n swapOptions\n );\n\n // Both are scaled amounts\n console.log(`[SorManager] ${returnAmountV1.toString()}: V1 return amount`);\n console.log(\n `[SorManager] ${returnAmountV1ConsideringFees.toString()}: V1 return amount with fees`\n );\n console.log(\n `[SorManager] ${swapInfoV2.returnAmount.toString()}: V2 return amount`\n );\n console.log(\n `[SorManager] ${swapInfoV2.returnAmountConsideringFees.toString()}: V2 return amount with fees`\n );\n\n if (swapType === SwapTypes.SwapExactIn) {\n return this.selectBestSwapIn(\n returnAmountV1,\n returnAmountV1ConsideringFees,\n marketSpV1Scaled,\n swapsV1,\n swapInfoV2,\n tokenIn,\n tokenInDecimals,\n tokenOut,\n tokenOutDecimals,\n liquiditySelection\n );\n } else {\n return this.selectBestSwapOut(\n returnAmountV1,\n returnAmountV1ConsideringFees,\n marketSpV1Scaled,\n swapsV1,\n swapInfoV2,\n tokenIn,\n tokenInDecimals,\n tokenOut,\n tokenOutDecimals,\n liquiditySelection\n );\n }\n }\n\n private selectBestSwapIn(\n returnAmountV1: BigNumber,\n returnAmountV1ConsideringFees: BigNumber,\n marketSpV1Scaled: BigNumber,\n swapsV1: Swap[][],\n swapInfoV2: SwapInfo,\n tokenIn: string,\n tokenInDecimals: number,\n tokenOut: string,\n tokenOutDecimals: number,\n liquiditySelection: LiquiditySelection\n ): SorReturn {\n // For swapExactIn the highest return is best\n let isV1best: boolean;\n if (returnAmountV1.isZero()) isV1best = false;\n else if (swapInfoV2.swapAmount.isZero()) isV1best = true;\n else if (\n returnAmountV1ConsideringFees.lt(swapInfoV2.returnAmountConsideringFees)\n )\n isV1best = false;\n else isV1best = true;\n\n // Need to return marketSp as normalized\n const marketSpV1Normalised: BigNumber = marketSpV1Scaled.div(\n 10 ** (18 + tokenInDecimals - tokenOutDecimals)\n );\n\n const v1return: SorReturn = {\n isV1swap: true,\n isV1best,\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n returnDecimals: tokenOutDecimals,\n hasSwaps: swapsV1.length > 0,\n returnAmount: returnAmountV1,\n v1result: [swapsV1, returnAmountV1, marketSpV1Scaled],\n v2result: swapInfoV2,\n marketSpNormalised: marketSpV1Normalised\n };\n\n const v2return: SorReturn = {\n isV1swap: false,\n isV1best,\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n returnDecimals: tokenOutDecimals,\n hasSwaps: swapInfoV2.swaps.length > 0,\n returnAmount: swapInfoV2.returnAmount,\n v1result: [swapsV1, returnAmountV1, marketSpV1Scaled],\n v2result: swapInfoV2,\n marketSpNormalised: swapInfoV2.marketSp\n };\n\n if (liquiditySelection === LiquiditySelection.V1) {\n console.log('[SorManager] V1 swap is best by liq.');\n this.selectedPools = this.sorV1.onChainCache.pools;\n return v1return;\n } else if (liquiditySelection === LiquiditySelection.V2) {\n console.log('[SorManager] V2 swap is best by liq.');\n this.selectedPools = this.sorV2.onChainBalanceCache.pools;\n return v2return;\n }\n\n // Either V1 & V2 are both unlocked or both locked so return best option by value\n if (isV1best) {\n console.log('[SorManager] V1 swap is best.');\n this.selectedPools = this.sorV1.onChainCache.pools;\n return v1return;\n } else {\n console.log('[SorManager] V2 swap is best.');\n this.selectedPools = this.sorV2.onChainBalanceCache.pools;\n return v2return;\n }\n }\n\n private selectBestSwapOut(\n returnAmountV1: BigNumber,\n returnAmountV1ConsideringFees: BigNumber,\n marketSpV1Scaled: BigNumber,\n swapsV1: Swap[][],\n swapInfoV2: SwapInfo,\n tokenIn: string,\n tokenInDecimals: number,\n tokenOut: string,\n tokenOutDecimals: number,\n liquiditySelection: LiquiditySelection\n ): SorReturn {\n // swapExactOut cases\n // For swapExactOut the lowest return is best if > 0\n let isV1best: boolean;\n if (returnAmountV1.isZero() && swapInfoV2.returnAmount.isZero())\n isV1best = true;\n // This doesn't actually matter but rules out 0 values for next cases\n else if (returnAmountV1.isZero()) isV1best = false;\n else if (swapInfoV2.returnAmount.isZero()) isV1best = true;\n else\n isV1best = returnAmountV1ConsideringFees.lt(\n swapInfoV2.returnAmountConsideringFees\n );\n\n // Need to return marketSp as normalized\n const marketSpV1Normalised: BigNumber = marketSpV1Scaled.div(\n 10 ** (18 + tokenInDecimals - tokenOutDecimals)\n );\n\n const v1return: SorReturn = {\n isV1swap: true,\n isV1best,\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n returnDecimals: tokenInDecimals,\n hasSwaps: swapsV1.length > 0,\n returnAmount: returnAmountV1,\n v1result: [swapsV1, returnAmountV1, marketSpV1Scaled],\n v2result: swapInfoV2,\n marketSpNormalised: marketSpV1Normalised\n };\n\n const v2return: SorReturn = {\n isV1swap: false,\n isV1best,\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n returnDecimals: tokenInDecimals,\n hasSwaps: swapInfoV2.swaps.length > 0,\n returnAmount: swapInfoV2.returnAmount,\n v1result: [swapsV1, returnAmountV1, marketSpV1Scaled],\n v2result: swapInfoV2,\n marketSpNormalised: swapInfoV2.marketSp\n };\n\n if (liquiditySelection === LiquiditySelection.V1) {\n console.log('[SorManager] V1 swap is best by liq.');\n this.selectedPools = this.sorV1.onChainCache.pools;\n return v1return;\n } else if (liquiditySelection === LiquiditySelection.V2) {\n console.log('[SorManager] V2 swap is best by liq.');\n this.selectedPools = this.sorV2.onChainBalanceCache.pools;\n return v2return;\n }\n\n // Either V1 & V2 are both unlocked or both locked so return best option by value\n if (isV1best) {\n console.log('[SorManager] V1 swap is best.');\n this.selectedPools = this.sorV1.onChainCache.pools;\n return v1return;\n } else {\n console.log('[SorManager] V2 swap is best.');\n this.selectedPools = this.sorV2.onChainBalanceCache.pools;\n return v2return;\n }\n }\n\n // Check if pool info fetch\n hasPoolData(): boolean {\n if (!this.isV1Supported && this.fetchStatus.v2finishedFetch) {\n if (this.fetchStatus.v2success === false) {\n console.log(\n `[SorManager] Error Fetching V2 Pools & V1 Not Supported - No Liquidity Sources.`\n );\n return false;\n } else return true;\n }\n\n if (this.fetchStatus.v1finishedFetch && this.fetchStatus.v2finishedFetch) {\n // TO DO - This could be used to provide more info to UI?\n if (\n this.fetchStatus.v1success === false &&\n this.fetchStatus.v2success === false\n ) {\n console.log(\n `[SorManager] Error Fetching V1 & V2 Pools - No Liquidity Sources.`\n );\n return false;\n } else if (this.fetchStatus.v1success === false)\n console.log(\n `[SorManager] Error Fetching V1 Pools - Using V2 Liquidity Only.`\n );\n else if (this.fetchStatus.v2success === false)\n console.log(\n `[SorManager] Error Fetching V2 Pools - Using V1 Liquidity Only.`\n );\n\n return true;\n } else {\n console.log(`[SorManager] Not finished fetching pools.`);\n return false;\n }\n }\n}\n","module.exports = __webpack_public_path__ + \"img/github-logo.a0570de8.png\";","\n\n\n\n\n","import { render } from \"./BalRangeInput.vue?vue&type=template&id=1e50ea6d\"\nimport script from \"./BalRangeInput.vue?vue&type=script&lang=js\"\nexport * from \"./BalRangeInput.vue?vue&type=script&lang=js\"\n\nimport \"./BalRangeInput.vue?vue&type=style&index=0&id=1e50ea6d&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./MinusSquareIcon.vue?vue&type=template&id=2b308193\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalBlankSlate.vue?vue&type=style&index=0&id=ea44f706&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalBtn.vue?vue&type=style&index=0&id=0d4a69a4&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./PoolCreate.vue?vue&type=style&index=0&id=a92be1ae&scoped=true&lang=css\"","import { resolveComponent as _resolveComponent, createVNode as _createVNode, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center\" }\nconst _hoisted_2 = /*#__PURE__*/_createVNode(\"span\", { class: \"text-gray-300 dark:text-gray-500\" }, \".\", -1)\nconst _hoisted_3 = { class: \"text-gray-300 dark:text-gray-500 mr-px\" }\nconst _hoisted_4 = /*#__PURE__*/_createVNode(\"span\", { class: \"text-gray-300 dark:text-gray-500\" }, \".\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n (_ctx.type === 'token')\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_BalLoadingBlock, {\n class: _ctx.blockClasses,\n rounded: \"sm\",\n darker: \"\"\n }, null, 8, [\"class\"]),\n _createVNode(_component_BalLoadingBlock, {\n class: _ctx.blockClasses,\n rounded: \"sm\",\n darker: \"\"\n }, null, 8, [\"class\"]),\n _hoisted_2,\n _createVNode(_component_BalLoadingBlock, {\n class: _ctx.blockClasses,\n rounded: \"sm\",\n darker: \"\"\n }, null, 8, [\"class\"]),\n _createVNode(_component_BalLoadingBlock, {\n class: _ctx.blockClasses,\n rounded: \"sm\",\n darker: \"\"\n }, null, 8, [\"class\"]),\n _createVNode(_component_BalLoadingBlock, {\n class: _ctx.blockClasses,\n rounded: \"sm\",\n darker: \"\"\n }, null, 8, [\"class\"]),\n _createVNode(_component_BalLoadingBlock, {\n class: _ctx.blockClasses,\n rounded: \"sm\",\n darker: \"\"\n }, null, 8, [\"class\"])\n ], 64))\n : (_ctx.type === 'fiat')\n ? (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _createVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.currencySymbol), 1),\n _createVNode(_component_BalLoadingBlock, {\n class: _ctx.blockClasses,\n rounded: \"sm\",\n darker: \"\"\n }, null, 8, [\"class\"]),\n _createVNode(_component_BalLoadingBlock, {\n class: _ctx.blockClasses,\n rounded: \"sm\",\n darker: \"\"\n }, null, 8, [\"class\"]),\n _hoisted_4,\n _createVNode(_component_BalLoadingBlock, {\n class: _ctx.blockClasses,\n rounded: \"sm\",\n darker: \"\"\n }, null, 8, [\"class\"]),\n _createVNode(_component_BalLoadingBlock, {\n class: _ctx.blockClasses,\n rounded: \"sm\",\n darker: \"\"\n }, null, 8, [\"class\"])\n ], 64))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport useUserSettings from '@/composables/useUserSettings';\nimport { FiatSymbol } from '@/constants/currency';\nimport { defineComponent, computed } from 'vue';\nimport BalLoadingBlock from '../BalLoadingBlock/BalLoadingBlock.vue';\n\nexport default defineComponent({\n name: 'BalLoadingNumber',\n\n components: {\n BalLoadingBlock\n },\n\n props: {\n type: {\n type: String,\n default: 'token',\n validator: (val: string): boolean => ['token', 'fiat'].includes(val)\n },\n numberWidth: { type: String, default: '3' },\n numberHeight: { type: String, default: '5' }\n },\n\n setup(props) {\n const { currency } = useUserSettings();\n\n const currencySymbol = computed(() => FiatSymbol[currency.value]);\n\n const blockClasses = computed(() => [\n `w-${props.numberWidth}`,\n `h-${props.numberHeight}`,\n 'mr-px'\n ]);\n\n return { blockClasses, currencySymbol };\n }\n});\n","import { render } from \"./BalLoadingNumber.vue?vue&type=template&id=2721c872&ts=true\"\nimport script from \"./BalLoadingNumber.vue?vue&type=script&lang=ts\"\nexport * from \"./BalLoadingNumber.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"24\",\n height: \"25\",\n viewBox: \"0 0 24 25\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}\nconst _hoisted_2 = {\n id: \"stars-gradient\",\n x1: \"24\",\n y1: \"-11.5\",\n x2: \"2.7273\",\n y2: \"16.3182\",\n gradientUnits: \"userSpaceOnUse\"\n}\nconst _hoisted_3 = /*#__PURE__*/_createVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M21.7809 7.27232C20.6203 7.70216 19.7081 8.67468 19.305 9.91198L18.5527 12.2203C18.5419 12.2555 18.5111 12.2792 18.4764 12.2792C18.4417 12.2792 18.4109 12.2555 18.4001 12.2203L17.6479 9.91198C17.2447 8.67461 16.3323 7.70207 15.1716 7.27232L13.0065 6.47049C12.9742 6.45851 12.9525 6.42606 12.9525 6.38961C12.9525 6.35316 12.9742 6.32071 13.0065 6.30873L15.1716 5.5069C16.3323 5.07715 17.2447 4.10461 17.6479 2.86724L18.4001 0.558892C18.4109 0.523752 18.4417 0.5 18.4764 0.5C18.5111 0.5 18.5419 0.523752 18.5527 0.558892L19.305 2.86724C19.7081 4.10455 20.6203 5.07707 21.7809 5.5069L23.9461 6.30873C23.9783 6.32071 24 6.35316 24 6.38961C24 6.42606 23.9783 6.45851 23.9461 6.47049L21.7809 7.27232ZM12.2613 14.4746C10.6494 15.0717 9.38251 16.4224 8.82264 18.1409L7.77749 21.3469C7.76214 21.3952 7.71964 21.4276 7.67183 21.4276C7.62402 21.4276 7.58152 21.3952 7.56617 21.3469L6.52102 18.1409C5.96115 16.4224 4.69427 15.0717 3.08238 14.4746L0.0748959 13.361C0.0300526 13.3443 0 13.2993 0 13.2486C0 13.198 0.0300526 13.153 0.0748959 13.1363L3.08238 12.0227C4.69428 11.4256 5.96116 10.0749 6.52102 8.35643L7.56617 5.1504C7.58152 5.10213 7.62402 5.06965 7.67183 5.06965C7.71964 5.06965 7.76214 5.10213 7.77749 5.1504L8.82264 8.35643C9.38251 10.0749 10.6494 11.4256 12.2613 12.0227L15.2688 13.1363C15.3136 13.153 15.3437 13.198 15.3437 13.2486C15.3437 13.2993 15.3136 13.3443 15.2688 13.361L12.2613 14.4746ZM18.4025 22.6042C18.725 21.6144 19.4546 20.8364 20.383 20.4924L22.1159 19.851C22.1417 19.8414 22.1591 19.8154 22.1591 19.7862C22.1591 19.7571 22.1417 19.7311 22.1159 19.7215L20.383 19.0801C19.4546 18.7361 18.725 17.9581 18.4025 16.9683L17.8005 15.1217C17.7925 15.0925 17.7674 15.0725 17.7389 15.0725C17.7104 15.0725 17.6853 15.0925 17.6773 15.1217L17.0768 16.9683C16.754 17.9585 16.0237 18.7365 15.0948 19.0801L13.3634 19.7215C13.3376 19.7311 13.3202 19.7571 13.3202 19.7862C13.3202 19.8154 13.3376 19.8414 13.3634 19.851L15.0948 20.4924C16.0237 20.836 16.754 21.614 17.0768 22.6042L17.6773 24.4509C17.6853 24.48 17.7104 24.5 17.7389 24.5C17.7674 24.5 17.7925 24.48 17.8005 24.4509L18.4025 22.6042Z\",\n fill: \"url(#stars-gradient)\"\n}, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"svg\", _hoisted_1, [\n _createVNode(\"defs\", null, [\n _createVNode(\"linearGradient\", _hoisted_2, [\n _createVNode(\"stop\", {\n \"stop-color\": _ctx.theme.colors.blue['500']\n }, null, 8, [\"stop-color\"]),\n _createVNode(\"stop\", {\n offset: \"1\",\n \"stop-color\": _ctx.theme.colors.green['500']\n }, null, 8, [\"stop-color\"])\n ])\n ]),\n _hoisted_3\n ]))\n}","\nimport useTailwind from '@/composables/useTailwind';\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'StarsIcon',\n\n setup() {\n const { theme } = useTailwind();\n\n return { theme };\n }\n});\n","import { render } from \"./StarsIcon.vue?vue&type=template&id=591ff310&ts=true\"\nimport script from \"./StarsIcon.vue?vue&type=script&lang=ts\"\nexport * from \"./StarsIcon.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","var map = {\n\t\"./ar-AE.json\": \"a259\",\n\t\"./default.json\": \"369a\",\n\t\"./es-ES.json\": \"4109\",\n\t\"./fr-FR.json\": \"cfe4\",\n\t\"./hi-IN.json\": \"e72e\",\n\t\"./it-IT.json\": \"bf7d\",\n\t\"./ja-JP.json\": \"2b1b\",\n\t\"./ko-KR.json\": \"7692\",\n\t\"./pt-PT.json\": \"7b75\",\n\t\"./ru-RU.json\": \"b69a\",\n\t\"./tr-TR.json\": \"3ba8\",\n\t\"./zh-CN.json\": \"423e\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"741a\";","\n","import { render } from \"./WalletIcon.vue?vue&type=template&id=55a9131d\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, resolveComponent as _resolveComponent, createVNode as _createVNode, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-2a91ec5c\")\n\n_pushScopeId(\"data-v-2a91ec5c\")\nconst _hoisted_1 = { class: \"content-container\" }\nconst _hoisted_2 = { key: 0 }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n\n return (_openBlock(), _createBlock(\"div\", {\n class: ['bal-chip', _ctx.classes]\n }, [\n _createVNode(\"div\", _hoisted_1, [\n (_ctx.label)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_2, _toDisplayString(_ctx.label), 1))\n : _renderSlot(_ctx.$slots, \"default\", { key: 1 }, undefined, true),\n (_ctx.closeable)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 2,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('closed')))\n }, [\n _createVNode(_component_BalIcon, {\n name: \"x\",\n size: _ctx.iconSize,\n class: ['close', _ctx.iconClasses]\n }, null, 8, [\"size\", \"class\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ], 2))\n})","\nimport BalIcon from '../BalIcon/BalIcon.vue';\nimport { defineComponent, computed } from 'vue';\n\nfunction useChipClasses(size: string, color: string) {\n const isGradient = color === 'gradient';\n\n const sizeClasses = () => {\n switch (size) {\n case 'sm':\n return 'p-px text-xs';\n case 'lg':\n return 'p-2 text-base';\n default:\n return 'p-1 text-sm';\n }\n };\n\n const bgGradientClasses = (): string => {\n return 'text-white bg-gradient-to-tr from-green-500 to-red-500';\n };\n\n const bgColorClasses = (): string => {\n if (isGradient) return bgGradientClasses();\n if (color === 'white') return 'bg-white dark:bg-gray-900';\n return `bg-${color}-100 dark:bg-${color}-800`;\n };\n\n const outlineClasses = (): string => {\n return `border-gray-100 dark:border-gray-900 border shadow-lg`;\n };\n\n return computed(() => {\n return {\n [sizeClasses()]: true,\n [bgColorClasses()]: true,\n [outlineClasses()]: true\n };\n });\n}\n\nfunction useCloseIcon(size: string, color: string) {\n const isGradient = color === 'gradient';\n const colorClass = isGradient ? 'text-white' : `text-${color}-500`;\n\n const classes = computed(() => {\n return {\n [colorClass]: true\n };\n });\n\n const iconSize = computed(() => {\n switch (size) {\n case 'sm':\n return 'xxs';\n case 'lg':\n return 'sm';\n default:\n return 'xs';\n }\n });\n\n return { classes, iconSize };\n}\n\nexport default defineComponent({\n name: 'BalChip',\n\n components: {\n BalIcon\n },\n\n emits: ['closed'],\n\n props: {\n label: { type: String, default: '' },\n closeable: { type: Boolean, default: false },\n size: {\n type: String,\n default: 'md',\n validator: (val: string): boolean => ['sm', 'md', 'lg'].includes(val)\n },\n color: {\n type: String,\n default: 'gray',\n validator: (val: string): boolean =>\n ['gray', 'gradient', 'white'].includes(val)\n },\n outline: {\n type: Boolean,\n default: () => false\n }\n },\n\n setup(props) {\n const classes = useChipClasses(props.size, props.color);\n const { classes: iconClasses, iconSize } = useCloseIcon(\n props.size,\n props.color\n );\n\n return { classes, iconClasses, iconSize };\n }\n});\n","import { render } from \"./BalChip.vue?vue&type=template&id=2a91ec5c&scoped=true&ts=true\"\nimport script from \"./BalChip.vue?vue&type=script&lang=ts\"\nexport * from \"./BalChip.vue?vue&type=script&lang=ts\"\n\nimport \"./BalChip.vue?vue&type=style&index=0&id=2a91ec5c&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2a91ec5c\"]])\n\nexport default __exports__","import { openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"div\", {\n class: ['bal-loading-block', _ctx.classes]\n }, null, 2))\n}","\nimport useDarkMode from '@/composables/useDarkMode';\nimport { defineComponent, computed } from 'vue';\n\nexport default defineComponent({\n name: 'BalLoadingBlock',\n\n props: {\n white: { type: Boolean, default: false },\n darker: { type: Boolean, default: false },\n rounded: {\n type: String,\n default: 'lg',\n validator: (val: string): boolean => ['sm', 'md', 'lg'].includes(val)\n }\n },\n\n setup(props) {\n const { darkMode } = useDarkMode();\n\n const bgClass = computed(() => {\n if (props.white) return 'shimmer-white';\n if (darkMode.value) {\n return props.darker ? 'shimmer-dark-mode-darker' : 'shimmer-dark-mode';\n }\n return props.darker ? 'shimmer-light-mode-darker' : 'shimmer-light-mode';\n });\n\n const classes = computed(() => {\n return {\n [`rounded-${props.rounded}`]: true,\n [bgClass.value]: true\n };\n });\n\n return { classes };\n }\n});\n","import { render } from \"./BalLoadingBlock.vue?vue&type=template&id=7e725400&ts=true\"\nimport script from \"./BalLoadingBlock.vue?vue&type=script&lang=ts\"\nexport * from \"./BalLoadingBlock.vue?vue&type=script&lang=ts\"\n\nimport \"./BalLoadingBlock.vue?vue&type=style&index=0&id=7e725400&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./ActivityIcon.vue?vue&type=template&id=4227b07d\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Notification.vue?vue&type=style&index=0&id=d5ba1948&scoped=true&lang=css\"","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, mergeProps as _mergeProps, createVNode as _createVNode, createTextVNode as _createTextVNode, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-247eebfd\")\n\n_pushScopeId(\"data-v-247eebfd\")\nconst _hoisted_1 = {\n key: 0,\n class: \"label\"\n}\nconst _hoisted_2 = { class: \"flex flex-col justify-center h-full\" }\nconst _hoisted_3 = { class: \"flex items-center justify-center h-full\" }\nconst _hoisted_4 = {\n key: 1,\n class: \"error\"\n}\nconst _hoisted_5 = { class: \"relative\" }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n return (_openBlock(), _createBlock(\"div\", {\n class: ['bal-text-input', _ctx.wrapperClasses]\n }, [\n (!!_ctx.label)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_1, _toDisplayString(_ctx.label), 1))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", {\n class: ['input-group', _ctx.inputGroupClasses]\n }, [\n (_ctx.$slots.prepend)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n class: ['prepend', _ctx.prependClasses]\n }, [\n _renderSlot(_ctx.$slots, \"prepend\", {}, undefined, true)\n ], 2))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", {\n class: ['input-container', _ctx.inputContainerClasses]\n }, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"input\", _mergeProps({\n class: [_ctx.inputClasses],\n type: _ctx.type,\n name: _ctx.name,\n value: _ctx.modelValue\n }, _ctx.$attrs, {\n disabled: _ctx.disabled,\n onBlur: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.onBlur && _ctx.onBlur(...args))),\n onInput: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.onInput && _ctx.onInput(...args))),\n onKeydown: _cache[3] || (_cache[3] = \n//@ts-ignore\n(...args) => (_ctx.onKeydown && _ctx.onKeydown(...args)))\n }), null, 16, [\"type\", \"name\", \"value\", \"disabled\"]),\n (_ctx.$slots.info || _ctx.info)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n class: ['info', _ctx.infoClasses]\n }, [\n _renderSlot(_ctx.$slots, \"info\", {}, () => [\n _createTextVNode(_toDisplayString(_ctx.info), 1)\n ], {}, true)\n ], 2))\n : _createCommentVNode(\"\", true)\n ])\n ], 2),\n (_ctx.$slots.append)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 1,\n class: [_ctx.appendClasses]\n }, [\n _createVNode(\"div\", _hoisted_3, [\n _renderSlot(_ctx.$slots, \"append\", {}, undefined, true)\n ])\n ], 2))\n : _createCommentVNode(\"\", true)\n ], 2),\n (_ctx.hasError)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_4, [\n _createVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.errors[0]), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.fadedOut)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 2,\n class: \"faded-out-overlay\",\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.$emit('click')))\n }))\n : _createCommentVNode(\"\", true)\n ], 2))\n})","\nimport {\n defineComponent,\n ref,\n computed,\n toRefs,\n PropType,\n watchEffect,\n watch\n} from 'vue';\nimport { Rules, RuleFunction } from '@/types';\n\nexport default defineComponent({\n name: 'BalTextInput',\n\n inheritAttrs: false,\n\n emits: [\n 'input',\n 'blur',\n 'update:modelValue',\n 'update:isValid',\n 'click',\n 'keydown'\n ],\n\n props: {\n modelValue: {\n type: [String, Number],\n default: ''\n },\n isValid: {\n type: Boolean,\n default: true\n },\n name: { type: String, required: true },\n label: { type: String, default: '' },\n squareTop: { type: Boolean, default: false },\n noMargin: { type: Boolean, default: false },\n textRight: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n appendBorder: { type: Boolean, default: false },\n prependBorder: { type: Boolean, default: false },\n fadedOut: { type: Boolean, default: false },\n info: { type: String, default: '' },\n decimalLimit: { type: Number, default: 18 },\n type: {\n type: String,\n default: 'text',\n validator: (val: string): boolean => {\n return ['text', 'number', 'date', 'email', 'password'].includes(val);\n }\n },\n size: {\n type: String,\n default: 'md',\n validator: (val: string): boolean => ['sm', 'md', 'lg'].includes(val)\n },\n validateOn: {\n type: String,\n default: 'blur',\n validator: (val: string): boolean => ['blur', 'input'].includes(val)\n },\n rules: {\n type: Array as PropType,\n default: () => []\n }\n },\n\n setup(props, { emit, slots }) {\n const { rules, size, validateOn, noMargin } = toRefs(props);\n const errors = ref([] as Array);\n\n const hasError = computed(() => errors.value.length > 0);\n\n function validate(val: string | number): void {\n errors.value = [];\n rules.value.forEach((rule: RuleFunction) => {\n const result = rule(val);\n if (typeof result === 'string') errors.value.push(result);\n });\n }\n\n function onBlur(event): void {\n emit('blur', event.target.value);\n emit('update:modelValue', event.target.value);\n if (validateOn.value === 'blur') validate(event.target.value);\n }\n\n function onInput(event): void {\n if (props.type === 'number') {\n const overflowProtectedVal = overflowProtected(event.target.value);\n if (overflowProtectedVal) event.target.value = overflowProtectedVal;\n }\n emit('input', event.target.value);\n emit('update:modelValue', event.target.value);\n }\n\n function onKeydown(event): void {\n if (props.type === 'number') {\n blockInvalidChar(event);\n }\n emit('keydown', event);\n }\n\n function blockInvalidChar(event): void {\n ['e', 'E', '+', '-'].includes(event.key) && event.preventDefault();\n }\n\n function overflowProtected(value: string): string | undefined {\n const [numberStr, decimalStr] = value.toString().split('.');\n\n if (decimalStr && decimalStr.length > props.decimalLimit) {\n const maxLength = numberStr.length + props.decimalLimit + 1;\n return value.toString().slice(0, maxLength);\n } else return;\n }\n\n watchEffect(() => {\n if (validateOn.value === 'input') validate(props.modelValue);\n });\n\n watch(hasError, newVal => {\n emit('update:isValid', !newVal);\n });\n\n const textSizeClasses = (): string => {\n switch (size.value) {\n case 'sm':\n return 'text-base';\n case 'lg':\n return 'text-lg';\n default:\n return 'text-base';\n }\n };\n\n const inputHeightClasses = (): string => {\n switch (size.value) {\n case 'sm':\n return 'h-9';\n case 'lg':\n return 'h-18';\n default:\n return 'h-12';\n }\n };\n\n const wrapperClasses = computed(() => {\n return {\n 'mb-5': !noMargin.value\n };\n });\n\n const inputGroupClasses = computed(() => {\n return {\n 'rounded-lg': !props.squareTop,\n 'rounded-b-lg': props.squareTop,\n 'border-red-500': hasError.value,\n 'shadow-inner': !props.disabled\n };\n });\n\n const inputContainerClasses = computed(() => {\n return {\n [inputHeightClasses()]: true,\n 'border-l dark:border-gray-850': slots.prepend && props.prependBorder,\n 'border-r dark:border-gray-850': slots.append && props.appendBorder\n };\n });\n\n const inputClasses = computed(() => {\n return {\n [textSizeClasses()]: true,\n 'text-right': props.textRight\n };\n });\n\n const appendClasses = computed(() => {\n return {\n [textSizeClasses()]: true,\n [inputHeightClasses()]: true,\n ['bg-white dark:bg-gray-900']: props.appendBorder\n };\n });\n\n const prependClasses = computed(() => {\n return {\n [textSizeClasses()]: true,\n [inputHeightClasses()]: true,\n ['bg-white dark:bg-gray-900']: props.prependBorder\n };\n });\n\n const infoClasses = computed(() => {\n return {};\n });\n\n return {\n errors,\n hasError,\n validate,\n onBlur,\n onInput,\n onKeydown,\n wrapperClasses,\n inputGroupClasses,\n inputContainerClasses,\n inputClasses,\n appendClasses,\n prependClasses,\n infoClasses,\n blockInvalidChar\n };\n }\n});\n","import { render } from \"./BalTextInput.vue?vue&type=template&id=247eebfd&scoped=true&ts=true\"\nimport script from \"./BalTextInput.vue?vue&type=script&lang=ts\"\nexport * from \"./BalTextInput.vue?vue&type=script&lang=ts\"\n\nimport \"./BalTextInput.vue?vue&type=style&index=0&id=247eebfd&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-247eebfd\"]])\n\nexport default __exports__","import { ref, Ref } from 'vue';\nimport { getAddress } from '@ethersproject/address';\nimport { lsRemove } from '@/lib/utils';\n\nexport type ConnectorPayload = {\n provider: unknown;\n account: Ref;\n chainId: Ref;\n};\nexport abstract class Connector {\n provider: any = null;\n account: Ref = ref(null);\n chainId: Ref = ref(null);\n active: Ref = ref(false);\n selectedAccount = '';\n id = 'unknown';\n\n constructor(selectedAccount: string) {\n this.selectedAccount = selectedAccount || '';\n }\n\n // must return the provider\n abstract connect(): Promise;\n\n handleAccountsChanged = accounts => {\n if (this.selectedAccount !== '') {\n const account = accounts.find(\n account => getAddress(account) === getAddress(this.selectedAccount)\n );\n // sense check the account that was previously connected\n if (!account) {\n this.account.value = accounts[0];\n console.warn(\n `Previously connected account [${this.selectedAccount}] was not found in the connection. Defaulting to the first.`\n );\n }\n this.account.value = getAddress(this.selectedAccount);\n }\n this.account.value = getAddress(accounts[0]);\n };\n\n handleChainChanged = chainId => {\n this.chainId.value = Number(chainId);\n };\n\n handleDisconnect = () => {\n // reset everything\n if (this.provider?.removeAllListeners) this.provider?.removeAllListeners();\n this.account.value = null;\n this.chainId.value = null;\n this.active.value = false;\n this.selectedAccount = '';\n if (this.provider.disconnect) {\n this.provider.disconnect();\n }\n if (this.provider.close) {\n this.provider.close();\n }\n lsRemove('connectedWallet');\n lsRemove('connectedProvider');\n };\n\n registerListeners() {\n if (!this.provider) {\n throw new Error(\n 'No provider registered for this connector. Something is very wrong.'\n );\n }\n\n this.provider.on('accountsChanged', this.handleAccountsChanged);\n this.provider.on('chainChanged', this.handleChainChanged);\n this.provider.on('disconnect', this.handleDisconnect);\n }\n}\n","import { Connector } from '../connector';\nexport class MetamaskConnector extends Connector {\n id = 'injected';\n async connect() {\n const provider =\n (window as any).ethereum ||\n ((window as any).web3 && (window as any).web3.currentProvider);\n\n if (provider) {\n this.provider = provider;\n this.active.value = true;\n\n let accounts = null;\n let chainId = null;\n // try the best practice way of get accounts with eth_requestAccounts && eth_chainId\n try {\n if (provider.request) {\n accounts = await provider.request({\n method: 'eth_requestAccounts'\n });\n\n chainId = await provider.request({ method: 'eth_chainId' });\n }\n } catch (err) {\n if (err.code === 4001) {\n // EIP-1193 userRejectedRequest error\n // If this happens, the user rejected the connection request.\n console.log('Please connect to MetaMask.');\n } else {\n console.error(err);\n }\n }\n\n // if account is still moot, try the bad old way - enable()\n if (!accounts) {\n // have to any it, since enable technically shouldn't be there anymore.\n // but might, for legacy clients.\n const response = await (provider as any).enable();\n accounts = response?.result || response;\n }\n\n if (accounts && chainId) {\n this.handleChainChanged(chainId);\n this.handleAccountsChanged(accounts);\n }\n } else {\n console.error(\n 'Tried to connect to MetaMask but it was not detected. Please install MetaMask.'\n );\n }\n return {\n // TODO type this\n provider: provider as any,\n account: this.account,\n chainId: this.chainId\n };\n }\n}\n","import { Connector } from '../connector';\nimport WalletConnectProvider from '@walletconnect/web3-provider';\nimport ConfigService from '@/services/config/config.service';\nexport class WalletConnectConnector extends Connector {\n id = 'walletconnect';\n async connect() {\n const configService = new ConfigService();\n const provider = new WalletConnectProvider({\n rpc: {\n [configService.env.NETWORK]: configService.network.rpc\n }\n });\n this.provider = provider;\n\n try {\n const accounts = await provider.enable();\n\n const chainId = await provider.request({ method: 'eth_chainId' });\n this.handleChainChanged(chainId);\n this.handleAccountsChanged(accounts);\n } catch (err) {\n if (err.code === 4001) {\n // EIP-1193 userRejectedRequest error\n // If this happens, the user rejected the connection request.\n console.log('Please connect to WalletConnect.');\n } else {\n console.error(err);\n }\n }\n return {\n // TODO type this\n provider: provider as any,\n account: this.account,\n chainId: this.chainId\n };\n }\n}\n","import SafeAppsSDK from '@gnosis.pm/safe-apps-sdk';\nimport { SafeAppProvider } from '@gnosis.pm/safe-apps-provider';\nimport { Connector } from '../connector';\nexport class GnosisSafeConnector extends Connector {\n id = 'gnosis';\n async connect() {\n const sdk = new SafeAppsSDK();\n const safe = await sdk.safe.getInfo();\n\n const provider = new SafeAppProvider(safe, sdk);\n\n if (provider) {\n this.provider = provider;\n this.active.value = true;\n this.handleChainChanged(safe.chainId);\n this.handleAccountsChanged([safe.safeAddress]);\n } else {\n console.error(\n 'Tried to connect to Gnosis Safe but it was not detected. Please install make sure you are using the Gnosis interface.'\n );\n }\n return {\n // TODO type this\n provider: provider as any,\n account: this.account,\n chainId: this.chainId\n };\n }\n}\n","import { Connector } from '../connector';\nimport WalletLink from 'walletlink';\nimport ConfigService from '@/services/config/config.service';\nexport class WalletLinkConnector extends Connector {\n id = 'walletlink';\n async connect() {\n const configService = new ConfigService();\n const walletLink = new WalletLink({\n appName: 'Balancer',\n appLogoUrl: '~@/assets/images/logo-dark.svg',\n darkMode: false\n });\n const provider = walletLink.makeWeb3Provider(\n configService.network.rpc,\n configService.network.chainId\n );\n this.provider = provider;\n\n try {\n const accounts = await provider.enable();\n\n const chainId = await provider.request({ method: 'eth_chainId' });\n this.handleChainChanged(chainId);\n this.handleAccountsChanged(accounts);\n } catch (err) {\n if (err.code === 4001) {\n // EIP-1193 userRejectedRequest error\n // If this happens, the user rejected the connection request.\n console.log('Rejected connection.');\n } else {\n console.error(err);\n }\n }\n return {\n // TODO type this\n provider: provider as any,\n account: this.account,\n chainId: this.chainId\n };\n }\n}\n","import { Connector } from '../connector';\nimport Portis from '@portis/web3';\nimport ConfigService from '@/services/config/config.service';\n\nexport class PortisConnector extends Connector {\n id = 'portis';\n async connect() {\n const configService = new ConfigService();\n // The portis type is compeletely messed up and only\n // exports the default class and no extra types\n const portis = new Portis(\n configService.env.PORTIS_DAPP_ID,\n configService.network.network\n ) as any;\n const provider = portis.provider;\n\n if (provider) {\n this.provider = provider;\n this.active.value = true;\n\n try {\n if (provider.request) {\n const accounts = await provider.request({\n method: 'eth_requestAccounts'\n });\n\n const chainId = await provider.request({ method: 'eth_chainId' });\n this.handleChainChanged(chainId);\n this.handleAccountsChanged(accounts);\n }\n } catch (err) {\n if (err.code === 4001) {\n // EIP-1193 userRejectedRequest error\n // If this happens, the user rejected the connection request.\n console.log('Rejected connection.');\n } else {\n console.error(err);\n }\n }\n }\n return {\n // TODO type this\n provider: provider as any,\n account: this.account,\n chainId: this.chainId\n };\n }\n}\n","import { ExternalProvider } from '@ethersproject/providers';\nimport { configService } from '@/services/config/config.service';\n\nexport async function switchToAppNetwork(provider: ExternalProvider) {\n const appNetworkConfig = configService.network;\n const hexChainId = `0x${appNetworkConfig.chainId.toString(16)}`;\n try {\n if (provider.request) {\n await provider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: hexChainId }]\n });\n return true;\n }\n } catch (err) {\n // user rejected request\n if (err.code === 4001) {\n return false;\n }\n // chain does not exist, let's add it\n if (err.code === 4902) {\n return importNetworkDetailsToWallet(provider);\n }\n }\n return false;\n}\n\nexport async function importNetworkDetailsToWallet(provider: ExternalProvider) {\n const appNetworkConfig = configService.network;\n const hexChainId = `0x${appNetworkConfig.chainId.toString(16)}`;\n try {\n const request = {\n id: '1',\n jsonrpc: '2.0',\n method: 'wallet_addEthereumChain',\n params: [\n {\n chainId: hexChainId,\n chainName: appNetworkConfig.name,\n rpcUrls: [appNetworkConfig.publicRpc],\n iconUrls: [appNetworkConfig.nativeAsset.logoURI],\n nativeCurrency: {\n name: appNetworkConfig.nativeAsset.name,\n symbol: appNetworkConfig.nativeAsset.symbol,\n decimals: appNetworkConfig.nativeAsset.decimals\n }\n }\n ]\n };\n if (provider?.request) {\n const response = await provider.request(request);\n if (response?.error) {\n throw new Error(\n `Failed to add network information to wallet. ${response.error.code}:${response.error.message}`\n );\n }\n return true;\n } else {\n throw new Error(`Could not find an external provider with 'request'`);\n }\n } catch (err) {\n console.error(\n `An error occurred while attempting to add network information to wallet. ${err.message}`\n );\n return false;\n }\n}\n","import { MetamaskConnector } from './connectors/metamask/metamask.connector';\nimport { Connector } from './connectors/connector';\nimport { computed, reactive, ref, Ref, toRefs } from 'vue';\nimport { WalletConnectConnector } from './connectors/trustwallet/walletconnect.connector';\nimport { getAddress } from '@ethersproject/address';\nimport { lsGet, lsSet } from '@/lib/utils';\nimport {\n JsonRpcProvider,\n JsonRpcSigner,\n Web3Provider\n} from '@ethersproject/providers';\nimport { GnosisSafeConnector } from './connectors/gnosis/gnosis.connector';\nimport { WalletLinkConnector } from './connectors/walletlink/walletlink.connector';\nimport { PortisConnector } from './connectors/portis/portis.connector';\nimport useFathom from '@/composables/useFathom';\nimport { configService } from '../config/config.service';\nimport { switchToAppNetwork } from './utils/helpers';\n\nimport defaultLogo from '@/assets/images/connectors/default.svg';\nimport fortmaticLogo from '@/assets/images/connectors/fortmatic.svg';\nimport frameLogo from '@/assets/images/connectors/frame.svg';\nimport imtokenLogo from '@/assets/images/connectors/imtoken.svg';\nimport metamaskLogo from '@/assets/images/connectors/metamask.svg';\nimport portisLogo from '@/assets/images/connectors/portis.svg';\nimport statusLogo from '@/assets/images/connectors/status.svg';\nimport trustwalletLogo from '@/assets/images/connectors/trustwallet.svg';\nimport walletconnectLogo from '@/assets/images/connectors/walletconnect.svg';\nimport walletlinkLogo from '@/assets/images/connectors/walletlink.svg';\nimport i18n from '@/plugins/i18n';\nimport { rpcProviderService } from '../rpc-provider/rpc-provider.service';\n\nexport type Wallet =\n | 'metamask'\n | 'walletconnect'\n | 'gnosis'\n | 'walletlink'\n | 'portis';\nexport const SupportedWallets = [\n 'metamask',\n 'walletconnect',\n //'gnosis',\n 'walletlink'\n //'portis'\n] as Wallet[];\nexport const WalletNameMap: Record = {\n metamask: 'Metamask',\n walletconnect: 'WalletConnect',\n gnosis: 'Gnosis Safe',\n walletlink: 'Coinbase',\n portis: 'Portis'\n};\ntype ConnectorImplementation = new (...args: any[]) => Connector;\nexport const Web3ProviderSymbol = Symbol('WEB3_PROVIDER');\n\nexport type Web3Plugin = {\n connectWallet: (wallet: Wallet) => Promise;\n disconnectWallet: () => Promise;\n provider: Ref;\n account: Ref;\n chainId: Ref;\n connector: Ref;\n walletState: Ref;\n signer: Ref;\n};\n\nconst WalletConnectorDictionary: Record = {\n metamask: MetamaskConnector,\n walletconnect: WalletConnectConnector,\n gnosis: GnosisSafeConnector,\n walletlink: WalletLinkConnector,\n portis: PortisConnector\n};\n\ntype WalletState = 'connecting' | 'connected' | 'disconnected';\ntype PluginState = {\n connector: any;\n walletState: WalletState;\n};\n\nexport default {\n install: async app => {\n const { trackGoal, Goals } = useFathom();\n const alreadyConnectedAccount = ref(lsGet('connectedWallet', null));\n const alreadyConnectedProvider = ref(lsGet('connectedProvider', null));\n // this data provided is properly typed to all consumers\n // via the 'Web3Provider' type\n const pluginState = reactive({\n connector: null as any,\n walletState: 'disconnected'\n });\n\n const account = computed(() => {\n if (pluginState.connector && pluginState.connector.account) {\n // always want to be using checksum addresses\n return getAddress(pluginState.connector.account);\n }\n return '';\n });\n\n const chainId = computed(() => {\n return pluginState.connector?.chainId;\n });\n\n const provider = computed(\n () =>\n pluginState.connector?.provider ??\n rpcProviderService.getJsonProvider(chainId.value.toString())\n );\n const signer = computed(() => pluginState.connector?.provider?.getSigner());\n\n // user supplied web3 provider. i.e. (web3, ethers)\n const connectWallet = async (wallet: Wallet) => {\n pluginState.walletState = 'connecting';\n\n try {\n if (!wallet || typeof wallet !== 'string') {\n throw new Error(\n 'Please provide a wallet to facilitate a web3 connection.'\n );\n }\n\n // the wallet parameter will be provided by the front-end by means of\n // modal selection or otherwise\n const connector = new WalletConnectorDictionary[wallet](\n alreadyConnectedAccount.value\n );\n if (!connector) {\n throw new Error(\n `Wallet [${wallet}] is not supported yet. Please contact the dev team to add this connector.`\n );\n }\n const { account } = await connector.connect();\n\n // listens to wallet/chain changed and disconnect events\n connector.registerListeners();\n\n // it is handy to provide the connector instance\n pluginState.connector = connector;\n\n // for when user reloads the app on an already connected wallet\n // need to store address to pre-load that connection\n if (account.value) {\n lsSet('connectedWallet', account.value);\n lsSet('connectedProvider', wallet);\n pluginState.walletState = 'connected';\n\n if (\n configService.env.NETWORK !== chainId.value &&\n connector.id === 'injected'\n ) {\n // this will also as the user to switch to Polygon, if already added\n const result = await switchToAppNetwork(connector.provider);\n if (!result) {\n return;\n }\n if (chainId.value !== configService.network.chainId) {\n await connectWallet(wallet);\n }\n }\n trackGoal(Goals.ConnectedWallet);\n }\n } catch (err) {\n console.error(err);\n pluginState.walletState = 'disconnected';\n }\n };\n\n const disconnectWallet = async () => {\n if (!pluginState.connector) {\n throw new Error(\n 'Cannot disconnect a wallet. No wallet currently connected.'\n );\n }\n const connector = pluginState.connector as Connector;\n connector.handleDisconnect();\n pluginState.connector = null;\n pluginState.walletState = 'disconnected';\n alreadyConnectedAccount.value = null;\n alreadyConnectedProvider.value = null;\n };\n\n // previously connected wallet initiation\n if (alreadyConnectedAccount.value && alreadyConnectedProvider.value) {\n connectWallet(alreadyConnectedProvider.value);\n }\n\n const payload: Web3Plugin = {\n connectWallet,\n disconnectWallet,\n ...toRefs(pluginState),\n account,\n chainId,\n provider,\n signer\n };\n\n app.provide(Web3ProviderSymbol, payload);\n }\n};\n\nexport function getConnectorName(connectorId: string): string {\n if (connectorId === 'injected') {\n const provider = window.ethereum as any;\n if (provider.isMetaMask) {\n return 'MetaMask';\n }\n if (provider.isImToken) {\n return 'imToken';\n }\n if (provider.isStatus) {\n return 'Status';\n }\n if (provider.isTrust) {\n return 'Trust Wallet';\n }\n if (provider.isFrame) {\n return 'Frame';\n }\n return i18n.global.t('browserWallet');\n }\n if (connectorId === 'fortmatic') {\n return 'Fortmatic';\n }\n if (connectorId === 'portis') {\n return 'Portis';\n }\n if (connectorId === 'walletconnect') {\n return 'WalletConnect';\n }\n if (connectorId === 'walletlink') {\n return `Coinbase ${i18n.global.t('wallet')}`;\n }\n if (connectorId === 'gnosis') {\n return 'Gnosis Safe';\n }\n return i18n.global.t('unknown');\n}\n\nexport function getConnectorLogo(connectorId: string): string {\n if (connectorId === 'injected') {\n const provider = window.ethereum as any;\n if (provider.isMetaMask) {\n return metamaskLogo;\n }\n if (provider.isImToken) {\n return imtokenLogo;\n }\n if (provider.isStatus) {\n return statusLogo;\n }\n if (provider.isTrust) {\n return trustwalletLogo;\n }\n if (provider.isFrame) {\n return frameLogo;\n }\n return defaultLogo;\n }\n if (connectorId === 'fortmatic') {\n return fortmaticLogo;\n }\n if (connectorId === 'portis') {\n return portisLogo;\n }\n if (connectorId === 'walletconnect') {\n return walletconnectLogo;\n }\n if (connectorId === 'walletlink') {\n return walletlinkLogo;\n }\n return defaultLogo;\n}\n","export const GWEI_UNIT = 1e9;\n","import axios from 'axios';\n\nimport { GWEI_UNIT } from '@/constants/units';\n\nimport { GasPrice } from './types';\n\ntype BlocknativeGasPriceConfidence = 70 | 80 | 90 | 95 | 99;\n\ntype BlocknativeEstimatedPrice = {\n confidence: BlocknativeGasPriceConfidence;\n price: number;\n maxPriorityFeePerGas: number;\n maxFeePerGas: number;\n};\n\ntype BlocknativeBlockPrice = {\n blockNumber: number;\n estimatedTransactionCount: number;\n estimatedPrices: BlocknativeEstimatedPrice[];\n};\n\ntype BlocknativeGasPlatformResponse = {\n unit: string;\n currentBlockNumber: number;\n maxPrice: number;\n msSinceLastBlock: number;\n network: string;\n system: string;\n blockPrices: [BlocknativeBlockPrice];\n};\n\nexport default class BlocknativeProvider {\n public async getLatest(\n confidence: BlocknativeGasPriceConfidence | 'best' = 'best'\n ): Promise {\n try {\n const response = await axios.get(\n 'https://api.blocknative.com/gasprices/blockprices',\n {\n headers: {\n Authorization: process.env.VUE_APP_BLOCKNATIVE_DAPP_ID\n }\n }\n );\n const estimatedPrices = response.data.blockPrices[0].estimatedPrices;\n\n let gasPrice: BlocknativeEstimatedPrice | undefined;\n\n // try to get 90% confidence, but make sure not to overpay. (otherwise grab 70%)\n if (confidence === 'best') {\n const gasPrice70 = estimatedPrices.find(\n estimatedPrice => estimatedPrice.confidence === 70\n );\n const gasPrice90 = estimatedPrices.find(\n estimatedPrice => estimatedPrice.confidence === 90\n );\n\n if (gasPrice70 != null && gasPrice90 != null) {\n gasPrice =\n gasPrice90.price > 1.25 * gasPrice70.price\n ? gasPrice70\n : gasPrice90;\n }\n } else {\n gasPrice = estimatedPrices.find(\n estimatedPrice => estimatedPrice.confidence === confidence\n );\n }\n\n // gas price is in gwei\n if (gasPrice != null) {\n return {\n price: gasPrice.price * GWEI_UNIT,\n maxFeePerGas: gasPrice.maxFeePerGas * GWEI_UNIT,\n maxPriorityFeePerGas: gasPrice.maxPriorityFeePerGas * GWEI_UNIT\n };\n }\n } catch (e) {\n console.log('[Blocknative] Gas Platform Error', e);\n }\n return null;\n }\n}\n","import axios from 'axios';\n\nimport { GWEI_UNIT } from '@/constants/units';\n\nimport { GasPrice } from './types';\n\ntype TxSpeedOptions = 'safeLow' | 'standard' | 'fast' | 'fast' | 'fastest';\n\ninterface PolygonGasStationResponse {\n safeLow: number;\n standard: number;\n fast: number;\n fastest: number;\n blockTime: number;\n blockNumber: number;\n}\n\nexport default class PolygonProvider {\n public async getLatest(\n txSpeed: TxSpeedOptions = 'standard'\n ): Promise {\n try {\n const { data } = await axios.get(\n 'https://gasstation-mainnet.matic.network'\n );\n return { price: data[txSpeed] * GWEI_UNIT };\n } catch (error) {\n console.log('[Polygon] Gas Platform Error', error);\n return null;\n }\n }\n}\n","import axios from 'axios';\n\nimport { GWEI_UNIT } from '@/constants/units';\n\nimport { GasPrice } from './types';\n\ntype TxSpeedOptions = 'safeLow' | 'standard' | 'fast' | 'fastest';\n\ninterface FantomGasStationResponse {\n result: {\n pendingcount: string;\n avgminingblocktxcountsize: number;\n avgtxnsperblock: number;\n mingaspricegwei: number;\n avgnetworkutilization: number;\n rapidgaspricegwei: number;\n fastgaspricegwei: number;\n standardgaspricegwei: number;\n data: string;\n };\n}\n\nexport default class FantomProvider {\n public async getLatest(\n txSpeed: TxSpeedOptions = 'standard'\n ): Promise {\n try {\n const { data } = await axios.get(\n 'https://gftm.blockscan.com/gasapi.ashx?apikey=key&method=pendingpooltxgweidata'\n );\n return { price: data.result.standardgaspricegwei * GWEI_UNIT };\n } catch (error) {\n console.log('[Fantom] Gas Platform Error', error);\n return null;\n }\n }\n}\n","import ConfigService from '../config/config.service';\nimport BlocknativeProvider from './providers/blocknative.provider';\nimport PolygonProvider from './providers/polygon.provider';\nimport { GasPrice } from './providers/types';\nimport FantomProvider from '@/services/gas-price/providers/fantom.provider';\n\nexport default class GasPriceService {\n constructor(\n private readonly configService = new ConfigService(),\n private readonly blocknativeProvider = new BlocknativeProvider(),\n private readonly polygonProvider = new PolygonProvider(),\n private readonly fantomProvider = new FantomProvider()\n ) {}\n\n public async getLatest(): Promise {\n switch (this.configService.network.key) {\n case '1':\n return await this.blocknativeProvider.getLatest();\n case '137':\n return await this.polygonProvider.getLatest();\n case '250':\n return await this.fantomProvider.getLatest();\n default:\n return null;\n }\n }\n}\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ActivityRows.vue?vue&type=style&index=0&id=16c0fde3&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalModal.vue?vue&type=style&index=0&id=0d27bada&scoped=true&lang=css\"","\n","import { render } from \"./PlusSquareIcon.vue?vue&type=template&id=cebc46d0\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export enum FiatCurrency {\n usd = 'usd'\n}\n\nexport enum FiatSymbol {\n usd = '$'\n}\n\nexport const SUPPORTED_FIAT = [FiatCurrency.usd];\n","module.exports = __webpack_public_path__ + \"img/gnosis.10dd8b02.svg\";","\n\n\n\n\n","import { render } from \"./BalLoadingIcon.vue?vue&type=template&id=6f7cb481&scoped=true\"\nimport script from \"./BalLoadingIcon.vue?vue&type=script&lang=js\"\nexport * from \"./BalLoadingIcon.vue?vue&type=script&lang=js\"\n\nimport \"./BalLoadingIcon.vue?vue&type=style&index=0&id=6f7cb481&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6f7cb481\"]])\n\nexport default __exports__","module.exports = __webpack_public_path__ + \"img/discord-icon.071abc5a.png\";","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AppNav.vue?vue&type=style&index=0&id=0f8e1ae7&scoped=true&lang=css\"","\n\n\n","import { render } from \"./Avatar.vue?vue&type=template&id=650b894a\"\nimport script from \"./Avatar.vue?vue&type=script&lang=js\"\nexport * from \"./Avatar.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import GasPriceService from '@/services/gas-price/gas-price.service';\n\ntype Prices = Record;\n\ninterface MarketState {\n gasPrice: number;\n loading: boolean;\n}\n\nconst gasPriceService = new GasPriceService();\n\nconst state: MarketState = {\n gasPrice: 0,\n loading: false\n};\n\nconst actions = {\n async getGasPrice({ commit }) {\n const gasPrice = await gasPriceService.getLatest();\n commit('setGasPrice', gasPrice?.price);\n }\n};\n\nconst mutations = {\n setGasPrice(_state: MarketState, price: number) {\n _state.gasPrice = price;\n },\n\n setLoading(_state: MarketState, val: boolean) {\n _state.loading = val;\n }\n};\n\nexport default {\n namespaced: true,\n state,\n mutations,\n actions\n};\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./FarmDetail.vue?vue&type=style&index=0&id=46b979d9&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalTabs.vue?vue&type=style&index=0&id=5510b702&lang=css\"","\n","import { render } from \"./BalCloseIcon.vue?vue&type=template&id=4b9e3786\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","module.exports = __webpack_public_path__ + \"img/tokens_white.0c2dd4f3.svg\";","import numeral from 'numeral';\nimport BigNumber from 'bignumber.js';\nimport useTokens from './useTokens';\n\nexport type Preset =\n | 'default'\n | 'token'\n | 'token_fixed'\n | 'token_lg'\n | 'usd'\n | 'usd_m'\n | 'usd_lg'\n | 'percent'\n | 'percent_lg';\n\ninterface Options {\n format?: string;\n forcePreset?: boolean;\n}\n\nenum PresetFormats {\n default = '(0.[0]a)',\n token = '0,0.[0000]',\n token_fixed = '0,0.0000',\n token_lg = '0,0',\n usd = '$0,0.00',\n usd_lg = '$0,0',\n usd_m = '$0,0.00a',\n percent = '0,0.00%',\n percent_lg = '0%'\n}\n\nexport function fNum(\n number: number | string,\n preset: Preset | null = 'default',\n options: Options = {}\n): string {\n if (options.format) return numeral(number).format(options.format);\n\n let adjustedPreset;\n if (number >= 10_000 && !options.forcePreset) {\n adjustedPreset = `${preset}_lg`;\n }\n if (number < 1e-6) {\n // Numeral returns NaN in this case so just set to zero.\n // https://github.com/adamwdraper/Numeral-js/issues/596\n number = 0;\n }\n\n return numeral(number).format(\n PresetFormats[adjustedPreset || preset || 'default']\n );\n}\n\nexport function roundToNDecimalPlaces(number: number, decimalPlaces: number) {\n //@ts-ignore\n return +(Math.round(number + 'e+' + decimalPlaces) + 'e-' + decimalPlaces);\n}\n\nexport default function useNumbers() {\n const { priceFor } = useTokens();\n\n function toFiat(amount: number | string, tokenAddress: string): number {\n const price = priceFor(tokenAddress);\n const tokenAmount = new BigNumber(amount);\n return tokenAmount.times(price).toNumber();\n }\n\n return { fNum, toFiat };\n}\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalLoadingIcon.vue?vue&type=style&index=0&id=6f7cb481&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalCard.vue?vue&type=style&index=0&id=354a7ca8&scoped=true&lang=css\"","import { configService } from '@/services/config/config.service';\n\nexport default function useConfig() {\n return {\n env: configService.env,\n networkConfig: configService.network\n };\n}\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, createVNode as _createVNode, renderSlot as _renderSlot, mergeProps as _mergeProps, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = {\n class: \"overflow-hidden\",\n ref: \"headerRef\"\n}\nconst _hoisted_2 = { class: \"w-full table-fixed whitespace-normal\" }\nconst _hoisted_3 = { class: \"bg-white dark:bg-gray-900 z-10\" }\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = { class: \"text-base\" }\nconst _hoisted_6 = {\n class: \"overflow-auto\",\n ref: \"bodyRef\"\n}\nconst _hoisted_7 = {\n key: 1,\n class: \"max-w-full bg-white dark:bg-gray-850 row-bg h-40 flex items-center justify-center text-gray-500\"\n}\nconst _hoisted_8 = { class: \"w-full table-fixed whitespace-normal\" }\nconst _hoisted_9 = { key: 0 }\nconst _hoisted_10 = /*#__PURE__*/_createVNode(\"span\", { class: \"font-semibold text-left\" }, \" Total \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_router_link = _resolveComponent(\"router-link\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(\"div\", {\n class: [\n 'max-w-full whitespace-nowrap overflow-hidden',\n { 'rounded-lg': !_ctx.square }\n ]\n }, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"table\", _hoisted_2, [\n _createVNode(\"colgroup\", null, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.filteredColumns, (column) => {\n return (_openBlock(), _createBlock(\"col\", {\n key: column.id,\n style: { width: `${column?.width}px` }\n }, null, 4))\n }), 128))\n ]),\n _createVNode(\"thead\", _hoisted_3, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.filteredColumns, (column, columnIndex) => {\n return (_openBlock(), _createBlock(\"th\", {\n key: `header-${column.id}`,\n class: [\n 'p-6 bg-white dark:bg-gray-850 headingShadow border-b dark:border-gray-700',\n column.className,\n _ctx.getHorizontalStickyClass(columnIndex),\n _ctx.isColumnStuck ? 'isSticky' : '',\n column.sortKey ? 'cursor-pointer' : '',\n _ctx.currentSortColumn === column.id && _ctx.currentSortDirection\n ? 'text-green-500'\n : 'text-gray-800 dark:text-gray-100'\n ],\n ref: _ctx.setHeaderRef(columnIndex),\n onClick: ($event: any) => (_ctx.handleSort(column.id))\n }, [\n _createVNode(\"div\", {\n class: [\n 'flex',\n column.align === 'right' ? 'justify-end' : 'justify-start'\n ]\n }, [\n (column.Header)\n ? _renderSlot(_ctx.$slots, column.Header, _mergeProps({ key: 0 }, column))\n : (_openBlock(), _createBlock(\"div\", _hoisted_4, [\n _createVNode(\"h5\", _hoisted_5, _toDisplayString(column.name), 1)\n ])),\n (\n _ctx.currentSortColumn === column.id &&\n _ctx.currentSortDirection === 'asc'\n )\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 2,\n name: \"arrow-up\",\n size: \"sm\",\n class: \"ml-1 flex items-center\"\n }))\n : _createCommentVNode(\"\", true),\n (\n _ctx.currentSortColumn === column.id &&\n _ctx.currentSortDirection === 'desc'\n )\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 3,\n name: \"arrow-down\",\n size: \"sm\",\n class: \"ml-1 flex items-center\"\n }))\n : _createCommentVNode(\"\", true)\n ], 2)\n ], 10, [\"onClick\"]))\n }), 128))\n ])\n ])\n ], 512),\n _createVNode(\"div\", _hoisted_6, [\n (_ctx.isLoading)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: [_ctx.skeletonClass, 'min-w-full'],\n square: \"\",\n style: { width: `${_ctx.placeholderBlockWidth}px` }\n }, null, 8, [\"class\", \"style\"]))\n : _createCommentVNode(\"\", true),\n (!_ctx.isLoading && !_ctx.tableData.length)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.noResultsLabel || _ctx.$t('noResults')), 1))\n : _createCommentVNode(\"\", true),\n _createVNode(\"table\", _hoisted_8, [\n _createVNode(\"colgroup\", null, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.filteredColumns, (column) => {\n return (_openBlock(), _createBlock(\"col\", {\n key: column.id,\n style: { width: `${column?.width}px` }\n }, null, 4))\n }), 128))\n ]),\n _createVNode(\"tr\", null, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.filteredColumns, (column, columnIndex) => {\n return (_openBlock(), _createBlock(\"td\", {\n key: column.id,\n class: [\n column.align === 'right' ? 'text-left' : 'text-right',\n _ctx.getHorizontalStickyClass(columnIndex),\n _ctx.isColumnStuck ? 'isSticky' : '',\n 'bg-white dark:bg-gray-850 p-0 m-0 h-0'\n ]\n }, null, 2))\n }), 128))\n ]),\n (!_ctx.isLoading && _ctx.tableData.length)\n ? (_openBlock(), _createBlock(\"tbody\", _hoisted_9, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.tableData, (dataItem, index) => {\n return (_openBlock(), _createBlock(\"tr\", {\n key: `tableRow-${index}`,\n onClick: ($event: any) => (_ctx.handleRowClick(dataItem)),\n class: [\n 'bg-white z-10 row-bg group border-gray-700',\n `${index === _ctx.tableData.length - 1 ? 'border-b-0' : 'border-b'}`,\n { 'cursor-pointer': _ctx.onRowClick }\n ]\n }, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.filteredColumns, (column, columnIndex) => {\n return (_openBlock(), _createBlock(\"td\", {\n key: column.id,\n class: [\n column.align === 'right' ? 'text-left' : 'text-right',\n _ctx.getHorizontalStickyClass(columnIndex),\n _ctx.isColumnStuck ? 'isSticky' : ''\n ]\n }, [\n (_ctx.link)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: {\n name: _ctx.link.to,\n params: _ctx.link.getParams(dataItem)\n }\n }, {\n default: _withCtx(() => [\n (column.Cell)\n ? _renderSlot(_ctx.$slots, column.Cell, _mergeProps({ key: 0 }, dataItem))\n : (_openBlock(), _createBlock(\"div\", {\n key: 1,\n class: [\n 'px-6 py-4',\n column.align === 'right' ? 'text-right' : 'text-left'\n ]\n }, _toDisplayString(typeof column.accessor === 'string'\n ? dataItem[column.accessor]\n : column.accessor(dataItem)), 3))\n ]),\n _: 2\n }, 1032, [\"to\"]))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n (column.Cell)\n ? _renderSlot(_ctx.$slots, column.Cell, _mergeProps({ key: 0 }, dataItem))\n : (_openBlock(), _createBlock(\"div\", {\n key: 1,\n class: [\n 'px-6 py-4',\n column.align === 'right' ? 'text-right' : 'text-left'\n ]\n }, _toDisplayString(typeof column.accessor === 'string'\n ? dataItem[column.accessor]\n : column.accessor(dataItem)), 3))\n ], 64))\n ], 2))\n }), 128))\n ], 10, [\"onClick\"]))\n }), 128)),\n (_ctx.shouldRenderTotals)\n ? (_openBlock(), _createBlock(\"tr\", {\n key: 0,\n class: [\n 'bg-white z-10 row-bg group',\n { 'cursor-pointer': _ctx.onRowClick }\n ]\n }, [\n _createVNode(\"td\", {\n class: [\n _ctx.getHorizontalStickyClass(0),\n _ctx.isColumnStuck ? 'isSticky' : '',\n 'text-left p-6 bg-white dark:bg-gray-850 border-t dark:border-gray-900 align-top'\n ]\n }, [\n _hoisted_10\n ], 2),\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.tail(_ctx.filteredColumns), (column, columnIndex) => {\n return (_openBlock(), _createBlock(\"td\", {\n key: column.id,\n class: [\n column.align === 'right' ? 'text-left' : 'text-right',\n _ctx.getHorizontalStickyClass(columnIndex + 1),\n _ctx.isColumnStuck ? 'isSticky' : '',\n 'p-6 bg-white dark:bg-gray-850 border-t dark:border-gray-900'\n ]\n }, [\n (column.totalsCell)\n ? _renderSlot(_ctx.$slots, column.totalsCell, { key: 0 })\n : _createCommentVNode(\"\", true)\n ], 2))\n }), 128))\n ], 2))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ], 512)\n ], 2),\n (_ctx.isPaginated && !_ctx.isLoading)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n class: \"bal-table-pagination-btn\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (!_ctx.isLoadingMore && _ctx.$emit('loadMore')))\n }, [\n (_ctx.isLoadingMore)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createTextVNode(_toDisplayString(_ctx.$t('loading')), 1)\n ], 64))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _createTextVNode(_toDisplayString(_ctx.$t('loadMore')) + \" \", 1),\n _createVNode(_component_BalIcon, {\n name: \"chevron-down\",\n size: \"sm\",\n class: \"ml-2\"\n })\n ], 64))\n ]))\n : _createCommentVNode(\"\", true)\n ], 64))\n}","\nimport {\n defineComponent,\n onMounted,\n PropType,\n ref,\n watch,\n computed\n} from 'vue';\nimport { sortBy, sumBy, tail } from 'lodash';\n\ntype Sticky = 'horizontal' | 'vertical' | 'both';\ntype Data = any;\n\ntype InitialState = {\n sortDirection: 'asc' | 'desc' | null;\n sortColumn: string | null;\n};\n\nexport type ColumnDefinition = {\n // Column Header Label\n name: string;\n // Unique ID\n id: string;\n // Key or function to access data from the row\n accessor: string | ((row: T) => string);\n // Slot ID for custom rendering the cell\n Cell?: string;\n // Slot ID for custom rendering a header\n Header?: string;\n // Is the column sortable\n isSortable?: boolean;\n // Extra classes to supply to the column. E.g. min width\n className?: string;\n // Left or right aligned content. E.g. Numbers should be right aligned\n align?: 'left' | 'right';\n // Should the column width grow to fit available space?\n noGrow?: boolean;\n // Set to true to hide the column\n hidden?: boolean;\n // Accessor for sorting purposes\n sortKey?: string | ((row: T) => unknown);\n\n width?: number;\n\n totalsCell?: string;\n};\n\nexport default defineComponent({\n name: 'BalTable',\n\n emits: ['loadMore'],\n\n props: {\n columns: {\n type: Object as PropType,\n required: true\n },\n data: {\n type: Object as PropType\n },\n isLoading: {\n type: Boolean,\n default: () => false\n },\n isLoadingMore: {\n type: Boolean,\n default: false\n },\n skeletonClass: {\n type: String\n },\n onRowClick: {\n type: Function as PropType<(data: Data) => void>\n },\n sticky: {\n type: String as PropType\n },\n square: {\n type: Boolean,\n default: false\n },\n isPaginated: {\n type: Boolean,\n default: false\n },\n noResultsLabel: {\n type: String\n },\n link: {\n type: Object,\n default: null\n },\n initialState: {\n type: Object as PropType,\n default: () => ({\n sortColumn: null,\n sortDirection: null\n })\n }\n },\n setup(props) {\n const stickyHeaderRef = ref();\n const tableRef = ref();\n const isColumnStuck = ref(false);\n const tableData = ref(props.data);\n const currentSortDirection = ref(\n props.initialState.sortDirection\n );\n const currentSortColumn = ref(\n props.initialState.sortColumn\n );\n const headerRef = ref();\n const bodyRef = ref();\n\n // for loading and no results\n const placeholderBlockWidth = computed(() => sumBy(props.columns, 'width'));\n\n const setHeaderRef = (columnIndex: number) => (el: HTMLElement) => {\n if (el && columnIndex === 0) {\n stickyHeaderRef.value = el;\n }\n };\n\n // Need a method for horizontal stickiness as we need to\n // check whether the table item belongs in the first column\n const getHorizontalStickyClass = (index: number) => {\n if (index !== 0) return '';\n if (props.sticky === 'horizontal' || props.sticky === 'both') {\n return 'horizontalSticky';\n }\n return '';\n };\n\n const handleRowClick = (data: Data) => {\n if (props.link?.to) return;\n props.onRowClick && props.onRowClick(data);\n };\n\n const handleSort = (columnId: string | null, updateDirection = true) => {\n const column = props.columns.find(column => column.id === columnId);\n if (!column?.sortKey) return;\n if (columnId !== currentSortColumn.value)\n currentSortDirection.value = null;\n\n currentSortColumn.value = columnId;\n\n if (updateDirection) {\n if (currentSortDirection.value === null) {\n currentSortDirection.value = 'desc';\n } else if (currentSortDirection.value === 'desc') {\n currentSortDirection.value = 'asc';\n } else {\n currentSortDirection.value = null;\n }\n }\n\n const sortedData = sortBy(\n (props.data as any).value || props.data,\n column.sortKey\n );\n if (currentSortDirection.value === 'asc') {\n tableData.value = sortedData;\n return;\n } else if (currentSortDirection.value === 'desc') {\n tableData.value = sortedData.reverse();\n return;\n }\n tableData.value = props.data;\n };\n\n onMounted(() => {\n if (bodyRef.value) {\n bodyRef.value.onscroll = () => {\n if (bodyRef.value) {\n const offsetRatio =\n bodyRef.value.offsetWidth /\n stickyHeaderRef.value.offsetWidth /\n 10;\n isColumnStuck.value = !!(\n stickyHeaderRef.value.offsetLeft >\n stickyHeaderRef.value.offsetWidth * offsetRatio\n );\n }\n };\n bodyRef.value.addEventListener('scroll', () => {\n if (bodyRef.value && headerRef.value) {\n headerRef.value.scrollLeft = bodyRef.value.scrollLeft;\n }\n });\n }\n });\n\n const filteredColumns = computed(() =>\n props.columns.filter(column => !column.hidden)\n );\n\n const shouldRenderTotals = computed(() =>\n props.columns.some(column => column.totalsCell !== undefined)\n );\n\n watch(\n () => props.data,\n newData => {\n if (currentSortColumn.value && currentSortDirection.value !== null) {\n handleSort(currentSortColumn.value, false);\n return;\n }\n tableData.value = newData;\n }\n );\n\n return {\n //refs\n tableRef,\n headerRef,\n bodyRef,\n\n // methods\n setHeaderRef,\n getHorizontalStickyClass,\n handleSort,\n handleRowClick,\n tail,\n\n //data\n isColumnStuck,\n tableData,\n currentSortColumn,\n currentSortDirection,\n placeholderBlockWidth,\n\n // computed\n filteredColumns,\n shouldRenderTotals\n };\n }\n});\n","import { render } from \"./BalTable.vue?vue&type=template&id=54f2b76d&ts=true\"\nimport script from \"./BalTable.vue?vue&type=script&lang=ts\"\nexport * from \"./BalTable.vue?vue&type=script&lang=ts\"\n\nimport \"./BalTable.vue?vue&type=style&index=0&id=54f2b76d&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderSlot as _renderSlot, withModifiers as _withModifiers, mergeProps as _mergeProps, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"form\", _mergeProps({\n action: _ctx.action,\n method: _ctx.method\n }, _ctx.$attrs, {\n onSubmit: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.$emit('onSubmit')), [\"prevent\"]))\n }), [\n _renderSlot(_ctx.$slots, \"default\")\n ], 16, [\"action\", \"method\"]))\n}","\nimport { defineComponent, ref } from 'vue';\n\nfunction useFormValidations() {\n const errors = ref([] as Array);\n const validatable = ref([] as Array);\n\n function handleInputErrors(_errors: Array) {\n if (_errors && _errors.length > 0) {\n errors.value.push(..._errors);\n }\n }\n\n function validateInput(input) {\n input.validate(input.$props.modelValue);\n handleInputErrors(input.errors);\n }\n\n function findValidatable(children): void {\n children.forEach(child => {\n if (\n child.component &&\n typeof child.component.proxy.validate === 'function'\n ) {\n validatable.value.push(child.component.proxy);\n }\n if (Array.isArray(child.children)) {\n findValidatable(child.children);\n }\n });\n }\n\n function validate(this: any) {\n errors.value = [];\n validatable.value = [];\n\n findValidatable(this.$.subTree.children);\n validatable.value.forEach(input => validateInput(input));\n\n if (errors.value.length > 0) return false;\n return true;\n }\n\n return {\n errors,\n validate,\n validateInput\n };\n}\n\nexport default defineComponent({\n name: 'BalForm',\n\n emits: ['onSubmit'],\n\n props: {\n action: { type: String, default: '' },\n method: { type: String, default: 'post' }\n },\n\n setup() {\n const { errors, validate, validateInput } = useFormValidations();\n return { errors, validate, validateInput };\n }\n});\n","import { render } from \"./BalForm.vue?vue&type=template&id=05630db0&ts=true\"\nimport script from \"./BalForm.vue?vue&type=script&lang=ts\"\nexport * from \"./BalForm.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./BalLink.vue?vue&type=template&id=0f7d230e\"\nimport script from \"./BalLink.vue?vue&type=script&lang=js\"\nexport * from \"./BalLink.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { lsGet, lsSet } from '@/lib/utils';\nimport i18n from '@/plugins/i18n';\nimport { LiquiditySelection } from '@/lib/utils/balancer/helpers/sor/sorManager';\nimport LS_KEYS from '@/constants/local-storage.keys';\n\nexport enum TradeInterface {\n GNOSIS = 'gnosis',\n BALANCER = 'balancer'\n}\n\nexport interface AppState {\n loading: boolean;\n modalOpen: boolean;\n locale: string;\n tradeLiquidity: LiquiditySelection;\n tradeInterface: TradeInterface;\n transactionDeadline: number;\n}\n\nconst state: AppState = {\n loading: true,\n modalOpen: false,\n locale: lsGet(LS_KEYS.App.Locale, 'en-US'),\n tradeLiquidity: lsGet(LS_KEYS.App.TradeLiquidity, LiquiditySelection.Best),\n transactionDeadline: lsGet(LS_KEYS.App.TradeDeadline, 20), // minutes\n tradeInterface: lsGet(LS_KEYS.App.TradeInterface, TradeInterface.BALANCER)\n};\n\nconst actions = {\n init: async ({ commit, dispatch }) => {\n try {\n // Fetch init data\n await dispatch('market/getGasPrice', [], { root: true });\n\n // Fetch initial trade tokens\n dispatch('trade/init', null, { root: true });\n\n commit('setLoading', false);\n } catch (error) {\n console.error('Failed to initialize app', error);\n }\n }\n};\n\nconst mutations = {\n setLoading(state: AppState, val: AppState['loading']) {\n state.loading = val;\n },\n\n toggleModal(state: AppState) {\n state.modalOpen = !state.modalOpen;\n },\n\n setLocale(state: AppState, locale: AppState['locale']) {\n state.locale = locale;\n lsSet(LS_KEYS.App.Locale, locale);\n i18n.global.locale = locale;\n },\n\n setTradeLiquidity(state: AppState, tradeLiquidity: LiquiditySelection) {\n state.tradeLiquidity = tradeLiquidity;\n lsSet(LS_KEYS.App.TradeLiquidity, state.tradeLiquidity);\n },\n\n setTradeInterface(\n state: AppState,\n tradeInterface: AppState['tradeInterface']\n ) {\n state.tradeInterface = tradeInterface;\n lsSet(LS_KEYS.App.TradeInterface, state.tradeInterface);\n },\n\n setTransactionDeadline(\n state: AppState,\n transactionDeadline: AppState['transactionDeadline']\n ) {\n state.transactionDeadline = transactionDeadline;\n lsSet(LS_KEYS.App.TradeDeadline, state.transactionDeadline);\n }\n};\n\nexport default {\n namespaced: true,\n state,\n mutations,\n actions\n};\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Notifications.vue?vue&type=style&index=0&id=290a52a7&scoped=true&lang=css\"","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n\n return (_openBlock(), _createBlock(\"div\", {\n class: ['bal-alert', _ctx.classes]\n }, [\n _createVNode(\"div\", {\n class: ['bal-alert-container', _ctx.containerClasses]\n }, [\n _createVNode(\"div\", {\n class: ['bal-alert-icon', _ctx.iconClasses]\n }, [\n _createVNode(_component_BalIcon, {\n name: \"alert-circle\",\n size: _ctx.iconSize\n }, null, 8, [\"size\"])\n ], 2),\n _createVNode(\"div\", {\n class: ['bal-alert-content', _ctx.contentClasses]\n }, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"h5\", {\n class: ['bal-alert-title', _ctx.titleClasses, _ctx.textSizeClass]\n }, [\n _renderSlot(_ctx.$slots, \"title\", {}, () => [\n _createTextVNode(_toDisplayString(_ctx.title), 1)\n ])\n ], 2),\n (_ctx.$slots.default || _ctx.description)\n ? (_openBlock(), _createBlock(\"p\", {\n key: 0,\n class: ['bal-alert-description', _ctx.descriptionColor, _ctx.textSizeClass]\n }, [\n _renderSlot(_ctx.$slots, \"default\", {}, () => [\n _createTextVNode(_toDisplayString(_ctx.description), 1)\n ])\n ], 2))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.actionLabel)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n class: [_ctx.actionClasses]\n }, [\n _createVNode(_component_BalBtn, {\n color: _ctx.btnColor,\n size: \"xs\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('actionClick')))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.actionLabel), 1)\n ]),\n _: 1\n }, 8, [\"color\"])\n ], 2))\n : _createCommentVNode(\"\", true)\n ], 2)\n ], 2)\n ], 2))\n}","\nimport { computed, defineComponent, PropType } from 'vue';\nimport BalIcon from '../BalIcon/BalIcon.vue';\nimport BalBtn from '../BalBtn/BalBtn.vue';\n\ntype AlertType = 'warning' | 'error' | 'info';\n\nexport default defineComponent({\n name: 'BalAlert',\n\n components: {\n BalIcon,\n BalBtn\n },\n\n emits: ['actionClick'],\n\n props: {\n type: { type: String as PropType, default: 'info' },\n size: {\n type: String,\n default: 'md',\n validator: (val: string): boolean => ['sm', 'md', 'lg'].includes(val)\n },\n title: { type: String, default: 'A title message' },\n description: { type: String },\n actionLabel: { type: String },\n raised: { type: Boolean, default: false },\n block: { type: Boolean, default: false }\n },\n\n setup(props, { slots }) {\n const bgColorClass = computed(() => {\n switch (props.type) {\n case 'warning':\n return 'bg-yellow-50 text-black';\n case 'error':\n return 'bg-red-50 text-black';\n default:\n return 'bg-black text-white';\n }\n });\n\n const paddingClasses = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'p-1';\n default:\n return 'p-2';\n }\n });\n\n const textSizeClass = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'text-xs';\n case 'lg':\n return 'text-base';\n default:\n return 'text-sm';\n }\n });\n\n const classes = computed(() => {\n return {\n [bgColorClass.value]: true,\n [paddingClasses.value]: true,\n 'shadow-sm': props.raised,\n 'w-full': props.block\n };\n });\n\n const containerClasses = computed(() => ({\n 'items-center': !props.description && !slots.default\n }));\n\n const contentClasses = computed(() => ({\n 'items-center': !props.description && !slots.default,\n 'flex-col': !!props.description || slots.default\n }));\n\n const iconSizeClasses = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'w-5 h-5';\n case 'lg':\n return 'w-7 h-7';\n default:\n return 'w-6 h-6';\n }\n });\n\n const iconColorClasses = computed(() => {\n switch (props.type) {\n case 'warning':\n return 'text-yellow-500 bg-yellow-500 bg-opacity-10';\n case 'error':\n return 'text-red-500 bg-red-500 bg-opacity-10';\n default:\n return 'text-white bg-white bg-opacity-20';\n }\n });\n\n const iconClasses = computed(() => {\n return {\n [iconSizeClasses.value]: true,\n [iconColorClasses.value]: true\n };\n });\n\n const titleClasses = computed(() => ({\n 'font-bold': !!props.description || slots.default\n }));\n\n const descriptionColor = computed(() => {\n if (props.type === 'info') return 'text-white text-opacity-70';\n return 'text-black text-opacity-70';\n });\n\n const iconSize = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'sm';\n default:\n return 'md';\n }\n });\n\n const btnColor = computed(() => {\n switch (props.type) {\n case 'warning':\n return 'yellow';\n case 'error':\n return 'red';\n default:\n return 'white';\n }\n });\n\n const actionClasses = computed(() => ({\n 'pl-4': !props.description && !slots.default,\n 'mt-1': !!props.description || slots.default\n }));\n\n return {\n classes,\n containerClasses,\n contentClasses,\n iconClasses,\n iconSize,\n titleClasses,\n textSizeClass,\n descriptionColor,\n btnColor,\n actionClasses\n };\n }\n});\n","import { render } from \"./BalAlert.vue?vue&type=template&id=946232c0&ts=true\"\nimport script from \"./BalAlert.vue?vue&type=script&lang=ts\"\nexport * from \"./BalAlert.vue?vue&type=script&lang=ts\"\n\nimport \"./BalAlert.vue?vue&type=style&index=0&id=946232c0&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { inject } from 'vue';\nimport {\n UserSettingsProviderResponse,\n UserSettingsProviderSymbol\n} from '@/providers/user-settings.provider';\n\nconst defaultProviderResponse = {} as UserSettingsProviderResponse;\n\nexport default function useUserSettings(): UserSettingsProviderResponse {\n return inject(UserSettingsProviderSymbol, defaultProviderResponse);\n}\n","var map = {\n\t\"./default.svg\": \"4419\",\n\t\"./fortmatic.svg\": \"f786\",\n\t\"./frame.svg\": \"3438\",\n\t\"./gnosis.svg\": \"9022\",\n\t\"./imtoken.svg\": \"5bc1\",\n\t\"./metamask.svg\": \"3ed1\",\n\t\"./portis.svg\": \"d25c\",\n\t\"./status.svg\": \"3ac9\",\n\t\"./trustwallet.svg\": \"edeb\",\n\t\"./walletconnect.svg\": \"ffed\",\n\t\"./walletlink.svg\": \"2683\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"b1ea\";","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TradeRoute.vue?vue&type=style&index=0&id=732ee322&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AppSlippageForm.vue?vue&type=style&index=0&id=d36e735e&scoped=true&lang=css\"","import { inject } from 'vue';\nimport {\n TokensProviderResponse,\n TokensProviderSymbol\n} from '@/providers/tokens.provider';\n\nconst defaultProviderResponse = {} as TokensProviderResponse;\n\n/**\n * useTokens Composable\n * Interface to all token static and dynamic metatdata.\n */\nexport default function useTokens(): TokensProviderResponse {\n return inject(TokensProviderSymbol, defaultProviderResponse);\n}\n","module.exports = __webpack_public_path__ + \"img/headline.f56c5e16.svg\";","import { createVNode as _createVNode, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"inline-flex items-start\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"input\", {\n type: \"radio\",\n value: _ctx.value,\n checked: _ctx.modelValue === _ctx.value,\n name: _ctx.name,\n onChange: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onChange(_ctx.value))),\n class: ['bal-radio-input', _ctx.inputClasses],\n disabled: _ctx.disabled\n }, null, 42, [\"value\", \"checked\", \"name\", \"disabled\"]),\n (_ctx.$slots.label || _ctx.label)\n ? (_openBlock(), _createBlock(\"label\", {\n key: 0,\n for: _ctx.name,\n class: ['bal-radio-label', _ctx.labelClasses],\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (_ctx.onChange(_ctx.value)), [\"prevent\"]))\n }, [\n _renderSlot(_ctx.$slots, \"label\", {}, () => [\n _createTextVNode(_toDisplayString(_ctx.label), 1)\n ])\n ], 10, [\"for\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { defineComponent, computed } from 'vue';\n\nexport default defineComponent({\n name: 'BalRadio',\n\n emits: ['update:modelValue'],\n\n props: {\n name: { type: String, required: true },\n value: { type: [String, Number], required: true },\n modelValue: { type: [String, Number], default: '' },\n label: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n size: {\n type: String,\n default: 'md',\n validator: (val: string): boolean => ['sm', 'md', 'lg'].includes(val)\n },\n color: {\n type: String,\n default: 'blue',\n validator: (val: string): boolean => ['blue'].includes(val)\n }\n },\n\n setup(props, { emit }) {\n function onChange(value) {\n if (!props.disabled) emit('update:modelValue', value);\n }\n\n const sizeClasses = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'w-3 h-3';\n case 'lg':\n return 'w-6 h-6';\n default:\n return 'w-4 h-4';\n }\n });\n\n const textSizeClass = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'leading-none text-sm';\n case 'lg':\n return 'leading-none text-lg';\n default:\n return 'leading-none text-base';\n }\n });\n\n const colorClass = computed(() => {\n if (props.disabled) return 'text-gray-500';\n return `text-${props.color}-500`;\n });\n\n const cursrorClass = computed(() => {\n if (props.disabled) return 'cursor-not-allowed';\n return 'cursor-pointer';\n });\n\n const inputClasses = computed(() => {\n return {\n [sizeClasses.value]: true,\n [colorClass.value]: true,\n [cursrorClass.value]: true\n };\n });\n\n const labelClasses = computed(() => {\n return {\n [textSizeClass.value]: true,\n [cursrorClass.value]: true\n };\n });\n\n return {\n onChange,\n inputClasses,\n labelClasses\n };\n }\n});\n","import { render } from \"./BalRadio.vue?vue&type=template&id=4e7e8b62&ts=true\"\nimport script from \"./BalRadio.vue?vue&type=script&lang=ts\"\nexport * from \"./BalRadio.vue?vue&type=script&lang=ts\"\n\nimport \"./BalRadio.vue?vue&type=style&index=0&id=4e7e8b62&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./MoonIcon.vue?vue&type=template&id=6a0a63d0\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { configService } from '@/services/config/config.service';\n\nexport const TOKENS = {\n Popular: {\n Symbols: ['WBTC', 'DAI', 'USDC', 'WFTM', 'WETH']\n },\n AddressMap: {\n '1': {\n ETH: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n WETH: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n BAL: '0xba100000625a3754423978a60c9317c58a424e3d'\n },\n '4': {\n ETH: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n WETH: '0x80dD2B80FbcFB06505A301d732322e987380EcD6',\n BAL: '0xba100000625a3754423978a60c9317c58a424e3d'\n },\n '42': {\n ETH: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n WETH: '0xdFCeA9088c8A88A76FF74892C1457C17dfeef9C1',\n BAL: '0x41286Bb1D3E870f3F750eB7E1C25d7E48c8A1Ac7'\n },\n '137': {\n WETH: '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619',\n BAL: '0x9a71012b13ca4d3d0cdc72a177df3ef03b0e76a3'\n },\n '250': {\n ETH: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',\n WETH: '0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83',\n BAL: '0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e'\n },\n '592': {\n BUSD: '0x4Bf769b05E832FCdc9053fFFBC78Ca889aCb5E1E',\n BNB: '0x7f27352D5F83Db87a5A3E00f4B07Cc2138D8ee52',\n WSDN: '0x75364D4F779d0Bd0facD9a218c67f87dD9Aff3b4',\n MATIC: '0xdd90E5E87A2081Dcf0391920868eBc2FFB81a1aF',\n WASTR: '0xAeaaf0e2c81Af264101B9129C00F4440cCF0F720',\n WBTC: '0xad543f18cFf85c77E140E3E5E3c3392f6Ba9d5CA',\n WETH: '0x81ECac0D6Be0550A00FF064a4f9dd2400585FE9c',\n USDC: '0x6a2d262D56735DbA19Dd70682B39F6bE9a931D98',\n USDT: '0x3795C36e7D12A8c252A20C5a7B455f7c57b60283',\n DAI: '0x6De33698e9e9b787e09d3Bd7771ef63557E148bb'\n }\n },\n Prices: {\n CustomPlatformId: {\n '0x514910771af9ca656af840dff83e8264ecf986ca': 'ethereum',\n '0x6b175474e89094c44da98b954eedeac495271d0f': 'ethereum',\n '0xdac17f958d2ee523a2206206994597c13d831ec7': 'ethereum',\n '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3': 'ethereum',\n '0xba100000625a3754423978a60c9317c58a424e3d': 'ethereum'\n },\n ChainMap: {\n '42': {\n '0xdfcea9088c8a88a76ff74892c1457c17dfeef9c1':\n '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',\n '0x1c8e3bcb3378a443cc591f154c5ce0ebb4da9648':\n '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',\n '0x41286bb1d3e870f3f750eb7e1c25d7e48c8a1ac7':\n '0xba100000625a3754423978a60c9317c58a424e3d',\n '0x8f4bebf498cc624a0797fe64114a6ff169eee078':\n '0xbc396689893d065f41bc2c6ecbee5e0085233447',\n '0xaf9ac3235be96ed496db7969f60d354fe5e426b0':\n '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2',\n '0xc2569dd7d0fd715b054fbf16e75b001e5c0c1115':\n '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n '0x04df6e4121c27713ed22341e7c7df330f56f289b':\n '0x6b175474e89094c44da98b954eedeac495271d0f'\n },\n '4': {\n '0xb4761d0481b4f7a8a858d2796eef3daa2f3d9d2c':\n '0x321162cd933e2be498cd2267a90534a804051b11',\n '0x70b55af71b29c5ca7e67bd1995250364c4be5554':\n '0x04068da6c83afcfa0e13ba15a6696662335d5b75',\n '0x80dd2b80fbcfb06505a301d732322e987380ecd6':\n '0x74b23882a30290451a17c44f4f05243b6b58c76d',\n '0xb8fecb889862c486bcce52222c7efe9b30371ad5':\n '0x514910771af9ca656af840dff83e8264ecf986ca',\n '0x12c615406f20edcbda50888f9fd6734dc4836417':\n '0x6b175474e89094c44da98b954eedeac495271d0f',\n '0x6f00d64b42af8f449db15b0b3ee3b444550c4826':\n '0x5cc61a78f164885776aa610fb0fe1257df78e59b',\n '0x4176603b0712407b1d7dcce3acab685f7219e6dd':\n '0x841fad6eae12c286d1fd18d1d525dffa75c7effe',\n '0x0d543d9528e17cf55ac73660407f712b5a3085ab':\n '0xe0654c8e6fd4d733349ac7e09f6f23da256bf475',\n '0xda05941b0a17a1b537c711094c575665c116d237':\n '0xc5e2b037d30a390e62180970b3aa4e91868764cd',\n '0x64fe8666ccbd87e819a398eeb79580255d00d8ea':\n '0x05848b832e872d9edd84ac5718d58f21fd9c9649',\n '0x6a9598780f937c10fffccb9dbf9a792d122cc538':\n '0x10b620b2dbac4faa7d7ffd71da486f5d44cd86f9',\n '0xcabdf4994c71e48d8e8af66457658fc7cd29400f':\n '0xf16e81dce15b08f326220742020379b855b87df9',\n '0x0483863540cb2c1ea77f7827db43ee160a0ad7ac':\n '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83',\n '0x40d26f06defee453bcfcaa61badb16883e4ee26c':\n '0xdac17f958d2ee523a2206206994597c13d831ec7'\n },\n '250': {\n '0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e':\n '0x6b175474e89094c44da98b954eedeac495271d0f',\n '0xb3654dc3d10ea7645f8319668e8f54d2574fbdc8':\n '0x514910771af9ca656af840dff83e8264ecf986ca',\n '0x82f0b8b456c1a451378467398982d4834b6829c1':\n '0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3',\n '0x049d68029688eabf473097a2fc38ef61633a3c7a':\n '0xdac17f958d2ee523a2206206994597c13d831ec7',\n '0x58a547ed09684ac2a688610d5caf8e8968b51908':\n '0xba100000625a3754423978a60c9317c58a424e3d'\n },\n 592: {}\n }\n }\n};\n\nexport const NATIVE_ASSET_ADDRESS = configService.network.nativeAsset.address;\nexport const DEFAULT_TOKEN_DECIMALS = 18;\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TradePreviewModal.vue?vue&type=style&index=0&id=b9b7efb4&scoped=true&lang=css\"","import { provide, InjectionKey, reactive, Ref, toRefs } from 'vue';\nimport symbolKeys from '@/constants/symbol.keys';\nimport LS_KEYS from '@/constants/local-storage.keys';\nimport { FiatCurrency } from '@/constants/currency';\nimport { lsGet, lsSet } from '@/lib/utils';\n\n/**\n * TYPES\n */\nexport interface UserSettingsState {\n currency: FiatCurrency;\n slippage: string;\n}\n\nexport interface UserSettingsProviderResponse {\n currency: Ref;\n slippage: Ref;\n setCurrency: (newCurrency: FiatCurrency) => void;\n setSlippage: (newSlippage: string) => void;\n}\n\n/**\n * SETUP\n */\nexport const UserSettingsProviderSymbol: InjectionKey = Symbol(\n symbolKeys.Providers.App\n);\n\nconst lsCurrency = lsGet(LS_KEYS.UserSettings.Currency, FiatCurrency.usd);\nconst lsSlippage = lsGet(LS_KEYS.App.TradeSlippage, '0.01');\n\n/**\n * STATE\n */\nconst state: UserSettingsState = reactive({\n currency: lsCurrency,\n slippage: lsSlippage\n});\n\n/**\n * METHODS\n */\nfunction setCurrency(newCurrency: FiatCurrency): void {\n lsSet(LS_KEYS.UserSettings.Currency, newCurrency);\n state.currency = newCurrency;\n}\n\nfunction setSlippage(newSlippage: string): void {\n lsSet(LS_KEYS.App.TradeSlippage, newSlippage);\n state.slippage = newSlippage;\n}\n\n/**\n * UserSettingsProvider\n * Provides global user settings interface\n */\nexport default {\n name: 'UserSettingsProvider',\n\n setup(props, { slots }) {\n provide(UserSettingsProviderSymbol, {\n ...toRefs(state),\n // methods\n setCurrency,\n setSlippage\n });\n\n return () => slots.default();\n }\n};\n","\n","import { render } from \"./SunIcon.vue?vue&type=template&id=da1987a6\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-0d4a69a4\")\n\n_pushScopeId(\"data-v-0d4a69a4\")\nconst _hoisted_1 = {\n key: 0,\n class: \"flex items-center justify-center\"\n}\nconst _hoisted_2 = {\n key: 0,\n class: \"ml-2\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"content\"\n}\nconst _hoisted_4 = { key: 0 }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalLoadingIcon = _resolveComponent(\"BalLoadingIcon\")\n\n return (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.tag), {\n class: ['bal-btn', _ctx.btnClasses],\n disabled: _ctx.disabled || _ctx.loading\n }, {\n default: _withId(() => [\n (_ctx.loading)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BalLoadingIcon, {\n size: _ctx.size,\n color: _ctx.iconColor\n }, null, 8, [\"size\", \"color\"]),\n (_ctx.loadingLabel)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_2, _toDisplayString(_ctx.loadingLabel), 1))\n : _createCommentVNode(\"\", true)\n ]))\n : (_openBlock(), _createBlock(\"div\", _hoisted_3, [\n (_ctx.label)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_4, _toDisplayString(_ctx.label), 1))\n : _renderSlot(_ctx.$slots, \"default\", { key: 1 }, undefined, true)\n ]))\n ]),\n _: 3\n }, 8, [\"class\", \"disabled\"]))\n})","\nimport { defineComponent, computed } from 'vue';\nimport BalLoadingIcon from '../BalLoadingIcon/BalLoadingIcon.vue';\n\nexport default defineComponent({\n name: 'BalBtn',\n\n components: {\n BalLoadingIcon\n },\n\n props: {\n tag: {\n type: String,\n default: 'button',\n validator: (val: string): boolean =>\n ['button', 'a', 'div', 'router-link'].includes(val)\n },\n size: {\n type: String,\n default: 'md',\n validator: (val: string): boolean =>\n ['xs', 'sm', 'md', 'lg'].includes(val)\n },\n color: {\n type: String,\n default: 'primary',\n validator: (val: string): boolean =>\n [\n 'primary',\n 'gradient',\n 'gradient-reverse',\n 'gradient-pink-yellow',\n 'gray',\n 'red',\n 'white',\n 'blue'\n ].includes(val)\n },\n label: { type: String, default: '' },\n block: { type: Boolean, default: false },\n circle: { type: Boolean, default: false },\n outline: { type: Boolean, default: false },\n flat: { type: Boolean, default: false },\n rounded: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n loadingLabel: { type: String, default: 'loading...' },\n disabled: { type: Boolean, default: false }\n },\n\n setup(props) {\n const sizeClasses = computed(() => {\n switch (props.size) {\n case 'xs':\n return 'px-2 h-6 text-xs';\n case 'sm':\n return 'px-3 h-9 text-base';\n case 'lg':\n return 'px-5 h-18 text-lg md:text-2xl';\n default:\n return 'px-4 h-12 text-base';\n }\n });\n\n const circleSizeClasses = computed(() => {\n switch (props.size) {\n case 'xs':\n return 'w-6 h-6 text-sm';\n case 'sm':\n return 'w-9 h-9 text-lg';\n case 'md':\n return 'w-12 h-12 text-lg';\n case 'lg':\n return 'w-16 h-16 text-2xl';\n default:\n return 'w-12 h-12 text-base';\n }\n });\n\n const bgGradientClasses = computed(() => {\n if (props.outline) return 'bg-transparent';\n\n let fromColor = 'green';\n let toColor = 'green';\n\n if (props.color === 'gradient-reverse') {\n fromColor = 'pink';\n toColor = 'blue';\n } else if (props.color === 'gradient-pink-yellow') {\n fromColor = 'pink';\n toColor = 'yellow';\n }\n\n if (props.disabled) {\n return `bg-gray-300 dark:bg-gray-700 text-white dark:text-gray-500`;\n }\n if (props.loading) {\n return `bg-gradient-to-tr from-${fromColor}-50 to-${toColor}-50`;\n }\n return `\n bg-gradient-to-tr from-${fromColor}-500 to-${toColor}-500\n hover:from-${fromColor}-600 hover:to-${toColor}-600\n `;\n });\n\n const bgFlatClasses = computed(() => {\n return `\n bg-${props.color}-50 hover:bg-${props.color}-100\n dark:bg-${props.color}-800 dark:hover:bg-${props.color}-700\n `;\n });\n\n const bgColorClasses = computed(() => {\n if (props.color.includes('gradient')) return bgGradientClasses.value;\n else if (props.outline) return 'bg-transparent';\n else if (props.flat) return bgFlatClasses.value;\n else if (props.color === 'white') {\n return 'bg-gray-50 dark:bg-gray-800';\n } else {\n if (props.disabled) {\n return `bg-gray-300 dark:bg-gray-700 text-white dark:text-gray-500`;\n }\n if (props.loading) {\n return `bg-${props.color}-400 dark:bg-${props.color}-dark-400`;\n }\n\n return `\n bg-${props.color}-500 hover:bg-${props.color}-600\n dark:bg-${props.color}-dark-500 dark:hover:bg-${props.color}-dark-600\n `;\n }\n });\n\n const borderClasses = computed(() => {\n if (props.outline)\n return `border border-${props.color}-200 dark:border-${props.color}-700`;\n return 'border-none';\n });\n\n const textColorClasses = computed(() => {\n if (props.color === 'white') {\n if (props.outline) return 'text-white';\n else return 'text-gray-800 dark:text-gray-100';\n }\n if (props.outline || props.flat) {\n return `text-${props.color}-500 dark:text-${props.color}-400`;\n }\n if (props.color === 'gradient' && props.loading) {\n return 'text-gray-600';\n }\n\n return 'text-white';\n });\n\n const displayClasses = computed(() => {\n if (props.circle) return 'flex justify-center items-center';\n if (props.block) return 'block w-full';\n return 'inline-block';\n });\n\n const shapeClasses = computed(() => {\n if (props.circle || props.rounded) return 'rounded-full';\n return 'rounded-lg';\n });\n\n const cursorClasses = computed(() => {\n if (props.disabled || props.loading) return 'cursor-not-allowed';\n return 'cursor-pointer';\n });\n\n const shadowClasses = computed(() => {\n if (props.flat || props.disabled || props.loading) return '';\n if (props.size === 'sm') return 'shadow hover:shadow-none';\n return 'shadow hover:shadow-none';\n });\n\n const btnClasses = computed(() => {\n return {\n [sizeClasses.value]: !props.circle,\n [circleSizeClasses.value]: props.circle,\n [bgColorClasses.value]: true,\n [textColorClasses.value]: true,\n [borderClasses.value]: true,\n [displayClasses.value]: true,\n [shapeClasses.value]: true,\n [shadowClasses.value]: true,\n [cursorClasses.value]: true\n };\n });\n\n const iconColor = computed(() => {\n if (props.outline) return props.color;\n return 'gray';\n });\n\n return {\n btnClasses,\n iconColor\n };\n }\n});\n","import { render } from \"./BalBtn.vue?vue&type=template&id=0d4a69a4&scoped=true&ts=true\"\nimport script from \"./BalBtn.vue?vue&type=script&lang=ts\"\nexport * from \"./BalBtn.vue?vue&type=script&lang=ts\"\n\nimport \"./BalBtn.vue?vue&type=style&index=0&id=0d4a69a4&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0d4a69a4\"]])\n\nexport default __exports__","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalRadio.vue?vue&type=style&index=0&id=4e7e8b62&lang=css\"","import { createStore } from 'vuex';\nimport modules from '@/store/modules';\n\nconst store = createStore({\n modules,\n strict: process.env.NODE_ENV !== 'production'\n});\n\nexport default store;\n","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, withCtx as _withCtx, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-76266212\")\n\n_pushScopeId(\"data-v-76266212\")\nconst _hoisted_1 = { class: \"lg:container lg:mx-auto pt-8\" }\nconst _hoisted_2 = { class: \"grid grid-cols-1 lg:grid-cols-3 gap-y-8 gap-x-0 lg:gap-x-8\" }\nconst _hoisted_3 = { class: \"col-span-2\" }\nconst _hoisted_4 = {\n key: 1,\n class: \"px-4 lg:px-0 flex flex-col\"\n}\nconst _hoisted_5 = { class: \"flex flex-wrap items-center -mt-2\" }\nconst _hoisted_6 = { class: \"pool-title\" }\nconst _hoisted_7 = { class: \"ml-2\" }\nconst _hoisted_8 = {\n key: 0,\n class: \"font-medium text-gray-400 text-xs mt-px ml-1\"\n}\nconst _hoisted_9 = { class: \"flex items-center mt-2\" }\nconst _hoisted_10 = { class: \"w-52\" }\nconst _hoisted_11 = /*#__PURE__*/_createVNode(\"div\", { class: \"hidden lg:block\" }, null, -1)\nconst _hoisted_12 = { class: \"col-span-2 order-2 lg:order-1\" }\nconst _hoisted_13 = { class: \"grid grid-cols-1 gap-y-8\" }\nconst _hoisted_14 = { class: \"px-1 lg:px-0\" }\nconst _hoisted_15 = { class: \"mb-4 px-1 lg:px-0\" }\nconst _hoisted_16 = {\n key: 0,\n class: \"mb-4\"\n}\nconst _hoisted_17 = /*#__PURE__*/_createVNode(\"h4\", { class: \"px-4 lg:px-0 mb-4\" }, \"Farm\", -1)\nconst _hoisted_18 = { class: \"mb-4\" }\nconst _hoisted_19 = { class: \"order-1 lg:order-2 px-1 lg:px-0\" }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_LiquidityMiningTooltip = _resolveComponent(\"LiquidityMiningTooltip\")\n const _component_GauntletIcon = _resolveComponent(\"GauntletIcon\")\n const _component_BalLink = _resolveComponent(\"BalLink\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n const _component_BalAlert = _resolveComponent(\"BalAlert\")\n const _component_PoolChart = _resolveComponent(\"PoolChart\")\n const _component_PoolStatCards = _resolveComponent(\"PoolStatCards\")\n const _component_FarmStatCardsLoading = _resolveComponent(\"FarmStatCardsLoading\")\n const _component_FarmStatCards = _resolveComponent(\"FarmStatCards\")\n const _component_PoolBalancesCard = _resolveComponent(\"PoolBalancesCard\")\n const _component_PoolActivitiesCard = _resolveComponent(\"PoolActivitiesCard\")\n const _component_PoolActionsCard = _resolveComponent(\"PoolActionsCard\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", _hoisted_3, [\n (_ctx.loadingPool)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-16\"\n }))\n : (_openBlock(), _createBlock(\"div\", _hoisted_4, [\n _createVNode(\"div\", _hoisted_5, [\n _createVNode(\"h3\", _hoisted_6, _toDisplayString(_ctx.poolName), 1),\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.titleTokens, ([address, tokenMeta], i) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: i,\n class: \"mt-2 mr-2 flex items-center px-2 h-10 bg-gray-50 dark:bg-gray-850 rounded-lg\"\n }, [\n _createVNode(_component_BalAsset, {\n address: address,\n size: 24\n }, null, 8, [\"address\"]),\n _createVNode(\"span\", _hoisted_7, _toDisplayString(tokenMeta.symbol), 1),\n (!_ctx.isStableLikePool)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_8, _toDisplayString(_ctx.fNum(tokenMeta.weight, 'percent_lg')), 1))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128)),\n _createVNode(_component_LiquidityMiningTooltip, {\n pool: _ctx.pool,\n class: \"-ml-1 mt-2\"\n }, null, 8, [\"pool\"])\n ]),\n _createVNode(\"div\", _hoisted_9, [\n _createVNode(\"div\", {\n innerHTML: _ctx.poolFeeLabel,\n class: \"text-sm text-white\"\n }, null, 8, [\"innerHTML\"]),\n _createVNode(_component_BalTooltip, null, {\n activator: _withId(() => [\n (_ctx.feesManagedByGauntlet)\n ? (_openBlock(), _createBlock(_component_BalLink, {\n key: 0,\n href: _ctx.EXTERNAL_LINKS.Gauntlet.Home,\n external: \"\"\n }, {\n default: _withId(() => [\n _createVNode(_component_GauntletIcon, { class: \"ml-2\" })\n ]),\n _: 1\n }, 8, [\"href\"]))\n : (_openBlock(), _createBlock(_component_BalIcon, {\n key: 1,\n name: \"info\",\n size: \"xs\",\n class: \"text-gray-400 ml-2\"\n }))\n ]),\n default: _withId(() => [\n _createVNode(\"div\", _hoisted_10, [\n _createVNode(\"span\", null, _toDisplayString(_ctx.swapFeeToolTip), 1)\n ])\n ]),\n _: 1\n })\n ])\n ])),\n (!_ctx.appLoading && _ctx.missingPrices)\n ? (_openBlock(), _createBlock(_component_BalAlert, {\n key: 2,\n type: \"warning\",\n title: _ctx.$t('noPriceInfo'),\n size: \"sm\",\n class: \"mt-2\"\n }, null, 8, [\"title\"]))\n : _createCommentVNode(\"\", true),\n (!_ctx.appLoading && _ctx.noInitLiquidity)\n ? (_openBlock(), _createBlock(_component_BalAlert, {\n key: 3,\n type: \"warning\",\n title: _ctx.$t('noInitLiquidity'),\n description: _ctx.$t('noInitLiquidityDetail'),\n size: \"sm\",\n class: \"mt-2\"\n }, null, 8, [\"title\", \"description\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _hoisted_11,\n _createVNode(\"div\", _hoisted_12, [\n _createVNode(\"div\", _hoisted_13, [\n _createVNode(\"div\", _hoisted_14, [\n _createVNode(_component_PoolChart, {\n prices: _ctx.historicalPrices,\n snapshots: _ctx.snapshots,\n loading: _ctx.isLoadingSnapshots\n }, null, 8, [\"prices\", \"snapshots\", \"loading\"])\n ]),\n _createVNode(\"div\", _hoisted_15, [\n _createVNode(_component_PoolStatCards, {\n pool: _ctx.pool,\n loading: _ctx.loadingPool\n }, null, 8, [\"pool\", \"loading\"])\n ]),\n (_ctx.loadingPool || !!_ctx.pool.farm)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_16, [\n _hoisted_17,\n (_ctx.loadingPool)\n ? (_openBlock(), _createBlock(_component_FarmStatCardsLoading, { key: 0 }))\n : (_openBlock(), _createBlock(_component_FarmStatCards, {\n key: 1,\n pool: _ctx.pool\n }, null, 8, [\"pool\"]))\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_18, [\n _createVNode(\"h4\", {\n textContent: _toDisplayString(_ctx.$t('poolComposition')),\n class: \"px-4 lg:px-0 mb-4\"\n }, null, 8, [\"textContent\"]),\n _createVNode(_component_PoolBalancesCard, {\n pool: _ctx.pool,\n loading: _ctx.loadingPool\n }, null, 8, [\"pool\", \"loading\"])\n ]),\n _createVNode(\"div\", null, [\n _createVNode(\"h4\", {\n textContent: _toDisplayString(_ctx.$t('poolTransactions')),\n class: \"px-4 lg:px-0 mb-2\"\n }, null, 8, [\"textContent\"]),\n _createVNode(_component_PoolActivitiesCard, {\n pool: _ctx.pool,\n loading: _ctx.loadingPool\n }, null, 8, [\"pool\", \"loading\"])\n ])\n ])\n ]),\n _createVNode(\"div\", _hoisted_19, [\n (_ctx.loadingPool)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: ['h-96', 'top-24', _ctx.titleTokens.length > 3 ? '' : 'sticky']\n }, null, 8, [\"class\"]))\n : (!_ctx.noInitLiquidity)\n ? (_openBlock(), _createBlock(_component_PoolActionsCard, {\n key: 1,\n pool: _ctx.pool,\n \"missing-prices\": _ctx.missingPrices,\n onOnTx: _ctx.onNewTx,\n class: ['top-24', _ctx.titleTokens.length > 3 ? '' : 'sticky']\n }, null, 8, [\"pool\", \"missing-prices\", \"onOnTx\", \"class\"]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n})","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, toDisplayString as _toDisplayString, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = {\n key: 1,\n class: \"chart mr-n2 ml-n2\"\n}\nconst _hoisted_2 = { class: \"dark:text-white\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_BalLineChart = _resolveComponent(\"BalLineChart\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBlankSlate = _resolveComponent(\"BalBlankSlate\")\n\n return (_ctx.loading || _ctx.appLoading)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-96\"\n }))\n : (_ctx.nonEmptySnapshots.length >= 7)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BalLineChart, {\n data: _ctx.series,\n isPeriodSelectionEnabled: false,\n axisLabelFormatter: { yAxis: '0.00%' },\n color: _ctx.chartColors,\n height: \"96\",\n showLegend: true,\n legendState: { HODL: false },\n \"hide-y-axis\": \"\"\n }, null, 8, [\"data\", \"axisLabelFormatter\", \"color\"])\n ]))\n : (_openBlock(), _createBlock(_component_BalBlankSlate, {\n key: 2,\n class: \"h-96\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalIcon, { name: \"bar-chart\" }),\n _createVNode(\"span\", _hoisted_2, _toDisplayString(_ctx.$t('insufficientData')), 1)\n ]),\n _: 1\n }))\n}","\nimport { PropType, defineComponent, toRefs, computed, Ref } from 'vue';\n\nimport { useI18n } from 'vue-i18n';\nimport { useStore } from 'vuex';\nimport { zip } from 'lodash';\nimport { fromUnixTime, format } from 'date-fns';\nimport { PoolSnapshots } from '@/services/balancer/subgraph/types';\nimport useTailwind from '@/composables/useTailwind';\nimport useDarkMode from '@/composables/useDarkMode';\n\ninterface HistoryItem {\n timestamp: number;\n price: number[];\n amounts: string[];\n totalShares: string;\n}\n\nexport default defineComponent({\n name: 'PoolChart',\n\n props: {\n prices: {\n type: Object as PropType>,\n required: true\n },\n snapshots: {\n type: Object as PropType,\n required: true\n },\n loading: { type: Boolean, default: true }\n },\n\n setup(props) {\n const store = useStore();\n const { t } = useI18n();\n\n const {\n prices,\n snapshots\n }: {\n prices: Ref>;\n snapshots: Ref;\n } = toRefs(props);\n\n const appLoading = computed(() => store.state.app.loading);\n const tailwind = useTailwind();\n const { darkMode } = useDarkMode();\n\n const hodlColor = computed(() =>\n darkMode.value\n ? tailwind.theme.colors.gray['600']\n : tailwind.theme.colors.black\n );\n\n const chartColors = [tailwind.theme.colors.green['400'], hodlColor.value];\n\n const nonEmptySnapshots = computed(() => {\n if (!history.value || !history.value) return [];\n return history.value.filter((state: any) => state.totalShares !== '0');\n });\n\n function getPoolValue(amounts: string[], prices: number[]) {\n const values = amounts.map((amount, index) => {\n const price = prices[index];\n return price * parseFloat(amount);\n });\n return values.reduce((total, value) => total + value, 0);\n }\n\n const history = computed(() => {\n if (!prices || !prices.value || Object.values(prices.value).length === 0)\n return [];\n if (!snapshots || !snapshots.value) return [];\n\n const defaultState = {\n amounts: ['0', '0'],\n totalShares: '0'\n };\n\n const history = Object.keys(prices.value).map(timestamp => {\n if (!prices.value || !snapshots.value) return [];\n const price = prices.value[timestamp];\n const state = snapshots.value[timestamp]\n ? snapshots.value[timestamp]\n : defaultState;\n\n const amounts: string[] = state.amounts;\n const totalShares: string = state.totalShares;\n return {\n timestamp: parseInt(timestamp),\n price,\n amounts,\n totalShares\n };\n });\n return history;\n });\n\n const timestamps = computed(() => {\n if (!nonEmptySnapshots.value || nonEmptySnapshots.value.length === 0)\n return [];\n return nonEmptySnapshots.value.map((state: any) =>\n format(fromUnixTime(state.timestamp / 1000), 'yyyy/MM/dd')\n );\n });\n\n const holdValues = computed(() => {\n if (!nonEmptySnapshots.value || nonEmptySnapshots.value.length === 0) {\n return [];\n }\n const firstState: any = nonEmptySnapshots.value[0];\n const firstValue = getPoolValue(firstState.amounts, firstState.price);\n const values = history.value\n .filter((state: any) => state.totalShares !== '0')\n .map((state: any) => {\n if (state.timestamp < firstState.timestamp) {\n return 0;\n }\n const currentValue = getPoolValue(firstState.amounts, state.price);\n return currentValue / firstValue - 1;\n });\n return values;\n });\n\n const bptValues = computed(() => {\n if (!nonEmptySnapshots.value || nonEmptySnapshots.value.length === 0) {\n return [];\n }\n const firstState: any = nonEmptySnapshots.value[0];\n const firstValue = getPoolValue(firstState.amounts, firstState.price);\n const firstShares = parseFloat(firstState.totalShares);\n const firstValuePerBpt = firstValue / firstShares;\n const values = history.value\n .filter((state: any) => state.totalShares !== '0')\n .map((state: any) => {\n if (state.timestamp < firstState.timestamp) {\n return 0;\n }\n const currentValue = getPoolValue(state.amounts, state.price);\n const currentShares = parseFloat(state.totalShares);\n const currentValuePerBpt = currentValue / currentShares;\n return currentValuePerBpt / firstValuePerBpt - 1;\n });\n return values;\n });\n\n const series = computed(() => [\n {\n name: t('poolReturns'),\n values: zip(timestamps.value, bptValues.value)\n },\n {\n name: 'HODL',\n values: zip(timestamps.value, holdValues.value)\n }\n ]);\n\n return {\n series,\n appLoading,\n nonEmptySnapshots,\n chartColors\n };\n }\n});\n","import { render } from \"./PoolChart.vue?vue&type=template&id=915840e4&ts=true\"\nimport script from \"./PoolChart.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolChart.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 gap-4\" }\nconst _hoisted_2 = { class: \"text-sm text-gray-500 font-medium mb-2\" }\nconst _hoisted_3 = { class: \"text-xl font-medium truncate flex items-center\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_LiquidityMiningTooltip = _resolveComponent(\"LiquidityMiningTooltip\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n (_ctx.loading)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, _renderList(4, (n) => {\n return _createVNode(_component_BalLoadingBlock, {\n key: n,\n class: \"h-24\"\n })\n }), 64))\n : (_openBlock(true), _createBlock(_Fragment, { key: 1 }, _renderList(_ctx.stats, (stat, i) => {\n return (_openBlock(), _createBlock(_component_BalCard, { key: i }, {\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_2, _toDisplayString(stat.label), 1),\n _createVNode(\"div\", _hoisted_3, [\n _createTextVNode(_toDisplayString(stat.value) + \" \", 1),\n (stat.id === 'apr')\n ? (_openBlock(), _createBlock(_component_LiquidityMiningTooltip, {\n key: 0,\n pool: _ctx.pool\n }, null, 8, [\"pool\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 2\n }, 1024))\n }), 128))\n ]))\n}","import { resolveComponent as _resolveComponent, mergeProps as _mergeProps, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-sm divide-y dark:divide-gray-900\" }\nconst _hoisted_2 = { class: \"mb-1 px-3 pt-3\" }\nconst _hoisted_3 = { class: \"text-gray-500\" }\nconst _hoisted_4 = { class: \"text-lg\" }\nconst _hoisted_5 = { class: \"p-3\" }\nconst _hoisted_6 = { class: \"whitespace-nowrap flex items-center\" }\nconst _hoisted_7 = { class: \"ml-1 text-gray-500 text-xs\" }\nconst _hoisted_8 = { class: \"whitespace-nowrap flex items-center\" }\nconst _hoisted_9 = { class: \"ml-1 text-gray-500 text-xs flex items-center\" }\nconst _hoisted_10 = /*#__PURE__*/_createTextVNode(\" Farm APR \")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_StarsIcon = _resolveComponent(\"StarsIcon\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n\n return (_ctx.pool.hasLiquidityMiningRewards)\n ? (_openBlock(), _createBlock(_component_BalTooltip, {\n key: 0,\n noPad: \"\"\n }, {\n activator: _withCtx(() => [\n (_ctx.pool.hasLiquidityMiningRewards)\n ? (_openBlock(), _createBlock(_component_StarsIcon, _mergeProps({\n key: 0,\n class: \"ml-1 h-5 text-yellow-300\"\n }, _ctx.$attrs), null, 16))\n : _createCommentVNode(\"\", true)\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.$t('totalAPR')), 1),\n _createVNode(\"div\", _hoisted_4, _toDisplayString(_ctx.fNum(_ctx.pool.dynamic.apr.total, 'percent')), 1)\n ]),\n _createVNode(\"div\", _hoisted_5, [\n _createVNode(\"div\", _hoisted_6, [\n _createTextVNode(_toDisplayString(_ctx.fNum(_ctx.pool.dynamic.apr.pool, 'percent')) + \" \", 1),\n _createVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.$t('swapFeeAPR')), 1)\n ]),\n _createVNode(\"div\", _hoisted_8, [\n _createTextVNode(_toDisplayString(_ctx.fNum(_ctx.pool.dynamic.apr.liquidityMining, 'percent')) + \" \", 1),\n _createVNode(\"span\", _hoisted_9, [\n _hoisted_10,\n _createVNode(_component_StarsIcon, { class: \"h-4 text-yellow-300\" })\n ])\n ])\n ])\n ])\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n}","\nimport { defineComponent, PropType } from 'vue';\n\nimport useNumbers from '@/composables/useNumbers';\nimport { DecoratedPool } from '@/services/balancer/subgraph/types';\n\nexport default defineComponent({\n name: 'LiquidityMiningTooltip',\n\n props: {\n pool: {\n type: Object as PropType,\n required: true\n }\n },\n\n setup() {\n const { fNum } = useNumbers();\n\n return {\n fNum\n };\n }\n});\n","import { render } from \"./LiquidityMiningTooltip.vue?vue&type=template&id=8d14233c&ts=true\"\nimport script from \"./LiquidityMiningTooltip.vue?vue&type=script&lang=ts\"\nexport * from \"./LiquidityMiningTooltip.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { PropType, defineComponent, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport useNumbers from '@/composables/useNumbers';\n\nimport { DecoratedPool } from '@/services/balancer/subgraph/types';\n\nimport LiquidityMiningTooltip from '@/components/tooltips/LiquidityMiningTooltip.vue';\n\nexport default defineComponent({\n components: {\n LiquidityMiningTooltip\n },\n\n props: {\n pool: { type: Object as PropType },\n loading: { type: Boolean, default: true }\n },\n\n setup(props) {\n // COMPOSABLES\n const { fNum } = useNumbers();\n const { t } = useI18n();\n\n // COMPUTED\n const stats = computed(() => {\n if (!props.pool) return [];\n\n return [\n {\n id: 'poolValue',\n label: t('poolValue'),\n value: fNum(props.pool.totalLiquidity, 'usd')\n },\n {\n id: 'volumeTime',\n label: t('volumeTime', ['24h']),\n value: fNum(props.pool.dynamic.volume, 'usd')\n },\n {\n id: 'feesTime',\n label: t('feesTime', ['24h']),\n value: fNum(props.pool.dynamic.fees, 'usd')\n },\n {\n id: 'apr',\n label: 'APR',\n value: fNum(props.pool.dynamic.apr.total, 'percent')\n }\n ];\n });\n\n return {\n stats\n };\n }\n});\n","import { render } from \"./PoolStatCards.vue?vue&type=template&id=73edd8de&ts=true\"\nimport script from \"./PoolStatCards.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolStatCards.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"px-6 py-4 flex flex-row w-52\" }\nconst _hoisted_2 = { class: \"pl-4 font-medium eth-address\" }\nconst _hoisted_3 = { class: \"px-6 py-4 text-right\" }\nconst _hoisted_4 = { class: \"px-6 py-4 text-right\" }\nconst _hoisted_5 = { class: \"px-6 py-4 text-right\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalLink = _resolveComponent(\"BalLink\")\n const _component_BalTable = _resolveComponent(\"BalTable\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n\n return (_openBlock(), _createBlock(_component_BalCard, {\n class: \"overflow-x-auto whitespace-nowrap\",\n square: _ctx.upToLargeBreakpoint,\n noBorder: _ctx.upToLargeBreakpoint,\n noPad: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalTable, {\n columns: _ctx.columns,\n data: _ctx.tableData,\n \"is-loading\": _ctx.loading,\n \"skeleton-class\": \"h-64\",\n sticky: \"both\",\n \"initial-state\": {\n sortColumn: 'weight',\n sortDirection: 'desc'\n }\n }, {\n tokenColumnCell: _withCtx((token) => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(_component_BalLink, {\n href: _ctx.explorer.addressLink(token.address),\n external: \"\",\n noStyle: \"\",\n class: \"flex items-center\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalAsset, {\n address: token.address,\n size: 36\n }, null, 8, [\"address\"]),\n _createVNode(\"span\", _hoisted_2, _toDisplayString(_ctx.symbolFor(token.address)), 1),\n _createVNode(_component_BalIcon, {\n name: \"arrow-up-right\",\n size: \"sm\",\n class: \"ml-2 text-gray-500 hover:text-green-500 transition-colors\"\n })\n ]),\n _: 2\n }, 1032, [\"href\"])\n ])\n ]),\n tokenWeightCell: _withCtx((token) => [\n _createVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.weightFor(token.address)), 1)\n ]),\n tokenBalanceCell: _withCtx((token) => [\n _createVNode(\"div\", _hoisted_4, _toDisplayString(_ctx.balanceFor(token.address)), 1)\n ]),\n tokenValueCell: _withCtx((token) => [\n _createVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.fiatValueFor(token.address)), 1)\n ]),\n _: 1\n }, 8, [\"columns\", \"data\", \"is-loading\"])\n ]),\n _: 1\n }, 8, [\"square\", \"noBorder\"]))\n}","import { computed, onMounted, onUnmounted, ref } from 'vue';\n\nexport default function useBreakpoints() {\n const windowWidth = ref(window.innerWidth);\n\n const onWidthChange = () => (windowWidth.value = window.innerWidth);\n onMounted(() => window.addEventListener('resize', onWidthChange));\n onUnmounted(() => window.removeEventListener('resize', onWidthChange));\n\n const bp = computed(() => {\n if (windowWidth.value < 440) return 'xs';\n if (windowWidth.value < 640) return 'sm';\n if (windowWidth.value < 748) return 'md';\n if (windowWidth.value < 1024) return 'lg';\n if (windowWidth.value < 1280) return 'xl';\n return '2xl';\n });\n\n const width = computed(() => windowWidth.value);\n\n const upToLargeBreakpoint = computed(() =>\n ['xs', 'sm', 'md', 'lg'].includes(bp.value)\n );\n\n const upToMediumBreakpoint = computed(() =>\n ['xs', 'sm', 'md'].includes(bp.value)\n );\n\n const upToSmallBreakpoint = computed(() => ['xs', 'sm'].includes(bp.value));\n\n return {\n width,\n bp,\n upToLargeBreakpoint,\n upToMediumBreakpoint,\n upToSmallBreakpoint\n };\n}\n","export type QueryArgs = Record;\nexport type QueryAttrs = Record;\nexport type QueryBuilder = (\n args?: QueryArgs,\n attrs?: QueryAttrs\n) => Record;\n\nexport enum PoolType {\n Weighted = 'Weighted',\n Stable = 'Stable',\n MetaStable = 'MetaStable'\n}\nexport type TimeTravelPeriod = '24h';\n\nexport interface PoolToken {\n address: string;\n symbol: string;\n balance: string;\n weight: string;\n priceRate?: string;\n}\n\nexport interface Pool {\n id: string;\n name: string;\n address: string;\n poolType: PoolType;\n swapFee: string;\n owner: string;\n factory: string;\n tokens: PoolToken[];\n tokensList: string[];\n tokenAddresses: string[];\n totalLiquidity: string;\n totalShares: string;\n totalSwapFee: string;\n totalSwapVolume: string;\n hasLiquidityMiningRewards: boolean;\n swapEnabled?: boolean;\n}\n\nexport interface DecoratedPool extends Pool {\n dynamic: {\n period: TimeTravelPeriod;\n volume: string;\n apr: PoolApr;\n fees: string;\n };\n}\n\nexport interface PoolApr {\n pool: string;\n liquidityMining: string;\n total: string;\n}\n\nexport interface OnchainTokenData {\n balance: string;\n weight: number;\n decimals: number;\n logoURI: string;\n name: string;\n symbol: string;\n}\n\nexport interface OnchainPoolData {\n tokens: Record;\n totalSupply: string;\n decimals: number;\n swapFee: string;\n amp?: string;\n}\n\nexport interface FullPool extends DecoratedPool {\n onchain: OnchainPoolData;\n}\n\nexport interface PoolShare {\n poolId: {\n id: string;\n };\n balance: string;\n}\n\nexport interface DecoratedPoolWithShares extends DecoratedPool {\n shares: string;\n farm?: DecoratedFarm;\n}\n\nexport type PoolActivityType = 'Join' | 'Exit';\n\nexport interface PoolActivity {\n amounts: string[];\n timestamp: number;\n tx: string;\n type: PoolActivityType;\n}\n\nexport interface PoolSnapshot {\n pool: {\n id: string;\n };\n timestamp: number;\n amounts: string[];\n totalShares: string;\n swapVolume: string;\n swapFees: string;\n}\n\nexport type PoolSnapshots = Record;\n\nexport interface Farm {\n id: string;\n pair: string;\n allocPoint: number;\n slpBalance: string;\n masterChef: {\n id: string;\n totalAllocPoint: number;\n beetsPerBlock: string;\n };\n rewarder: {\n id: string;\n rewardToken: string;\n rewardPerSecond: string;\n };\n}\n\nexport interface FarmUser {\n id: string;\n pendingBeets: number;\n pendingBeetsValue: number;\n amount: number;\n rewardDebt: number;\n beetsHarvested: number;\n pool: {\n id: string;\n };\n pendingRewardToken: number;\n pendingRewardTokenValue: number;\n}\n\nexport interface DecoratedFarm extends Farm {\n tvl: number;\n rewards: number;\n stake: number;\n pendingBeets: number;\n pendingBeetsValue: number;\n apr: number;\n share: number;\n\n pendingRewardToken: number;\n pendingRewardTokenValue: number;\n}\n\nexport interface DecoratedPoolWithFarm extends DecoratedPool {\n farm?: DecoratedFarm;\n}\n\nexport interface DecoratedPoolWithRequiredFarm extends DecoratedPool {\n farm: DecoratedFarm;\n}\n\nexport interface SubgraphSwap {\n id: string;\n tokenIn: string;\n tokenInSym: string;\n tokenOut: string;\n tokenOutSym: string;\n tokenAmountIn: string;\n tokenAmountOut: string;\n poolId: {\n id: string;\n };\n userAddress: {\n id: string;\n };\n timestamp: number;\n}\n\nexport interface SubgraphTokenPrice {\n id: string;\n asset: string;\n amount: string;\n pricingAsset: string;\n price: string;\n block: string;\n timestamp: number;\n}\n\nexport interface SubgraphBalancer {\n poolCount: number;\n totalLiquidity: number;\n totalSwapFee: number;\n totalSwapVolume: number;\n}\n","import { Ref, computed } from 'vue';\nimport {\n Pool,\n DecoratedPoolWithShares,\n FullPool,\n PoolType,\n DecoratedPoolWithRequiredFarm\n} from '@/services/balancer/subgraph/types';\nimport { TOKENS } from '@/constants/tokens';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { configService } from '@/services/config/config.service';\nimport { getAddress } from 'ethers/lib/utils';\n\ntype AnyPool =\n | Pool\n | FullPool\n | DecoratedPoolWithShares\n | DecoratedPoolWithRequiredFarm;\n\nexport function isStable(pool: AnyPool): boolean {\n return pool.poolType === PoolType.Stable;\n}\n\nexport function isMetaStable(pool: AnyPool): boolean {\n return pool.poolType === PoolType.MetaStable;\n}\n\nexport function isStableLike(pool: AnyPool): boolean {\n return isStable(pool) || isMetaStable(pool);\n}\n\nexport function isWeighted(pool: AnyPool): boolean {\n return pool.poolType === PoolType.Weighted;\n}\n\nexport function isWeth(pool: AnyPool, networkId: string): boolean {\n return pool.tokenAddresses\n .map(address => address.toLowerCase())\n .includes(TOKENS.AddressMap[networkId].WETH);\n}\n\nexport function isWstETH(pool: AnyPool): boolean {\n if (!configService.network.addresses.wstETH) return false;\n\n return pool.tokenAddresses.includes(\n getAddress(configService.network.addresses.wstETH)\n );\n}\n\nexport function usePool(pool: Ref | Ref) {\n const { appNetworkConfig } = useWeb3();\n const isStablePool = computed(() => pool.value && isStable(pool.value));\n const isMetaStablePool = computed(\n () => pool.value && isMetaStable(pool.value)\n );\n const isStableLikePool = computed(\n () => pool.value && isStableLike(pool.value)\n );\n const isWeightedPool = computed(() => pool.value && isWeighted(pool.value));\n const isWethPool = computed(\n () => pool.value && isWeth(pool.value, appNetworkConfig.key)\n );\n const isWstETHPool = computed(() => pool.value && isWstETH(pool.value));\n\n return {\n // computed\n isStablePool,\n isMetaStablePool,\n isStableLikePool,\n isWeightedPool,\n isWethPool,\n isWstETHPool,\n // methods\n isStable,\n isMetaStable,\n isStableLike,\n isWeighted,\n isWeth\n };\n}\n","\nimport { PropType, defineComponent, toRefs, computed, Ref } from 'vue';\nimport useNumbers from '@/composables/useNumbers';\nimport { useI18n } from 'vue-i18n';\nimport { FullPool } from '@/services/balancer/subgraph/types';\nimport numeral from 'numeral';\nimport { shortenLabel } from '@/lib/utils';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useBreakpoints from '@/composables/useBreakpoints';\nimport useTokens from '@/composables/useTokens';\nimport { usePool } from '@/composables/usePool';\n\nexport default defineComponent({\n props: {\n pool: {\n type: Object as PropType,\n required: true\n },\n loading: { type: Boolean, default: false }\n },\n setup(props) {\n /**\n * STATE\n */\n const { pool }: { pool: Ref } = toRefs(props);\n\n /**\n * COMPOSABLES\n */\n const { fNum } = useNumbers();\n const { explorerLinks } = useWeb3();\n const { t } = useI18n();\n const { upToLargeBreakpoint } = useBreakpoints();\n const { priceFor } = useTokens();\n const { isStableLikePool } = usePool(pool);\n\n /**\n * COMPUTED\n */\n const tableData = computed(() => {\n if (!pool || !pool.value || props.loading) return [];\n return Object.keys(pool.value.onchain.tokens).map((address, index) => ({\n address,\n index\n }));\n });\n\n const columns = computed(() => [\n {\n name: t('token'),\n id: 'token',\n accessor: 'address',\n Cell: 'tokenColumnCell',\n width: 175\n },\n {\n name: t('weight'),\n id: 'weight',\n accessor: 'index',\n Cell: 'tokenWeightCell',\n align: 'right',\n sortKey: pool => weightFor(pool.address),\n width: 125,\n hidden: !props.loading && isStableLikePool.value\n },\n {\n name: t('balance'),\n id: 'balance',\n accessor: 'index',\n Cell: 'tokenBalanceCell',\n align: 'right',\n sortKey: pool => balanceFor(pool.address),\n width: 125\n },\n {\n name: t('value'),\n id: 'value',\n accessor: 'index',\n Cell: 'tokenValueCell',\n align: 'right',\n sortKey: pool => numeral(fiatValueFor(pool.address)).value(),\n width: 125\n }\n ]);\n\n /**\n * METHODS\n */\n function symbolFor(address: string) {\n if (!pool || !pool.value) return '-';\n const symbol = pool.value.onchain.tokens[address].symbol;\n return symbol ? symbol : shortenLabel(address);\n }\n\n function balanceFor(address: string): string {\n if (!pool || !pool.value) return '-';\n return fNum(pool.value.onchain.tokens[address].balance, 'token');\n }\n\n function weightFor(address: string): string {\n if (!pool || !pool.value) return '-';\n return fNum(pool.value.onchain.tokens[address].weight, 'percent');\n }\n\n function fiatValueFor(address: string): string {\n const price = priceFor(address);\n if (!pool || !pool.value || price === 0) return '-';\n\n const balance = Number(pool.value.onchain.tokens[address].balance);\n return fNum(balance * price, 'usd');\n }\n\n return {\n symbolFor,\n balanceFor,\n weightFor,\n fiatValueFor,\n fNum,\n explorer: explorerLinks,\n columns,\n tableData,\n upToLargeBreakpoint\n };\n }\n});\n","import { render } from \"./PoolBalancesCard.vue?vue&type=template&id=36a02168&ts=true\"\nimport script from \"./PoolBalancesCard.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolBalancesCard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative overflow-hidden\" }\nconst _hoisted_2 = { class: \"flex justify-between items-end border-b dark:border-gray-900 px-4\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalTabs = _resolveComponent(\"BalTabs\")\n const _component_TradeSettingsPopover = _resolveComponent(\"TradeSettingsPopover\")\n const _component_InvestForm = _resolveComponent(\"InvestForm\")\n const _component_SuccessOverlay = _resolveComponent(\"SuccessOverlay\")\n const _component_WithdrawForm = _resolveComponent(\"WithdrawForm\")\n const _component_FarmDepositForm = _resolveComponent(\"FarmDepositForm\")\n const _component_FarmWithdrawForm = _resolveComponent(\"FarmWithdrawForm\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n\n return (_openBlock(), _createBlock(_component_BalCard, { noPad: \"\" }, {\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(_component_BalTabs, {\n modelValue: _ctx.activeTab,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.activeTab = $event)),\n tabs: _ctx.tabs,\n class: \"pt-4 -mb-px\",\n \"no-pad\": \"\"\n }, null, 8, [\"modelValue\", \"tabs\"]),\n _createVNode(_component_TradeSettingsPopover, {\n context: _ctx.TradeSettingsContext.invest\n }, null, 8, [\"context\"])\n ]),\n (_ctx.activeTab === 'invest')\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_InvestForm, {\n pool: _ctx.pool,\n \"missing-prices\": _ctx.missingPrices,\n onSuccess: _cache[2] || (_cache[2] = ($event: any) => (_ctx.handleInvestment($event))),\n \"has-unstaked-bpt\": _ctx.hasUnstakedBpt\n }, null, 8, [\"pool\", \"missing-prices\", \"has-unstaked-bpt\"]),\n (_ctx.investmentSuccess)\n ? (_openBlock(), _createBlock(_component_SuccessOverlay, {\n key: 0,\n title: _ctx.$t('investmentSettled'),\n description: _ctx.$t('investmentSuccess'),\n closeLabel: _ctx.$t('close'),\n explorerLink: _ctx.explorer.txLink(_ctx.txHash),\n onClose: _cache[3] || (_cache[3] = ($event: any) => (_ctx.investmentSuccess = false))\n }, null, 8, [\"title\", \"description\", \"closeLabel\", \"explorerLink\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true),\n (_ctx.activeTab === 'withdraw')\n ? (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _createVNode(_component_WithdrawForm, {\n pool: _ctx.pool,\n \"missing-prices\": _ctx.missingPrices,\n onSuccess: _cache[4] || (_cache[4] = ($event: any) => (_ctx.handleWithdrawal($event))),\n \"has-staked-bpt\": _ctx.hasStakedBpt\n }, null, 8, [\"pool\", \"missing-prices\", \"has-staked-bpt\"]),\n (_ctx.withdrawalSuccess)\n ? (_openBlock(), _createBlock(_component_SuccessOverlay, {\n key: 0,\n title: _ctx.$t('withdrawalSettled'),\n description: _ctx.$t('withdrawalSuccess'),\n closeLabel: _ctx.$t('close'),\n explorerLink: _ctx.explorer.txLink(_ctx.txHash),\n onClose: _cache[5] || (_cache[5] = ($event: any) => (_ctx.withdrawalSuccess = false))\n }, null, 8, [\"title\", \"description\", \"closeLabel\", \"explorerLink\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true),\n (_ctx.activeTab === 'farm')\n ? (_openBlock(), _createBlock(_Fragment, { key: 2 }, [\n _createVNode(_component_FarmDepositForm, {\n pool: _ctx.pool,\n onSuccess: _cache[6] || (_cache[6] = ($event: any) => (_ctx.handleFarmInvestment($event)))\n }, null, 8, [\"pool\"]),\n (_ctx.farmInvestmentSuccess)\n ? (_openBlock(), _createBlock(_component_SuccessOverlay, {\n key: 0,\n title: _ctx.$t('farmDepositSettled'),\n description: _ctx.$t('farmDepositSuccess'),\n closeLabel: _ctx.$t('close'),\n explorerLink: _ctx.explorer.txLink(_ctx.txHash),\n onClose: _cache[7] || (_cache[7] = ($event: any) => (_ctx.farmInvestmentSuccess = false))\n }, null, 8, [\"title\", \"description\", \"closeLabel\", \"explorerLink\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_FarmWithdrawForm, {\n pool: _ctx.pool,\n onSuccess: _cache[8] || (_cache[8] = ($event: any) => (_ctx.handleFarmWithdrawal($event)))\n }, null, 8, [\"pool\"]),\n (_ctx.farmWithdrawalSuccess)\n ? (_openBlock(), _createBlock(_component_SuccessOverlay, {\n key: 1,\n title: _ctx.$t('farmWithdrawalSettled'),\n description: _ctx.$t('farmWithdrawalSuccess'),\n closeLabel: _ctx.$t('close'),\n explorerLink: _ctx.explorer.txLink(_ctx.txHash),\n onClose: _cache[9] || (_cache[9] = ($event: any) => (_ctx.farmWithdrawalSuccess = false))\n }, null, 8, [\"title\", \"description\", \"closeLabel\", \"explorerLink\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"p-4 border-t dark:border-gray-900\" }\nconst _hoisted_2 = { class: \"border dark:border-gray-900 rounded-lg shadow-inner p-2\" }\nconst _hoisted_3 = { class: \"flex items-center justify-between mb-3 text-sm text-gray-600\" }\nconst _hoisted_4 = { class: \"flex items-end\" }\nconst _hoisted_5 = { class: \"flex items-center justify-between\" }\nconst _hoisted_6 = { class: \"flex items-center w-1/2\" }\nconst _hoisted_7 = { class: \"flex flex-col w-3/4 leading-none\" }\nconst _hoisted_8 = { class: \"flex flex-col w-1/2 leading-none text-right pl-2\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"text-xs text-gray-400\"\n}\nconst _hoisted_10 = { class: \"flex items-center h-full w-24\" }\nconst _hoisted_11 = { class: \"flex flex-col ml-3\" }\nconst _hoisted_12 = { class: \"font-medium text-sm leading-none w-14 truncate\" }\nconst _hoisted_13 = {\n key: 0,\n class: \"leading-none text-xs mt-1 text-gray-500\"\n}\nconst _hoisted_14 = { class: \"p-2\" }\nconst _hoisted_15 = {\n key: 0,\n class: \"flex items-center mb-4\"\n}\nconst _hoisted_16 = {\n key: 1,\n class: \"flex items-center mb-4\"\n}\nconst _hoisted_17 = { class: \"p-4\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_FormTypeToggle = _resolveComponent(\"FormTypeToggle\")\n const _component_BalRangeInput = _resolveComponent(\"BalRangeInput\")\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalTextInput = _resolveComponent(\"BalTextInput\")\n const _component_router_link = _resolveComponent(\"router-link\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n const _component_BalCheckbox = _resolveComponent(\"BalCheckbox\")\n const _component_BalAlert = _resolveComponent(\"BalAlert\")\n const _component_BalForm = _resolveComponent(\"BalForm\")\n\n return (_openBlock(), _createBlock(_component_BalForm, {\n ref: \"investForm\",\n onOnSubmit: _ctx.submit\n }, {\n default: _withCtx(() => [\n _createVNode(_component_FormTypeToggle, {\n modelValue: _ctx.investType,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.investType = $event)),\n \"form-types\": _ctx.formTypes,\n \"missing-prices\": _ctx.missingPrices,\n \"has-zero-balance\": _ctx.hasZeroBalance,\n loading: _ctx.loading\n }, null, 8, [\"modelValue\", \"form-types\", \"missing-prices\", \"has-zero-balance\", \"loading\"]),\n (_ctx.isProportional)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", _hoisted_3, [\n _createVNode(\"span\", {\n textContent: _toDisplayString(_ctx.$t('amountToInvest'))\n }, null, 8, [\"textContent\"]),\n _createVNode(\"span\", null, _toDisplayString(_ctx.propPercentage) + \"%\", 1)\n ]),\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(\"span\", {\n class: \"mr-2 text-lg font-medium w-1/2 break-words leading-none\",\n title: _ctx.total\n }, _toDisplayString(_ctx.missingPrices ? '-' : _ctx.total), 9, [\"title\"]),\n _createVNode(_component_BalRangeInput, {\n class: \"w-1/2\",\n modelValue: _ctx.range,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => (_ctx.range = $event)),\n max: 1000,\n interval: 1,\n min: 0,\n tooltip: \"none\",\n disabled: _ctx.loading\n }, null, 8, [\"modelValue\", \"disabled\"])\n ])\n ])\n ]),\n _createVNode(\"div\", {\n class: [\n 'px-4 py-3 bg-gray-50 dark:bg-gray-850 border-b dark:border-gray-900',\n _ctx.hasZeroBalance ? '' : 'border-t'\n ]\n }, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.pool.tokenAddresses, (token, i) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: token,\n class: \"py-3 last:mb-0\"\n }, [\n _createVNode(\"div\", _hoisted_5, [\n _createVNode(\"div\", _hoisted_6, [\n _createVNode(_component_BalAsset, {\n address: token,\n class: \"mr-2\"\n }, null, 8, [\"address\"]),\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(\"span\", {\n class: \"break-words\",\n title: \n `${_ctx.fNum(_ctx.amounts[i], 'token')} ${\n _ctx.pool.onchain.tokens[token].symbol\n }`\n \n }, _toDisplayString(_ctx.fNum(_ctx.amounts[i], 'token')) + \" \" + _toDisplayString(_ctx.pool.onchain.tokens[token].symbol), 9, [\"title\"]),\n _createVNode(\"span\", {\n class: \"text-xs text-gray-400 break-words\",\n title: `${_ctx.formatBalance(i)} balance`\n }, _toDisplayString(_ctx.$t('balance')) + \": \" + _toDisplayString(_ctx.formatBalance(i)), 9, [\"title\"])\n ])\n ]),\n _createVNode(\"div\", _hoisted_8, [\n _createVNode(\"span\", {\n class: \"break-words\",\n title: _ctx.fNum(_ctx.amountUSD(i), 'usd')\n }, _toDisplayString(_ctx.amountUSD(i) === 0 ? '-' : _ctx.fNum(_ctx.amountUSD(i), 'usd')), 9, [\"title\"]),\n (!_ctx.isStableLikePool)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_9, _toDisplayString(_ctx.fNum(_ctx.tokenWeights[i], 'percent_lg')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n }), 128))\n ], 2)\n ], 64))\n : (_openBlock(), _createBlock(\"div\", {\n key: 1,\n class: [\n 'px-4 pt-6 border-b dark:border-gray-900',\n _ctx.hasZeroBalance ? '' : 'border-t'\n ]\n }, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.pool.tokenAddresses, (token, i) => {\n return (_openBlock(), _createBlock(_component_BalTextInput, {\n key: token,\n name: token,\n modelValue: _ctx.amounts[i],\n \"onUpdate:modelValue\": ($event: any) => (_ctx.amounts[i] = $event),\n isValid: _ctx.validInputs[i],\n \"onUpdate:isValid\": ($event: any) => (_ctx.validInputs[i] = $event),\n rules: _ctx.amountRules(i),\n type: \"number\",\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"decimal-limit\": _ctx.tokenDecimals(i),\n disabled: _ctx.loading,\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"append-shadow\": \"\"\n }, {\n prepend: _withCtx(() => [\n _createVNode(\"div\", _hoisted_10, [\n _createVNode(_component_BalAsset, { address: token }, null, 8, [\"address\"]),\n _createVNode(\"div\", _hoisted_11, [\n _createVNode(\"span\", _hoisted_12, _toDisplayString(_ctx.pool.onchain.tokens[token].symbol), 1),\n (!_ctx.isStableLikePool)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_13, _toDisplayString(_ctx.fNum(_ctx.tokenWeights[i], 'percent_lg')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]),\n info: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"cursor-pointer\",\n onClick: _withModifiers(($event: any) => (_ctx.amounts[i] = _ctx.tokenBalance(i).toString()), [\"prevent\"])\n }, _toDisplayString(_ctx.$t('balance')) + \": \" + _toDisplayString(_ctx.formatBalance(i)), 9, [\"onClick\"])\n ]),\n append: _withCtx(() => [\n _createVNode(\"div\", _hoisted_14, [\n _createVNode(_component_BalBtn, {\n size: \"xs\",\n color: \"white\",\n onClick: _withModifiers(($event: any) => (_ctx.amounts[i] = _ctx.tokenBalance(i).toString()), [\"prevent\"])\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('max')), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"])\n ])\n ]),\n _: 2\n }, 1032, [\"name\", \"modelValue\", \"onUpdate:modelValue\", \"isValid\", \"onUpdate:isValid\", \"rules\", \"decimal-limit\", \"disabled\"]))\n }), 128)),\n (_ctx.isWethPool)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_15, [\n _createVNode(_component_router_link, {\n to: {\n name: 'trade',\n params: {\n assetIn: _ctx.TOKENS.AddressMap[_ctx.appNetworkConfig.key].ETH,\n assetOut: _ctx.TOKENS.AddressMap[_ctx.appNetworkConfig.key].WETH\n }\n },\n class: \"text-xs text-gray-500 dark:text-white underline\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('wrapInstruction', [_ctx.nativeAsset, `W${_ctx.nativeAsset}`])), 1)\n ]),\n _: 1\n }, 8, [\"to\"]),\n _createVNode(_component_BalTooltip, null, {\n activator: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"info\",\n size: \"xs\",\n class: \"text-gray-400 dark:text-white ml-2\"\n })\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"w-52\",\n innerHTML: _ctx.$t('ethBufferInstruction')\n }, null, 8, [\"innerHTML\"])\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.isWstETHPool)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_16, [\n _createVNode(_component_router_link, {\n to: {\n name: 'trade',\n params: {\n assetIn: _ctx.appNetworkConfig.addresses.stETH,\n assetOut: _ctx.appNetworkConfig.addresses.wstETH\n }\n },\n class: \"text-xs text-gray-500 underline\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('wrapInstruction', [\n _ctx.symbolFor(_ctx.appNetworkConfig.addresses.stETH),\n _ctx.symbolFor(_ctx.appNetworkConfig.addresses.wstETH)\n ])), 1)\n ]),\n _: 1\n }, 8, [\"to\"]),\n _createVNode(_component_BalTooltip, null, {\n activator: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"info\",\n size: \"xs\",\n class: \"text-gray-400 ml-2\"\n })\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"w-52\",\n innerHTML: _ctx.$t('wrapStEthTooltip')\n }, null, 8, [\"innerHTML\"])\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true)\n ], 2)),\n _createVNode(\"div\", _hoisted_17, [\n (!_ctx.isWalletReady)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 0,\n label: _ctx.$t('connectWallet'),\n block: \"\",\n onClick: _withModifiers(_ctx.toggleWalletSelectModal, [\"prevent\"])\n }, null, 8, [\"label\", \"onClick\"]))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _createVNode(\"div\", {\n class: ['flex items-center text-sm mb-4', _ctx.priceImpactClasses],\n onClick: _cache[3] || (_cache[3] = _withModifiers(() => {}, [\"prevent\"]))\n }, [\n _createVNode(\"span\", null, _toDisplayString(_ctx.$t('priceImpact')) + \": \" + _toDisplayString(_ctx.fNum(_ctx.priceImpact, 'percent')), 1),\n _createVNode(_component_BalTooltip, null, {\n activator: _withCtx(() => [\n (_ctx.priceImpact >= 0.01)\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 0,\n name: \"alert-triangle\",\n size: \"xs\",\n class: \"ml-1\"\n }))\n : (_openBlock(), _createBlock(_component_BalIcon, {\n key: 1,\n name: \"info\",\n size: \"xs\",\n class: \"text-gray-400 -mb-px ml-2\"\n }))\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", {\n innerHTML: _ctx.$t('customAmountsTip'),\n class: \"w-52\"\n }, null, 8, [\"innerHTML\"])\n ]),\n _: 1\n })\n ], 2),\n (_ctx.requireApproval)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 0,\n label: `${_ctx.$t('approve')} ${_ctx.symbolFor(_ctx.requiredAllowances[0])}`,\n loading: _ctx.approving,\n \"loading-label\": _ctx.$t('approving'),\n disabled: !_ctx.hasAmounts || !_ctx.hasValidInputs,\n block: \"\",\n onClick: _withModifiers(_ctx.approveAllowances, [\"prevent\"])\n }, null, 8, [\"label\", \"loading\", \"loading-label\", \"disabled\", \"onClick\"]))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n (_ctx.priceImpact >= 0.01)\n ? (_openBlock(), _createBlock(_component_BalCheckbox, {\n key: 0,\n modelValue: _ctx.highPiAccepted,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => (_ctx.highPiAccepted = $event)),\n rules: [_ctx.isRequired(this.$t('priceImpactCheckbox'))],\n name: \"highPiAccepted\",\n class: \"text-gray-500 mb-12\",\n size: \"sm\",\n label: _ctx.$t('priceImpactAccept')\n }, null, 8, [\"modelValue\", \"rules\", \"label\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_BalBtn, {\n type: \"submit\",\n \"loading-label\": _ctx.$t('confirming'),\n color: \"gradient\",\n disabled: !_ctx.hasAmounts || !_ctx.hasValidInputs,\n loading: _ctx.loading,\n block: \"\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.trackGoal(_ctx.Goals.ClickInvest)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('invest')) + \" \" + _toDisplayString(_ctx.missingPrices || _ctx.total.length > 15 ? '' : _ctx.total), 1)\n ]),\n _: 1\n }, 8, [\"loading-label\", \"disabled\", \"loading\"]),\n (_ctx.hasUnstakedBpt)\n ? (_openBlock(), _createBlock(_component_BalAlert, {\n key: 1,\n title: \"You have unstaked BPT in your wallet\",\n description: \"If you deposit your BPT into the farm, you will earn additional rewards paid out in BEETS.\",\n type: \"warning\",\n size: \"sm\",\n class: \"mt-4\"\n }))\n : _createCommentVNode(\"\", true)\n ], 64))\n ], 64))\n ])\n ]),\n _: 1\n }, 8, [\"onOnSubmit\"]))\n}","import i18n from '@/plugins/i18n';\nimport { isAddress } from '@ethersproject/address';\n\nexport function isRequired(field = '') {\n const _field = field ? `${field} ` : 'Input ';\n return v => !!v || `${_field}${i18n.global.t('isRequired')}`;\n}\n\nexport function minChar(minLength: number, field = '') {\n const _field = field ? `${field} ` : '';\n return v =>\n !v ||\n v.length >= minLength ||\n `${_field}${i18n.global.t('mustBeAtLeast', [minLength])}`;\n}\n\nexport function isPositiveCheck(number: number) {\n return number >= 0;\n}\nexport function isPositive() {\n return v => !v || isPositiveCheck(v) || i18n.global.t('mustBePositive');\n}\n\nexport function isLessThanOrEqualTo(max: number, msg = '') {\n return v =>\n !v ||\n parseFloat(v) <= max ||\n (msg ? msg : i18n.global.t('mustBeLessThan', [max]));\n}\n\nexport function isGreaterThanOrEqualTo(min: number, msg = '') {\n return v =>\n !v ||\n parseFloat(v) >= min ||\n (msg ? msg : i18n.global.t('mustBeGreaterThan', [min]));\n}\n\nexport const isEmailCheck = email => {\n const regex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return regex.test(String(email).toLowerCase());\n};\n\nexport function isEmail() {\n return v => !v || isEmailCheck(v) || i18n.global.t('mustBeValidEmail');\n}\n\nexport function maxChar(maxLength: number, field = '') {\n const _field = field ? `${field} ` : '';\n return v =>\n (v || '').length <= maxLength ||\n `${_field}${i18n.global.t('mustBeLessThanChars', [maxLength])}`;\n}\n\nexport function isValidAddress() {\n return v => !v || isAddress(v) || i18n.global.t('mustBeValidAddress');\n}\n\nexport function isSymbol() {\n const regex = /^[0-9A-Z-]+$/;\n\n return v => !v || regex.test(v) || 'Must be valid symbol';\n}\n","import { Contract } from '@ethersproject/contracts';\n\nexport function logFailedTx(\n sender: string,\n contract: Contract,\n action: string,\n params: any,\n overrides: any\n): void {\n /*captureException(`Failed transaction:\n Sender: ${sender}\n Contract: ${contract.address}\n Params: ${params}\n Overrides: ${overrides}\n `);\n overrides.gasPrice = sender;\n const dummyPrivateKey =\n '0x651bd555534625dc2fd85e13369dc61547b2e3f2cfc8b98cee868b449c17a4d6';\n const provider = rpcProviderService.loggingProvider;\n const dummyWallet = new Wallet(dummyPrivateKey).connect(provider);\n const loggingContract = contract.connect(dummyWallet);\n loggingContract[action](...params, overrides);*/\n}\n","import { Contract } from '@ethersproject/contracts';\nimport {\n JsonRpcProvider,\n TransactionResponse,\n Web3Provider\n} from '@ethersproject/providers';\nimport { ErrorCode } from '@ethersproject/logger';\nimport { logFailedTx } from '@/lib/utils/logging';\nimport GasPriceService from '@/services/gas-price/gas-price.service';\nimport {\n EthereumTxType,\n ethereumTxType\n} from '@/composables/useEthereumTxType';\n\nconst ENV = process.env.VUE_APP_ENV || 'development';\n// only disable if set to \"false\"\nconst USE_BLOCKNATIVE_GAS_PLATFORM =\n process.env.VUE_APP_USE_BLOCKNATIVE_GAS_PLATFORM === 'false' ? false : true;\nconst GAS_LIMIT_BUFFER = 0.1;\n\nconst gasPriceService = new GasPriceService();\n\nexport async function sendTransaction(\n web3: Web3Provider | JsonRpcProvider,\n contractAddress: string,\n abi: any[],\n action: string,\n params: any[],\n overrides: Record = {}\n): Promise {\n console.log('Sending transaction');\n console.log('Contract', contractAddress);\n console.log('Action', `\"${action}\"`);\n console.log('Params', params);\n const signer = web3.getSigner();\n const contract = new Contract(contractAddress, abi, web3);\n const contractWithSigner = contract.connect(signer);\n\n try {\n // Gas estimation\n const gasLimitNumber = await contractWithSigner.estimateGas[action](\n ...params,\n overrides\n );\n\n const gasLimit = gasLimitNumber.toNumber();\n overrides.gasLimit = Math.floor(gasLimit * (1 + GAS_LIMIT_BUFFER));\n\n /*if (\n USE_BLOCKNATIVE_GAS_PLATFORM &&\n overrides.gasPrice == null &&\n overrides.maxFeePerGas == null &&\n overrides.maxPriorityFeePerGas == null\n ) {\n const gasPrice = await gasPriceService.getLatest();\n if (gasPrice != null) {\n if (\n ethereumTxType.value === EthereumTxType.EIP1559 &&\n gasPrice.maxFeePerGas != null &&\n gasPrice.maxPriorityFeePerGas != null\n ) {\n overrides.maxFeePerGas = gasPrice.maxFeePerGas;\n overrides.maxPriorityFeePerGas = gasPrice.maxPriorityFeePerGas;\n } else {\n overrides.gasPrice = gasPrice.price;\n }\n }\n }*/\n\n console.log('GAS OVERRIDES', overrides);\n\n return await contractWithSigner[action](...params, overrides);\n } catch (e) {\n if (e.code === ErrorCode.UNPREDICTABLE_GAS_LIMIT && ENV !== 'development') {\n const sender = await web3.getSigner().getAddress();\n logFailedTx(sender, contract, action, params, overrides);\n }\n return Promise.reject(e);\n }\n}\n\nexport async function callStatic(\n web3,\n contractAddress: string,\n abi: any[],\n action: string,\n params: any[],\n overrides = {}\n) {\n console.log('Sending transaction');\n console.log('Contract', contractAddress);\n console.log('Action', `\"${action}\"`);\n console.log('Params', params);\n const signer = web3.getSigner();\n const contract = new Contract(contractAddress, abi, web3);\n const contractWithSigner = contract.connect(signer);\n return await contractWithSigner.callStatic[action](...params, overrides);\n}\n\nexport async function call(provider, abi: any[], call: any[], options?) {\n const contract = new Contract(call[0], abi, provider);\n try {\n const params = call[2] || [];\n return await contract[call[1]](...params, options || {});\n } catch (e) {\n return Promise.reject(e);\n }\n}\n","import { Web3Provider, TransactionResponse } from '@ethersproject/providers';\nimport { MaxUint256 } from '@ethersproject/constants';\nimport { sendTransaction } from '@/lib/utils/balancer/web3';\nimport { default as abi } from '@/lib/abi/ERC20.json';\n\nexport async function approveTokens(\n web3: Web3Provider,\n spender: string,\n tokens: string[]\n): Promise {\n return await Promise.all(\n tokens.map(token =>\n sendTransaction(web3, token, abi, 'approve', [\n spender,\n MaxUint256.toString()\n ])\n )\n );\n}\n","import { sleep } from '.';\n\nexport async function retryPromiseWithDelay(\n promise: Promise,\n retryCount: number,\n delayTime: number\n): Promise {\n try {\n return await promise;\n } catch (e) {\n if (retryCount === 1) {\n return Promise.reject(e);\n }\n console.log('retrying promise', retryCount, 'time');\n // wait for delayTime amount of time before calling this method again\n await sleep(delayTime);\n return retryPromiseWithDelay(promise, retryCount - 1, delayTime);\n }\n}\n\nexport async function tryPromiseWithTimeout(\n promise: Promise,\n timeout: number\n): Promise {\n return Promise.race([\n promise,\n new Promise((_, reject) => setTimeout(reject, timeout))\n ]);\n}\n","export type NetworkId = 1 | 3 | 4 | 5 | 42 | 137 | 250 | 592;\n\nexport enum Network {\n MAINNET = 1,\n ROPSTEN = 3,\n RINKEBY = 4,\n GÖRLI = 5,\n KOVAN = 42,\n POLYGON = 137,\n FANTOM = 250,\n ASTAR = 592,\n}\n\nexport const APP_NETWORK_ID = Number(process.env.VUE_APP_NETWORK) as NetworkId;\n","import BlocknativeSdk from 'bnc-sdk';\nimport { InitializationOptions } from 'bnc-sdk/dist/types/src/interfaces';\n\nexport const bnSdkSymbol = Symbol();\n\nexport const defaultOptions: InitializationOptions = {\n dappId: process.env.VUE_APP_BLOCKNATIVE_DAPP_ID || '',\n networkId: Number(process.env.VUE_APP_NETWORK) || 1,\n onerror: error => {\n console.log(`[Blocknative] encountered an error`, error);\n }\n};\n\nexport default {\n install: app => {\n const blocknative = new BlocknativeSdk(defaultOptions);\n\n // filter out pending simulation events\n blocknative\n .configuration({\n scope: 'global',\n filters: [{ status: 'pending-simulation', _not: true }]\n })\n .catch(() => {\n // swallow server timeout response error as we are not waiting on it\n });\n\n // Make plugin available in options API\n app.config.globalProperties.$blocknative = blocknative || {};\n\n // Make plugin available in composition API\n app.provide(bnSdkSymbol, blocknative);\n }\n};\n","import { computed, inject } from 'vue';\nimport BlocknativeSdk from 'bnc-sdk';\nimport { bnSdkSymbol } from '@/plugins/blocknative';\n\nimport { Network } from '@/constants/network';\nimport useWeb3 from '@/services/web3/useWeb3';\n\nconst SUPPORTED_NETWORKS = [Network.MAINNET, Network.KOVAN];\n\nexport default function useBlocknative() {\n const { appNetworkConfig } = useWeb3();\n\n const blocknative = inject(bnSdkSymbol) as BlocknativeSdk;\n if (!blocknative) throw new Error('Blocknative SDK missing!');\n\n // TODO: blocknative is going to be deprecated for transaction tracking.\n const supportsBlocknative = computed(() =>\n SUPPORTED_NETWORKS.includes(appNetworkConfig.chainId)\n );\n\n return {\n blocknative,\n supportsBlocknative\n };\n}\n","// Conforms to backend API\n\nimport { AxiosResponse } from 'axios';\n\n// https://github.com/gnosis/gp-v2-services/blob/0bd5f7743bebaa5acd3be13e35ede2326a096f14/orderbook/openapi.yml#L562\nexport enum ApiErrorCodes {\n DuplicateOrder = 'DuplicateOrder',\n InvalidSignature = 'InvalidSignature',\n MissingOrderData = 'MissingOrderData',\n InsufficientValidTo = 'InsufficientValidTo',\n InsufficientFunds = 'InsufficientFunds',\n InsufficientFee = 'InsufficientFee',\n UnsupportedToken = 'UnsupportedToken',\n WrongOwner = 'WrongOwner'\n}\n\nexport interface ApiError {\n errorType: ApiErrorCodes;\n description: string;\n}\n\nconst API_ERROR_CODE_DESCRIPTIONS = {\n [ApiErrorCodes.DuplicateOrder]:\n 'There was another identical order already submitted. Please try again.',\n [ApiErrorCodes.InsufficientFee]:\n \"The signed fee is insufficient. It's possible that is higher now due to a change in the gas price, ether price, or the sell token price. Please try again to get an updated fee quote.\",\n [ApiErrorCodes.InvalidSignature]:\n 'The order signature is invalid. Check whether your Wallet app supports off-chain signing.',\n [ApiErrorCodes.MissingOrderData]: 'The order has missing information',\n [ApiErrorCodes.InsufficientValidTo]:\n 'The order you are signing is already expired. This can happen if you set a short expiration in the settings and waited too long before signing the transaction. Please try again.',\n [ApiErrorCodes.InsufficientFunds]: \"The account doesn't have enough funds\",\n [ApiErrorCodes.UnsupportedToken]:\n 'One of the tokens you are trading is unsupported. Please read the FAQ for more info.',\n [ApiErrorCodes.WrongOwner]:\n \"The signature is invalid.\\n\\nIt's likely that the signing method provided by your wallet doesn't comply with the standards required by CowSwap.\\n\\nCheck whether your Wallet app supports off-chain signing (EIP-712 or ETHSIGN).\",\n UNHANDLED_ERROR: 'The order was not accepted by the network'\n};\n\nexport default class OperatorError extends Error {\n name = 'OperatorError';\n type: ApiErrorCodes;\n description: ApiError['description'];\n\n // Status 400 errors\n // https://github.com/gnosis/gp-v2-services/blob/9014ae55412a356e46343e051aefeb683cc69c41/orderbook/openapi.yml#L563\n static apiErrorDetails = API_ERROR_CODE_DESCRIPTIONS;\n\n static getErrorMessage(response: AxiosResponse) {\n try {\n const orderPostError: ApiError = response.data;\n\n if (orderPostError.errorType) {\n return OperatorError.apiErrorDetails[orderPostError.errorType];\n } else {\n console.error(\n 'Unknown reason for bad order submission',\n orderPostError\n );\n return orderPostError.description;\n }\n } catch (error) {\n console.error(\n 'Error handling a 400 error. Likely a problem deserialising the JSON response'\n );\n return OperatorError.apiErrorDetails.UNHANDLED_ERROR;\n }\n }\n static getErrorForUnsuccessfulPostOrder(response: AxiosResponse) {\n switch (response.status) {\n case 400:\n return this.getErrorMessage(response);\n\n case 403:\n return 'The order cannot be accepted. Your account is deny-listed.';\n\n case 429:\n return 'The order cannot be accepted. Too many order placements. Please, retry in a minute';\n\n case 500:\n default:\n return 'Error adding an order';\n }\n }\n constructor(apiError: ApiError) {\n super(apiError.description);\n\n this.type = apiError.errorType;\n this.description = apiError.description;\n this.message = OperatorError.apiErrorDetails[apiError.errorType];\n }\n}\n","const ENV = process.env.VUE_APP_ENV || 'development';\n\nconst IS_DEV = ENV === 'development';\nconst IS_STAGING = ENV === 'staging';\nconst IS_PROD = ENV === 'production';\n\nexport { IS_DEV, IS_PROD, IS_STAGING, ENV };\n","import { IS_DEV } from '@/constants/env';\nimport { APP_NETWORK_ID, Network } from '@/constants/network';\nimport {\n GPv2Settlement,\n GPv2VaultRelayer\n} from '@gnosis.pm/gp-v2-contracts/networks.json';\n\nexport const OPERATOR_URLS = {\n [Network.MAINNET]: IS_DEV\n ? 'https://protocol-mainnet.dev.gnosisdev.com/api'\n : 'https://protocol-mainnet.gnosis.io/api',\n [Network.RINKEBY]: IS_DEV\n ? 'https://protocol-rinkeby.dev.gnosisdev.com/api'\n : 'https://protocol-rinkeby.gnosis.io/api',\n // [Network.ASTAR]: IS_DEV\n // ? 'https://protocol-rinkeby.dev.gnosisdev.com/api' //これの代わりが欲しいね\n // : 'https://protocol-rinkeby.gnosis.io/api',\n};\n\nexport const OPERATOR_URL =\n OPERATOR_URLS[APP_NETWORK_ID] ?? OPERATOR_URLS[Network.MAINNET];\n\nexport const GP_SETTLEMENT_CONTRACT_ADDRESS: string = (\n GPv2Settlement[APP_NETWORK_ID] ?? GPv2Settlement[Network.MAINNET]\n).address;\n\nexport const GP_RELAYER_CONTRACT_ADDRESS: string = (\n GPv2VaultRelayer[APP_NETWORK_ID] ?? GPv2VaultRelayer[Network.MAINNET]\n).address;\n","import { APP_NETWORK_ID } from '@/constants/network';\nimport { Signer } from '@ethersproject/abstract-signer';\nimport { BigNumber } from '@ethersproject/bignumber';\n\nimport {\n domain as domainGp,\n signOrder as signOrderGp,\n Order,\n EcdsaSigningScheme,\n Signature,\n SigningScheme,\n EcdsaSignature,\n TypedDataV3Signer\n} from '@gnosis.pm/gp-v2-contracts';\n\nimport { GP_SETTLEMENT_CONTRACT_ADDRESS } from './constants';\n\n// For error codes, see:\n// - https://eth.wiki/json-rpc/json-rpc-error-codes-improvement-proposal\n// - https://www.jsonrpc.org/specification#error_object\nconst METAMASK_SIGNATURE_ERROR_CODE = -32603;\nconst METHOD_NOT_FOUND_ERROR_CODE = -32601;\nconst V4_ERROR_MSG_REGEX = /eth_signTypedData_v4 does not exist/i;\nconst V3_ERROR_MSG_REGEX = /eth_signTypedData_v3 does not exist/i;\nconst RPC_REQUEST_FAILED_REGEX = /RPC request failed/i;\nconst MAX_VALID_TO_EPOCH = BigNumber.from('0xFFFFFFFF').toNumber(); // Max uint32 (Feb 07 2106 07:28:15 GMT+0100)\n\nexport type UnsignedOrder = Omit & { receiver: string };\n\nexport interface SignOrderParams {\n signer: Signer;\n order: UnsignedOrder;\n signingScheme: EcdsaSigningScheme;\n}\n\n// posted to /api/v1/orders on Order creation\n// serializable, so no BigNumbers\n// See https://protocol-rinkeby.dev.gnosisdev.com/api/\nexport interface OrderCreation extends UnsignedOrder {\n signature: string; // 65 bytes encoded as hex without `0x` prefix. v + r + s from the spec\n signingScheme: EcdsaSigningScheme; // value of\n}\n\ninterface SchemaInfo {\n libraryValue: number;\n apiValue: string;\n}\nconst mapSigningSchema: Map = new Map([\n [SigningScheme.EIP712, { libraryValue: 0, apiValue: 'eip712' }],\n [SigningScheme.ETHSIGN, { libraryValue: 1, apiValue: 'ethsign' }]\n]);\n\nfunction _getSigningSchemeInfo(\n ecdaSigningScheme: EcdsaSigningScheme\n): SchemaInfo {\n const value = mapSigningSchema.get(ecdaSigningScheme);\n if (value === undefined) {\n throw new Error('Unknown schema ' + ecdaSigningScheme);\n }\n\n return value;\n}\n\nexport function getSigningSchemeApiValue(\n ecdaSigningScheme: EcdsaSigningScheme\n) {\n return _getSigningSchemeInfo(ecdaSigningScheme).apiValue;\n}\n\nexport function getSigningSchemeLibValue(\n ecdaSigningScheme: EcdsaSigningScheme\n) {\n return _getSigningSchemeInfo(ecdaSigningScheme).libraryValue;\n}\n\nasync function _signOrder(params: SignOrderParams): Promise {\n const { signer, order, signingScheme } = params;\n\n const domain = domainGp(APP_NETWORK_ID, GP_SETTLEMENT_CONTRACT_ADDRESS);\n console.log('[Gnosis Signing] signOrder', {\n domain,\n order,\n signer\n });\n\n return signOrderGp(\n domain,\n order,\n // @ts-ignore\n signer,\n getSigningSchemeLibValue(signingScheme)\n );\n}\n\nexport async function signOrder(\n unsignedOrder: UnsignedOrder,\n signer: Signer,\n signingMethod: 'v4' | 'v3' | 'eth_sign' = 'v4'\n): Promise<{ signature: string; signingScheme: EcdsaSigningScheme }> {\n const signingScheme =\n signingMethod === 'eth_sign' ? SigningScheme.ETHSIGN : SigningScheme.EIP712;\n let signature: Signature | null = null;\n\n let _signer = signer;\n try {\n // @ts-ignore\n _signer = signingMethod === 'v3' ? new TypedDataV3Signer(signer) : signer;\n } catch (e) {\n console.error('Wallet not supported:', e);\n throw new Error('Wallet not supported');\n }\n\n const signatureParams: SignOrderParams = {\n signer: _signer,\n order: unsignedOrder,\n signingScheme\n };\n\n try {\n signature = (await _signOrder(signatureParams)) as EcdsaSignature; // Only ECDSA signing supported for now\n } catch (e) {\n if (\n e.code === METHOD_NOT_FOUND_ERROR_CODE ||\n RPC_REQUEST_FAILED_REGEX.test(e.message)\n ) {\n // Maybe the wallet returns the proper error code? We can only hope 🤞\n // OR it failed with a generic message, there's no error code set, and we also hope it'll work\n // with other methods...\n switch (signingMethod) {\n case 'v4':\n return signOrder(unsignedOrder, signer, 'v3');\n case 'v3':\n return signOrder(unsignedOrder, signer, 'eth_sign');\n default:\n throw e;\n }\n } else if (e.code === METAMASK_SIGNATURE_ERROR_CODE) {\n // We tried to sign order the nice way.\n // That works fine for regular MM addresses. Does not work for Hardware wallets, though.\n // See https://github.com/MetaMask/metamask-extension/issues/10240#issuecomment-810552020\n // So, when that specific error occurs, we know this is a problem with MM + HW.\n // Then, we fallback to ETHSIGN.\n return signOrder(unsignedOrder, signer, 'eth_sign');\n } else if (V4_ERROR_MSG_REGEX.test(e.message)) {\n // Failed with `v4`, and the wallet does not set the proper error code\n return signOrder(unsignedOrder, signer, 'v3');\n } else if (V3_ERROR_MSG_REGEX.test(e.message)) {\n // Failed with `v3`, and the wallet does not set the proper error code\n return signOrder(unsignedOrder, signer, 'eth_sign');\n } else {\n // Some other error signing. Let it bubble up.\n console.error(e);\n throw e;\n }\n }\n return { signature: signature.data.toString(), signingScheme };\n}\n\nexport function calculateValidTo(deadlineInMinutes: number): number {\n const now = Date.now() / 1000;\n const validTo = Math.floor(deadlineInMinutes * 60 + now);\n\n return Math.min(validTo, MAX_VALID_TO_EPOCH);\n}\n","import { configService } from '../config/config.service';\n\nexport function normalizeTokenAddress(tokenAddress: string) {\n const nativeAssetAddress = configService.network.nativeAsset.address;\n\n if (tokenAddress.toLowerCase() === nativeAssetAddress.toLowerCase()) {\n return configService.network.addresses.weth;\n }\n\n return tokenAddress;\n}\n\nexport function getMarket(sellToken: string, buyToken: string, kind: string) {\n let baseToken = buyToken;\n let quoteToken = sellToken;\n\n if (kind === 'sell') {\n baseToken = sellToken;\n quoteToken = buyToken;\n }\n\n return `${normalizeTokenAddress(baseToken)}-${normalizeTokenAddress(\n quoteToken\n )}`;\n}\n","import axios from 'axios';\n\nimport { OPERATOR_URL } from './constants';\nimport OperatorError from './error';\nimport { getSigningSchemeApiValue, OrderCreation } from './signing';\nimport {\n FeeInformation,\n FeeQuoteParams,\n OrderID,\n OrderMetaData,\n PriceInformation,\n PriceQuoteParams\n} from './types';\nimport { getMarket, normalizeTokenAddress } from './utils';\n\nexport default class GnosisOperatorService {\n baseURL: string;\n\n constructor(apiVersion = 'v1') {\n this.baseURL = `${OPERATOR_URL}/${apiVersion}`;\n }\n\n public async postSignedOrder(params: {\n order: OrderCreation;\n owner: string;\n }) {\n const { order, owner } = params;\n\n // Call API\n const response = await axios.post(\n `${this.baseURL}/orders`,\n {\n ...order,\n signingScheme: getSigningSchemeApiValue(order.signingScheme),\n from: owner\n },\n {\n validateStatus: () => true\n }\n );\n\n if (response.status >= 200 && response.status < 300) {\n return response.data as OrderID;\n }\n\n const errorMessage = OperatorError.getErrorForUnsuccessfulPostOrder(\n response\n );\n\n throw new Error(errorMessage);\n }\n\n public async getOrder(orderId: OrderID) {\n try {\n const response = await axios.get(\n `${this.baseURL}/orders/${orderId}`\n );\n return response.data;\n } catch (e) {\n console.log(`[Gnosis Operator]: Failed to get order ${orderId}`, e);\n }\n\n return null;\n }\n\n public async getFeeQuote(params: FeeQuoteParams) {\n try {\n const { amount, kind } = params;\n\n const sellToken = normalizeTokenAddress(params.sellToken);\n const buyToken = normalizeTokenAddress(params.buyToken);\n\n const response = await axios.get(\n `${this.baseURL}/fee?sellToken=${sellToken}&buyToken=${buyToken}&amount=${amount}&kind=${kind}`\n );\n return response.data;\n } catch (e) {\n console.log(`[Gnosis Operator]: Failed to get fee from API`, e);\n }\n\n return null;\n }\n\n public async getPriceQuote(params: PriceQuoteParams) {\n try {\n const { amount, sellToken, buyToken, kind } = params;\n\n const market = getMarket(sellToken, buyToken, kind);\n\n const response = await axios.get(\n `${this.baseURL}/markets/${market}/${kind}/${amount}`\n );\n return response.data;\n } catch (e) {\n console.log(`[Gnosis Operator]: Failed to get price from API`, e);\n }\n\n return null;\n }\n}\n\nexport const gnosisOperator = new GnosisOperatorService();\n","import { IS_DEV, IS_STAGING } from '@/constants/env';\n\nimport { OrderID } from './types';\n\nexport default class GnosisExplorerService {\n baseURL: string;\n\n constructor() {\n if (IS_DEV) {\n this.baseURL = 'https://protocol-explorer.dev.gnosisdev.com';\n } else if (IS_STAGING) {\n this.baseURL = 'https://protocol-explorer.staging.gnosisdev.com';\n } else {\n this.baseURL = 'https://gnosis-protocol.io';\n }\n }\n\n public orderLink(orderId: OrderID) {\n return `${this.baseURL}/orders/${orderId}`;\n }\n}\n\nexport const gnosisExplorer = new GnosisExplorerService();\n","import { orderBy, uniqueId, merge } from 'lodash';\nimport { computed, ref } from 'vue';\n\nimport { TransactionStatus } from './useTransactions';\n\nconst DEFAULT_NOTIFICATION_TIMEOUT = 15 * 1_000; // 15s\n\nexport type Notification = {\n id: string;\n type?: 'success' | 'error' | 'warning' | 'info';\n transactionMetadata?: {\n id: string;\n status: TransactionStatus;\n isSuccess: boolean;\n explorerLink: string;\n };\n title: string;\n message: string;\n autoCloseAfterMs?: number; // set 0 to disable\n addedTime?: number;\n};\n\nexport type NewNotification = Pick<\n Notification,\n 'type' | 'message' | 'title' | 'autoCloseAfterMs' | 'transactionMetadata'\n>;\n\ntype NotificationsMap = Record;\n\nconst notificationsState = ref({});\n\n// METHODS\nfunction addNotification(newNotification: NewNotification) {\n const notificationsMap = getNotifications();\n const notificationId = uniqueId('notification');\n\n attemptToRemoveExistingNotification(newNotification);\n\n notificationsMap[notificationId] = {\n ...newNotification,\n id: notificationId,\n type: newNotification.type ?? 'info',\n addedTime: Date.now(),\n autoCloseAfterMs:\n newNotification.autoCloseAfterMs ?? DEFAULT_NOTIFICATION_TIMEOUT\n };\n\n setNotifications(notificationsMap);\n\n return notificationId;\n}\n\nfunction attemptToRemoveExistingNotification(newNotification: NewNotification) {\n if (newNotification.transactionMetadata?.id) {\n const previousNotificationFound = notifications.value.find(\n previousNotification =>\n previousNotification.transactionMetadata?.id ===\n newNotification.transactionMetadata?.id\n );\n if (previousNotificationFound != null) {\n removeNotification(previousNotificationFound.id);\n }\n }\n}\n\nfunction getNotification(id: string) {\n const notificationsMap = getNotifications();\n\n return notificationsMap[id];\n}\n\nfunction clearAllNotifications() {\n setNotifications({});\n}\n\nfunction updateNotification(id: string, updates: Partial) {\n const notificationsMap = getNotifications();\n const notification = getNotification(id);\n\n if (notification != null) {\n notificationsMap[id] = merge(notification, updates);\n\n setNotifications(notificationsMap);\n }\n}\n\nfunction removeNotification(id: string) {\n const notificationsMap = getNotifications();\n\n delete notificationsMap[id];\n\n setNotifications(notificationsMap);\n}\n\nfunction getNotifications() {\n return notificationsState.value;\n}\n\nfunction setNotifications(notifications: NotificationsMap) {\n notificationsState.value = notifications;\n}\n\nconst notifications = computed(() =>\n orderBy(Object.values(getNotifications()), 'addedTime', 'desc')\n);\n\nexport default function useNotifications() {\n return {\n // methods\n addNotification,\n getNotification,\n updateNotification,\n clearAllNotifications,\n removeNotification,\n\n // computed\n notifications\n };\n}\n","import { computed, ref } from 'vue';\nimport { merge, orderBy } from 'lodash';\nimport { TransactionReceipt } from '@ethersproject/providers';\nimport { formatUnits } from '@ethersproject/units';\nimport { useI18n } from 'vue-i18n';\n\nimport LS_KEYS from '@/constants/local-storage.keys';\n\nimport { configService } from '@/services/config/config.service';\nimport { gnosisOperator } from '@/services/gnosis/operator.service';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { OrderMetaData } from '@/services/gnosis/types';\nimport { gnosisExplorer } from '@/services/gnosis/explorer.service';\n\nimport { lsGet, lsSet } from '@/lib/utils';\n\nimport useNotifications from './useNotifications';\nimport { processedTxs } from './useEthers';\nimport useNumbers from './useNumbers';\n\nimport { GnosisTransactionDetails } from './trade/useGnosis';\n\nconst WEEK_MS = 86_400_000 * 7;\n// Please update the schema version when making changes to the transaction structure.\nconst TRANSACTIONS_SCHEMA_VERSION = '1.1.2';\n\nexport type TransactionStatus =\n | 'pending'\n | 'confirmed'\n | 'expired'\n | 'cancelling'\n | 'cancelled';\n\nexport type TransactionAction =\n | 'claim'\n | 'approve'\n | 'trade'\n | 'wrap'\n | 'unwrap'\n | 'invest'\n | 'withdraw'\n | 'create';\n\nexport type TransactionType = 'order' | 'tx';\n\nexport type TxReceipt = Pick<\n TransactionReceipt,\n | 'blockHash'\n | 'blockNumber'\n | 'contractAddress'\n | 'from'\n | 'status'\n | 'to'\n | 'transactionHash'\n | 'transactionIndex'\n>;\n\nexport type OrderReceipt = OrderMetaData;\n\nexport type ReplacementReason = 'txSpeedUp' | 'txCancel';\n\nexport type Transaction = {\n id: string;\n originalId?: string;\n replacementReason?: ReplacementReason;\n action: TransactionAction;\n type: TransactionType;\n receipt?: OrderReceipt | TxReceipt;\n details?: Record;\n summary: string;\n addedTime: number;\n confirmedTime?: number;\n from: string;\n lastCheckedBlockNumber?: number;\n status: TransactionStatus;\n};\n\nexport type NewTransaction = Pick<\n Transaction,\n 'id' | 'type' | 'summary' | 'receipt' | 'action' | 'details'\n>;\n\nconst networkId = configService.network.chainId;\n\nexport type TransactionsMap = Record;\n\nexport type TransactionState = {\n [networkId: number]: TransactionsMap;\n};\n\n// TODO: What happens if the structure changes? Either keep a version or schema validator.\nexport const transactionsState = ref(\n lsGet(LS_KEYS.Transactions, {}, TRANSACTIONS_SCHEMA_VERSION)\n);\n\n// COMPUTED\nconst transactions = computed(() =>\n orderBy(Object.values(getTransactions()), 'addedTime', 'desc').filter(\n isTransactionRecent\n )\n);\n\nconst pendingTransactions = computed(() =>\n transactions.value.filter(({ status }) => status === 'pending')\n);\n\nconst pendingOrderActivity = computed(() =>\n pendingTransactions.value.filter(({ type }) => type === 'order')\n);\n\nconst pendingTxActivity = computed(() =>\n pendingTransactions.value.filter(({ type }) => type === 'tx')\n);\n\n// METHODS\nfunction normalizeTxReceipt(receipt: TransactionReceipt) {\n return {\n blockHash: receipt.blockHash,\n blockNumber: receipt.blockNumber,\n contractAddress: receipt.contractAddress,\n from: receipt.from,\n status: receipt.status,\n to: receipt.to,\n transactionHash: receipt.transactionHash,\n transactionIndex: receipt.transactionIndex\n };\n}\n\nfunction isTransactionRecent(transaction: Transaction): boolean {\n return Date.now() - transaction.addedTime < WEEK_MS;\n}\n\nfunction clearAllTransactions() {\n setTransactions({});\n}\n\nfunction getId(id: string, type: TransactionType) {\n return `${type}_${id}`;\n}\n\nfunction getTransactions(): TransactionsMap {\n const transactionsMap = transactionsState.value[networkId] ?? {};\n\n return transactionsMap;\n}\n\nfunction setTransactions(transactionsMap: TransactionsMap) {\n transactionsState.value[networkId] = transactionsMap;\n\n lsSet(\n LS_KEYS.Transactions,\n transactionsState.value,\n TRANSACTIONS_SCHEMA_VERSION\n );\n}\n\nfunction getTransaction(id: string, type: TransactionType) {\n const transactionsMap = getTransactions();\n const txId = getId(id, type);\n\n return transactionsMap[txId] ?? null;\n}\n\nfunction updateTransaction(\n id: string,\n type: TransactionType,\n updates: Partial\n) {\n const transactionsMap = getTransactions();\n const txId = getId(id, type);\n const transaction = transactionsMap[txId];\n\n if (transaction != null) {\n // id change requires a replacement of the transaction\n if (updates.id != null) {\n const newTxId = getId(updates.id, type);\n\n transactionsMap[newTxId] = merge({}, transaction, updates, {\n originalId: id\n });\n delete transactionsMap[txId];\n } else {\n transactionsMap[txId] = merge({}, transaction, updates);\n }\n\n setTransactions(transactionsMap);\n\n return true;\n }\n\n return false;\n}\n\nfunction isSuccessfulTransaction(transaction: Transaction) {\n if (\n transaction.status === 'confirmed' &&\n transaction.replacementReason !== 'txCancel'\n ) {\n if (transaction.type === 'order') {\n return (transaction.receipt as OrderReceipt)?.status === 'fulfilled';\n } else {\n return (transaction.receipt as TxReceipt)?.status === 1;\n }\n }\n\n return false;\n}\n\n// Adapted from Uniswap code\nfunction shouldCheckTx(transaction: Transaction, lastBlockNumber: number) {\n if (\n processedTxs.value.has(transaction.id) ||\n transaction.status === 'confirmed'\n ) {\n return false;\n }\n\n if (!transaction.lastCheckedBlockNumber) {\n return true;\n }\n\n const blocksSinceCheck = lastBlockNumber - transaction.lastCheckedBlockNumber;\n if (blocksSinceCheck < 1) {\n return false;\n }\n\n const minutesPending = (Date.now() - transaction.addedTime) / 1000 / 60;\n if (minutesPending > 60) {\n // every 10 blocks if pending for longer than an hour\n return blocksSinceCheck > 9;\n } else if (minutesPending > 5) {\n // every 3 blocks if pending more than 5 minutes\n return blocksSinceCheck > 2;\n } else {\n // otherwise every block\n return true;\n }\n}\n\nexport default function useTransactions() {\n // COMPOSABLES\n const {\n account,\n explorerLinks,\n getProvider: getWeb3Provider,\n blockNumber\n } = useWeb3();\n const { addNotification } = useNotifications();\n const { t } = useI18n();\n const { fNum } = useNumbers();\n\n // COMPUTED\n const provider = computed(() => getWeb3Provider());\n\n // METHODS\n function getSettledOrderSummary(\n transaction: Transaction,\n receipt: OrderReceipt\n ) {\n const details = transaction.details as GnosisTransactionDetails;\n\n if (details != null) {\n const { tokenIn, tokenOut } = details;\n\n const tokenInAmount = formatUnits(\n receipt.executedSellAmount,\n tokenIn.decimals\n );\n\n const tokenOutAmount = formatUnits(\n receipt.executedBuyAmount,\n tokenOut.decimals\n );\n\n return `${fNum(tokenInAmount, 'token')} ${tokenIn.symbol} -> ${fNum(\n tokenOutAmount,\n 'token'\n )} ${tokenOut.symbol}`;\n }\n\n return transaction.summary;\n }\n\n function addTransaction(newTransaction: NewTransaction) {\n const transactionsMap = getTransactions();\n const txId = getId(newTransaction.id, newTransaction.type);\n\n if (transactionsMap[txId]) {\n throw new Error(`The transaction ${newTransaction.id} already exists.`);\n }\n\n transactionsMap[txId] = {\n ...newTransaction,\n from: account.value,\n addedTime: Date.now(),\n status: 'pending'\n };\n\n setTransactions(transactionsMap);\n addNotificationForTransaction(newTransaction.id, newTransaction.type);\n }\n\n function finalizeTransaction(\n id: string,\n type: TransactionType,\n receipt: Transaction['receipt']\n ) {\n if (receipt != null) {\n const transaction = getTransaction(id, type);\n\n if (transaction != null) {\n const updateSuccessful = updateTransaction(id, type, {\n receipt:\n type === 'tx'\n ? normalizeTxReceipt(receipt as TransactionReceipt)\n : receipt,\n summary:\n type === 'order'\n ? getSettledOrderSummary(transaction, receipt as OrderReceipt)\n : transaction.summary,\n status: 'confirmed',\n confirmedTime: Date.now()\n });\n if (updateSuccessful) {\n addNotificationForTransaction(id, type);\n return true;\n }\n }\n }\n\n return false;\n }\n\n function addNotificationForTransaction(id: string, type: TransactionType) {\n const transaction = getTransaction(id, type);\n\n if (transaction != null) {\n const transactionStatus: TransactionStatus =\n transaction.replacementReason === 'txCancel'\n ? 'cancelled'\n : transaction.status;\n\n addNotification({\n title: `${t(`transactionAction.${transaction.action}`)} ${t(\n `transactionStatus.${transactionStatus}`\n )}`,\n message: transaction.summary,\n transactionMetadata: {\n id: transaction.id,\n status: transaction.status,\n isSuccess: isSuccessfulTransaction(transaction),\n explorerLink: getExplorerLink(transaction.id, transaction.type)\n }\n });\n }\n }\n\n function checkOrderActivity(transaction: Transaction) {\n gnosisOperator\n .getOrder(transaction.id)\n .then(order => {\n if (\n order != null &&\n Number(order.executedBuyAmount) > 0 &&\n Number(order.executedSellAmount) > 0\n ) {\n finalizeTransaction(transaction.id, 'order', order);\n }\n })\n .catch(e =>\n console.log(\n '[Transactions]: Failed to fetch order information',\n transaction,\n e\n )\n )\n .finally(() => {\n updateTransaction(transaction.id, 'order', {\n lastCheckedBlockNumber: blockNumber.value\n });\n });\n }\n\n function checkTxActivity(transaction: Transaction) {\n provider.value\n .getTransactionReceipt(transaction.id)\n .then(tx => {\n if (tx != null) {\n finalizeTransaction(transaction.id, 'tx', tx);\n }\n })\n .catch(e =>\n console.log(\n '[Transactions]: Failed to fetch tx information',\n transaction,\n e\n )\n )\n .finally(() =>\n updateTransaction(transaction.id, 'tx', {\n lastCheckedBlockNumber: blockNumber.value\n })\n );\n }\n\n async function handlePendingTransactions() {\n pendingOrderActivity.value.forEach(checkOrderActivity);\n\n pendingTxActivity.value\n .filter(transaction => shouldCheckTx(transaction, blockNumber.value))\n .forEach(checkTxActivity);\n }\n\n function getExplorerLink(id: string, type: TransactionType) {\n if (type === 'tx') {\n return explorerLinks.txLink(id);\n }\n return gnosisExplorer.orderLink(id);\n }\n\n return {\n // methods\n getTransactions,\n addTransaction,\n clearAllTransactions,\n handlePendingTransactions,\n finalizeTransaction,\n getExplorerLink,\n isSuccessfulTransaction,\n updateTransaction,\n\n // computed\n pendingTransactions,\n transactions\n };\n}\n","import { ref } from 'vue';\nimport {\n TransactionReceipt,\n TransactionResponse\n} from '@ethersproject/providers';\nimport {\n retryPromiseWithDelay,\n tryPromiseWithTimeout\n} from '@/lib/utils/promise';\n\nimport useBlocknative from './useBlocknative';\nimport useTransactions from './useTransactions';\nimport useTokens from './useTokens';\nimport SafeAppsSDK from '@gnosis.pm/safe-apps-sdk';\n\ntype TxCallback = (\n txData: TransactionResponse,\n receipt?: TransactionReceipt\n) => void;\n\n// keep a record of processed txs\nexport const processedTxs = ref>(new Set(''));\n\nexport default function useEthers() {\n const { finalizeTransaction, updateTransaction } = useTransactions();\n const { supportsBlocknative } = useBlocknative();\n const { refetchBalances } = useTokens();\n\n async function txListener(\n tx: TransactionResponse,\n callbacks: {\n onTxConfirmed: TxCallback;\n onTxFailed: TxCallback;\n },\n shouldRefetchBalances = true\n ) {\n processedTxs.value.add(tx.hash);\n\n try {\n // Sometimes this will throw if we're talking to a service\n // in front of the RPC that hasn't picked up the tx yet (e.g. Gnosis)\n const receipt = await retryPromiseWithDelay(tx.wait(), 5, 5000);\n\n let txHash = tx.hash;\n try {\n // If we're using a Gnosis safe then the transaction we were tracking is really a \"SafeTx\"\n // We need to query the backend to get the actual transaction hash for the block explorer link\n const realTx = await tryPromiseWithTimeout(\n new SafeAppsSDK().txs.getBySafeTxHash(tx.hash),\n 1000\n );\n if (realTx.txHash !== null) {\n txHash = realTx.txHash;\n updateTransaction(tx.hash, 'tx', {\n id: realTx.txHash\n });\n }\n } catch {\n // eslint-disable-next-line no-empty\n }\n\n // Attempt to finalize transaction so that the pending tx watcher won't check the tx again.\n if (receipt != null) {\n finalizeTransaction(txHash, 'tx', receipt);\n }\n callbacks.onTxConfirmed(tx);\n if (shouldRefetchBalances && !supportsBlocknative.value) {\n refetchBalances.value();\n }\n } catch (error) {\n console.error(error);\n callbacks.onTxFailed(tx);\n }\n\n processedTxs.value.delete(tx.hash);\n }\n\n return { txListener };\n}\n","import { ref, computed, Ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { approveTokens } from '@/lib/utils/balancer/tokens';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport useEthers from '@/composables/useEthers';\nimport useTransactions from '../useTransactions';\n\nexport default function useTokenApprovals(\n tokenAddresses: string[],\n amounts: Ref\n) {\n /**\n * STATE\n */\n const approving = ref(false);\n const approvedAll = ref(false);\n\n /**\n * COMPOSABLES\n */\n const { getProvider, appNetworkConfig } = useWeb3();\n const { tokens, refetchAllowances, approvalsRequired } = useTokens();\n const { txListener } = useEthers();\n const { addTransaction } = useTransactions();\n const { t } = useI18n();\n\n /**\n * COMPUTED\n */\n const requiredAllowances = computed(() =>\n approvalsRequired(tokenAddresses, amounts.value)\n );\n\n /**\n * METHODS\n */\n async function approveAllowances(): Promise {\n try {\n approving.value = true;\n const tokenAddress = requiredAllowances.value[0];\n\n const txs = await approveTokens(\n getProvider(),\n appNetworkConfig.addresses.vault,\n [tokenAddress]\n );\n\n addTransaction({\n id: txs[0].hash,\n type: 'tx',\n action: 'approve',\n summary: t('transactionSummary.approveForInvesting', [\n tokens.value[tokenAddress]?.symbol\n ]),\n details: {\n contractAddress: tokenAddress,\n spender: appNetworkConfig.addresses.vault\n }\n });\n\n txListener(txs[0], {\n onTxConfirmed: async () => {\n await refetchAllowances.value();\n approving.value = false;\n },\n onTxFailed: () => {\n approving.value = false;\n }\n });\n } catch (error) {\n approving.value = false;\n console.error(error);\n }\n }\n\n return {\n // data\n approving,\n approvedAll,\n // computed\n requiredAllowances,\n // methods\n approveAllowances\n };\n}\n","import { computed } from 'vue';\nimport { parseUnits, formatUnits } from '@ethersproject/units';\nimport useUserSettings from './useUserSettings';\nimport { bnum } from '@/lib/utils';\n\nexport default function useSlippage() {\n const { slippage } = useUserSettings();\n\n const slippageBasisPoints = computed((): string => {\n return bnum(slippage.value)\n .times(10000)\n .toString();\n });\n\n function minusSlippage(_amount: string, decimals: number): string {\n let amount = parseUnits(_amount, decimals);\n const delta = amount.mul(slippageBasisPoints.value).div(10000);\n amount = amount.sub(delta);\n\n return formatUnits(amount, decimals).toString();\n }\n\n function addSlippage(_amount: string, decimals: number): string {\n let amount = parseUnits(_amount, decimals);\n const delta = amount.mul(slippageBasisPoints.value).div(10000);\n amount = amount.add(delta);\n\n return formatUnits(amount, decimals).toString();\n }\n\n return { minusSlippage, addSlippage };\n}\n","import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\n\nconst JOIN_STABLE_POOL_INIT_TAG = 0;\nconst JOIN_STABLE_POOL_EXACT_TOKENS_IN_FOR_BPT_OUT_TAG = 1;\nconst JOIN_STABLE_POOL_TOKEN_IN_FOR_EXACT_BPT_OUT_TAG = 2;\n\nexport type JoinStablePoolInit = {\n kind: 'Init';\n amountsIn: BigNumberish[];\n};\n\nexport type JoinStablePoolExactTokensInForBPTOut = {\n kind: 'ExactTokensInForBPTOut';\n amountsIn: BigNumberish[];\n minimumBPT: BigNumberish;\n};\n\nexport type JoinStablePoolTokenInForExactBPTOut = {\n kind: 'TokenInForExactBPTOut';\n bptAmountOut: BigNumberish;\n enterTokenIndex: number;\n};\n\nexport function encodeJoinStablePool(\n joinData:\n | JoinStablePoolInit\n | JoinStablePoolExactTokensInForBPTOut\n | JoinStablePoolTokenInForExactBPTOut\n): string {\n if (joinData.kind == 'Init') {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256[]'],\n [JOIN_STABLE_POOL_INIT_TAG, joinData.amountsIn]\n );\n } else if (joinData.kind == 'ExactTokensInForBPTOut') {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n JOIN_STABLE_POOL_EXACT_TOKENS_IN_FOR_BPT_OUT_TAG,\n joinData.amountsIn,\n joinData.minimumBPT\n ]\n );\n } else {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n JOIN_STABLE_POOL_TOKEN_IN_FOR_EXACT_BPT_OUT_TAG,\n joinData.bptAmountOut,\n joinData.enterTokenIndex\n ]\n );\n }\n}\n\nconst EXIT_STABLE_POOL_EXACT_BPT_IN_FOR_ONE_TOKEN_OUT_TAG = 0;\nconst EXIT_STABLE_POOL_EXACT_BPT_IN_FOR_TOKENS_OUT_TAG = 1;\nconst EXIT_STABLE_POOL_BPT_IN_FOR_EXACT_TOKENS_OUT_TAG = 2;\n\nexport type ExitStablePoolExactBPTInForOneTokenOut = {\n kind: 'ExactBPTInForOneTokenOut';\n bptAmountIn: BigNumberish;\n exitTokenIndex: number;\n};\n\nexport type ExitStablePoolExactBPTInForTokensOut = {\n kind: 'ExactBPTInForTokensOut';\n bptAmountIn: BigNumberish;\n};\n\nexport type ExitStablePoolBPTInForExactTokensOut = {\n kind: 'BPTInForExactTokensOut';\n amountsOut: BigNumberish[];\n maxBPTAmountIn: BigNumberish;\n};\n\nexport function encodeExitStablePool(\n exitData:\n | ExitStablePoolExactBPTInForOneTokenOut\n | ExitStablePoolExactBPTInForTokensOut\n | ExitStablePoolBPTInForExactTokensOut\n): string {\n if (exitData.kind == 'ExactBPTInForOneTokenOut') {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n EXIT_STABLE_POOL_EXACT_BPT_IN_FOR_ONE_TOKEN_OUT_TAG,\n exitData.bptAmountIn,\n exitData.exitTokenIndex\n ]\n );\n } else if (exitData.kind == 'ExactBPTInForTokensOut') {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [EXIT_STABLE_POOL_EXACT_BPT_IN_FOR_TOKENS_OUT_TAG, exitData.bptAmountIn]\n );\n } else {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n EXIT_STABLE_POOL_BPT_IN_FOR_EXACT_TOKENS_OUT_TAG,\n exitData.amountsOut,\n exitData.maxBPTAmountIn\n ]\n );\n }\n}\n","import { defaultAbiCoder } from '@ethersproject/abi';\nimport { BigNumberish } from '@ethersproject/bignumber';\n\nconst JOIN_WEIGHTED_POOL_INIT_TAG = 0;\nconst JOIN_WEIGHTED_POOL_EXACT_TOKENS_IN_FOR_BPT_OUT_TAG = 1;\nconst JOIN_WEIGHTED_POOL_TOKEN_IN_FOR_EXACT_BPT_OUT_TAG = 2;\n\nexport type JoinWeightedPoolInit = {\n kind: 'Init';\n amountsIn: BigNumberish[];\n};\n\nexport type JoinWeightedPoolExactTokensInForBPTOut = {\n kind: 'ExactTokensInForBPTOut';\n amountsIn: BigNumberish[];\n minimumBPT: BigNumberish;\n};\n\nexport type JoinWeightedPoolTokenInForExactBPTOut = {\n kind: 'TokenInForExactBPTOut';\n bptAmountOut: BigNumberish;\n enterTokenIndex: number;\n};\n\nexport function encodeJoinWeightedPool(\n joinData:\n | JoinWeightedPoolInit\n | JoinWeightedPoolExactTokensInForBPTOut\n | JoinWeightedPoolTokenInForExactBPTOut\n): string {\n if (joinData.kind == 'Init') {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256[]'],\n [JOIN_WEIGHTED_POOL_INIT_TAG, joinData.amountsIn]\n );\n } else if (joinData.kind == 'ExactTokensInForBPTOut') {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n JOIN_WEIGHTED_POOL_EXACT_TOKENS_IN_FOR_BPT_OUT_TAG,\n joinData.amountsIn,\n joinData.minimumBPT\n ]\n );\n } else {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n JOIN_WEIGHTED_POOL_TOKEN_IN_FOR_EXACT_BPT_OUT_TAG,\n joinData.bptAmountOut,\n joinData.enterTokenIndex\n ]\n );\n }\n}\n\nconst EXIT_WEIGHTED_POOL_EXACT_BPT_IN_FOR_ONE_TOKEN_OUT_TAG = 0;\nconst EXIT_WEIGHTED_POOL_EXACT_BPT_IN_FOR_TOKENS_OUT_TAG = 1;\nconst EXIT_WEIGHTED_POOL_BPT_IN_FOR_EXACT_TOKENS_OUT_TAG = 2;\n\nexport type ExitWeightedPoolExactBPTInForOneTokenOut = {\n kind: 'ExactBPTInForOneTokenOut';\n bptAmountIn: BigNumberish;\n exitTokenIndex: number;\n};\n\nexport type ExitWeightedPoolExactBPTInForTokensOut = {\n kind: 'ExactBPTInForTokensOut';\n bptAmountIn: BigNumberish;\n};\n\nexport type ExitWeightedPoolBPTInForExactTokensOut = {\n kind: 'BPTInForExactTokensOut';\n amountsOut: BigNumberish[];\n maxBPTAmountIn: BigNumberish;\n};\n\nexport function encodeExitWeightedPool(\n exitData:\n | ExitWeightedPoolExactBPTInForOneTokenOut\n | ExitWeightedPoolExactBPTInForTokensOut\n | ExitWeightedPoolBPTInForExactTokensOut\n): string {\n if (exitData.kind == 'ExactBPTInForOneTokenOut') {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256', 'uint256'],\n [\n EXIT_WEIGHTED_POOL_EXACT_BPT_IN_FOR_ONE_TOKEN_OUT_TAG,\n exitData.bptAmountIn,\n exitData.exitTokenIndex\n ]\n );\n } else if (exitData.kind == 'ExactBPTInForTokensOut') {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256'],\n [EXIT_WEIGHTED_POOL_EXACT_BPT_IN_FOR_TOKENS_OUT_TAG, exitData.bptAmountIn]\n );\n } else {\n return defaultAbiCoder.encode(\n ['uint256', 'uint256[]', 'uint256'],\n [\n EXIT_WEIGHTED_POOL_BPT_IN_FOR_EXACT_TOKENS_OUT_TAG,\n exitData.amountsOut,\n exitData.maxBPTAmountIn\n ]\n );\n }\n}\n","import PoolExchange from '..';\nimport { encodeJoinStablePool } from '@/lib/utils/balancer/stablePoolEncoding';\nimport { encodeJoinWeightedPool } from '@/lib/utils/balancer/weightedPoolEncoding';\nimport { parseUnits } from '@ethersproject/units';\nimport { BigNumberish } from '@ethersproject/bignumber';\nimport { isStable } from '@/composables/usePool';\n\nexport default class JoinParams {\n private exchange: PoolExchange;\n private isStablePool: boolean;\n private dataEncodeFn: Function;\n private fromInternalBalance = false;\n\n constructor(exchange) {\n this.exchange = exchange;\n this.isStablePool = isStable(exchange.pool);\n this.dataEncodeFn = this.isStablePool\n ? encodeJoinStablePool\n : encodeJoinWeightedPool;\n }\n\n public serialize(\n account: string,\n amountsIn: string[],\n bptOut: string\n ): any[] {\n const parsedAmountsIn = this.parseAmounts(amountsIn);\n const parsedBptOut = parseUnits(\n bptOut,\n this.exchange.pool.onchain.decimals\n );\n const txData = this.txData(parsedAmountsIn, parsedBptOut);\n\n return [\n this.exchange.pool.id,\n account,\n account,\n {\n assets: this.exchange.pool.tokenAddresses,\n maxAmountsIn: parsedAmountsIn,\n userData: txData,\n fromInternalBalance: this.fromInternalBalance\n }\n ];\n }\n\n private parseAmounts(amounts: string[]): BigNumberish[] {\n return amounts.map((amount, i) => {\n const token = this.exchange.pool.tokenAddresses[i];\n return parseUnits(\n amount,\n this.exchange.pool.onchain.tokens[token].decimals\n );\n });\n }\n\n private txData(amountsIn: BigNumberish[], minimumBPT: BigNumberish): string {\n if (this.exchange.pool.onchain.totalSupply === '0') {\n return this.dataEncodeFn({ kind: 'Init', amountsIn });\n } else {\n return this.dataEncodeFn({\n kind: 'ExactTokensInForBPTOut',\n amountsIn,\n minimumBPT\n });\n }\n }\n}\n","import PoolExchange from '..';\nimport { encodeExitStablePool } from '@/lib/utils/balancer/stablePoolEncoding';\nimport { encodeExitWeightedPool } from '@/lib/utils/balancer/weightedPoolEncoding';\nimport { parseUnits } from '@ethersproject/units';\nimport { BigNumberish } from '@ethersproject/bignumber';\nimport { isStable } from '@/composables/usePool';\n\nexport default class ExitParams {\n private exchange: PoolExchange;\n private isStablePool: boolean;\n private dataEncodeFn: Function;\n private toInternalBalance = false;\n\n constructor(exchange) {\n this.exchange = exchange;\n this.isStablePool = isStable(exchange.pool);\n this.dataEncodeFn = this.isStablePool\n ? encodeExitStablePool\n : encodeExitWeightedPool;\n }\n\n public serialize(\n account: string,\n amountsOut: string[],\n bptIn: string,\n exitTokenIndex: number | null,\n exactOut: boolean\n ): any[] {\n const parsedAmountsOut = this.parseAmounts(amountsOut);\n const parsedBptIn = parseUnits(bptIn, this.exchange.pool.onchain.decimals);\n const txData = this.txData(\n parsedAmountsOut,\n parsedBptIn,\n exitTokenIndex,\n exactOut\n );\n\n return [\n this.exchange.pool.id,\n account,\n account,\n {\n assets: this.exchange.pool.tokenAddresses,\n minAmountsOut: parsedAmountsOut,\n userData: txData,\n toInternalBalance: this.toInternalBalance\n }\n ];\n }\n\n private parseAmounts(amounts: string[]): BigNumberish[] {\n return amounts.map((amount, i) => {\n const token = this.exchange.pool.tokenAddresses[i];\n return parseUnits(\n amount,\n this.exchange.pool.onchain.tokens[token].decimals\n );\n });\n }\n\n private txData(\n amountsOut: BigNumberish[],\n bptIn: BigNumberish,\n exitTokenIndex: number | null,\n exactOut: boolean\n ): string {\n const isSingleAssetOut = exitTokenIndex !== null;\n\n if (isSingleAssetOut) {\n return this.dataEncodeFn({\n kind: 'ExactBPTInForOneTokenOut',\n bptAmountIn: bptIn,\n exitTokenIndex\n });\n } else if (exactOut) {\n return this.dataEncodeFn({\n amountsOut,\n maxBPTAmountIn: bptIn\n });\n } else {\n return this.dataEncodeFn({\n kind: 'ExactBPTInForTokensOut',\n bptAmountIn: bptIn\n });\n }\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport configs from '@/lib/config';\nimport { callStatic, sendTransaction } from '@/lib/utils/balancer/web3';\nimport { default as vaultAbi } from '@/lib/abi/Vault.json';\nimport { default as helpersAbi } from '@/lib/abi/BalancerHelpers.json';\nimport JoinParams from './serializers/JoinParams';\nimport ExitParams from './serializers/ExitParams';\nimport { FullPool } from '@/services/balancer/subgraph/types';\nimport { JsonRpcProvider, Web3Provider } from '@ethersproject/providers';\nimport { TokenInfoMap } from '@/types/TokenList';\n\nexport default class Exchange {\n pool: FullPool;\n network: string;\n vaultAddress: string;\n helpersAddress: string;\n tokens: TokenInfoMap;\n\n constructor(pool: FullPool, network: string, tokens: TokenInfoMap) {\n this.pool = pool;\n this.network = network;\n this.tokens = tokens;\n this.vaultAddress = configs[network].addresses.vault;\n this.helpersAddress = configs[network].addresses.balancerHelpers;\n }\n\n public async queryJoin(\n provider: Web3Provider | JsonRpcProvider,\n account: string,\n amountsIn: string[],\n bptOut = '0'\n ) {\n const txParams = this.joinParams.serialize(account, amountsIn, bptOut);\n\n return await callStatic(\n provider,\n this.helpersAddress,\n helpersAbi,\n 'queryJoin',\n txParams\n );\n }\n\n public async join(\n provider: Web3Provider | JsonRpcProvider,\n account: string,\n amountsIn: string[],\n bptOut = '0'\n ): Promise {\n const txParams = this.joinParams.serialize(account, amountsIn, bptOut);\n\n return await sendTransaction(\n provider,\n this.vaultAddress,\n vaultAbi,\n 'joinPool',\n txParams\n );\n }\n\n public async queryExit(\n provider: Web3Provider | JsonRpcProvider,\n account: string,\n amountsOut: string[],\n bptIn: string,\n exitTokenIndex: number | null,\n exactOut: boolean\n ) {\n const txParams = this.exitParams.serialize(\n account,\n amountsOut,\n bptIn,\n exitTokenIndex,\n exactOut\n );\n\n return await callStatic(\n provider,\n this.helpersAddress,\n helpersAbi,\n 'queryExit',\n txParams\n );\n }\n\n public async exit(\n provider: Web3Provider | JsonRpcProvider,\n account: string,\n amountsOut: string[],\n bptIn: string,\n exitTokenIndex: number | null,\n exactOut: boolean\n ): Promise {\n const txParams = this.exitParams.serialize(\n account,\n amountsOut,\n bptIn,\n exitTokenIndex,\n exactOut\n );\n\n return await sendTransaction(\n provider,\n this.vaultAddress,\n vaultAbi,\n 'exitPool',\n txParams\n );\n }\n\n private get joinParams() {\n return new JoinParams(this);\n }\n\n private get exitParams() {\n return new ExitParams(this);\n }\n}\n","import Calculator from './calculator.sevice';\nimport { PiOptions } from './calculator.sevice';\nimport { parseUnits, formatUnits } from '@ethersproject/units';\nimport { bnum } from '@/lib/utils';\nimport BigNumber from 'bignumber.js';\n\nimport * as SDK from '@georgeroman/balancer-v2-pools';\nimport { BPTForTokensZeroPriceImpact as _bptForTokensZeroPriceImpact } from '@balancer-labs/sor2/dist/frontendHelpers/weightedHelpers';\n\nexport default class Weighted {\n calc: Calculator;\n\n constructor(calculator) {\n this.calc = calculator;\n }\n\n public exactTokensInForBPTOut(tokenAmounts: string[]): BigNumber {\n const balances = this.calc.poolTokenBalances.map(b => bnum(b.toString()));\n const weights = this.calc.poolTokenWeights.map(w => bnum(w.toString()));\n const denormAmounts = this.calc.denormAmounts(\n tokenAmounts,\n this.calc.poolTokenDecimals\n );\n const amounts = denormAmounts.map(a => bnum(a.toString()));\n\n return SDK.WeightedMath._calcBptOutGivenExactTokensIn(\n balances,\n weights,\n amounts,\n bnum(this.calc.poolTotalSupply.toString()),\n bnum(this.calc.poolSwapFee.toString())\n );\n }\n\n public bptInForExactTokensOut(tokenAmounts: string[]): BigNumber {\n const balances = this.calc.poolTokenBalances.map(b => bnum(b.toString()));\n const weights = this.calc.poolTokenWeights.map(w => bnum(w.toString()));\n const denormAmounts = this.calc.denormAmounts(\n tokenAmounts,\n this.calc.poolTokenDecimals\n );\n const amounts = denormAmounts.map(a => bnum(a.toString()));\n\n return SDK.WeightedMath._calcBptInGivenExactTokensOut(\n balances,\n weights,\n amounts,\n bnum(this.calc.poolTotalSupply.toString()),\n bnum(this.calc.poolSwapFee.toString())\n );\n }\n\n public bptInForExactTokenOut(amount: string, tokenIndex: number): BigNumber {\n const tokenBalance = bnum(\n this.calc.poolTokenBalances[tokenIndex].toString()\n );\n const tokenNormalizedWeight = bnum(\n this.calc.poolTokenWeights[tokenIndex].toString()\n );\n const bptAmountIn = bnum(\n parseUnits(amount, this.calc.poolTokenDecimals[tokenIndex]).toString()\n );\n const bptTotalSupply = bnum(this.calc.poolTotalSupply.toString());\n const swapFee = bnum(this.calc.poolSwapFee.toString());\n\n return SDK.WeightedMath._calcBptInGivenExactTokenOut(\n tokenBalance,\n tokenNormalizedWeight,\n bptAmountIn,\n bptTotalSupply,\n swapFee\n );\n }\n\n public exactBPTInForTokenOut(\n bptAmount: string,\n tokenIndex: number\n ): BigNumber {\n const tokenBalance = bnum(\n this.calc.poolTokenBalances[tokenIndex].toString()\n );\n const tokenNormalizedWeight = bnum(\n this.calc.poolTokenWeights[tokenIndex].toString()\n );\n const bptAmountIn = bnum(\n parseUnits(bptAmount, this.calc.poolDecimals).toString()\n );\n\n return SDK.WeightedMath._calcTokenOutGivenExactBptIn(\n tokenBalance,\n tokenNormalizedWeight,\n bptAmountIn,\n bnum(this.calc.poolTotalSupply.toString()),\n bnum(this.calc.poolSwapFee.toString())\n );\n }\n\n public priceImpact(tokenAmounts: string[], opts: PiOptions): BigNumber {\n let bptAmount, bptZeroPriceImpact;\n\n if (this.calc.action === 'join') {\n bptAmount = this.exactTokensInForBPTOut(tokenAmounts);\n if (bptAmount < 0) return bnum(0);\n bptZeroPriceImpact = this.bptForTokensZeroPriceImpact(tokenAmounts);\n\n return bnum(1).minus(bptAmount.div(bptZeroPriceImpact));\n } else {\n // Single asset exit\n if (opts.exactOut) {\n bptAmount = this.bptInForExactTokensOut(tokenAmounts);\n bptZeroPriceImpact = this.bptForTokensZeroPriceImpact(tokenAmounts);\n } else {\n bptAmount = parseUnits(\n this.calc.bptBalance,\n this.calc.poolDecimals\n ).toString();\n tokenAmounts = this.calc.pool.tokensList.map((_, i) => {\n if (i !== opts.tokenIndex) return '0';\n const tokenAmount = this.exactBPTInForTokenOut(\n this.calc.bptBalance,\n opts.tokenIndex\n ).toString();\n return formatUnits(\n tokenAmount,\n this.calc.poolTokenDecimals[opts.tokenIndex]\n ).toString();\n });\n bptZeroPriceImpact = this.bptForTokensZeroPriceImpact(tokenAmounts);\n }\n\n return bnum(bptAmount)\n .div(bptZeroPriceImpact)\n .minus(1);\n }\n }\n\n public bptForTokensZeroPriceImpact(tokenAmounts: string[]): BigNumber {\n const denormAmounts = this.calc.denormAmounts(\n tokenAmounts,\n this.calc.poolTokenDecimals\n );\n const amounts = denormAmounts.map(a => bnum(a.toString()));\n\n return _bptForTokensZeroPriceImpact(\n this.calc.poolTokenBalances.map(b => bnum(b.toString())),\n this.calc.poolTokenDecimals,\n this.calc.poolTokenWeights.map(w => bnum(w.toString())),\n amounts,\n bnum(this.calc.poolTotalSupply.toString())\n );\n }\n}\n","import Calculator from './calculator.sevice';\nimport { PiOptions } from './calculator.sevice';\nimport { parseUnits, formatUnits } from '@ethersproject/units';\nimport { bnum } from '@/lib/utils';\nimport BigNumber from 'bignumber.js';\n\nimport { BPTForTokensZeroPriceImpact as _bptForTokensZeroPriceImpact } from '@balancer-labs/sor2/dist/frontendHelpers/stableHelpers';\nimport { BigNumberish } from '@ethersproject/bignumber';\nimport * as SDK from '@georgeroman/balancer-v2-pools';\n\n/**\n * The stableMathEvm works with all values scaled to 18 decimals,\n * all inputs should be scaled appropriately.\n */\nexport default class Stable {\n calc: Calculator;\n AMP_PRECISION = bnum(1000);\n\n constructor(calculator) {\n this.calc = calculator;\n }\n\n public exactTokensInForBPTOut(tokenAmounts: string[]): BigNumber {\n const amp = bnum(this.calc.pool.onchain.amp?.toString() || '0');\n const ampAdjusted = this.adjustAmp(amp);\n const denormAmounts = this.calc.denormAmounts(\n tokenAmounts,\n this.calc.poolTokenDecimals.map(() => 18)\n );\n const amounts = denormAmounts.map(a => bnum(a.toString()));\n\n const bptOut = SDK.StableMath._calcBptOutGivenExactTokensIn(\n ampAdjusted,\n this.scaledBalances,\n amounts,\n this.scaledPoolTotalSupply,\n bnum(this.calc.poolSwapFee.toString())\n );\n\n return this.scaleOutput(\n bptOut.toString(),\n this.calc.poolDecimals,\n BigNumber.ROUND_DOWN // If OUT given IN, round down\n );\n }\n\n public bptInForExactTokensOut(tokenAmounts: string[]): BigNumber {\n const amp = bnum(this.calc.pool.onchain.amp?.toString() || '0');\n const ampAdjusted = this.adjustAmp(amp);\n\n const denormAmounts = this.calc.denormAmounts(\n tokenAmounts,\n this.calc.poolTokenDecimals.map(() => 18)\n );\n const amounts = denormAmounts.map(a => bnum(a.toString()));\n\n const bptIn = SDK.StableMath._calcBptInGivenExactTokensOut(\n ampAdjusted,\n this.scaledBalances,\n amounts,\n this.scaledPoolTotalSupply,\n bnum(this.calc.poolSwapFee.toString())\n );\n\n return this.scaleOutput(\n bptIn.toString(),\n this.calc.poolDecimals,\n BigNumber.ROUND_UP // If IN given OUT, round up\n );\n }\n\n public bptInForExactTokenOut(amount: string, tokenIndex: number): BigNumber {\n const amp = bnum(this.calc.pool.onchain.amp?.toString() || '0');\n const ampAdjusted = this.adjustAmp(amp);\n const amounts = this.calc.pool.tokenAddresses.map((address, i) => {\n if (i === tokenIndex) return bnum(parseUnits(amount, 18).toString());\n return bnum('0');\n });\n\n const bptIn = SDK.StableMath._calcBptInGivenExactTokensOut(\n ampAdjusted,\n this.scaledBalances,\n amounts,\n this.scaledPoolTotalSupply,\n bnum(this.calc.poolSwapFee.toString())\n );\n\n return this.scaleOutput(\n bptIn.toString(),\n this.calc.poolDecimals,\n BigNumber.ROUND_UP // If IN given OUT, round up\n );\n }\n\n public exactBPTInForTokenOut(\n bptAmount: string,\n tokenIndex: number\n ): BigNumber {\n if (bnum(bptAmount).eq(0))\n return this.scaleOutput(\n '0',\n this.calc.poolTokenDecimals[tokenIndex],\n BigNumber.ROUND_DOWN // If OUT given IN, round down\n );\n\n const amp = bnum(this.calc.pool.onchain.amp?.toString() || '0');\n const ampAdjusted = this.adjustAmp(amp);\n const bptAmountIn = bnum(parseUnits(bptAmount, 18).toString());\n\n const tokenAmountOut = SDK.StableMath._calcTokenOutGivenExactBptIn(\n ampAdjusted,\n this.scaledBalances,\n tokenIndex,\n bptAmountIn,\n this.scaledPoolTotalSupply,\n bnum(this.calc.poolSwapFee.toString())\n );\n\n return this.scaleOutput(\n tokenAmountOut.toString(),\n this.calc.poolTokenDecimals[tokenIndex],\n BigNumber.ROUND_DOWN // If OUT given IN, round down\n );\n }\n\n public priceImpact(tokenAmounts: string[], opts: PiOptions): BigNumber {\n let bptAmount: BigNumber | BigNumberish;\n let bptZeroPriceImpact: BigNumber;\n\n if (this.calc.action === 'join') {\n bptAmount = this.exactTokensInForBPTOut(tokenAmounts);\n if (bptAmount.isLessThan(0)) return bnum(0);\n bptZeroPriceImpact = this.bptForTokensZeroPriceImpact(tokenAmounts);\n\n return bnum(1).minus(bptAmount.div(bptZeroPriceImpact));\n } else {\n // Single asset exit\n if (opts.exactOut) {\n bptAmount = this.bptInForExactTokensOut(tokenAmounts);\n bptZeroPriceImpact = this.bptForTokensZeroPriceImpact(tokenAmounts);\n } else {\n bptAmount = parseUnits(\n this.calc.bptBalance,\n this.calc.poolDecimals\n ).toString();\n tokenAmounts = this.calc.pool.tokensList.map((_, i) => {\n if (i !== opts.tokenIndex) return '0';\n const tokenAmount = this.exactBPTInForTokenOut(\n this.calc.bptBalance,\n opts.tokenIndex\n ).toString();\n return formatUnits(\n tokenAmount,\n this.calc.poolTokenDecimals[opts.tokenIndex]\n ).toString();\n });\n bptZeroPriceImpact = this.bptForTokensZeroPriceImpact(tokenAmounts);\n }\n\n return bnum(bptAmount)\n .div(bptZeroPriceImpact)\n .minus(1);\n }\n }\n\n /**\n * PRIVATE FUNCTIONS\n */\n private bptForTokensZeroPriceImpact(tokenAmounts: string[]): BigNumber {\n const amp = bnum(this.calc.pool.onchain.amp?.toString() || '0');\n const denormAmounts = this.calc.denormAmounts(\n tokenAmounts,\n this.calc.poolTokenDecimals\n );\n const amounts = denormAmounts.map(a => bnum(a.toString()));\n\n // _bptForTokensZeroPriceImpact is the only stable pool function\n // that requires balances be scaled by the token decimals and not 18\n const balances = this.scaledBalances.map((balance, i) => {\n const normalizedBalance = formatUnits(balance.toString(), 18);\n const denormBalance = parseUnits(\n normalizedBalance,\n this.calc.poolTokenDecimals[i]\n );\n return bnum(denormBalance.toString());\n });\n\n const bptZeroImpact = _bptForTokensZeroPriceImpact(\n balances,\n this.calc.poolTokenDecimals,\n amounts,\n bnum(this.calc.poolTotalSupply.toString()),\n amp\n );\n\n return bptZeroImpact;\n }\n\n private get scaledBalances(): BigNumber[] {\n return this.calc.poolTokenBalances.map((balance, i) => {\n const normalizedBalance = formatUnits(\n balance,\n this.calc.poolTokenDecimals[i]\n );\n const scaledBalance = parseUnits(normalizedBalance, 18)\n .mul(parseUnits(this.calc.pool.tokens[i].priceRate ?? '1', 18))\n .div(parseUnits('1', 18));\n return bnum(scaledBalance.toString());\n });\n }\n\n private get scaledPoolTotalSupply(): BigNumber {\n const normalizedSupply = formatUnits(\n this.calc.poolTotalSupply,\n this.calc.poolDecimals\n );\n const scaledSupply = parseUnits(normalizedSupply, 18);\n return bnum(scaledSupply.toString());\n }\n\n private scaleOutput(\n amount: string,\n decimals: number,\n rounding: BigNumber.RoundingMode\n ): BigNumber {\n const normalizedAmount = bnum(formatUnits(amount, 18)).toFixed(\n decimals,\n rounding\n );\n const scaledAmount = parseUnits(normalizedAmount, decimals);\n\n return bnum(scaledAmount.toString());\n }\n\n // Solidity maths uses precison method for amp that must be replicated\n private adjustAmp(amp: BigNumber): BigNumber {\n return amp.times(this.AMP_PRECISION);\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { parseUnits, formatUnits } from '@ethersproject/units';\nimport { BigNumberish } from '@ethersproject/bignumber';\nimport { FullPool } from '@/services/balancer/subgraph/types';\nimport Weighted from './weighted';\nimport Stable from './stable';\nimport { TokenInfoMap } from '@/types/TokenList';\nimport { BalanceMap } from '@/services/token/concerns/balances.concern';\nimport { ComputedRef } from 'vue';\nimport { isStable, isStableLike } from '@/composables/usePool';\nimport { bnum } from '@/lib/utils';\n\ninterface Amounts {\n send: string[];\n receive: string[];\n fixedToken: number;\n}\n\nexport interface PiOptions {\n exactOut: boolean;\n tokenIndex: number | null;\n}\n\ntype PoolAction = 'join' | 'exit';\n\nexport default class CalculatorService {\n pool: FullPool;\n allTokens: TokenInfoMap;\n balances: ComputedRef;\n action: PoolAction;\n types = ['send', 'receive'];\n weighted: Weighted;\n stable: Stable;\n\n constructor(\n pool: FullPool,\n allTokens: TokenInfoMap,\n balances: ComputedRef,\n action: PoolAction,\n weightedClass = Weighted,\n stableClass = Stable\n ) {\n this.pool = pool;\n this.allTokens = allTokens;\n this.balances = balances;\n this.action = action;\n this.weighted = new weightedClass(this);\n this.stable = new stableClass(this);\n }\n\n public setAllTokens(tokens: TokenInfoMap): void {\n this.allTokens = tokens;\n }\n\n public setPool(pool: FullPool): void {\n this.pool = pool;\n }\n\n public priceImpact(\n tokenAmounts: string[],\n opts: PiOptions = { exactOut: false, tokenIndex: 0 }\n ): BigNumber {\n if (this.isStableLikePool) {\n return this.stable.priceImpact(tokenAmounts, opts);\n }\n return this.weighted.priceImpact(tokenAmounts, opts);\n }\n\n public exactTokensInForBPTOut(tokenAmounts: string[]): BigNumber {\n if (this.isStableLikePool) {\n return this.stable.exactTokensInForBPTOut(tokenAmounts);\n }\n return this.weighted.exactTokensInForBPTOut(tokenAmounts);\n }\n\n public exactBPTInForTokenOut(\n bptAmount: string,\n tokenIndex: number\n ): BigNumber {\n if (this.isStableLikePool) {\n return this.stable.exactBPTInForTokenOut(bptAmount, tokenIndex);\n }\n return this.weighted.exactBPTInForTokenOut(bptAmount, tokenIndex);\n }\n\n public bptInForExactTokenOut(amount: string, tokenIndex: number): BigNumber {\n if (this.isStableLikePool) {\n return this.stable.bptInForExactTokenOut(amount, tokenIndex);\n }\n return this.weighted.bptInForExactTokenOut(amount, tokenIndex);\n }\n\n public propMax(): Amounts {\n let maxAmounts: Amounts = {\n send: [],\n receive: [],\n fixedToken: 0\n };\n const type = this.action === 'join' ? 'send' : 'receive';\n\n this.pool.tokenAddresses.forEach((token, tokenIndex) => {\n let hasBalance = true;\n const balance = this.balances.value[token];\n const amounts = this.propAmountsGiven(balance, tokenIndex, type);\n\n amounts.send.forEach((amount, amountIndex) => {\n const greaterThanBalance =\n Number(amount) >\n Number(this.balances.value[this.tokenOf(type, amountIndex)]);\n if (greaterThanBalance) hasBalance = false;\n });\n\n if (hasBalance) {\n const currentMaxAmount = parseFloat(maxAmounts.send[tokenIndex] || '0');\n const thisAmount = parseFloat(amounts.send[tokenIndex]);\n if (thisAmount > currentMaxAmount) {\n maxAmounts = amounts;\n maxAmounts.fixedToken = tokenIndex;\n }\n }\n });\n\n return maxAmounts;\n }\n\n public propAmountsGiven(\n fixedAmount: string,\n index: number,\n type: 'send' | 'receive'\n ): Amounts {\n if (fixedAmount.trim() === '')\n return { send: [], receive: [], fixedToken: 0 };\n\n const types = ['send', 'receive'];\n const fixedTokenAddress = this.tokenOf(type, index);\n const fixedToken = this.allTokens[fixedTokenAddress];\n const fixedDenormAmount = parseUnits(fixedAmount, fixedToken.decimals);\n const fixedRatio = this.ratioOf(type, index);\n const amounts = {\n send: this.sendTokens.map(() => ''),\n receive: this.receiveTokens.map(() => ''),\n fixedToken: index\n };\n\n amounts[type][index] = fixedAmount;\n\n [this.sendRatios, this.receiveRatios].forEach((ratios, ratioType) => {\n ratios.forEach((ratio, i) => {\n if (i !== index || type !== types[ratioType]) {\n const tokenAddress = this.tokenOf(types[ratioType], i);\n const token = this.allTokens[tokenAddress];\n amounts[types[ratioType]][i] = formatUnits(\n fixedDenormAmount.mul(ratio).div(fixedRatio),\n token.decimals\n );\n }\n });\n });\n\n return amounts;\n }\n\n public denormAmounts(amounts: string[], decimals: number[]): BigNumberish[] {\n return amounts.map((a, i) => parseUnits(a, decimals[i]));\n }\n\n public tokenOf(type: string, index: number) {\n return this[`${type}Tokens`][index];\n }\n\n public ratioOf(type: string, index: number) {\n return this[`${type}Ratios`][index];\n }\n\n public inputAmountExceedsPoolBalance(tokenAmounts: string[]): boolean {\n const balances = this.poolTokenBalances.map(b => bnum(b.toString()));\n const denormAmounts = this.denormAmounts(\n tokenAmounts,\n this.poolTokenDecimals\n );\n const amounts = denormAmounts.map(a => bnum(a.toString()));\n\n for (let i = 0; i < amounts.length; i++) {\n if (amounts[i].gt(bnum(balances[i]))) {\n return true;\n }\n }\n\n return false;\n }\n\n public get poolTokenBalances(): BigNumberish[] {\n const normalizedBalances = Object.values(this.pool.onchain.tokens).map(\n t => t.balance\n );\n return normalizedBalances.map((balance, i) =>\n parseUnits(balance, this.poolTokenDecimals[i])\n );\n }\n\n public get poolTokenDecimals(): number[] {\n return Object.values(this.pool.onchain.tokens).map(t => t.decimals);\n }\n\n public get poolTokenWeights(): BigNumberish[] {\n const normalizedWeights = Object.values(this.pool.onchain.tokens).map(\n t => t.weight\n );\n return normalizedWeights.map(weight => parseUnits(weight.toString(), 18));\n }\n\n public get poolTotalSupply(): BigNumberish {\n return parseUnits(this.pool.onchain.totalSupply, this.poolDecimals);\n }\n\n public get poolSwapFee(): BigNumberish {\n return parseUnits(this.pool.onchain.swapFee, 18);\n }\n\n public get poolDecimals(): number {\n return this.pool.onchain.decimals;\n }\n\n public get bptBalance(): string {\n return this.balances.value[this.pool.address];\n }\n\n public get isStablePool(): boolean {\n return isStable(this.pool);\n }\n\n public get isStableLikePool(): boolean {\n return isStableLike(this.pool);\n }\n\n public get sendTokens(): string[] {\n if (this.action === 'join') return this.pool.tokenAddresses;\n return [this.pool.address];\n }\n\n public get receiveTokens(): string[] {\n if (this.action === 'join') return [this.pool.address];\n return this.pool.tokenAddresses;\n }\n\n public get sendRatios(): BigNumberish[] {\n if (this.action === 'join') return this.poolTokenBalances;\n return [this.poolTotalSupply];\n }\n\n public get receiveRatios(): BigNumberish[] {\n if (this.action === 'join') return [this.poolTotalSupply];\n return this.poolTokenBalances;\n }\n}\n","import { fNum } from '@/composables/useNumbers';\n\nimport { FullPool } from '../balancer/subgraph/types';\n\nexport function getPoolWeights(pool: FullPool) {\n return Object.values(pool.onchain.tokens)\n .map(token => `${fNum(token.weight, 'percent_lg')} ${token.symbol}`)\n .join(', ');\n}\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, toDisplayString as _toDisplayString, createVNode as _createVNode, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"text-xs text-gray-500\"\n}\nconst _hoisted_2 = { class: \"w-52\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n const _component_BalRadio = _resolveComponent(\"BalRadio\")\n\n return (_openBlock(), _createBlock(\"div\", {\n class: ['flex flex-col px-4 py-2', _ctx.hasZeroBalance ? 'hidden' : '']\n }, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.formTypes, (type, i) => {\n return (_openBlock(), _createBlock(_component_BalRadio, {\n key: i,\n modelValue: _ctx.selected,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.selected = $event)),\n value: type.value,\n name: \"formType\",\n class: \"py-2\",\n disabled: _ctx.loading\n }, {\n label: _withCtx(() => [\n _createVNode(\"span\", null, _toDisplayString(type.label), 1),\n (!_ctx.missingPrices)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_1, \" (\" + _toDisplayString(`${type.max} ${_ctx.$t('max').toLowerCase()}`) + \") \", 1))\n : _createCommentVNode(\"\", true),\n (type.tooltip)\n ? (_openBlock(), _createBlock(_component_BalTooltip, { key: 1 }, {\n activator: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"info\",\n size: \"xs\",\n class: \"text-gray-400 -mb-px ml-2\"\n })\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_2, _toDisplayString(type.tooltip), 1)\n ]),\n _: 2\n }, 1024))\n : _createCommentVNode(\"\", true)\n ]),\n _: 2\n }, 1032, [\"modelValue\", \"value\", \"disabled\"]))\n }), 128))\n ], 2))\n}","\nimport { defineComponent, PropType, ref, watch } from 'vue';\n\ntype FormTypes = 'proportional' | 'custom';\n\ninterface FormType {\n label: string;\n max: string;\n value: FormTypes;\n tooltip?: string;\n}\n\nexport default defineComponent({\n name: 'TypeToggle',\n\n emits: ['update:modelValue'],\n\n props: {\n formTypes: { type: Object as PropType, required: true },\n modelValue: { type: String, required: true },\n loading: { type: Boolean, default: false },\n hasZeroBalance: { type: Boolean, default: false },\n missingPrices: { type: Boolean, default: false }\n },\n\n setup(props, { emit }) {\n const selected = ref(props.formTypes[0].value);\n\n watch(selected, newVal => {\n emit('update:modelValue', newVal);\n });\n\n watch(\n () => props.modelValue,\n newVal => {\n if (selected.value != newVal) selected.value = newVal as FormTypes;\n }\n );\n\n return {\n selected\n };\n }\n});\n","import { render } from \"./FormTypeToggle.vue?vue&type=template&id=0a2ac05f&ts=true\"\nimport script from \"./FormTypeToggle.vue?vue&type=script&lang=ts\"\nexport * from \"./FormTypeToggle.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport {\n defineComponent,\n computed,\n watch,\n onMounted,\n reactive,\n toRefs,\n ref,\n PropType,\n toRef\n} from 'vue';\nimport { FormRef } from '@/types';\nimport {\n isPositive,\n isLessThanOrEqualTo,\n isRequired\n} from '@/lib/utils/validations';\nimport { useI18n } from 'vue-i18n';\nimport { formatUnits } from '@ethersproject/units';\nimport isEqual from 'lodash/isEqual';\n\nimport useTokenApprovals from '@/composables/pools/useTokenApprovals';\nimport useNumbers from '@/composables/useNumbers';\nimport useSlippage from '@/composables/useSlippage';\n\nimport PoolExchange from '@/services/pool/exchange';\nimport PoolCalculator from '@/services/pool/calculator/calculator.sevice';\nimport { getPoolWeights } from '@/services/pool/pool.helper';\nimport { bnum } from '@/lib/utils';\nimport FormTypeToggle from './shared/FormTypeToggle.vue';\nimport { FullPool } from '@/services/balancer/subgraph/types';\nimport useFathom from '@/composables/useFathom';\n\nimport { TOKENS } from '@/constants/tokens';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport { TransactionResponse } from '@ethersproject/abstract-provider';\nimport useEthers from '@/composables/useEthers';\nimport useTransactions from '@/composables/useTransactions';\nimport { usePool } from '@/composables/usePool';\nimport BalAlert from '@/components/_global/BalAlert/BalAlert.vue';\n\nexport enum FormTypes {\n proportional = 'proportional',\n custom = 'custom'\n}\n\ntype DataProps = {\n investForm: FormRef;\n investType: FormTypes;\n loading: boolean;\n amounts: string[];\n propMax: string[];\n validInputs: boolean[];\n propToken: number;\n range: number;\n highPiAccepted: boolean;\n};\n\nexport default defineComponent({\n name: 'InvestForm',\n\n components: {\n BalAlert,\n FormTypeToggle\n },\n\n emits: ['success'],\n\n props: {\n pool: { type: Object as PropType, required: true },\n missingPrices: { type: Boolean, default: false },\n hasUnstakedBpt: { type: Boolean, default: false }\n },\n\n setup(props: { pool: FullPool }, { emit }) {\n const data = reactive({\n investForm: {} as FormRef,\n investType: FormTypes.proportional,\n loading: false,\n amounts: [],\n propMax: [],\n validInputs: [],\n propToken: 0,\n range: 1000,\n highPiAccepted: false\n });\n\n // COMPOSABLES\n const {\n isWalletReady,\n account,\n toggleWalletSelectModal,\n getProvider,\n appNetworkConfig\n } = useWeb3();\n const { fNum, toFiat } = useNumbers();\n const { t } = useI18n();\n const { minusSlippage } = useSlippage();\n const { tokens, balances: allBalances } = useTokens();\n const { trackGoal, Goals } = useFathom();\n const { txListener } = useEthers();\n const { addTransaction } = useTransactions();\n const { isStableLikePool, isWethPool, isWstETHPool } = usePool(\n toRef(props, 'pool')\n );\n\n const { amounts } = toRefs(data);\n\n const {\n requiredAllowances,\n approveAllowances,\n approving,\n approvedAll\n } = useTokenApprovals(props.pool.tokenAddresses, amounts);\n\n // SERVICES\n const poolExchange = computed(\n () => new PoolExchange(props.pool, appNetworkConfig.key, tokens.value)\n );\n\n const poolCalculator = new PoolCalculator(\n props.pool,\n tokens.value,\n allBalances,\n 'join'\n );\n\n // COMPUTED\n const tokenWeights = computed(() =>\n Object.values(props.pool.onchain.tokens).map(t => t.weight)\n );\n\n const hasAmounts = computed(() => {\n const amountSum = fullAmounts.value\n .map(amount => parseFloat(amount))\n .reduce((a, b) => a + b, 0);\n return amountSum > 0;\n });\n\n const hasValidInputs = computed(() => {\n return data.validInputs.every(validInput => validInput === true);\n });\n\n const balances = computed(() => {\n return props.pool.tokenAddresses.map(\n token => allBalances.value[token] || '0'\n );\n });\n\n const hasZeroBalance = computed(() => {\n return balances.value.map(b => Number(b)).includes(0);\n });\n\n const total = computed(() => {\n const total = props.pool.tokenAddresses\n .map((_, i) => amountUSD(i))\n .reduce((a, b) => a + b, 0);\n\n if (total < 0) return fNum(0, 'usd');\n return fNum(total, 'usd');\n });\n\n const requireApproval = computed(() => {\n if (!hasAmounts.value) return false;\n if (approvedAll.value) return false;\n return requiredAllowances.value.length > 0;\n });\n\n const isProportional = computed(() => {\n return data.investType === FormTypes.proportional;\n });\n\n const propPercentage = computed(() => {\n const currentAmount = fullAmounts.value[data.propToken];\n const maxAmount = tokenBalance(data.propToken);\n\n if (currentAmount === '0') return 0;\n return Math.ceil((Number(currentAmount) / Number(maxAmount)) * 100);\n });\n\n const fullAmounts = computed(() => {\n return props.pool.tokenAddresses.map((_, i) => {\n return data.amounts[i] || '0';\n });\n });\n\n const propMaxUSD = computed(() => {\n const total = props.pool.tokenAddresses\n .map((token, i) => toFiat(Number(data.propMax[i]), token))\n .reduce((a, b) => a + b, 0);\n\n return fNum(total, 'usd');\n });\n\n const balanceMaxUSD = computed(() => {\n const total = props.pool.tokenAddresses\n .map((token, i) => toFiat(balances.value[i], token))\n .reduce((a, b) => a + b, 0);\n\n return fNum(total, 'usd');\n });\n\n const priceImpact = computed(() => {\n if (isProportional.value || !hasAmounts.value) return 0;\n return poolCalculator.priceImpact(fullAmounts.value).toNumber() || 0;\n });\n\n const priceImpactClasses = computed(() => {\n return {\n 'text-red-500 font-medium': priceImpact.value >= 0.01,\n 'text-gray-500 font-normal': priceImpact.value < 0.01\n };\n });\n\n const minBptOut = computed(() => {\n let bptOut = poolCalculator\n .exactTokensInForBPTOut(fullAmounts.value)\n .toString();\n bptOut = formatUnits(bptOut, props.pool.onchain.decimals);\n console.log(bptOut, `TS EVM _exactTokensInForBPTOut`);\n\n return minusSlippage(bptOut, props.pool.onchain.decimals);\n });\n\n const nativeAsset = computed(() => appNetworkConfig.nativeAsset.symbol);\n\n const formTypes = ref([\n {\n label: t('noPriceImpact'),\n max: propMaxUSD,\n value: FormTypes.proportional,\n tooltip: t('noPriceImpactTip')\n },\n {\n label: t('customAmounts'),\n max: balanceMaxUSD,\n value: FormTypes.custom,\n tooltip: t('customAmountsTip')\n }\n ]);\n\n // METHODS\n function tokenBalance(index: number): string {\n return balances.value[index] || '0';\n }\n\n function tokenDecimals(index) {\n return tokens.value[props.pool.tokenAddresses[index]].decimals;\n }\n\n function amountUSD(index) {\n const amount = fullAmounts.value[index] || 0;\n return toFiat(amount, props.pool.tokenAddresses[index]);\n }\n\n function formatBalance(index) {\n return fNum(tokenBalance(index), 'token');\n }\n\n function amountRules(index) {\n return isWalletReady.value\n ? [\n isPositive(),\n isLessThanOrEqualTo(\n Number(tokenBalance(index)),\n t('exceedsBalance')\n )\n ]\n : [isPositive()];\n }\n\n function symbolFor(token: string) {\n return tokens.value[token]?.symbol || '';\n }\n\n async function setPropMax() {\n const { send, fixedToken } = poolCalculator.propMax();\n data.propMax = [...send];\n data.propToken = fixedToken;\n }\n\n function resetSlider() {\n data.amounts = [...data.propMax];\n data.range = 1000;\n }\n\n function setPropAmountsFor(range) {\n const fractionBasisPoints = (range / 1000) * 10000;\n const amount = bnum(balances.value[data.propToken])\n .times(fractionBasisPoints)\n .div(10000)\n .toFixed(tokenDecimals(data.propToken));\n\n const { send } = poolCalculator.propAmountsGiven(\n amount,\n data.propToken,\n 'send'\n );\n data.amounts = send;\n }\n\n // Legacy function for sense check against JS calculation of BPT out\n // Left here so numbers can be debugged in conosle\n // Talk to Fernando to see if still needed\n async function calcMinBptOut(): Promise {\n let { bptOut } = await poolExchange.value.queryJoin(\n getProvider(),\n account.value,\n fullAmounts.value\n );\n bptOut = formatUnits(bptOut.toString(), props.pool.onchain.decimals);\n console.log(bptOut, 'bptOut (queryJoin)');\n console.log(minBptOut.value, 'bptOut (JS) minusSlippage');\n console.log(\n minusSlippage(bptOut, props.pool.onchain.decimals),\n 'bptOut (queryJoin) minusSlippage'\n );\n }\n\n async function submit(): Promise {\n if (!data.investForm.validate()) return;\n try {\n data.loading = true;\n await calcMinBptOut();\n const tx = await poolExchange.value.join(\n getProvider(),\n account.value,\n fullAmounts.value,\n minBptOut.value\n );\n console.log('Receipt', tx);\n\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: 'invest',\n summary: t('transactionSummary.investInPool', [\n total.value,\n getPoolWeights(props.pool)\n ]),\n details: {\n total,\n pool: props.pool\n }\n });\n\n txListener(tx, {\n onTxConfirmed: async (tx: TransactionResponse) => {\n emit('success', tx);\n data.amounts = [];\n data.loading = false;\n setPropMax();\n resetSlider();\n },\n onTxFailed: () => {\n data.loading = false;\n }\n });\n } catch (error) {\n console.error(error);\n data.loading = false;\n }\n }\n\n watch(tokens, newTokens => {\n poolCalculator.setAllTokens(newTokens);\n });\n\n watch(\n () => props.pool.onchain.tokens,\n (newTokens, oldTokens) => {\n poolCalculator.setPool(props.pool);\n const tokensChanged = !isEqual(newTokens, oldTokens);\n if (tokensChanged) {\n setPropMax();\n if (isProportional.value) setPropAmountsFor(data.range);\n }\n }\n );\n\n watch(balances, (newBalances, oldBalances) => {\n const balancesChanged = !isEqual(newBalances, oldBalances);\n if (balancesChanged) {\n setPropMax();\n if (isProportional.value) setPropAmountsFor(data.range);\n }\n });\n\n watch(\n () => data.investType,\n newType => {\n if (newType === FormTypes.proportional) {\n setPropMax();\n resetSlider();\n }\n }\n );\n\n watch(\n () => data.range,\n newVal => {\n setPropAmountsFor(newVal);\n }\n );\n\n watch(isWalletReady, isAuth => {\n if (!isAuth) {\n data.amounts = [];\n data.propMax = [];\n }\n });\n\n watch(account, () => {\n if (hasZeroBalance.value) {\n data.investType = FormTypes.custom;\n } else {\n setPropMax();\n resetSlider();\n }\n });\n\n onMounted(() => {\n if (hasZeroBalance.value) {\n data.investType = FormTypes.custom;\n } else {\n setPropMax();\n resetSlider();\n }\n });\n\n return {\n // data\n ...toRefs(data),\n Goals,\n nativeAsset,\n TOKENS,\n // computed\n tokens,\n appNetworkConfig,\n hasValidInputs,\n hasAmounts,\n approving,\n requireApproval,\n requiredAllowances,\n tokenWeights,\n tokenBalance,\n amountRules,\n total,\n isWalletReady,\n toggleWalletSelectModal,\n formatBalance,\n isProportional,\n propPercentage,\n priceImpact,\n priceImpactClasses,\n amountUSD,\n formTypes,\n isRequired,\n hasZeroBalance,\n isWethPool,\n isWstETHPool,\n isStableLikePool,\n // methods\n submit,\n approveAllowances,\n fNum,\n trackGoal,\n symbolFor,\n tokenDecimals\n };\n }\n});\n","import { render } from \"./InvestForm.vue?vue&type=template&id=98f6d722&ts=true\"\nimport script from \"./InvestForm.vue?vue&type=script&lang=ts\"\nexport * from \"./InvestForm.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport {\n defineComponent,\n computed,\n watch,\n onMounted,\n reactive,\n toRefs,\n ref,\n PropType,\n toRef\n} from 'vue';\nimport { FormRef } from '@/types';\nimport {\n isPositive,\n isLessThanOrEqualTo,\n isRequired\n} from '@/lib/utils/validations';\nimport { useI18n } from 'vue-i18n';\nimport isEqual from 'lodash/isEqual';\n\nimport useNumbers from '@/composables/useNumbers';\nimport useSlippage from '@/composables/useSlippage';\n\nimport PoolExchange from '@/services/pool/exchange';\nimport PoolCalculator from '@/services/pool/calculator/calculator.sevice';\nimport { getPoolWeights } from '@/services/pool/pool.helper';\nimport { bnum } from '@/lib/utils';\nimport { formatUnits } from '@ethersproject/units';\nimport { TransactionResponse } from '@ethersproject/abstract-provider';\nimport FormTypeToggle from './shared/FormTypeToggle.vue';\nimport { FullPool } from '@/services/balancer/subgraph/types';\nimport useFathom from '@/composables/useFathom';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport useEthers from '@/composables/useEthers';\nimport useTransactions from '@/composables/useTransactions';\nimport { usePool } from '@/composables/usePool';\nimport BalAlert from '@/components/_global/BalAlert/BalAlert.vue';\n\nexport enum FormTypes {\n proportional = 'proportional',\n single = 'single'\n}\n\nexport default defineComponent({\n name: 'WithdrawalForm',\n\n components: {\n FormTypeToggle,\n BalAlert\n },\n\n emits: ['success'],\n\n props: {\n pool: { type: Object as PropType, required: true },\n missingPrices: { type: Boolean, default: false },\n hasStakedBpt: { type: Boolean }\n },\n\n setup(props: { pool: FullPool }, { emit }) {\n const data = reactive({\n withdrawForm: {} as FormRef,\n loading: false,\n amounts: [] as string[],\n propMax: [] as string[],\n bptIn: '',\n withdrawType: FormTypes.proportional as FormTypes,\n singleAsset: 0,\n range: 1000,\n highPiAccepted: false\n });\n\n // COMPOSABLES\n const {\n isWalletReady,\n toggleWalletSelectModal,\n getProvider,\n account,\n appNetworkConfig\n } = useWeb3();\n const { fNum, toFiat } = useNumbers();\n const { minusSlippage, addSlippage } = useSlippage();\n const { t } = useI18n();\n const { tokens, balances, balanceFor } = useTokens();\n const { trackGoal, Goals } = useFathom();\n const { txListener } = useEthers();\n const { addTransaction } = useTransactions();\n const { isStableLikePool } = usePool(toRef(props, 'pool'));\n\n // SERVICES\n const poolExchange = computed(\n () => new PoolExchange(props.pool, appNetworkConfig.key, tokens.value)\n );\n\n const poolCalculator = new PoolCalculator(\n props.pool,\n tokens.value,\n balances,\n 'exit'\n );\n\n // COMPUTED\n const tokenWeights = computed(() =>\n Object.values(props.pool.onchain.tokens).map(t => t.weight)\n );\n\n const fullAmounts = computed(() => {\n return props.pool.tokenAddresses.map((_, i) => {\n return data.amounts[i] || '0';\n });\n });\n\n const singleAssetMaxes = computed(() => {\n return props.pool.tokenAddresses.map((_, tokenIndex) => {\n return formatUnits(\n poolCalculator\n .exactBPTInForTokenOut(bptBalance.value.toString(), tokenIndex)\n .toString(),\n tokenDecimals(tokenIndex)\n );\n });\n });\n\n const propMaxUSD = computed(() => {\n const total = props.pool.tokenAddresses\n .map((token, i) => toFiat(Number(data.propMax[i]), token))\n .reduce((a, b) => a + b, 0);\n\n return fNum(total, 'usd');\n });\n\n const singleMaxUSD = computed(() => {\n const maxes = props.pool.tokenAddresses.map((token, i) =>\n toFiat(singleAssetMaxes.value[i], token)\n );\n\n return fNum(Math.max(...maxes), 'usd');\n });\n\n const hasAmounts = computed(() => {\n const amountSum = fullAmounts.value\n .map(amount => parseFloat(amount))\n .reduce((a, b) => a + b, 0);\n\n return amountSum > 0;\n });\n\n const bptBalance = computed(() => {\n return balanceFor(props.pool.address);\n });\n\n function formatPropBalance(index) {\n return fNum(data.propMax[index] || '0', 'token');\n }\n\n function singleAssetMaxLabel(index) {\n return fNum(singleAssetMaxes.value[index] || '0', 'token');\n }\n\n function amountUSD(index) {\n const amount = fullAmounts.value[index] || '0';\n return toFiat(amount, props.pool.tokenAddresses[index]);\n }\n\n const total = computed(() => {\n const total = props.pool.tokenAddresses\n .map((_, i) => amountUSD(i))\n .reduce((a, b) => a + b, 0);\n\n if (total < 0) return fNum(0, 'usd');\n return fNum(total, 'usd');\n });\n\n const propPercentage = computed(() => {\n const maxAmount = Number(bptBalance.value);\n const currentAmount = Number(data.bptIn);\n if (!currentAmount) return 0;\n if (maxAmount === 0) return 0;\n return Math.ceil((currentAmount / maxAmount) * 100);\n });\n\n const isProportional = computed(() => {\n return data.withdrawType === FormTypes.proportional;\n });\n\n const isSingleAsset = computed(() => {\n return data.withdrawType === FormTypes.single;\n });\n\n const singleAssetMaxed = computed(() => {\n return (\n singleAssetMaxes.value[data.singleAsset] ===\n fullAmounts.value[data.singleAsset]\n );\n });\n\n const exitTokenIndex = computed(() => {\n if (isSingleAsset.value && singleAssetMaxed.value) {\n return data.singleAsset;\n }\n return null;\n });\n\n const exactOut = computed(() => {\n return isSingleAsset.value && !singleAssetMaxed.value;\n });\n\n const inputAmountExceedsPoolBalance = computed(() => {\n if (!hasAmounts.value || isProportional.value) return false;\n\n return poolCalculator.inputAmountExceedsPoolBalance(fullAmounts.value);\n });\n\n const priceImpact = computed(() => {\n if (\n !hasAmounts.value ||\n isProportional.value ||\n inputAmountExceedsPoolBalance.value\n )\n return 0;\n\n return poolCalculator\n .priceImpact(fullAmounts.value, {\n exactOut: exactOut.value,\n tokenIndex: exitTokenIndex.value\n })\n .toNumber();\n });\n\n const priceImpactClasses = computed(() => {\n return {\n 'text-red-500 font-medium': priceImpact.value >= 0.01,\n 'text-gray-500 font-normal': priceImpact.value < 0.01\n };\n });\n\n const bptIn = computed(() => {\n if (isProportional.value) return data.bptIn;\n if (!exactOut.value) return bptBalance.value; // Single asset max withdrawal\n\n // Else single asset exact amount case\n let bptIn = poolCalculator\n .bptInForExactTokenOut(data.amounts[data.singleAsset], data.singleAsset)\n .toString();\n bptIn = formatUnits(bptIn, props.pool.onchain.decimals);\n\n return addSlippage(bptIn, props.pool.onchain.decimals);\n });\n\n const amountsOut = computed(() => {\n return fullAmounts.value.map((amount, i) => {\n if (amount === '0' || exactOut.value) return amount;\n return minusSlippage(amount, tokenDecimals(i));\n });\n });\n\n const formTypes = ref([\n {\n label: t('noPriceImpact'),\n max: propMaxUSD,\n value: FormTypes.proportional\n },\n {\n label: t('singleToken'),\n max: singleMaxUSD,\n value: FormTypes.single\n }\n ]);\n\n // METHODS\n function tokenDecimals(index) {\n return tokens.value[props.pool.tokenAddresses[index]].decimals;\n }\n\n function amountRules(index) {\n if (!isWalletReady.value || isProportional.value) return [isPositive()];\n return [\n isPositive(),\n isLessThanOrEqualTo(\n Number(singleAssetMaxes.value[index]),\n t('exceedsBalance')\n )\n ];\n }\n\n function setPropMax(ignoreBptCheck = false) {\n if (\n !isWalletReady.value ||\n (!ignoreBptCheck && Number(bptBalance.value) === 0)\n )\n return;\n const { send, receive } = poolCalculator.propAmountsGiven(\n bptBalance.value,\n 0,\n 'send'\n );\n data.bptIn = send[0];\n data.propMax = [...receive];\n }\n\n function resetSlider() {\n data.amounts = [...data.propMax];\n data.range = 1000;\n }\n\n function setPropAmountsFor(range) {\n const fractionBasisPoints = (range / 1000) * 10000;\n const bpt = bnum(bptBalance.value)\n .times(fractionBasisPoints)\n .div(10000)\n .toFixed(props.pool.onchain.decimals);\n\n const { send, receive } = poolCalculator.propAmountsGiven(bpt, 0, 'send');\n data.bptIn = send[0];\n data.amounts = receive;\n }\n\n function setSingleAsset(index) {\n if (!isSingleAsset.value) return;\n data.singleAsset = index;\n\n props.pool.tokenAddresses.forEach((_, i) => {\n if (i === index) {\n data.amounts[i] = singleAssetMaxes.value[index];\n } else {\n data.amounts[i] = '0';\n }\n });\n }\n\n // Legacy function for sense check against JS calculation of BPT in\n // Left here so numbers can be debugged in conosle\n // Talk to Fernando to see if still needed\n async function calcBptIn() {\n const { bptIn: queryBptIn } = await poolExchange.value.queryExit(\n getProvider(),\n account.value,\n fullAmounts.value,\n bptBalance.value,\n exitTokenIndex.value,\n exactOut.value\n );\n console.log(\n 'bptIn (queryExit)',\n formatUnits(queryBptIn.toString(), props.pool.onchain.decimals)\n );\n console.log('bptIn (JS)', bptIn.value);\n }\n\n async function submit(): Promise {\n if (!data.withdrawForm.validate()) return;\n try {\n data.loading = true;\n await calcBptIn();\n const tx = await poolExchange.value.exit(\n getProvider(),\n account.value,\n amountsOut.value,\n `${bptIn.value}`,\n exitTokenIndex.value,\n exactOut.value\n );\n console.log('Receipt', tx);\n\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: 'withdraw',\n summary: t('transactionSummary.withdrawFromPool', [\n total.value,\n getPoolWeights(props.pool)\n ]),\n details: {\n total,\n pool: props.pool\n }\n });\n\n txListener(tx, {\n onTxConfirmed: async (tx: TransactionResponse) => {\n emit('success', tx);\n data.amounts = [];\n data.loading = false;\n setPropMax(true);\n },\n onTxFailed: () => {\n data.loading = false;\n }\n });\n } catch (error) {\n console.error(error);\n data.loading = false;\n }\n }\n\n watch(\n () => props.pool.onchain.tokens,\n (newTokens, oldTokens) => {\n poolCalculator.setPool(props.pool);\n const tokensChanged = !isEqual(newTokens, oldTokens);\n if (tokensChanged) {\n setPropMax();\n if (isProportional.value) setPropAmountsFor(data.range);\n }\n }\n );\n\n watch(\n () => data.withdrawType,\n async newType => {\n if (newType === FormTypes.proportional) {\n setPropMax();\n resetSlider();\n } else if (newType === FormTypes.single) {\n data.amounts = props.pool.tokenAddresses.map(() => '0');\n setSingleAsset(0);\n }\n }\n );\n\n watch(bptBalance, () => {\n setPropMax();\n if (isProportional.value) setPropAmountsFor(data.range);\n });\n\n watch(\n () => data.range,\n newVal => {\n setPropAmountsFor(newVal);\n }\n );\n\n watch(tokens, newTokens => {\n poolCalculator.setAllTokens(newTokens);\n });\n\n watch(isWalletReady, isReady => {\n if (!isReady) {\n data.amounts = [];\n data.propMax = [];\n }\n });\n\n watch(account, () => {\n setPropMax();\n resetSlider();\n });\n\n onMounted(async () => {\n if (bptBalance.value) {\n setPropMax();\n resetSlider();\n }\n });\n\n return {\n ...toRefs(data),\n submit,\n tokens,\n hasAmounts,\n tokenWeights,\n fNum,\n isWalletReady,\n toggleWalletSelectModal,\n total,\n isProportional,\n isSingleAsset,\n setSingleAsset,\n propPercentage,\n priceImpact,\n priceImpactClasses,\n amountRules,\n formTypes,\n isStableLikePool,\n formatPropBalance,\n amountUSD,\n singleAssetMaxLabel,\n singleAssetMaxes,\n isRequired,\n trackGoal,\n Goals,\n tokenDecimals,\n inputAmountExceedsPoolBalance\n };\n }\n});\n","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, createTextVNode as _createTextVNode, withCtx as _withCtx, createSlots as _createSlots } from \"vue\"\n\nconst _hoisted_1 = { class: \"p-4 border-t dark:border-gray-900\" }\nconst _hoisted_2 = { class: \"border dark:border-gray-900 rounded-lg shadow-inner p-2\" }\nconst _hoisted_3 = { class: \"flex items-center justify-between mb-3 text-sm text-gray-600\" }\nconst _hoisted_4 = { class: \"flex items-end\" }\nconst _hoisted_5 = { class: \"mr-2 text-lg font-medium w-1/2 leading-none break-words\" }\nconst _hoisted_6 = { class: \"px-4 py-3 bg-gray-50 dark:bg-gray-850 border-t dark:border-gray-900 border-b\" }\nconst _hoisted_7 = { class: \"flex items-center justify-between\" }\nconst _hoisted_8 = { class: \"w-1/2 flex items-center\" }\nconst _hoisted_9 = { class: \"w-3/4 flex flex-col leading-none\" }\nconst _hoisted_10 = { class: \"break-words\" }\nconst _hoisted_11 = { class: \"text-xs text-gray-400 break-words\" }\nconst _hoisted_12 = { class: \"w-1/2 flex flex-col leading-none text-right pl-2\" }\nconst _hoisted_13 = { class: \"break-words\" }\nconst _hoisted_14 = {\n key: 0,\n class: \"text-xs text-gray-400\"\n}\nconst _hoisted_15 = {\n key: 1,\n class: \"px-4 pt-6 border-t border-b dark:border-gray-900\"\n}\nconst _hoisted_16 = { class: \"flex items-center h-full w-24\" }\nconst _hoisted_17 = { class: \"flex flex-col ml-3\" }\nconst _hoisted_18 = { class: \"font-medium text-sm leading-none w-14 truncate\" }\nconst _hoisted_19 = { class: \"p-2\" }\nconst _hoisted_20 = { class: \"p-4\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_FormTypeToggle = _resolveComponent(\"FormTypeToggle\")\n const _component_BalRangeInput = _resolveComponent(\"BalRangeInput\")\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalTextInput = _resolveComponent(\"BalTextInput\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n const _component_BalCheckbox = _resolveComponent(\"BalCheckbox\")\n const _component_BalAlert = _resolveComponent(\"BalAlert\")\n const _component_BalForm = _resolveComponent(\"BalForm\")\n\n return (_openBlock(), _createBlock(_component_BalForm, {\n ref: \"withdrawForm\",\n onOnSubmit: _ctx.submit\n }, {\n default: _withCtx(() => [\n _createVNode(_component_FormTypeToggle, {\n modelValue: _ctx.withdrawType,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.withdrawType = $event)),\n \"form-types\": _ctx.formTypes,\n loading: _ctx.loading\n }, null, 8, [\"modelValue\", \"form-types\", \"loading\"]),\n (_ctx.isProportional)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", _hoisted_3, [\n _createVNode(\"span\", {\n textContent: _toDisplayString(_ctx.$t('amountToWithdraw'))\n }, null, 8, [\"textContent\"]),\n _createVNode(\"span\", null, _toDisplayString(_ctx.propPercentage) + \"%\", 1)\n ]),\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.missingPrices ? '-' : _ctx.total), 1),\n _createVNode(_component_BalRangeInput, {\n class: \"w-1/2\",\n modelValue: _ctx.range,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => (_ctx.range = $event)),\n max: 1000,\n interval: 1,\n min: 0,\n tooltip: \"none\",\n disabled: _ctx.loading\n }, null, 8, [\"modelValue\", \"disabled\"])\n ])\n ])\n ]),\n _createVNode(\"div\", _hoisted_6, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.pool.tokenAddresses, (token, i) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: token,\n class: \"py-3 last:mb-0\"\n }, [\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(\"div\", _hoisted_8, [\n _createVNode(_component_BalAsset, {\n address: token,\n class: \"mr-2\"\n }, null, 8, [\"address\"]),\n _createVNode(\"div\", _hoisted_9, [\n _createVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.fNum(_ctx.amounts[i], 'token')) + \" \" + _toDisplayString(_ctx.pool.onchain.tokens[token].symbol), 1),\n _createVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('balance')) + \": \" + _toDisplayString(_ctx.formatPropBalance(i)), 1)\n ])\n ]),\n _createVNode(\"div\", _hoisted_12, [\n _createVNode(\"span\", _hoisted_13, _toDisplayString(_ctx.amountUSD(i) === 0 ? '-' : _ctx.fNum(_ctx.amountUSD(i), 'usd')), 1),\n (!_ctx.isStableLikePool)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_14, _toDisplayString(_ctx.fNum(_ctx.tokenWeights[i], 'percent_lg')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ]))\n }), 128))\n ])\n ], 64))\n : (_openBlock(), _createBlock(\"div\", _hoisted_15, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.pool.tokenAddresses, (token, i) => {\n return (_openBlock(), _createBlock(_component_BalTextInput, {\n key: i,\n name: token,\n modelValue: _ctx.amounts[i],\n \"onUpdate:modelValue\": ($event: any) => (_ctx.amounts[i] = $event),\n rules: _ctx.amountRules(i),\n type: \"number\",\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"decimal-limit\": _ctx.tokenDecimals(i),\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"faded-out\": _ctx.isSingleAsset && _ctx.singleAsset !== i,\n onClick: ($event: any) => (_ctx.setSingleAsset(i))\n }, _createSlots({\n prepend: _withCtx(() => [\n _createVNode(\"div\", _hoisted_16, [\n _createVNode(_component_BalAsset, { address: token }, null, 8, [\"address\"]),\n _createVNode(\"div\", _hoisted_17, [\n _createVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.pool.onchain.tokens[token].symbol), 1)\n ])\n ])\n ]),\n append: _withCtx(() => [\n _createVNode(\"div\", _hoisted_19, [\n _createVNode(_component_BalBtn, {\n size: \"xs\",\n color: \"white\",\n onClick: _withModifiers(($event: any) => (_ctx.amounts[i] = _ctx.singleAssetMaxes[i]), [\"prevent\"])\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('max')), 1)\n ]),\n _: 2\n }, 1032, [\"onClick\"])\n ])\n ]),\n _: 2\n }, [\n (_ctx.isSingleAsset)\n ? {\n name: \"info\",\n fn: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"cursor-pointer\",\n onClick: _withModifiers(($event: any) => (_ctx.amounts[i] = _ctx.singleAssetMaxes[i]), [\"prevent\"])\n }, _toDisplayString(_ctx.$t('singleTokenMax')) + \": \" + _toDisplayString(_ctx.singleAssetMaxLabel(i)), 9, [\"onClick\"])\n ])\n }\n : undefined\n ]), 1032, [\"name\", \"modelValue\", \"onUpdate:modelValue\", \"rules\", \"decimal-limit\", \"faded-out\", \"onClick\"]))\n }), 128))\n ])),\n _createVNode(\"div\", _hoisted_20, [\n (!_ctx.isWalletReady)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 0,\n label: _ctx.$t('connectWallet'),\n block: \"\",\n onClick: _withModifiers(_ctx.toggleWalletSelectModal, [\"prevent\"])\n }, null, 8, [\"label\", \"onClick\"]))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n (_ctx.inputAmountExceedsPoolBalance)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n class: \"flex items-center text-sm mb-4 text-red-500 font-medium\",\n onClick: _cache[3] || (_cache[3] = _withModifiers(() => {}, [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('inputAmountExceedsPoolBalance')), 1))\n : (_openBlock(), _createBlock(\"div\", {\n key: 1,\n class: ['flex items-center text-sm mb-4', _ctx.priceImpactClasses],\n onClick: _cache[4] || (_cache[4] = _withModifiers(() => {}, [\"prevent\"]))\n }, [\n _createVNode(\"span\", null, _toDisplayString(_ctx.$t('priceImpact')) + \": \" + _toDisplayString(_ctx.fNum(_ctx.priceImpact, 'percent')), 1),\n _createVNode(_component_BalTooltip, null, {\n activator: _withCtx(() => [\n (_ctx.priceImpact >= 0.01)\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 0,\n name: \"alert-triangle\",\n size: \"xs\",\n class: \"ml-1\"\n }))\n : (_openBlock(), _createBlock(_component_BalIcon, {\n key: 1,\n name: \"info\",\n size: \"xs\",\n class: \"text-gray-400 -mb-px ml-2\"\n }))\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", {\n innerHTML: _ctx.$t('withdrawWarning'),\n class: \"w-52\"\n }, null, 8, [\"innerHTML\"])\n ]),\n _: 1\n })\n ], 2)),\n (_ctx.priceImpact >= 0.01)\n ? (_openBlock(), _createBlock(_component_BalCheckbox, {\n key: 2,\n modelValue: _ctx.highPiAccepted,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = ($event: any) => (_ctx.highPiAccepted = $event)),\n rules: [_ctx.isRequired(_ctx.$t('priceImpactCheckbox'))],\n name: \"highPiAccepted\",\n class: \"text-gray-500 mb-8\",\n size: \"sm\",\n label: _ctx.$t('priceImpactAccept')\n }, null, 8, [\"modelValue\", \"rules\", \"label\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_BalBtn, {\n type: \"submit\",\n \"loading-label\": _ctx.$t('confirming'),\n color: \"gradient\",\n disabled: !_ctx.hasAmounts || _ctx.inputAmountExceedsPoolBalance,\n loading: _ctx.loading,\n block: \"\",\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.trackGoal(_ctx.Goals.ClickWithdraw)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('withdraw')) + \" \" + _toDisplayString(_ctx.missingPrices || _ctx.total.length > 15 ? '' : _ctx.total), 1)\n ]),\n _: 1\n }, 8, [\"loading-label\", \"disabled\", \"loading\"]),\n (_ctx.hasStakedBpt)\n ? (_openBlock(), _createBlock(_component_BalAlert, {\n key: 3,\n title: \"You have BPT staked in the farm\",\n description: \"To withdraw your funds, you need to first unstake your BPT from the farm.\",\n type: \"warning\",\n size: \"sm\",\n class: \"mt-4\"\n }))\n : _createCommentVNode(\"\", true)\n ], 64))\n ])\n ]),\n _: 1\n }, 8, [\"onOnSubmit\"]))\n}","import { render } from \"./WithdrawForm.vue?vue&type=template&id=cf787154&ts=true\"\nimport script from \"./WithdrawForm.vue?vue&type=script&lang=ts\"\nexport * from \"./WithdrawForm.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"absolute top-0 left-0 w-full h-full bg-white dark:bg-gray-850 rounded-lg z-10 text-center\" }\nconst _hoisted_2 = { class: \"flex flex-col justify-between items-center h-full p-4\" }\nconst _hoisted_3 = { class: \"flex flex-col items-center\" }\nconst _hoisted_4 = { class: \"w-20 h-20 rounded-full flex items-center justify-center bg-green-100 dark:bg-green-500 text-green-500 dark:text-gray-850 mb-8\" }\nconst _hoisted_5 = { class: \"grid grid-cols-2 gap-4 mt-4 w-full\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"h3\", {\n textContent: _toDisplayString(_ctx.title)\n }, null, 8, [\"textContent\"]),\n _createVNode(\"div\", _hoisted_3, [\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(_component_BalIcon, {\n name: \"check-circle\",\n size: \"xl\"\n })\n ]),\n _createVNode(\"p\", {\n innerHTML: _ctx.description,\n class: \"text-gray-500\"\n }, null, 8, [\"innerHTML\"])\n ]),\n _createVNode(\"div\", _hoisted_5, [\n _createVNode(_component_BalBtn, {\n tag: \"a\",\n href: _ctx.explorerLink,\n target: \"_blank\",\n rel: \"noreferrer\",\n flat: \"\",\n color: \"gray\"\n }, {\n default: _withCtx(() => [\n _createVNode(\"span\", {\n textContent: _toDisplayString(_ctx.$t('receipt'))\n }, null, 8, [\"textContent\"]),\n _createVNode(_component_BalIcon, {\n name: \"arrow-up-right\",\n size: \"sm\",\n class: \"ml-1\"\n })\n ]),\n _: 1\n }, 8, [\"href\"]),\n _createVNode(_component_BalBtn, {\n label: _ctx.closeLabel,\n color: \"gray\",\n flat: \"\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('close')))\n }, null, 8, [\"label\"])\n ])\n ])\n ]))\n}","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'SuccessOverlay',\n\n emits: ['close'],\n\n props: {\n title: { type: String, required: true },\n description: { type: String, required: true },\n closeLabel: { type: String, required: true },\n explorerLink: { type: String, required: true }\n }\n});\n","import { render } from \"./SuccessOverlay.vue?vue&type=template&id=013d67da&ts=true\"\nimport script from \"./SuccessOverlay.vue?vue&type=script&lang=ts\"\nexport * from \"./SuccessOverlay.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, vModelText as _vModelText, withDirectives as _withDirectives } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-baseline\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"mt-6\"\n}\nconst _hoisted_3 = { class: \"flex items-baseline\" }\nconst _hoisted_4 = { class: \"flex mt-1\" }\nconst _hoisted_5 = {\n key: 1,\n class: \"mt-6\"\n}\nconst _hoisted_6 = { class: \"flex items-baseline\" }\nconst _hoisted_7 = { class: \"flex mt-1\" }\nconst _hoisted_8 = { class: \"flex items-center px-1 border rounded-lg shadow-inner dark:border-gray-700\" }\nconst _hoisted_9 = /*#__PURE__*/_createVNode(\"div\", { class: \"px-2\" }, \" minutes \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n const _component_AppSlippageForm = _resolveComponent(\"AppSlippageForm\")\n const _component_BalBtnGroup = _resolveComponent(\"BalBtnGroup\")\n const _component_BalPopover = _resolveComponent(\"BalPopover\")\n\n return (_openBlock(), _createBlock(_component_BalPopover, null, {\n activator: _withCtx(() => [\n _createVNode(_component_BalBtn, {\n circle: \"\",\n color: \"white\",\n size: \"sm\",\n class: \"mb-2 text-gray-500 icon-spin-anim\",\n onClick: _ctx.onActivatorClick\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"settings\",\n size: \"sm\"\n })\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"span\", {\n textContent: _toDisplayString(_ctx.$t('slippageTolerance')),\n class: \"font-medium mb-2\"\n }, null, 8, [\"textContent\"]),\n _createVNode(_component_BalTooltip, null, {\n activator: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"info\",\n size: \"xs\",\n class: \"ml-1 text-gray-400 -mb-px\"\n })\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", {\n innerHTML: _ctx.$t('marketConditionsWarning'),\n class: \"w-52\"\n }, null, 8, [\"innerHTML\"])\n ]),\n _: 1\n })\n ]),\n _createVNode(_component_AppSlippageForm, { class: \"mt-1\" })\n ]),\n (!_ctx.hideLiquidity)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_2, [\n _createVNode(\"div\", _hoisted_3, [\n _createVNode(\"span\", {\n textContent: _toDisplayString(_ctx.$t('tradeLiquidity')),\n class: \"font-medium mb-2\"\n }, null, 8, [\"textContent\"]),\n _createVNode(_component_BalTooltip, null, {\n activator: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"info\",\n size: \"xs\",\n class: \"ml-1 text-gray-400 -mb-px\"\n })\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", {\n textContent: _toDisplayString(_ctx.$t('whichPools')),\n class: \"w-52\"\n }, null, 8, [\"textContent\"])\n ]),\n _: 1\n })\n ]),\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(_component_BalBtnGroup, {\n options: _ctx.tradeLiquidityOptions,\n modelValue: _ctx.appTradeLiquidity,\n \"onUpdate:modelValue\": [\n _cache[1] || (_cache[1] = ($event: any) => (_ctx.appTradeLiquidity = $event)),\n _ctx.setTradeLiquidity\n ]\n }, null, 8, [\"options\", \"modelValue\", \"onUpdate:modelValue\"])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.appTradeInterface === _ctx.TradeInterface.GNOSIS)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_5, [\n _createVNode(\"div\", _hoisted_6, [\n _createVNode(\"span\", {\n textContent: _toDisplayString(_ctx.$t('transactionDeadline')),\n class: \"font-medium mb-2\"\n }, null, 8, [\"textContent\"]),\n _createVNode(_component_BalTooltip, null, {\n activator: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"info\",\n size: \"xs\",\n class: \"ml-1 text-gray-400 -mb-px\"\n })\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", {\n innerHTML: _ctx.$t('transactionDeadlineTooltip'),\n class: \"w-52\"\n }, null, 8, [\"innerHTML\"])\n ]),\n _: 1\n })\n ]),\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(\"div\", _hoisted_8, [\n _withDirectives(_createVNode(\"input\", {\n class: \"w-8 text-right bg-transparent\",\n \"onUpdate:modelValue\": [\n _cache[2] || (_cache[2] = ($event: any) => (_ctx.appTransactionDeadline = $event)),\n _cache[3] || (_cache[3] = \n//@ts-ignore\n(...args) => (_ctx.setTransactionDeadline && _ctx.setTransactionDeadline(...args)))\n ],\n placeholder: \"20\",\n type: \"number\",\n step: \"1\",\n min: \"0\"\n }, null, 512), [\n [_vModelText, _ctx.appTransactionDeadline]\n ])\n ]),\n _hoisted_9\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }))\n}","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, createVNode as _createVNode, vModelText as _vModelText, withDirectives as _withDirectives, openBlock as _openBlock, createBlock as _createBlock, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-d36e735e\")\n\n_pushScopeId(\"data-v-d36e735e\")\nconst _hoisted_1 = { class: \"flex\" }\nconst _hoisted_2 = /*#__PURE__*/_createVNode(\"div\", { class: \"px-2 text-gray-400\" }, \" % \", -1)\n_popScopeId()\n\nimport { computed, watch, reactive } from 'vue';\nimport useNumbers from '@/composables/useNumbers';\nimport useUserSettings from '@/composables/useUserSettings';\nimport { bnum } from '@/lib/utils';\n\nexport default _defineComponent({\n expose: [],\n setup(__props) {\n\nconst FIXED_OPTIONS = ['0.005', '0.01', '0.02'];\n/**\n * COMPOSABLES\n */\nconst { fNum } = useNumbers();\nconst { slippage, setSlippage } = useUserSettings();\n/**\n * STATE\n */\nconst state = reactive({\n fixedSlippage: '',\n customSlippage: '',\n isCustomInput: false\n});\nconst options = FIXED_OPTIONS.map(option => {\n return {\n label: fNum(option, null, { format: '0.0%' }),\n value: option\n };\n});\n/**\n * COMPUTED\n */\nconst isFixedSlippage = computed(() => {\n return FIXED_OPTIONS.includes(slippage.value);\n});\nconst customInputClasses = computed(() => ({\n 'border border-green-500 text-green-500':\n !isFixedSlippage.value || state.isCustomInput,\n 'border dark:border-gray-700': isFixedSlippage.value && !state.isCustomInput\n}));\n/**\n * METHODS\n */\nfunction onFixedInput(val: string): void {\n state.isCustomInput = false;\n state.customSlippage = '';\n setSlippage(val);\n}\nfunction onCustomInput(val: string): void {\n state.isCustomInput = true;\n val = bnum(val)\n .div(100)\n .toString();\n setSlippage(val);\n}\n/**\n * WATCHERS\n */\nwatch(\n slippage,\n newSlippage => {\n if (isFixedSlippage.value && !state.isCustomInput) {\n state.fixedSlippage = newSlippage;\n state.customSlippage = '';\n } else {\n state.customSlippage = bnum(newSlippage)\n .times(100)\n .toString();\n state.fixedSlippage = '';\n }\n },\n { immediate: true }\n);\n\nreturn (_ctx: any,_cache: any) => {\n const _component_BalBtnGroup = _resolveComponent(\"BalBtnGroup\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BalBtnGroup, {\n options: _unref(options),\n modelValue: _unref(state).fixedSlippage,\n \"onUpdate:modelValue\": [\n _cache[1] || (_cache[1] = ($event: any) => (_unref(state).fixedSlippage = $event)),\n onFixedInput\n ]\n }, null, 8, [\"options\", \"modelValue\"]),\n _createVNode(\"div\", {\n class: ['custom-input', _unref(customInputClasses)]\n }, [\n _withDirectives(_createVNode(\"input\", {\n class: \"w-12 text-right bg-transparent\",\n \"onUpdate:modelValue\": [\n _cache[2] || (_cache[2] = ($event: any) => (_unref(state).customSlippage = $event)),\n onCustomInput\n ],\n placeholder: \"0.1\",\n type: \"number\",\n step: \"any\",\n min: \"0\"\n }, null, 512), [\n [_vModelText, _unref(state).customSlippage]\n ]),\n _hoisted_2\n ], 2)\n ]))\n}\n}\n\n})","import script from \"./AppSlippageForm.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppSlippageForm.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AppSlippageForm.vue?vue&type=style&index=0&id=d36e735e&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-d36e735e\"]])\n\nexport default __exports__","import { ref } from 'vue';\nimport { lsGet, lsSet } from '@/lib/utils';\nimport LS_KEYS from '@/constants/local-storage.keys';\n\nexport enum EthereumTxType {\n LEGACY = 'Legacy',\n EIP1559 = 'EIP1559'\n}\n\nconst lsEthereumTxType = lsGet(\n LS_KEYS.App.EthereumTxType,\n EthereumTxType.EIP1559\n);\n\n// STATE\nexport const ethereumTxType = ref(lsEthereumTxType);\n\n// MUTATIONS\nfunction setEthereumTxType(txType: EthereumTxType): void {\n ethereumTxType.value = txType;\n lsSet(LS_KEYS.App.EthereumTxType, txType);\n}\n\n// INIT\nsetEthereumTxType(ethereumTxType.value);\n\nexport default function useEthereumTxType() {\n return {\n ethereumTxType,\n setEthereumTxType\n };\n}\n","\nimport {\n defineComponent,\n reactive,\n computed,\n toRefs,\n PropType,\n Ref\n} from 'vue';\nimport { useStore } from 'vuex';\nimport useNumbers from '@/composables/useNumbers';\nimport AppSlippageForm from '@/components/forms/AppSlippageForm.vue';\nimport useFathom from '@/composables/useFathom';\n\nimport { TradeInterface } from '@/store/modules/app';\nimport {\n tradeLiquidityOptions,\n ethereumTxTypeOptions\n} from '@/constants/options';\nimport useWeb3 from '@/services/web3/useWeb3';\n\nimport useEthereumTxType from '@/composables/useEthereumTxType';\n\nexport enum TradeSettingsContext {\n trade,\n invest\n}\n\nexport default defineComponent({\n name: 'TradeSettingsPopover',\n\n components: {\n AppSlippageForm\n },\n\n props: {\n context: {\n type: [String, Number] as PropType,\n required: true\n }\n },\n\n setup(props) {\n // DATA\n const { context }: { context: Ref } = toRefs(props);\n\n // COMPOSABLES\n const store = useStore();\n const { fNum } = useNumbers();\n const { explorerLinks, isV1Supported, isPolygon } = useWeb3();\n const { trackGoal, Goals } = useFathom();\n const { ethereumTxType, setEthereumTxType } = useEthereumTxType();\n\n // DATA\n const data = reactive({\n tradeLiquidityOptions\n });\n\n // COMPUTED\n const appTradeLiquidity = computed(() => store.state.app.tradeLiquidity);\n const appTradeInterface = computed(\n () => store.state.app.tradeInterface\n );\n const appTransactionDeadline = computed(\n () => store.state.app.transactionDeadline\n );\n const hideLiquidity = computed(\n () => !isV1Supported || context.value === TradeSettingsContext.invest\n );\n\n // METHODS\n const setTradeLiquidity = tradeLiquidity =>\n store.commit('app/setTradeLiquidity', tradeLiquidity);\n const setTransactionDeadline = transactionDeadline =>\n store.commit('app/setTransactionDeadline', transactionDeadline);\n\n function onActivatorClick(): void {\n if (context.value === TradeSettingsContext.trade) {\n trackGoal(Goals.ClickTradeSettings);\n } else if (context.value === TradeSettingsContext.invest) {\n trackGoal(Goals.ClickInvestSettings);\n }\n }\n\n return {\n // data\n ...toRefs(data),\n Goals,\n // constants,\n TradeInterface,\n // computed\n appTradeLiquidity,\n appTradeInterface,\n appTransactionDeadline,\n hideLiquidity,\n // methods\n setTradeLiquidity,\n setTransactionDeadline,\n fNum,\n explorer: explorerLinks,\n onActivatorClick,\n isPolygon,\n ethereumTxType,\n setEthereumTxType,\n ethereumTxTypeOptions\n };\n }\n});\n","import { EthereumTxType } from '@/composables/useEthereumTxType';\nimport { LiquiditySelection } from '@/lib/utils/balancer/helpers/sor/sorManager';\nimport { TradeInterface } from '@/store/modules/app';\n\nexport const tradeLiquidityOptions = Object.values(LiquiditySelection)\n .filter(v => typeof v === 'string')\n .map(option => ({\n label: option,\n value: option\n }));\n\nexport const tradeInterfaceOptions = Object.values(TradeInterface)\n .filter(v => typeof v === 'string')\n .map(option => ({\n label: option,\n value: option\n }));\n\nexport const ethereumTxTypeOptions = Object.values(EthereumTxType)\n .filter(v => typeof v === 'string')\n .map(option => ({\n label: option,\n value: option\n }));\n","import { render } from \"./TradeSettingsPopover.vue?vue&type=template&id=43a7ba0f&ts=true\"\nimport script from \"./TradeSettingsPopover.vue?vue&type=script&lang=ts\"\nexport * from \"./TradeSettingsPopover.vue?vue&type=script&lang=ts\"\n\nimport \"./TradeSettingsPopover.vue?vue&type=style&index=0&id=43a7ba0f&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, withModifiers as _withModifiers, createVNode as _createVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"px-4 pt-8\" }\nconst _hoisted_2 = { class: \"p-2\" }\nconst _hoisted_3 = { class: \"p-4\" }\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\" Withdraw BPT \")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalTextInput = _resolveComponent(\"BalTextInput\")\n const _component_BalForm = _resolveComponent(\"BalForm\")\n\n return (_openBlock(), _createBlock(_component_BalForm, {\n ref: \"withdrawForm\",\n onOnSubmit: _ctx.submit\n }, {\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(_component_BalTextInput, {\n name: \"Withdraw\",\n modelValue: _ctx.amount,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => (_ctx.amount = $event)),\n isValid: _ctx.validInput,\n \"onUpdate:isValid\": _cache[4] || (_cache[4] = ($event: any) => (_ctx.validInput = $event)),\n rules: _ctx.amountRules(),\n disabled: _ctx.withdrawing,\n type: \"number\",\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"decimal-limit\": 18,\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"append-shadow\": \"\"\n }, {\n info: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"cursor-pointer\",\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.amount = _ctx.bptDeposited), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('balance')) + \": \" + _toDisplayString(_ctx.bptDeposited), 1)\n ]),\n append: _withCtx(() => [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(_component_BalBtn, {\n size: \"xs\",\n color: \"white\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (_ctx.amount = _ctx.bptDeposited), [\"prevent\"]))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('max')), 1)\n ]),\n _: 1\n })\n ])\n ]),\n _: 1\n }, 8, [\"modelValue\", \"isValid\", \"rules\", \"disabled\"])\n ]),\n _createVNode(\"div\", _hoisted_3, [\n (!_ctx.isWalletReady)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 0,\n label: _ctx.$t('connectWallet'),\n block: \"\",\n onClick: _withModifiers(_ctx.toggleWalletSelectModal, [\"prevent\"])\n }, null, 8, [\"label\", \"onClick\"]))\n : (_openBlock(), _createBlock(_component_BalBtn, {\n key: 1,\n type: \"submit\",\n \"loading-label\": _ctx.$t('confirming'),\n color: \"gradient\",\n disabled: !_ctx.validInput || _ctx.amount === '0' || _ctx.amount === '',\n loading: _ctx.withdrawing,\n block: \"\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.trackGoal(_ctx.Goals.ClickFarmWithdraw)))\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }, 8, [\"loading-label\", \"disabled\", \"loading\"]))\n ])\n ]),\n _: 1\n }, 8, [\"onOnSubmit\"]))\n}","import Service from '@/services/balancer/contracts/balancer-contracts.service';\nimport ConfigService from '@/services/config/config.service';\nimport { Multicaller } from '@/lib/utils/balancer/contract';\nimport { default as abi, default as erc20Abi } from '@/lib/abi/ERC20.json';\nimport { TransactionResponse, Web3Provider } from '@ethersproject/providers';\nimport { sendTransaction } from '@/lib/utils/balancer/web3';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { MaxUint256 } from '@ethersproject/constants';\n\nexport default class Erc20 {\n service: Service;\n\n constructor(service, private readonly configService = new ConfigService()) {\n this.service = service;\n }\n\n public async allowance(\n tokenAddress: string,\n owner: string,\n spender: string\n ): Promise {\n const multicaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n erc20Abi\n );\n\n const result = await multicaller\n .call('allowance', tokenAddress, 'allowance', [owner, spender])\n .execute();\n\n return result.allowance;\n }\n\n async approveToken(\n web3: Web3Provider,\n spender: string,\n token: string,\n amount: string = MaxUint256.toString()\n ): Promise {\n return sendTransaction(web3, token, abi, 'approve', [spender, amount]);\n }\n\n async balanceOf(tokenAddress: string, user: string): Promise {\n const multicaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n erc20Abi\n );\n\n const result = await multicaller\n .call('balanceOf', tokenAddress, 'balanceOf', [user])\n .execute();\n\n return result.balanceOf.toString();\n }\n}\n","import { Config } from '@/lib/config';\nimport { default as erc20Abi } from '@/lib/abi/ERC20.json';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { rpcProviderService as _rpcProviderService } from '@/services/rpc-provider/rpc-provider.service';\nimport { configService as _configService } from '@/services/config/config.service';\nimport Erc20 from './contracts/erc20';\n\nexport default class Erc20ContractService {\n erc20: Erc20;\n config: Config;\n provider: JsonRpcProvider;\n\n constructor(\n readonly configService = _configService,\n readonly rpcProviderService = _rpcProviderService\n ) {\n this.provider = this.rpcProviderService.jsonProvider;\n this.config = this.configService.network;\n\n // Init contracts\n this.erc20 = new Erc20(this);\n }\n\n // Combine all the ABIs and remove duplicates\n public get allABIs() {\n return Object.values(\n Object.fromEntries([...erc20Abi].map(row => [row.name, row]))\n );\n }\n}\n\nexport const erc20ContractService = new Erc20ContractService();\n","import Service from '@/services/balancer/contracts/balancer-contracts.service';\nimport ConfigService from '@/services/config/config.service';\nimport { Multicaller } from '@/lib/utils/balancer/contract';\nimport { default as MasterChefAbi } from '@/lib/abi/BeethovenxMasterChef.json';\nimport { sendTransaction } from '@/lib/utils/balancer/web3';\nimport { Web3Provider } from '@ethersproject/providers';\nimport { getAddress } from '@ethersproject/address';\nimport { scale } from '@/lib/utils';\nimport BigNumber from 'bignumber.js';\n\nexport default class MasterChef {\n service: Service;\n\n constructor(service, private readonly configService = new ConfigService()) {\n this.service = service;\n }\n\n public async getPendingBeetsForFarm(\n id: string,\n user: string\n ): Promise {\n let result = {} as Record;\n\n const masterChefMultiCaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n MasterChefAbi\n );\n masterChefMultiCaller.call('pendingBeets', this.address, 'pendingBeets', [\n id,\n getAddress(user)\n ]);\n result = await masterChefMultiCaller.execute(result);\n\n const pendingBeets = result.pendingBeets.toString();\n\n return pendingBeets\n ? scale(new BigNumber(pendingBeets), -18).toNumber()\n : 0;\n }\n\n public async withdrawAndHarvest(\n provider: Web3Provider,\n farmId: string,\n amount: string,\n to: string\n ) {\n return sendTransaction(\n provider,\n this.configService.network.addresses.masterChef || '',\n MasterChefAbi,\n 'withdrawAndHarvest',\n [farmId, amount.toString(), to]\n );\n }\n\n public async harvest(provider: Web3Provider, farmId: string, to: string) {\n return sendTransaction(\n provider,\n this.configService.network.addresses.masterChef || '',\n MasterChefAbi,\n 'harvest',\n [farmId, to]\n );\n }\n\n public async harvestAll(\n provider: Web3Provider,\n farmIds: string[],\n to: string\n ) {\n return sendTransaction(\n provider,\n this.configService.network.addresses.masterChef || '',\n MasterChefAbi,\n 'harvestAll',\n [farmIds, to]\n );\n }\n\n public async deposit(\n provider: Web3Provider,\n pid: string,\n amount: string | number,\n to: string\n ) {\n return sendTransaction(\n provider,\n this.configService.network.addresses.masterChef || '',\n MasterChefAbi,\n 'deposit',\n [pid, amount.toString(), to]\n );\n // masterChefMultiCaller.call('deposit', this.address, 'deposit', [\n // pid,\n // amount.toString(),\n // to\n // ]);\n // await masterChefMultiCaller.execute();\n }\n\n public get address(): string {\n return this.service.config.addresses.masterChef || '';\n }\n}\n","import Service from '@/services/balancer/contracts/balancer-contracts.service';\nimport ConfigService from '@/services/config/config.service';\nimport { Multicaller } from '@/lib/utils/balancer/contract';\nimport { default as BeethovenxTokenAbi } from '@/lib/abi/BeethovenxToken.json';\nimport { getAddress } from '@ethersproject/address';\nimport { scale } from '@/lib/utils';\nimport BigNumber from 'bignumber.js';\n\nconst INITIAL_MINT = 50_000_000;\n\nexport default class BeethovenxToken {\n service: Service;\n\n constructor(service, private readonly configService = new ConfigService()) {\n this.service = service;\n }\n\n public async getCirculatingSupply(): Promise {\n let result = {} as Record;\n\n const masterChefMultiCaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n BeethovenxTokenAbi\n );\n masterChefMultiCaller.call('totalSupply', this.address, 'totalSupply', []);\n result = await masterChefMultiCaller.execute(result);\n\n const totalSupply = result.totalSupply.toString();\n\n return totalSupply\n ? scale(new BigNumber(totalSupply), -18).toNumber() - INITIAL_MINT\n : 0;\n }\n\n public get address(): string {\n return this.service.config.addresses.beethovenxToken || '';\n }\n}\n","import Service from '@/services/balancer/contracts/balancer-contracts.service';\nimport ConfigService from '@/services/config/config.service';\nimport { Multicaller } from '@/lib/utils/balancer/contract';\nimport { default as TimeBasedRewarder } from '@/lib/abi/TimeBasedRewarder.json';\nimport { getAddress } from '@ethersproject/address';\nimport { scale } from '@/lib/utils';\nimport BigNumber from 'bignumber.js';\n\nexport default class HndRewarder {\n service: Service;\n\n constructor(service, private readonly configService = new ConfigService()) {\n this.service = service;\n }\n\n public async getPendingReward(id: string, user: string): Promise {\n let result = {} as Record;\n\n const rewarderMulticaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n TimeBasedRewarder\n );\n\n rewarderMulticaller.call('pendingToken', this.address, 'pendingToken', [\n id,\n getAddress(user)\n ]);\n\n result = await rewarderMulticaller.execute(result);\n\n const pendingReward = result.pendingToken.toString();\n\n return pendingReward\n ? scale(new BigNumber(pendingReward), -18).toNumber()\n : 0;\n }\n\n public async getRewardPerSecond(): Promise {\n let result = {} as Record;\n\n const rewarderMulticaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n TimeBasedRewarder\n );\n\n rewarderMulticaller.call(\n 'rewardPerSecond',\n this.address,\n 'rewardPerSecond',\n []\n );\n\n result = await rewarderMulticaller.execute(result);\n\n const rewardPerSecond = result.rewardPerSecond.toString();\n\n return rewardPerSecond\n ? scale(new BigNumber(rewardPerSecond), -18).toNumber()\n : 0;\n }\n\n public get address(): string {\n return this.service.config.addresses.hndRewarder || '';\n }\n}\n","import { Config } from '@/lib/config';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { default as MasterChefAbi } from '@/lib/abi/BeethovenxMasterChef.json';\nimport { rpcProviderService as _rpcProviderService } from '@/services/rpc-provider/rpc-provider.service';\nimport { configService as _configService } from '@/services/config/config.service';\nimport MasterChef from './contracts/master-chef';\nimport BeethovenxToken from '@/services/farm/contracts/beethovenx-token';\nimport HndRewarder from '@/services/farm/contracts/hnd-rewarder';\n\nexport default class MasterChefContractsService {\n masterChef: MasterChef;\n hndRewarder: HndRewarder;\n beethovenxToken: BeethovenxToken;\n config: Config;\n provider: JsonRpcProvider;\n\n constructor(\n readonly configService = _configService,\n readonly rpcProviderService = _rpcProviderService\n ) {\n this.provider = this.rpcProviderService.jsonProvider;\n this.config = this.configService.network;\n\n // Init contracts\n this.masterChef = new MasterChef(this);\n this.beethovenxToken = new BeethovenxToken(this);\n this.hndRewarder = new HndRewarder(this);\n }\n\n // Combine all the ABIs and remove duplicates\n public get allABIs() {\n return Object.values(\n Object.fromEntries([...MasterChefAbi].map(row => [row.name, row]))\n );\n }\n}\n\nexport const masterChefContractsService = new MasterChefContractsService();\n","import { ref, Ref } from 'vue';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTransactions from '../useTransactions';\nimport { TransactionResponse, Web3Provider } from '@ethersproject/providers';\nimport { sendTransaction } from '@/lib/utils/balancer/web3';\nimport { default as abi } from '@/lib/abi/ERC20.json';\nimport { MaxUint256 } from '@ethersproject/constants';\nimport { bnum } from '@/lib/utils';\nimport { erc20ContractService } from '@/services/erc20/erc20-contracts.service';\nimport { DecoratedPoolWithRequiredFarm } from '@/services/balancer/subgraph/types';\nimport { masterChefContractsService } from '@/services/farm/master-chef-contracts.service';\nimport BigNumber from 'bignumber.js';\n\nexport async function approveToken(\n web3: Web3Provider,\n spender: string,\n token: string,\n amount: string\n): Promise {\n return sendTransaction(web3, token, abi, 'approve', [spender, amount]);\n}\n\nexport default function useFarm(\n pool: Ref | Ref\n) {\n const { getProvider, appNetworkConfig, account } = useWeb3();\n const { addTransaction } = useTransactions();\n const tokenAddress = pool.value?.farm.pair || '';\n const farmId = pool.value?.farm.id || '';\n\n async function requiresApproval(\n amount: Ref = ref(MaxUint256.toString())\n ) {\n const allowance = await erc20ContractService.erc20.allowance(\n tokenAddress,\n account.value,\n appNetworkConfig.addresses.masterChef\n );\n\n if (!amount || bnum(amount.value).eq(0)) return false;\n\n return allowance.lt(amount.value);\n }\n\n async function approve() {\n try {\n const provider = getProvider();\n const tx = await erc20ContractService.erc20.approveToken(\n provider,\n appNetworkConfig.addresses.masterChef,\n tokenAddress\n );\n\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: 'approve',\n summary: `Approve LP token`,\n details: {\n contractAddress: tokenAddress,\n spender: appNetworkConfig.addresses.masterChef\n }\n });\n\n return tx;\n } catch (error) {\n console.error(error);\n }\n }\n\n async function checkAllowanceAndApprove() {\n if (await requiresApproval()) {\n await approve();\n }\n }\n\n async function deposit(amount: BigNumber) {\n try {\n const provider = getProvider();\n const tx = await masterChefContractsService.masterChef.deposit(\n provider,\n farmId,\n amount.toString(),\n account.value\n );\n\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: 'invest',\n summary: 'Deposit LP tokens into farm',\n details: {\n contractAddress: tokenAddress,\n spender: appNetworkConfig.addresses.masterChef\n }\n });\n\n return tx;\n } catch (error) {\n console.error(error);\n }\n }\n\n async function harvest() {\n try {\n const provider = getProvider();\n const tx = await masterChefContractsService.masterChef.harvest(\n provider,\n farmId,\n account.value\n );\n\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: 'claim',\n summary: 'Harvest farm rewards',\n details: {\n contractAddress: tokenAddress,\n spender: appNetworkConfig.addresses.masterChef\n }\n });\n\n return tx;\n } catch (error) {\n console.error(error);\n }\n }\n\n async function withdrawAndHarvest(amount: BigNumber) {\n try {\n const provider = getProvider();\n const tx = await masterChefContractsService.masterChef.withdrawAndHarvest(\n provider,\n farmId,\n amount.toString(),\n account.value\n );\n\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: 'claim',\n summary: 'Withdraw LP tokens',\n details: {\n contractAddress: tokenAddress,\n spender: appNetworkConfig.addresses.masterChef\n }\n });\n\n return tx;\n } catch (error) {\n console.error(error);\n }\n }\n\n return {\n requiresApproval,\n approve,\n checkAllowanceAndApprove,\n deposit,\n harvest,\n withdrawAndHarvest\n };\n}\n","import axios from 'axios';\nimport { configService as _configService } from '@/services/config/config.service';\n\nexport default class FarmSubgraphClient {\n url: string;\n\n constructor(private readonly configService = _configService) {\n this.url = configService.network.farmSubgraph || '';\n }\n\n public async getFarms() {\n const query = `\n query {\n farms: pools(\n first: 1000\n skip: 0\n orderBy: \"id\"\n orderDirection: \"desc\"\n ) {\n id\n pair\n allocPoint\n slpBalance\n masterChef {\n id\n totalAllocPoint\n beetsPerBlock\n }\n rewarder {\n id\n rewardToken\n rewardPerSecond\n }\n }\n }\n `;\n\n return this.get(query);\n }\n\n public async getFarm(id: string) {\n const query = `\n query {\n farm: pool(id: \"${id}\") {\n id\n pair\n allocPoint\n slpBalance\n masterChef {\n id\n totalAllocPoint\n beetsPerBlock\n }\n rewarder {\n id\n rewardToken\n rewardPerSecond\n }\n }\n }\n `;\n\n return this.get(query);\n }\n\n public async getUserDataForFarm(farmId: string, userAddress: string) {\n const query = `\n query {\n user: user(id: \"${farmId}-${userAddress.toLowerCase()}\") {\n id\n amount\n rewardDebt\n beetsHarvested\n pool {\n id\n }\n }\n }\n `;\n\n const data = await this.get(query);\n\n return data.user\n ? data.user\n : { amount: 0, rewardDebt: 0, beetsHarvested: 0 };\n }\n\n public async getUserDataForAllFarms(userAddress: string) {\n const query = `\n query {\n farmData: users(where: { address: \"${userAddress.toLowerCase()}\" }) {\n id\n amount\n rewardDebt\n beetsHarvested\n pool {\n id\n }\n }\n }\n `;\n\n const data = await this.get(query);\n\n return data.farmData || [];\n }\n\n private async get(query) {\n try {\n const {\n data: { data }\n } = await axios.post(\n this.url,\n { query },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n );\n return data;\n } catch (error) {\n console.error(error);\n }\n }\n}\n\nexport const farmSubgraphClient = new FarmSubgraphClient();\n","import useTokenLists from '@/composables/useTokenLists';\nimport useTokens from '@/composables/useTokens';\nimport symbolKeys from '@/constants/symbol.keys';\nimport { provide, computed, InjectionKey, ComputedRef } from 'vue';\nimport { useStore } from 'vuex';\n\n/**\n * TYPES\n */\nexport interface AppProviderResponse {\n appLoading: ComputedRef;\n}\n\n/**\n * SETUP\n */\nexport const AppProviderSymbol: InjectionKey = Symbol(\n symbolKeys.Providers.App\n);\n\n/**\n * AppProvider\n * Provides global app level properties\n */\nexport default {\n name: 'AppProvider',\n\n setup(props, { slots }) {\n const store = useStore();\n const { loadingTokenLists } = useTokenLists();\n const { loading: loadingTokens } = useTokens();\n\n const appLoading = computed(\n () =>\n store.state.app.loading ||\n loadingTokenLists.value ||\n loadingTokens.value\n );\n\n provide(AppProviderSymbol, {\n // computed\n appLoading\n });\n\n return () => slots.default();\n }\n};\n","import { inject } from 'vue';\nimport {\n AppProviderResponse,\n AppProviderSymbol\n} from '@/providers/app.provider';\n\nconst defaultProviderResponse = {} as AppProviderResponse;\n\nexport default function useApp(): AppProviderResponse {\n return inject(AppProviderSymbol, defaultProviderResponse);\n}\n","import axios from 'axios';\nimport { jsonToGraphQLQuery } from 'json-to-graphql-query';\nimport { configService as _configService } from '@/services/config/config.service';\n\nexport default class BalancerSubgraphClient {\n url: string;\n\n constructor(private readonly configService = _configService) {\n this.url = configService.network.subgraph;\n }\n\n public async get(query) {\n try {\n const payload = this.toPayload(query);\n const {\n data: { data }\n } = await axios.post(this.url, payload, {\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n return data;\n } catch (error) {\n console.error(error);\n }\n }\n\n public toPayload(query) {\n return JSON.stringify({ query: jsonToGraphQLQuery({ query }) });\n }\n}\n\nexport const balancerSubgraphClient = new BalancerSubgraphClient();\n","export const POOLS = {\n Pagination: {\n PerPage: 75\n },\n DelegateOwner: '0xba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b',\n ZeroAddress: '0x0000000000000000000000000000000000000000',\n DynamicFees: {\n Gauntlet: [\n '0x8339e311265a025fd5792db800daa8eda4264e2c000200000000000000000029',\n '0x45910faff3cbf990fdb204682e93055506682d1700020000000000000000000d',\n '0xfa22ec1c02f121083bf04fbbcaad019f490d7a3000020000000000000000002a',\n '0xa660ba113f9aabaeb4bcd28a4a1705f4997d5432000200000000000000000022',\n '0xea8886a24b6e01fba88a9e98d794e8d1f29ed863000200000000000000000010',\n '0x0b09dea16768f0799065c475be02919503cb2a3500020000000000000000001a',\n '0xde148e6cc3f6047eed6e97238d341a2b8589e19e000200000000000000000017',\n '0x5d563ca1e2daaae3402c36097b934630ab53702c000200000000000000000024',\n '0x9f1f16b025f703ee985b58ced48daf93dad2f7ef00020000000000000000001e',\n '0x3ebf48cd7586d7a4521ce59e53d9a907ebf1480f000200000000000000000028',\n '0xefaa1604e82e1b3af8430b90192c1b9e8197e377000200000000000000000021',\n '0x9c08c7a7a89cfd671c79eacdc6f07c1996277ed5000200000000000000000025',\n '0xe99481dc77691d8e2456e5f3f61c1810adfc1503000200000000000000000018',\n '0xec60a5fef79a92c741cb74fdd6bfc340c0279b01000200000000000000000015',\n '0x231e687c9961d3a27e6e266ac5c433ce4f8253e4000200000000000000000023',\n '0x80be0c303d8ad2a280878b50a39b1ee8e54dbd2200020000000000000000000f',\n '0x5aa90c7362ea46b3cbfbd7f01ea5ca69c98fef1c000200000000000000000020',\n '0xa6f548df93de924d73be7d25dc02554c6bd66db500020000000000000000000e',\n '0x96646936b91d6b9d7d0c47c496afbf3d6ec7b6f8000200000000000000000019',\n '0x186084ff790c65088ba694df11758fae4943ee9e000200000000000000000013',\n '0x4626d81b3a1711beb79f4cecff2413886d461677000200000000000000000011',\n '0x072f14b85add63488ddad88f855fda4a99d6ac9b000200000000000000000027',\n '0xaac98ee71d4f8a156b6abaa6844cdb7789d086ce00020000000000000000001b',\n '0x7eb878107af0440f9e776f999ce053d277c8aca8000200000000000000000012',\n '0x16faf9f73748013155b7bc116a3008b57332d1e600020000000000000000001c',\n '0x6ae82385f76e3742f89cb46343b169f6ee49de1b000200000000000000000016',\n '0x8a92c3afabab59101b4e2426c82a7ddbb66b545000020000000000000000001f',\n '0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014',\n '0xf4c0dd9b82da36c07605df83c8a416f11724d88b000200000000000000000026',\n '0x3e5fa9518ea95c3e533eb377c001702a9aacaa32000200000000000000000052',\n '0xf8a0623ab66f985effc1c69d05f1af4badb01b0000020000000000000000001d',\n '0x021c343c6180f03ce9e48fae3ff432309b9af19900020000000000000000000b',\n '0x14462305d211c12a736986f4e8216e28c5ea7ab4000200000000000000000068',\n '0xf5aaf7ee8c39b651cebf5f1f50c10631e78e0ef9000200000000000000000069'\n ]\n },\n BlockList: [\n '0x03b3cc19e4087fd3d63167a604ef8063b095ba16000100000000000000000006'\n ],\n Stable: {\n AllowList: [\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000063',\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc56000000000000000000000066',\n '0x9f19a375709baf0e8e35c2c5c65aca676c4c719100000000000000000000006e',\n '0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080', // Lido Metastable\n '0x06df3b2bbb68adc8b0e302443692037ed9f91b42000000000000000000000012', // polygon\n '0xfeadd389a5c427952d8fdb8057d6c8ba1156cc5600020000000000000000001e', // polgon\n '0x6b15a01b5d46a5321b627bd7deef1af57bc629070000000000000000000000d4', // kovan\n '0xe08590bde837eb9b2d42aa1196469d6e08fe96ec000200000000000000000101', //kovan\n '0xf4f5a8fa35d00d2273e1466c2e29a417a3464e3c00020000000000000000000e',\n '0x33276d43ada054a281d40a11d48310cdc0156fc2000200000000000000000001', // rinkebyここわからん\n '0xd41bf724b6e31311db582c5388af6b316e812fe4000200000000000000000003', //fantom\n '0xd163415bd34ef06f57c58d2aed5a5478afb464cc00000000000000000000000e', //fantom mim\n '0x443804efc861616b920bc30d49282ae72276b5df000000000000000000000010', //fantom\n '0x2ed55f12e700cde978e1f0491d681919814ca44b000200000000000000000021',\n '0x2c580c6f08044d6dfaca8976a66c8fadddbd9901000000000000000000000038',\n '0x8fe1a318e67bc203180adf68007613546e8af393000000000000000000000046',\n '0x30a92a4eeca857445f41e4bb836e64d66920f1c0000200000000000000000071',\n '0x6ddf83e473956b6062e6660ee47639ecd7f9d558000200000000000000000070 ' \n ]\n },\n Factories: {\n '0xa5bf2ddf098bb0ef6d120c98217dd6b141c74ee0': 'oracleWeightedPool',\n '0x8e9aa87e45e92bad84d5f8dd1bff34fb92637de9': 'weightedPool',\n '0xc66ba2b6595d3613ccab350c886ace23866ede24': 'stablePool',\n '0x67d27634e44793fe63c467035e31ea8635117cd4': 'stablePool', // Metastable\n '0x751dfdace1ad995ff13c927f6f761c6604532c79': 'stablePool', // Kovan\n '0x590e544e7ca956bb878f8c873e82e65550d67d2f': 'stablePool', // Kovan Metastable\n '0x72f700b6e33ab2db1b915e06b99d7ab913748380': 'weightedPool', //rinkeby\n '0xf2955e1663a281e7cff697a6f0213ad09914f3df': 'weightedPool', //rinkeby 2 token\n '0x73bf10fb8867f5687d0c7590d0ae2b4bebcc85fd': 'stablePool', //rinkeby\n '0xf63193af8114855c872bc85ed9a10dd66fc9a290': 'stablePool', //rinkeby metastable\n\n '0x60467cb225092ce0c989361934311175f437cf53': 'weightedPool', //fantom\n '0x92b377187bccc6556fced2f1e6dad65850c20630': 'weightedPool', //fantom 2 token\n '0x55df810876354fc3e249f701dd78dede57991f8d': 'stablePool', //fantom\n '0x70b55af71b29c5ca7e67bd1995250364c4be5554': 'stablePool' //fantom metastable\n }\n};\n","import { Network } from '@/constants/network';\nimport { POOLS } from '@/constants/pools';\nimport { configService } from '@/services/config/config.service';\nimport { merge } from 'lodash';\n\nconst defaultArgs = {\n first: 1000,\n orderBy: 'totalLiquidity',\n orderDirection: 'desc',\n where: {\n totalShares_gt: 0.01,\n id_not_in: POOLS.BlockList,\n poolType_not: 'Element'\n }\n};\n\nconst defaultAttrs = {\n id: true,\n name: true,\n poolType: true,\n swapFee: true,\n tokensList: true,\n totalLiquidity: true,\n totalSwapVolume: true,\n totalSwapFee: true,\n totalShares: true,\n owner: true,\n factory: true,\n amp: true,\n swapEnabled: true,\n tokens: {\n address: true,\n balance: true,\n weight: true,\n symbol: true\n }\n};\n\nif (configService.network.chainId !== Network.POLYGON) {\n defaultAttrs.tokens['priceRate'] = true;\n}\n\nexport default (args = {}, attrs = {}) => ({\n pools: {\n __args: merge({}, defaultArgs, args),\n ...merge({}, defaultAttrs, attrs)\n }\n});\n","import { isStableLike, isWeighted } from '@/composables/usePool';\nimport { FiatCurrency } from '@/constants/currency';\nimport { Pool } from '@/services/balancer/subgraph/types';\nimport { TokenPrices } from '@/services/beethovenx/beethovenx.service';\n\nexport function getPoolLiquidity(\n pool: Pool,\n prices: TokenPrices,\n currency: FiatCurrency\n) {\n if (isWeighted(pool)) {\n const totalWeight = pool.tokens.reduce(\n (total, token) => total + parseFloat(token.weight),\n 0\n );\n let sumWeight = 0;\n let sumValue = 0;\n\n for (let i = 0; i < pool.tokens.length; i++) {\n const token = pool.tokens[i];\n if (!prices[token.address]) {\n continue;\n }\n const price = prices[token.address][currency];\n const balance = parseFloat(pool.tokens[i].balance);\n\n const value = balance * price;\n const weight = token.weight ? parseFloat(token.weight) : 0;\n sumValue = sumValue + value;\n sumWeight = sumWeight + weight;\n }\n if (sumWeight > 0) {\n const liquidity = (sumValue / sumWeight) * totalWeight;\n return liquidity.toString();\n } else {\n return '0';\n }\n }\n // TODO [improvement]: if price is missing, compute spot price based on balances and amp factor\n if (isStableLike(pool)) {\n let sumBalance = 0;\n let sumValue = 0;\n\n for (let i = 0; i < pool.tokens.length; i++) {\n const token = pool.tokens[i];\n // if a token's price is unkown, ignore it\n // it will be computed at the next step\n if (!prices[token.address]) {\n continue;\n }\n const price = prices[token.address][currency];\n const balance = parseFloat(pool.tokens[i].balance);\n\n const value = balance * price;\n sumValue = sumValue + value;\n sumBalance = sumBalance + balance;\n }\n // if at least the partial value of the pool is known\n // then compute the rest of the value\n if (sumBalance > 0) {\n // assume relative spot price = 1\n const avgPrice = sumValue / sumBalance;\n for (let i = 0; i < pool.tokens.length; i++) {\n const token = pool.tokens[i];\n // if a token's price is known, skip it\n // it has been taken into account in the prev step\n if (prices[token.address]) {\n continue;\n }\n const balance = parseFloat(pool.tokens[i].balance);\n\n const value = balance * avgPrice;\n sumValue = sumValue + value;\n sumBalance = sumBalance + balance;\n }\n return sumValue.toString();\n } else {\n return '0';\n }\n }\n return '0';\n}\n","import Service from '../../balancer-subgraph.service';\nimport queryBuilder from './query';\nimport { getPoolLiquidity } from '@/lib/utils/balancer/price';\nimport { bnum } from '@/lib/utils';\nimport {\n Pool,\n QueryBuilder,\n TimeTravelPeriod,\n DecoratedPool,\n PoolToken\n} from '../../types';\nimport { getAddress } from '@ethersproject/address';\nimport {\n currentLiquidityMiningRewards,\n computeTotalAPRForPool\n} from '@/lib/utils/liquidityMining';\nimport { NetworkId } from '@/constants/network';\nimport { configService as _configService } from '@/services/config/config.service';\nimport { FiatCurrency } from '@/constants/currency';\nimport { isStable } from '@/composables/usePool';\nimport { TokenPrices } from '@/services/beethovenx/beethovenx.service';\n\nconst IS_LIQUIDITY_MINING_ENABLED = true;\n\nexport default class Pools {\n service: Service;\n query: QueryBuilder;\n networkId: NetworkId;\n\n constructor(\n service: Service,\n query: QueryBuilder = queryBuilder,\n private readonly configService = _configService\n ) {\n this.service = service;\n this.query = query;\n this.networkId = Number(configService.env.NETWORK) as NetworkId;\n }\n\n public async get(args = {}, attrs = {}): Promise {\n const query = this.query(args, attrs);\n const data = await this.service.client.get(query);\n return data.pools;\n }\n\n public async decorate(\n pools: Pool[],\n period: TimeTravelPeriod,\n prices: TokenPrices,\n currency: FiatCurrency\n ): Promise {\n // Get past state of pools\n const blockNumber = await this.timeTravelBlock(period);\n const block = { number: blockNumber };\n const isInPoolIds = { id_in: pools.map(pool => pool.id) };\n const pastPoolsQuery = this.query({ where: isInPoolIds, block });\n const { pools: pastPools } = await this.service.client.get(pastPoolsQuery);\n\n return this.serialize(pools, pastPools, period, prices, currency);\n }\n\n private serialize(\n pools: Pool[],\n pastPools: Pool[],\n period: TimeTravelPeriod,\n prices: TokenPrices,\n currency: FiatCurrency\n ): DecoratedPool[] {\n return pools.map(pool => {\n pool.address = this.addressFor(pool.id);\n pool.tokenAddresses = pool.tokensList.map(t => getAddress(t));\n pool.tokens = this.formatPoolTokens(pool);\n pool.totalLiquidity = getPoolLiquidity(pool, prices, currency);\n\n if (\n pool.id ===\n '0xae1c69eae0f1342425ea3fdb51e9f11223c7ad5b00010000000000000000000b'\n ) {\n pool.name = `*PAUSED* ${pool.name} - Please migrate to new pool`;\n } else if (\n pool.id ===\n '0xd163415bd34ef06f57c58d2aed5a5478afb464cc00000000000000000000000e'\n ) {\n pool.name = `Ziggy Stardust & Magic Internet Money`;\n } else if (\n pool.id ===\n '0x5018fa8aa910fa2eea07529d80e7a44b2e2d29cf000100000000000000000022' ||\n pool.id ===\n '0xe2fd25b84aa76486e0cbc2c2ca383c3587abb942000100000000000000000028'\n ) {\n pool.name = `*DEPRECATED* ${pool.name} - Please migrate to the Beethoven-X pool`;\n }\n if (\n pool.id ===\n '0x2c580c6f08044d6dfaca8976a66c8fadddbd9901000000000000000000000038'\n ) {\n pool.name = 'Guqin Qi V2';\n }\n\n const pastPool = pastPools.find(p => p.id === pool.id);\n const volume = this.calcVolume(pool, pastPool);\n const poolAPR = this.calcAPR(pool, pastPool);\n const fees = this.calcFees(pool, pastPool);\n const {\n hasLiquidityMiningRewards,\n liquidityMiningAPR\n } = this.calcLiquidityMiningAPR(pool, prices, currency);\n const totalAPR = this.calcTotalAPR(poolAPR, liquidityMiningAPR);\n\n return {\n ...pool,\n hasLiquidityMiningRewards,\n dynamic: {\n period,\n volume,\n fees,\n apr: {\n pool: poolAPR,\n liquidityMining: liquidityMiningAPR,\n total: totalAPR\n }\n }\n };\n });\n }\n\n private formatPoolTokens(pool: Pool): PoolToken[] {\n const tokens = pool.tokens.map(token => ({\n ...token,\n address: getAddress(token.address)\n }));\n\n if (isStable(pool)) return tokens;\n\n return tokens.sort((a, b) => parseFloat(b.weight) - parseFloat(a.weight));\n }\n\n private calcVolume(pool: Pool, pastPool: Pool | undefined): string {\n if (!pastPool) return pool.totalSwapVolume;\n\n return bnum(pool.totalSwapVolume)\n .minus(pastPool.totalSwapVolume)\n .toString();\n }\n\n private calcAPR(pool: Pool, pastPool?: Pool) {\n if (!pastPool)\n return bnum(pool.totalSwapFee)\n .dividedBy(pool.totalLiquidity)\n .multipliedBy(365)\n .toString();\n\n const swapFees = bnum(pool.totalSwapFee).minus(pastPool.totalSwapFee);\n return swapFees\n .dividedBy(pool.totalLiquidity)\n .multipliedBy(365)\n .toString();\n }\n\n private calcLiquidityMiningAPR(\n pool: Pool,\n prices: TokenPrices,\n currency: FiatCurrency\n ) {\n let liquidityMiningAPR = '0';\n\n const liquidityMiningRewards = currentLiquidityMiningRewards[pool.id];\n\n const hasLiquidityMiningRewards = IS_LIQUIDITY_MINING_ENABLED\n ? !!liquidityMiningRewards\n : false;\n\n if (hasLiquidityMiningRewards) {\n liquidityMiningAPR = computeTotalAPRForPool(\n liquidityMiningRewards,\n prices,\n currency,\n pool.totalLiquidity\n );\n }\n\n return {\n hasLiquidityMiningRewards,\n liquidityMiningAPR\n };\n }\n\n private calcTotalAPR(poolAPR: string, liquidityMiningAPR: string) {\n return bnum(poolAPR)\n .plus(liquidityMiningAPR)\n .toString();\n }\n\n private calcFees(pool: Pool, pastPool: Pool | undefined): string {\n if (!pastPool) return pool.totalSwapFee;\n\n return bnum(pool.totalSwapFee)\n .minus(pastPool.totalSwapFee)\n .toString();\n }\n\n private async timeTravelBlock(period: TimeTravelPeriod): Promise {\n const currentBlock = await this.service.rpcProviderService.getBlockNumber();\n const dayInSecs = 24 * 60 * 60;\n const blocksInDay = Math.round(dayInSecs / this.service.blockTime);\n\n switch (period) {\n case '24h':\n return currentBlock - blocksInDay;\n default:\n return currentBlock - blocksInDay;\n }\n }\n\n public addressFor(poolId: string): string {\n return getAddress(poolId.slice(0, 42));\n }\n}\n","import { merge } from 'lodash';\n\nconst defaultArgs = {\n first: 1000,\n where: {\n balance_gt: 0\n }\n};\n\nconst defaultAttrs = {\n poolId: {\n id: true\n },\n balance: true\n};\n\nexport default (args = {}, attrs = {}) => ({\n poolShares: {\n __args: merge({}, defaultArgs, args),\n ...merge({}, defaultAttrs, attrs)\n }\n});\n","import Service from '../../balancer-subgraph.service';\nimport poolQueryBuilder from './query';\nimport { PoolShare, QueryBuilder } from '../../types';\n\nexport default class PoolShares {\n service: Service;\n query: QueryBuilder;\n\n constructor(service: Service, query: QueryBuilder = poolQueryBuilder) {\n this.service = service;\n this.query = query;\n }\n\n public async get(args = {}, attrs = {}): Promise {\n const query = this.query(args, attrs);\n const data = await this.service.client.get(query);\n return data.poolShares;\n }\n}\n","import { merge } from 'lodash';\n\nconst defaultArgs = {\n first: 100,\n orderBy: 'timestamp',\n orderDirection: 'desc'\n};\n\nconst defaultAttrs = {\n amounts: true,\n timestamp: true,\n tx: true,\n type: true\n};\n\nexport default (args = {}, attrs = {}) => ({\n joinExits: {\n __args: merge({}, defaultArgs, args),\n ...merge({}, defaultAttrs, attrs)\n }\n});\n","import Service from '../../balancer-subgraph.service';\nimport queryBuilder from './query';\nimport { PoolActivity, QueryBuilder } from '../../types';\n\nexport default class PoolActivities {\n service: Service;\n query: QueryBuilder;\n\n constructor(service: Service, query: QueryBuilder = queryBuilder) {\n this.service = service;\n this.query = query;\n }\n\n public async get(args = {}, attrs = {}): Promise {\n const query = this.query(args, attrs);\n const { joinExits } = await this.service.client.get(query);\n return this.serializeActivity(joinExits);\n }\n\n serializeActivity(poolActivities: PoolActivity[]) {\n return poolActivities.map(poolActivity => ({\n ...poolActivity,\n timestamp: poolActivity.timestamp * 1000\n }));\n }\n}\n","import { merge } from 'lodash';\n\nconst defaultAttrs = {\n pool: {\n id: true\n },\n timestamp: true,\n amounts: true,\n totalShares: true,\n swapVolume: true,\n swapFees: true\n};\n\nexport default (args = {}, attrs = {}) => ({\n poolSnapshot: {\n __args: args,\n ...merge({}, defaultAttrs, attrs)\n }\n});\n","import Service from '../../balancer-subgraph.service';\nimport poolQueryBuilder from './query';\nimport { PoolSnapshots, PoolSnapshot, QueryBuilder } from '../../types';\n\nconst DAY = 60 * 60 * 24;\n\nexport default class PoolShares {\n service: Service;\n query: QueryBuilder;\n\n constructor(service: Service, query: QueryBuilder = poolQueryBuilder) {\n this.service = service;\n this.query = query;\n }\n\n public async get(\n poolId: string,\n days: number,\n args = {},\n attrs = {}\n ): Promise {\n const currentTimestamp = Math.ceil(Date.now() / 1000);\n const dayTimestamp = currentTimestamp - (currentTimestamp % DAY);\n const timestamps: number[] = [];\n for (let i = 0; i < days; i++) {\n //TODO: remove this when its no longer relevant\n //for some reason, snapshot data from the first few days is waaay off filter anything before 2021-09-30\n if (dayTimestamp - i * DAY < 1632960000) {\n continue;\n }\n\n timestamps.push(dayTimestamp - i * DAY);\n }\n attrs = { ...attrs, __aliasFor: 'poolSnapshot' };\n const query = Object.fromEntries(\n timestamps.map(timestamp => {\n const timestampArgs = { ...args, id: `${poolId}-${timestamp}` };\n const timestampFragment = this.query(timestampArgs, attrs).poolSnapshot;\n return [`_${timestamp}`, timestampFragment];\n })\n );\n const data = await this.service.client.get(query);\n\n return this.serialize(data);\n }\n\n private serialize(snapshotData: Record): PoolSnapshots {\n return Object.fromEntries(\n Object.entries(snapshotData)\n .map(entry => {\n const [id, data] = entry;\n const timestamp = parseInt(id.substr(1));\n if (!data) {\n return [timestamp, null];\n }\n const { amounts, totalShares, swapVolume, swapFees } = data;\n return [\n timestamp * 1000,\n { timestamp, amounts, totalShares, swapVolume, swapFees }\n ];\n })\n .filter(entry => !!entry[1])\n );\n }\n}\n","import { merge } from 'lodash';\n\nconst defaultAttrs = {\n id: true,\n tokenIn: true,\n tokenInSym: true,\n tokenOut: true,\n tokenOutSym: true,\n tokenAmountIn: true,\n tokenAmountOut: true,\n userAddress: {\n id: true\n },\n poolId: {\n id: true\n },\n timestamp: true\n};\n\nexport default (args = {}, attrs = {}) => ({\n swaps: {\n __args: args,\n ...merge({}, defaultAttrs, attrs)\n }\n});\n","import Service from '../../balancer-subgraph.service';\nimport poolQueryBuilder from './query';\nimport { QueryBuilder, SubgraphSwap } from '../../types';\n\nexport default class Swaps {\n service: Service;\n query: QueryBuilder;\n\n constructor(service: Service, query: QueryBuilder = poolQueryBuilder) {\n this.service = service;\n this.query = query;\n }\n\n public async get(args = {}, attrs = {}): Promise {\n const query = this.query(args, attrs);\n const data = await this.service.client.get(query);\n return data.swaps;\n }\n}\n","import { merge } from 'lodash';\n\nconst defaultAttrs = {\n id: true,\n asset: true,\n amount: true,\n pricingAsset: true,\n price: true,\n block: true,\n timestamp: true,\n poolId: {\n id: true\n }\n};\n\nexport default (args = {}, attrs = {}) => ({\n tokenPrices: {\n __args: args,\n ...merge({}, defaultAttrs, attrs)\n }\n});\n","import Service from '../../balancer-subgraph.service';\nimport tokenPricesQueryBuilder from './query';\nimport { QueryBuilder, SubgraphTokenPrice } from '../../types';\n\nexport default class TokenPrices {\n service: Service;\n query: QueryBuilder;\n\n constructor(service: Service, query: QueryBuilder = tokenPricesQueryBuilder) {\n this.service = service;\n this.query = query;\n }\n\n public async get(args = {}, attrs = {}): Promise {\n const query = this.query(args, attrs);\n const data = await this.service.client.get(query);\n\n return data.tokenPrices;\n }\n}\n","import { merge } from 'lodash';\n\nconst defaultAttrs = {\n totalLiquidity: true,\n totalSwapFee: true,\n totalSwapVolume: true,\n poolCount: true\n};\n\nexport default (args = {}, attrs = {}) => ({\n balancers: {\n __args: args,\n ...merge({}, defaultAttrs, attrs)\n }\n});\n","import Service from '../../balancer-subgraph.service';\nimport poolQueryBuilder from './query';\nimport { QueryBuilder, SubgraphBalancer } from '../../types';\n\nexport default class Balancers {\n service: Service;\n query: QueryBuilder;\n\n constructor(service: Service, query: QueryBuilder = poolQueryBuilder) {\n this.service = service;\n this.query = query;\n }\n\n public async get(): Promise {\n const query = this.query({ first: 1 }, {});\n const data = await this.service.client.get(query);\n\n if (data.balancers.length === 0) {\n return {\n totalLiquidity: 0,\n totalSwapFee: 0,\n totalSwapVolume: 0,\n poolCount: 0\n };\n }\n\n return {\n totalLiquidity: parseFloat(data.balancers[0].totalLiquidity),\n totalSwapVolume: parseFloat(data.balancers[0].totalSwapVolume),\n totalSwapFee: parseFloat(data.balancers[0].totalSwapFee),\n poolCount: parseFloat(data.balancers[0].poolCount)\n };\n }\n}\n","import { balancerSubgraphClient } from './balancer-subgraph.client';\nimport { rpcProviderService as _rpcProviderService } from '@/services/rpc-provider/rpc-provider.service';\nimport Pools from './entities/pools';\nimport PoolShares from './entities/poolShares';\nimport PoolActivities from './entities/poolActivities';\nimport PoolSnapshots from './entities/poolSnapshots';\nimport Swaps from './entities/swaps';\nimport TokenPrices from './entities/tokenPrices';\nimport Balancers from '@/services/balancer/subgraph/entities/balancers';\n\nconst NETWORK = process.env.VUE_APP_NETWORK || '250';\n\nexport default class BalancerSubgraphService {\n pools: Pools;\n poolShares: PoolShares;\n poolActivities: PoolActivities;\n poolSnapshots: PoolSnapshots;\n swaps: Swaps;\n tokenPrices: TokenPrices;\n balancers: Balancers;\n\n constructor(\n readonly client = balancerSubgraphClient,\n readonly rpcProviderService = _rpcProviderService\n ) {\n // Init entities\n this.pools = new Pools(this);\n this.poolShares = new PoolShares(this);\n this.poolActivities = new PoolActivities(this);\n this.poolSnapshots = new PoolSnapshots(this);\n this.swaps = new Swaps(this);\n this.tokenPrices = new TokenPrices(this);\n this.balancers = new Balancers(this);\n }\n\n public get blockTime(): number {\n switch (NETWORK) {\n case '1':\n return 13;\n case '137':\n return 2;\n case '42':\n // Should be ~4s but this causes subgraph to return with unindexed block error.\n return 1;\n case '43113':\n return 1;\n case '250':\n return 1;\n case '592':\n return 1;\n default:\n return 13;\n }\n }\n}\n\nexport const balancerSubgraphService = new BalancerSubgraphService();\n","import { reactive } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { QueryObserverOptions } from 'react-query/core';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { balancerSubgraphService } from '@/services/balancer/subgraph/balancer-subgraph.service';\nimport { SubgraphBalancer } from '@/services/balancer/subgraph/types';\nimport { masterChefContractsService } from '@/services/farm/master-chef-contracts.service';\n\ninterface ProtocolData extends SubgraphBalancer {\n beetsPrice: number;\n circulatingSupply: number;\n}\n\nexport default function useProtocolDataQuery(\n options: QueryObserverOptions = {}\n) {\n const { appNetworkConfig } = useWeb3();\n\n const queryFn = async () => {\n const [beetsPool] = await balancerSubgraphService.pools.get({\n where: {\n id: appNetworkConfig.addresses.beetsUsdcReferencePricePool.toLowerCase(),\n totalShares_gt: -1 // Avoid the filtering for low liquidity pools\n }\n });\n\n if (!beetsPool) {\n throw new Error('Could not load beets reference price pool');\n }\n\n const balancerData = await balancerSubgraphService.balancers.get();\n const beetsPrice = await getBeetsPrice(\n appNetworkConfig.addresses.beetsUsdcReferencePricePool,\n appNetworkConfig.addresses.beets,\n appNetworkConfig.addresses.usdc\n );\n\n const circulatingSupply = await masterChefContractsService.beethovenxToken.getCirculatingSupply();\n\n return {\n ...balancerData,\n beetsPrice,\n circulatingSupply\n };\n };\n\n const queryOptions = reactive({\n enabled: true,\n ...options\n });\n\n return useQuery(\n QUERY_KEYS.ProtocolData.All,\n queryFn,\n queryOptions\n );\n}\n\nexport async function getBeetsPrice(\n poolId: string,\n beetsAddress: string,\n usdcAddress: string\n) {\n const [beetsPool] = await balancerSubgraphService.pools.get({\n where: {\n id: poolId.toLowerCase(),\n totalShares_gt: -1 // Avoid the filtering for low liquidity pools\n }\n });\n\n const beets = beetsPool?.tokens.find(\n token => token.address.toLowerCase() === beetsAddress.toLowerCase()\n );\n const usdc = beetsPool?.tokens.find(\n token => token.address.toLowerCase() === usdcAddress.toLowerCase()\n );\n\n if (!beets || !usdc) {\n return 0;\n }\n\n return (\n ((parseFloat(beets.weight) / parseFloat(usdc.weight)) *\n parseFloat(usdc.balance)) /\n parseFloat(beets.balance)\n );\n}\n","import { computed, reactive } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { QueryObserverOptions } from 'react-query/core';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { farmSubgraphClient } from '@/services/balancer/subgraph/farm-subgraph.client';\nimport { masterChefContractsService } from '@/services/farm/master-chef-contracts.service';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { FarmUser } from '@/services/balancer/subgraph/types';\nimport useApp from '@/composables/useApp';\nimport useProtocolDataQuery from '@/composables/queries/useProtocolDataQuery';\nimport useTokens from '@/composables/useTokens';\n\nexport default function useFarmUserQuery(\n farmId: string,\n options: QueryObserverOptions = {}\n) {\n const { account, isWalletReady, appNetworkConfig } = useWeb3();\n const { appLoading } = useApp();\n const protocolDataQuery = useProtocolDataQuery();\n const beetsPrice = computed(\n () => protocolDataQuery.data?.value?.beetsPrice || 0\n );\n const { priceFor, dynamicDataLoading, loading } = useTokens();\n\n const enabled = computed(\n () =>\n isWalletReady.value &&\n account.value != null &&\n !appLoading.value &&\n !loading.value &&\n !dynamicDataLoading.value\n );\n const queryKey = QUERY_KEYS.Farms.User(farmId, account);\n\n const queryFn = async () => {\n try {\n const userData = await farmSubgraphClient.getUserDataForFarm(\n farmId,\n account.value\n );\n const pendingBeets = await masterChefContractsService.masterChef.getPendingBeetsForFarm(\n farmId,\n account.value\n );\n\n const pendingRewardToken = await masterChefContractsService.hndRewarder.getPendingReward(\n farmId,\n account.value\n );\n\n const hndPrice = priceFor(appNetworkConfig.addresses.hnd);\n\n return {\n ...userData,\n pendingBeets,\n pendingBeetsValue: pendingBeets * beetsPrice.value,\n pendingRewardToken,\n pendingRewardTokenValue: hndPrice * pendingRewardToken\n };\n } catch (e) {\n console.log('ERROR', e);\n }\n };\n\n const queryOptions = reactive({\n enabled,\n refetchInterval: 3000,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","\nimport {\n computed,\n defineComponent,\n onMounted,\n PropType,\n reactive,\n ref,\n toRef,\n toRefs,\n watch\n} from 'vue';\nimport { FormRef } from '@/types';\nimport {\n isLessThanOrEqualTo,\n isPositive,\n isRequired\n} from '@/lib/utils/validations';\nimport { useI18n } from 'vue-i18n';\nimport { scale } from '@/lib/utils';\nimport { DecoratedPoolWithRequiredFarm } from '@/services/balancer/subgraph/types';\nimport useFathom from '@/composables/useFathom';\n\nimport { TOKENS } from '@/constants/tokens';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport useFarm from '@/composables/farms/useFarm';\nimport useFarmUserQuery from '@/composables/queries/useFarmUserQuery';\nimport { BigNumber } from 'bignumber.js';\nimport useEthers from '@/composables/useEthers';\n\ntype DataProps = {\n withdrawForm: FormRef;\n amount: string;\n propMax: string[];\n validInput: boolean;\n propToken: number;\n};\n\nexport default defineComponent({\n name: 'FarmWithdrawForm',\n components: {},\n emits: ['success'],\n\n props: {\n pool: {\n type: Object as PropType,\n required: true\n }\n },\n\n setup(props, { emit }) {\n const data = reactive({\n withdrawForm: {} as FormRef,\n amount: '',\n propMax: [],\n validInput: true,\n propToken: 0\n });\n\n const { txListener } = useEthers();\n const { isWalletReady, account, toggleWalletSelectModal } = useWeb3();\n const withdrawing = ref(false);\n const { t } = useI18n();\n const { tokens } = useTokens();\n const { trackGoal, Goals } = useFathom();\n const { amount } = toRefs(data);\n const { withdrawAndHarvest } = useFarm(toRef(props, 'pool'));\n const farmUserQuery = useFarmUserQuery(props.pool.farm.id);\n const farmUser = computed(() => {\n return farmUserQuery.data.value;\n });\n const bptDeposited = computed(() => {\n const amount = farmUser.value?.amount;\n\n return amount ? scale(new BigNumber(amount), -18).toString() : '0';\n });\n\n function amountRules() {\n return isWalletReady.value && farmUser.value\n ? [\n isPositive(),\n isLessThanOrEqualTo(Number(bptDeposited.value), t('exceedsBalance'))\n ]\n : [isPositive()];\n }\n\n async function submit(): Promise {\n if (!data.withdrawForm.validate()) return;\n\n withdrawing.value = true;\n const amountScaled = scale(new BigNumber(amount.value), 18);\n const tx = await withdrawAndHarvest(amountScaled);\n\n if (!tx) {\n withdrawing.value = false;\n return;\n }\n\n txListener(tx, {\n onTxConfirmed: async () => {\n emit('success', tx);\n amount.value = '';\n withdrawing.value = false;\n },\n onTxFailed: () => {\n withdrawing.value = false;\n }\n });\n }\n\n /*watch(balances, (newBalances, oldBalances) => {\n const balancesChanged = !isEqual(newBalances, oldBalances);\n if (balancesChanged) {\n //\n }\n });*/\n\n watch(isWalletReady, isAuth => {\n if (!isAuth) {\n data.amount = '0';\n data.propMax = [];\n }\n });\n\n watch(account, () => {\n /*if (hasZeroBalance.value) {\n //\n } else {\n //\n }*/\n });\n\n onMounted(() => {\n /*if (hasZeroBalance.value) {\n //\n } else {\n //\n }*/\n });\n\n return {\n // data\n ...toRefs(data),\n withdrawing,\n\n Goals,\n TOKENS,\n // computed\n tokens,\n amountRules,\n isWalletReady,\n toggleWalletSelectModal,\n isRequired,\n // methods\n submit,\n trackGoal,\n farmUser,\n loading: withdrawing,\n bptDeposited\n };\n }\n});\n","import { render } from \"./FarmWithdrawForm.vue?vue&type=template&id=a3e7a5c6&ts=true\"\nimport script from \"./FarmWithdrawForm.vue?vue&type=script&lang=ts\"\nexport * from \"./FarmWithdrawForm.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, withModifiers as _withModifiers, createVNode as _createVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"px-4 pt-6\" }\nconst _hoisted_2 = { class: \"p-2\" }\nconst _hoisted_3 = { class: \"p-4 pb-8 border-b dark:border-gray-700\" }\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\" Deposit BPT \")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalTextInput = _resolveComponent(\"BalTextInput\")\n const _component_BalForm = _resolveComponent(\"BalForm\")\n\n return (_openBlock(), _createBlock(_component_BalForm, {\n ref: \"depositForm\",\n onOnSubmit: _ctx.submit\n }, {\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(_component_BalTextInput, {\n name: \"Deposit\",\n modelValue: _ctx.amount,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => (_ctx.amount = $event)),\n isValid: _ctx.validInput,\n \"onUpdate:isValid\": _cache[4] || (_cache[4] = ($event: any) => (_ctx.validInput = $event)),\n rules: _ctx.amountRules(),\n disabled: _ctx.loading,\n type: \"number\",\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"decimal-limit\": 18,\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"append-shadow\": \"\"\n }, {\n info: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"cursor-pointer\",\n onClick: _cache[1] || (_cache[1] = _withModifiers(($event: any) => (_ctx.amount = _ctx.bptBalance), [\"prevent\"]))\n }, _toDisplayString(_ctx.$t('balance')) + \": \" + _toDisplayString(_ctx.bptBalance), 1)\n ]),\n append: _withCtx(() => [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(_component_BalBtn, {\n size: \"xs\",\n color: \"white\",\n onClick: _cache[2] || (_cache[2] = _withModifiers(($event: any) => (_ctx.amount = _ctx.bptBalance), [\"prevent\"]))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('max')), 1)\n ]),\n _: 1\n })\n ])\n ]),\n _: 1\n }, 8, [\"modelValue\", \"isValid\", \"rules\", \"disabled\"])\n ]),\n _createVNode(\"div\", _hoisted_3, [\n (!_ctx.isWalletReady)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 0,\n label: _ctx.$t('connectWallet'),\n block: \"\",\n onClick: _withModifiers(_ctx.toggleWalletSelectModal, [\"prevent\"])\n }, null, 8, [\"label\", \"onClick\"]))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n (_ctx.approvalRequired)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 0,\n label: \"Approve BPT\",\n loading: _ctx.approving,\n \"loading-label\": _ctx.$t('approving'),\n disabled: !_ctx.validInput || parseFloat(_ctx.amount) === 0 || _ctx.amount === '',\n block: \"\",\n onClick: _withModifiers(_ctx.approveToken, [\"prevent\"])\n }, null, 8, [\"loading\", \"loading-label\", \"disabled\", \"onClick\"]))\n : (_openBlock(), _createBlock(_component_BalBtn, {\n key: 1,\n type: \"submit\",\n \"loading-label\": _ctx.$t('confirming'),\n color: \"gradient\",\n disabled: !_ctx.validInput || parseFloat(_ctx.amount) === 0 || _ctx.amount === '',\n loading: _ctx.depositing,\n block: \"\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.trackGoal(_ctx.Goals.ClickFarmDeposit)))\n }, {\n default: _withCtx(() => [\n _hoisted_4\n ]),\n _: 1\n }, 8, [\"loading-label\", \"disabled\", \"loading\"]))\n ], 64))\n ])\n ]),\n _: 1\n }, 8, [\"onOnSubmit\"]))\n}","import { computed, reactive } from 'vue';\nimport { erc20ContractService } from '@/services/erc20/erc20-contracts.service';\nimport { useQuery } from 'vue-query';\nimport { QueryObserverOptions } from 'react-query/core';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { BigNumber } from 'ethers';\n\nexport default function useAllowanceAvailableQuery(\n token: string,\n options: QueryObserverOptions = {}\n) {\n const { account, isWalletReady, appNetworkConfig } = useWeb3();\n const enabled = computed(() => isWalletReady.value);\n const queryKey = QUERY_KEYS.Farms.ApprovalRequired(token);\n\n const queryFn = async () => {\n const allowance = await erc20ContractService.erc20.allowance(\n token,\n account.value,\n appNetworkConfig.addresses.masterChef\n );\n\n return allowance;\n };\n\n const queryOptions = reactive({\n enabled,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","\nimport {\n computed,\n defineComponent,\n onMounted,\n PropType,\n reactive,\n ref,\n toRef,\n toRefs,\n watch\n} from 'vue';\nimport { FormRef } from '@/types';\nimport {\n isLessThanOrEqualTo,\n isPositive,\n isRequired\n} from '@/lib/utils/validations';\nimport { useI18n } from 'vue-i18n';\nimport useNumbers from '@/composables/useNumbers';\nimport { scale } from '@/lib/utils';\nimport { DecoratedPoolWithRequiredFarm } from '@/services/balancer/subgraph/types';\nimport useFathom from '@/composables/useFathom';\n\nimport { TOKENS } from '@/constants/tokens';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport useFarm from '@/composables/farms/useFarm';\nimport useAllowanceAvailableQuery from '@/composables/queries/useAllowanceAvailableQuery';\nimport { getAddress } from '@ethersproject/address';\nimport useEthers from '@/composables/useEthers';\nimport { FP_SCALING_FACTOR } from '@/lib/utils/numbers';\nimport BigNumber from 'bignumber.js';\n\ntype DataProps = {\n depositForm: FormRef;\n loading: boolean;\n amount: string;\n propMax: string[];\n validInput: boolean;\n propToken: number;\n};\n\nexport default defineComponent({\n name: 'FarmDepositForm',\n\n components: {},\n\n emits: ['success'],\n\n props: {\n pool: {\n type: Object as PropType,\n required: true\n }\n },\n\n setup(props, { emit }) {\n const data = reactive({\n depositForm: {} as FormRef,\n loading: false,\n amount: '',\n propMax: [],\n validInput: true,\n propToken: 0\n });\n\n const {\n isWalletReady,\n account,\n toggleWalletSelectModal,\n appNetworkConfig\n } = useWeb3();\n const { fNum } = useNumbers();\n const { t } = useI18n();\n const { tokens, balanceFor } = useTokens();\n const { trackGoal, Goals } = useFathom();\n const { amount } = toRefs(data);\n const depositing = ref(false);\n const approving = ref(false);\n\n const { approve, deposit } = useFarm(toRef(props, 'pool'));\n const allowanceAvailableQuery = useAllowanceAvailableQuery(\n props.pool.farm.pair\n );\n const bptBalance = computed(() =>\n balanceFor(getAddress(props.pool.farm.pair))\n );\n\n const { txListener } = useEthers();\n\n function amountRules() {\n return isWalletReady.value\n ? [\n isPositive(),\n isLessThanOrEqualTo(Number(bptBalance.value), t('exceedsBalance'))\n ]\n : [isPositive()];\n }\n\n async function approveToken(): Promise {\n if (!data.depositForm.validate()) return;\n\n approving.value = true;\n const tx = await approve();\n\n if (!tx) {\n approving.value = false;\n return;\n }\n\n txListener(tx, {\n onTxConfirmed: async () => {\n await allowanceAvailableQuery.refetch.value();\n approving.value = false;\n },\n onTxFailed: () => {\n approving.value = false;\n }\n });\n }\n\n const approvalRequired = computed(() => {\n if (amount.value === '' || parseFloat(amount.value) === 0) {\n return false;\n }\n\n const availableAllowance = new BigNumber(\n allowanceAvailableQuery.data.value?.toString() || '0'\n );\n const amountScaled = scale(new BigNumber(amount.value), 18);\n\n return availableAllowance.lt(amountScaled);\n });\n\n async function submit(): Promise {\n if (!data.depositForm.validate()) return;\n\n depositing.value = true;\n const amountScaled = scale(new BigNumber(amount.value), 18);\n const tx = await deposit(amountScaled);\n\n if (!tx) {\n depositing.value = false;\n return;\n }\n\n txListener(tx, {\n onTxConfirmed: async () => {\n await allowanceAvailableQuery.refetch.value();\n emit('success', tx);\n data.amount = '';\n depositing.value = false;\n },\n onTxFailed: () => {\n depositing.value = false;\n }\n });\n }\n\n /*watch(balances, (newBalances, oldBalances) => {\n const balancesChanged = !isEqual(newBalances, oldBalances);\n if (balancesChanged) {\n //\n }\n });*/\n\n watch(isWalletReady, isAuth => {\n if (!isAuth) {\n data.amount = '0';\n data.propMax = [];\n }\n });\n\n watch(account, () => {\n /*if (hasZeroBalance.value) {\n //\n } else {\n //\n }*/\n });\n\n onMounted(() => {\n /*if (hasZeroBalance.value) {\n //\n } else {\n //\n }*/\n });\n\n return {\n // data\n ...toRefs(data),\n\n approvalRequired,\n approveToken,\n depositing,\n approving,\n\n Goals,\n TOKENS,\n // computed\n tokens,\n appNetworkConfig,\n amountRules,\n isWalletReady,\n toggleWalletSelectModal,\n isRequired,\n // methods\n submit,\n fNum,\n trackGoal,\n bptBalance\n };\n }\n});\n","import { render } from \"./FarmDepositForm.vue?vue&type=template&id=56339398&ts=true\"\nimport script from \"./FarmDepositForm.vue?vue&type=script&lang=ts\"\nexport * from \"./FarmDepositForm.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, ref } from 'vue';\nimport InvestForm from '@/components/forms/pool_actions/InvestForm.vue';\nimport WithdrawForm from '@/components/forms/pool_actions/WithdrawForm.vue';\nimport SuccessOverlay from '@/components/cards/SuccessOverlay.vue';\nimport { useI18n } from 'vue-i18n';\nimport TradeSettingsPopover, {\n TradeSettingsContext\n} from '@/components/popovers/TradeSettingsPopover.vue';\nimport useFathom from '@/composables/useFathom';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport FarmWithdrawForm from '@/components/forms/farm_actions/FarmWithdrawForm.vue';\nimport FarmDepositForm from '@/components/forms/farm_actions/FarmDepositForm.vue';\nimport { getAddress } from '@ethersproject/address';\nimport useTokens from '@/composables/useTokens';\n\nexport default defineComponent({\n name: 'PoolActionsCard',\n\n emits: ['onTx'],\n\n components: {\n InvestForm,\n WithdrawForm,\n SuccessOverlay,\n TradeSettingsPopover,\n FarmWithdrawForm,\n FarmDepositForm\n },\n\n props: {\n pool: { type: Object, required: true },\n missingPrices: { type: Boolean, default: false }\n },\n\n setup(props, { emit }) {\n /**\n * COMPOSABLES\n */\n const { t } = useI18n();\n const { trackGoal, Goals } = useFathom();\n const { explorerLinks: explorer } = useWeb3();\n const { balanceFor } = useTokens();\n\n /**\n * STATE\n */\n const hasUnstakedBpt = computed(() => {\n const balance = props.pool.farm\n ? balanceFor(getAddress(props.pool.farm.pair))\n : '0';\n return props.pool.farm && parseFloat(balance) > 0;\n });\n const hasStakedBpt = computed(\n () => props.pool.farm && props.pool.farm.share > 0\n );\n\n const tabs = computed(() => {\n const tabs: { value: string; label: string; alert?: boolean }[] = [\n { value: 'invest', label: t('invest') },\n { value: 'withdraw', label: t('withdraw') }\n ];\n\n if (props.pool.farm) {\n tabs.push({\n value: 'farm',\n label: 'Farm',\n alert: hasUnstakedBpt.value\n });\n }\n\n return tabs;\n });\n const activeTab = ref(tabs.value[0].value);\n const investmentSuccess = ref(false);\n const withdrawalSuccess = ref(false);\n const farmInvestmentSuccess = ref(false);\n const farmWithdrawalSuccess = ref(false);\n const txHash = ref('');\n\n /**\n * METHODS\n */\n function handleInvestment(txReceipt): void {\n investmentSuccess.value = true;\n txHash.value = txReceipt.hash;\n trackGoal(Goals.Invested);\n emit('onTx', txReceipt);\n }\n\n function handleWithdrawal(txReceipt): void {\n withdrawalSuccess.value = true;\n txHash.value = txReceipt.hash;\n trackGoal(Goals.Withdrawal);\n emit('onTx', txReceipt);\n }\n\n function handleFarmInvestment(txReceipt): void {\n farmInvestmentSuccess.value = true;\n txHash.value = txReceipt.hash;\n trackGoal(Goals.Invested);\n emit('onTx', txReceipt);\n }\n\n function handleFarmWithdrawal(txReceipt): void {\n farmWithdrawalSuccess.value = true;\n txHash.value = txReceipt.hash;\n trackGoal(Goals.Withdrawal);\n emit('onTx', txReceipt);\n }\n\n return {\n // data\n activeTab,\n tabs,\n investmentSuccess,\n withdrawalSuccess,\n txHash,\n TradeSettingsContext,\n // methods\n handleInvestment,\n handleWithdrawal,\n handleFarmInvestment,\n handleFarmWithdrawal,\n explorer,\n hasUnstakedBpt,\n hasStakedBpt\n };\n }\n});\n","import { render } from \"./PoolActionsCard.vue?vue&type=template&id=3e568a73&ts=true\"\nimport script from \"./PoolActionsCard.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolActionsCard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"px-4 sm:px-0 flex justify-between items-end border-b dark:border-gray-900 mb-6\" }\nconst _hoisted_2 = { class: \"\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalTabs = _resolveComponent(\"BalTabs\")\n const _component_Activities = _resolveComponent(\"Activities\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(_component_BalTabs, {\n modelValue: _ctx.activeTab,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.activeTab = $event)),\n tabs: _ctx.tabs,\n \"no-pad\": \"\",\n class: \"-mb-px\"\n }, null, 8, [\"modelValue\", \"tabs\"])\n ])\n ]),\n (_ctx.activeTab === _ctx.PoolActivityTab.ALL_ACTIVITY)\n ? (_openBlock(), _createBlock(_component_Activities, {\n key: 0,\n \"pool-activity-type\": _ctx.PoolActivityTab.ALL_ACTIVITY,\n pool: _ctx.pool,\n loading: _ctx.loading\n }, null, 8, [\"pool-activity-type\", \"pool\", \"loading\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.activeTab === _ctx.PoolActivityTab.USER_ACTIVITY)\n ? (_openBlock(), _createBlock(_component_Activities, {\n key: 1,\n \"pool-activity-type\": _ctx.PoolActivityTab.USER_ACTIVITY,\n pool: _ctx.pool,\n loading: _ctx.loading\n }, null, 8, [\"pool-activity-type\", \"pool\", \"loading\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Table = _resolveComponent(\"Table\")\n\n return (_openBlock(), _createBlock(_component_Table, {\n tokens: _ctx.pool ? _ctx.pool.tokensList : [],\n \"pool-activities\": _ctx.poolActivities,\n \"is-loading\": _ctx.loading || _ctx.isLoadingPoolActivities,\n \"is-loading-more\": _ctx.poolActivitiesIsFetchingNextPage,\n \"is-paginated\": _ctx.poolActivitiesHasNextPage,\n onLoadMore: _ctx.loadMorePoolActivities,\n \"no-results-label\": \n _ctx.poolActivityType === _ctx.PoolActivityTab.ALL_ACTIVITY\n ? _ctx.$t('noTransactionsPool')\n : _ctx.$t('noTransactionsUserPool')\n \n }, null, 8, [\"tokens\", \"pool-activities\", \"is-loading\", \"is-loading-more\", \"is-paginated\", \"onLoadMore\", \"no-results-label\"]))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"px-6 py-2\" }\nconst _hoisted_2 = { class: \"flex items-center\" }\nconst _hoisted_3 = { class: \"flex center mr-3\" }\nconst _hoisted_4 = { class: \"px-6 py-4 flex -mt-1 flex-wrap\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"m-1 flex items-center p-1 px-2 bg-gray-50 dark:bg-gray-700 rounded-lg\"\n}\nconst _hoisted_6 = { class: \"px-6 py-4 flex justify-end\" }\nconst _hoisted_7 = { class: \"px-6 py-4\" }\nconst _hoisted_8 = { class: \"flex items-center justify-end wrap whitespace-nowrap text-right\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_BalLink = _resolveComponent(\"BalLink\")\n const _component_BalTable = _resolveComponent(\"BalTable\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n\n return (_openBlock(), _createBlock(_component_BalCard, {\n class: \"overflow-x-auto\",\n square: $setup.upToLargeBreakpoint,\n noBorder: $setup.upToLargeBreakpoint,\n noPad: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalTable, {\n columns: $setup.columns,\n data: $setup.activityRows,\n \"is-loading\": $props.isLoading,\n \"is-loading-more\": $props.isLoadingMore,\n \"is-paginated\": $props.isPaginated,\n onLoadMore: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('loadMore'))),\n \"skeleton-class\": \"h-64\",\n sticky: \"both\",\n \"no-results-label\": $props.noResultsLabel,\n \"initial-state\": {\n sortColumn: 'timeAgo',\n sortDirection: 'desc'\n }\n }, {\n actionCell: _withCtx((action) => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", _hoisted_3, [\n (action.type === 'Join')\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 0,\n name: \"plus\",\n size: \"sm\",\n class: \"text-green-500 dark:text-green-400\"\n }))\n : (_openBlock(), _createBlock(_component_BalIcon, {\n key: 1,\n name: \"minus\",\n size: \"sm\",\n class: \"text-red-500\"\n }))\n ]),\n _createVNode(\"div\", null, _toDisplayString(action.label), 1)\n ])\n ])\n ]),\n detailsCell: _withCtx((action) => [\n _createVNode(\"div\", _hoisted_4, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(action.tokenAmounts, (tokenAmount, i) => {\n return (_openBlock(), _createBlock(_Fragment, { key: i }, [\n (tokenAmount.amount !== '0')\n ? (_openBlock(), _createBlock(\"div\", _hoisted_5, [\n _createVNode(_component_BalAsset, {\n address: tokenAmount.address,\n class: \"mr-2 flex-shrink-0\"\n }, null, 8, [\"address\"]),\n _createTextVNode(\" \" + _toDisplayString(tokenAmount.amount), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ], 64))\n }), 128))\n ])\n ]),\n valueCell: _withCtx((action) => [\n _createVNode(\"div\", _hoisted_6, _toDisplayString($setup.fNum(action.value, 'usd_m')), 1)\n ]),\n timeCell: _withCtx((action) => [\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(\"div\", _hoisted_8, [\n _createTextVNode(_toDisplayString(action.formattedDate) + \" \", 1),\n _createVNode(_component_BalLink, {\n href: $setup.explorer.txLink(action.tx),\n external: \"\",\n class: \"ml-2 flex items-center\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"arrow-up-right\",\n size: \"sm\",\n class: \"text-gray-500 hover:text-green-500 transition-colors\"\n })\n ]),\n _: 2\n }, 1032, [\"href\"])\n ])\n ])\n ]),\n _: 1\n }, 8, [\"columns\", \"data\", \"is-loading\", \"is-loading-more\", \"is-paginated\", \"no-results-label\"])\n ]),\n _: 1\n }, 8, [\"square\", \"noBorder\"]))\n}","\nimport { PropType, computed } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport numeral from 'numeral';\nimport useTokens from '@/composables/useTokens';\nimport useNumbers from '@/composables/useNumbers';\nimport { getAddress } from '@ethersproject/address';\nimport {\n PoolActivity,\n PoolActivityType\n} from '@/services/balancer/subgraph/types';\nimport { ColumnDefinition } from '@/components/_global/BalTable/BalTable.vue';\nimport { formatDistanceToNow } from 'date-fns';\nimport { bnum } from '@balancer-labs/sor2/dist/bmath';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useBreakpoints from '@/composables/useBreakpoints';\n\ntype TokenAmount = {\n address: string;\n symbol: string;\n amount: string;\n};\n\ninterface ActivityRow {\n label: string;\n value: string;\n timestamp: number;\n formattedDate: string;\n tx: string;\n type: PoolActivityType;\n tokenAmounts: TokenAmount[];\n}\n\nexport default {\n emits: ['loadMore'],\n\n props: {\n tokens: {\n type: Array as PropType,\n required: true\n },\n poolActivities: {\n type: Array as PropType,\n required: true\n },\n isLoading: {\n type: Boolean,\n default: false\n },\n isLoadingMore: {\n type: Boolean,\n default: false\n },\n loadMore: {\n type: Function as PropType<() => void>\n },\n isPaginated: {\n type: Boolean,\n default: false\n },\n noResultsLabel: {\n type: String\n }\n },\n\n setup(props) {\n const { fNum } = useNumbers();\n const { t } = useI18n();\n const { explorerLinks } = useWeb3();\n const { tokens, priceFor } = useTokens();\n const { upToLargeBreakpoint } = useBreakpoints();\n\n const columns = computed[]>(() => [\n {\n name: t('action'),\n id: 'action',\n accessor: 'tx',\n Cell: 'actionCell',\n width: 175,\n sortable: false\n },\n {\n name: t('details'),\n id: 'details',\n accessor: '',\n Cell: 'detailsCell',\n width: 300,\n sortable: false\n },\n {\n name: t('value'),\n id: 'value',\n accessor: 'value',\n Cell: 'valueCell',\n align: 'right',\n className: 'align-center w-40',\n sortKey: pool => numeral(pool.value).value(),\n width: 125\n },\n {\n name: t('time'),\n id: 'timeAgo',\n accessor: 'timestamp',\n Cell: 'timeCell',\n align: 'right',\n sortKey: pool => numeral(pool.timestamp).value(),\n width: 200\n }\n ]);\n\n const activityRows = computed(() =>\n props.isLoading\n ? []\n : props.poolActivities.map(({ type, timestamp, tx, amounts }) => {\n const isJoin = type === 'Join';\n\n return {\n label: isJoin ? t('invest') : t('withdraw'),\n value: fNum(getJoinExitValue(amounts), 'usd'),\n timestamp,\n formattedDate: t('timeAgo', [formatDistanceToNow(timestamp)]),\n tx,\n type,\n tokenAmounts: getJoinExitDetails(amounts)\n };\n })\n );\n\n function getJoinExitValue(amounts: PoolActivity['amounts']) {\n return amounts\n .reduce((total, amount, index) => {\n const address = getAddress(props.tokens[index]);\n const token = tokens.value[address];\n const price = priceFor(token.address);\n const amountNumber = bnum(Math.abs(parseFloat(amount)));\n\n return total.plus(amountNumber.times(price));\n }, bnum(0))\n .toString();\n }\n\n function getJoinExitDetails(amounts: PoolActivity['amounts']) {\n return amounts.map((amount, index) => {\n const address = getAddress(props.tokens[index]);\n const token = tokens.value[address];\n const symbol = token ? token.symbol : address;\n const amountNumber = parseFloat(amount);\n\n return {\n address,\n symbol,\n amount: fNum(amountNumber, 'token')\n };\n });\n }\n\n return {\n columns,\n activityRows,\n explorer: explorerLinks,\n fNum,\n upToLargeBreakpoint\n };\n }\n};\n","import { render } from \"./Table.vue?vue&type=template&id=7c0025ae&ts=true\"\nimport script from \"./Table.vue?vue&type=script&lang=ts\"\nexport * from \"./Table.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export enum PoolActivityTab {\n ALL_ACTIVITY = 'allActivity',\n USER_ACTIVITY = 'userActivity'\n}\n","import { reactive } from 'vue';\nimport { useInfiniteQuery } from 'vue-query';\nimport { UseInfiniteQueryOptions } from 'react-query/types';\n\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { POOLS } from '@/constants/pools';\n\nimport BalancerSubgraph from '@/services/balancer/subgraph/balancer-subgraph.service';\nimport { PoolActivity } from '@/services/balancer/subgraph/types';\n\ntype PoolActivitiesQueryResponse = {\n poolActivities: PoolActivity[];\n skip?: number;\n};\n\nexport default function usePoolActivitiesQuery(\n id: string,\n options: UseInfiniteQueryOptions = {}\n) {\n // SERVICES\n const balancerSubgraph = new BalancerSubgraph();\n\n // DATA\n const queryKey = reactive(QUERY_KEYS.Pools.Activities(id));\n\n // METHODS\n const queryFn = async ({ pageParam = 0 }) => {\n const poolActivities = await balancerSubgraph.poolActivities.get({\n first: POOLS.Pagination.PerPage,\n skip: pageParam,\n where: {\n pool: id\n }\n });\n\n return {\n poolActivities,\n skip:\n poolActivities.length >= POOLS.Pagination.PerPage\n ? pageParam + POOLS.Pagination.PerPage\n : undefined\n };\n };\n\n const queryOptions = reactive({\n getNextPageParam: (lastPage: PoolActivitiesQueryResponse) => lastPage.skip,\n ...options\n });\n\n return useInfiniteQuery(\n queryKey,\n queryFn,\n queryOptions\n );\n}\n","import { reactive, computed } from 'vue';\nimport { useInfiniteQuery } from 'vue-query';\nimport { UseInfiniteQueryOptions } from 'react-query/types';\n\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { POOLS } from '@/constants/pools';\n\nimport BalancerSubgraph from '@/services/balancer/subgraph/balancer-subgraph.service';\nimport { PoolActivity } from '@/services/balancer/subgraph/types';\nimport useWeb3 from '@/services/web3/useWeb3';\n\ntype UserPoolActivitiesQueryResponse = {\n poolActivities: PoolActivity[];\n skip?: number;\n};\n\nexport default function usePoolUserActivitiesQuery(\n id: string,\n options: UseInfiniteQueryOptions = {}\n) {\n // SERVICES\n const balancerSubgraph = new BalancerSubgraph();\n\n // COMPOSABLES\n const { account, isWalletReady } = useWeb3();\n\n // COMPUTED\n const isQueryEnabled = computed(\n () => isWalletReady.value && account.value != null\n );\n\n // DATA\n const queryKey = reactive(QUERY_KEYS.Pools.UserActivities(id, account));\n\n // METHODS\n const queryFn = async ({ pageParam = 0 }) => {\n const poolActivities = await balancerSubgraph.poolActivities.get({\n first: POOLS.Pagination.PerPage,\n skip: pageParam,\n where: {\n pool: id,\n sender: account.value.toLowerCase()\n }\n });\n\n return {\n poolActivities,\n skip:\n poolActivities.length >= POOLS.Pagination.PerPage\n ? pageParam + POOLS.Pagination.PerPage\n : undefined\n };\n };\n\n const queryOptions = reactive({\n enabled: isQueryEnabled,\n getNextPageParam: (lastPage: UserPoolActivitiesQueryResponse) =>\n lastPage.skip,\n ...options\n });\n\n return useInfiniteQuery(\n queryKey,\n queryFn,\n queryOptions\n );\n}\n","\nimport { defineComponent, computed, PropType } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { flatten } from 'lodash';\nimport Table from './Table.vue';\nimport usePoolActivitiesQuery from '@/composables/queries/usePoolActivitiesQuery';\nimport usePoolUserActivitiesQuery from '@/composables/queries/usePoolUserActivitiesQuery';\nimport { FullPool } from '@/services/balancer/subgraph/types';\nimport { PoolActivityTab } from './types';\n\nexport default defineComponent({\n components: {\n Table\n },\n\n props: {\n pool: {\n type: Object as PropType,\n required: true\n },\n loading: {\n type: Boolean,\n default: false\n },\n poolActivityType: {\n type: String as PropType,\n default: PoolActivityTab.ALL_ACTIVITY\n }\n },\n\n setup(props) {\n /**\n * COMPOSABLES\n */\n const route = useRoute();\n\n /**\n * STATE\n */\n const id = route.params.id as string;\n\n /**\n * QUERIES\n */\n const poolActivitiesQuery =\n props.poolActivityType === PoolActivityTab.ALL_ACTIVITY\n ? usePoolActivitiesQuery(id)\n : usePoolUserActivitiesQuery(id);\n\n /**\n * COMPUTED\n */\n const poolActivities = computed(() =>\n poolActivitiesQuery.data.value\n ? flatten(\n poolActivitiesQuery.data.value.pages.map(\n page => page.poolActivities\n )\n )\n : []\n );\n\n const isLoadingPoolActivities = computed(\n () => poolActivitiesQuery.isLoading.value\n );\n\n const poolActivitiesHasNextPage = computed(\n () => poolActivitiesQuery.hasNextPage?.value\n );\n\n const poolActivitiesIsFetchingNextPage = computed(\n () => poolActivitiesQuery.isFetchingNextPage?.value\n );\n\n /**\n * METHODS\n */\n function loadMorePoolActivities() {\n poolActivitiesQuery.fetchNextPage.value();\n }\n\n return {\n // computed\n isLoadingPoolActivities,\n poolActivities,\n poolActivitiesHasNextPage,\n poolActivitiesIsFetchingNextPage,\n // methods\n loadMorePoolActivities,\n // constants\n PoolActivityTab\n };\n }\n});\n","import { render } from \"./Activities.vue?vue&type=template&id=777e7d14&ts=true\"\nimport script from \"./Activities.vue?vue&type=script&lang=ts\"\nexport * from \"./Activities.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent, PropType, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport { FullPool } from '@/services/balancer/subgraph/types';\n\nimport Activities from './Activities.vue';\n\nimport { PoolActivityTab } from './types';\n\nexport default defineComponent({\n components: {\n Activities\n },\n\n props: {\n pool: {\n type: Object as PropType,\n required: true\n },\n loading: {\n type: Boolean,\n default: false\n }\n },\n\n setup() {\n // COMPOSABLES\n const { t } = useI18n();\n\n // DATA\n const tabs = [\n { value: PoolActivityTab.ALL_ACTIVITY, label: t('allTransactions') },\n { value: PoolActivityTab.USER_ACTIVITY, label: t('myTransactions') }\n ];\n const activeTab = ref(tabs[0].value);\n\n return {\n // data\n tabs,\n activeTab,\n // constants\n PoolActivityTab\n };\n }\n});\n","import { render } from \"./PoolActivitiesCard.vue?vue&type=template&id=abd17194&ts=true\"\nimport script from \"./PoolActivitiesCard.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolActivitiesCard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"20\",\n height: \"20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createVNode(\"g\", {\n fill: \"none\",\n \"fill-rule\": \"evenodd\"\n}, [\n /*#__PURE__*/_createVNode(\"circle\", {\n fill: \"#192533\",\n cx: \"10\",\n cy: \"10\",\n r: \"10\"\n }),\n /*#__PURE__*/_createVNode(\"g\", { \"fill-rule\": \"nonzero\" }, [\n /*#__PURE__*/_createVNode(\"path\", {\n d: \"M11.608 12.19v-2.095H9.453V8h4.31v4.19h-2.155zm2.155-6.285H7.298v6.285H5.143V3.81h8.62v2.095z\",\n fill: \"#87ABC5\"\n }),\n /*#__PURE__*/_createVNode(\"path\", {\n fill: \"#87ABC5\",\n d: \"M13.763 13.029v1.257H7.298V12.19h4.31v-.942h2.155z\"\n }),\n /*#__PURE__*/_createVNode(\"path\", {\n fill: \"#FFF\",\n d: \"M15.918 5.905V8h-2.155V5.905z\"\n }),\n /*#__PURE__*/_createVNode(\"path\", {\n fill: \"#1D252E\",\n d: \"M7.298 12.19v2.096H5.143V12.19z\"\n }),\n /*#__PURE__*/_createVNode(\"path\", {\n fill: \"#F07F53\",\n d: \"M7.298 14.286v2.095H5.143v-2.095z\"\n })\n ])\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"svg\", _hoisted_1, [\n _hoisted_2\n ]))\n}","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'GauntletIcon'\n});\n","import { render } from \"./GauntletIcon.vue?vue&type=template&id=6d2319cf&ts=true\"\nimport script from \"./GauntletIcon.vue?vue&type=script&lang=ts\"\nexport * from \"./GauntletIcon.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import Service from '../balancer-contracts.service';\nimport { default as vaultAbi } from '@/lib/abi/Vault.json';\nimport { Multicaller } from '@/lib/utils/balancer/contract';\nimport { getAddress } from '@ethersproject/address';\nimport { formatUnits } from '@ethersproject/units';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { OnchainPoolData, PoolType } from '../../subgraph/types';\nimport ConfigService from '@/services/config/config.service';\nimport { TokenInfoMap } from '@/types/TokenList';\n\nexport default class Vault {\n service: Service;\n\n constructor(service, private readonly configService = new ConfigService()) {\n this.service = service;\n }\n\n public async getPoolData(\n id: string,\n type: PoolType,\n tokens: TokenInfoMap\n ): Promise {\n const poolAddress = getAddress(id.slice(0, 42));\n let result = {} as Record;\n const vaultMultiCaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n vaultAbi\n );\n const tokenMultiCaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n this.service.allABIs\n );\n\n vaultMultiCaller.call('poolTokens', this.address, 'getPoolTokens', [id]);\n result = await vaultMultiCaller.execute(result);\n tokenMultiCaller.call('totalSupply', poolAddress, 'totalSupply');\n tokenMultiCaller.call('decimals', poolAddress, 'decimals');\n tokenMultiCaller.call('swapFee', poolAddress, 'getSwapFeePercentage');\n\n if (type === 'Weighted') {\n tokenMultiCaller.call('weights', poolAddress, 'getNormalizedWeights', []);\n } else if (type === 'Stable' || type === 'MetaStable') {\n tokenMultiCaller.call('amp', poolAddress, 'getAmplificationParameter');\n }\n\n result = await tokenMultiCaller.execute(result);\n\n return this.serializePoolData(result, type, tokens);\n }\n\n public serializePoolData(\n data,\n type: PoolType,\n tokens: TokenInfoMap\n ): OnchainPoolData {\n const _tokens = {};\n const weights = this.normalizeWeights(data?.weights, type, tokens);\n\n data.poolTokens.tokens.map((token, i) => {\n const tokenBalance = data.poolTokens.balances[i];\n const tokenDecimals = tokens[token]?.decimals;\n _tokens[token] = {\n balance: formatUnits(tokenBalance, tokenDecimals),\n weight: weights[i],\n decimals: tokenDecimals,\n symbol: tokens[token]?.symbol,\n name: tokens[token]?.name,\n logoURI: tokens[token]?.logoURI\n };\n });\n\n let amp = '0';\n if (data?.amp) {\n amp = data.amp.value.div(data.amp.precision);\n }\n\n return {\n tokens: _tokens,\n totalSupply: formatUnits(data.totalSupply, data.decimals),\n decimals: data.decimals,\n swapFee: formatUnits(data.swapFee, 18),\n amp: amp\n };\n }\n\n public normalizeWeights(\n weights: BigNumber[],\n type: PoolType,\n tokens: TokenInfoMap\n ) {\n if (type == 'Weighted') {\n const totalWeight = weights.reduce((a, b) => a.add(b), BigNumber.from(0));\n return weights.map(\n w =>\n ((100 / Number(formatUnits(totalWeight, 10))) *\n Number(formatUnits(w, 10))) /\n 100\n );\n } else if (type === 'Stable') {\n const tokensList = Object.values(tokens);\n return tokensList.map(() => 1 / tokensList.length);\n } else {\n return [];\n }\n }\n\n public get address(): string {\n return this.service.config.addresses.vault;\n }\n}\n","import Vault from './contracts/vault';\nimport { Config } from '@/lib/config';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { default as vaultAbi } from '@/lib/abi/Vault.json';\nimport { default as weightedPoolAbi } from '@/lib/abi/WeightedPool.json';\nimport { default as stablePoolAbi } from '@/lib/abi/StablePool.json';\nimport { default as TokenAbi } from '@/lib/abi/ERC20.json';\nimport { rpcProviderService as _rpcProviderService } from '@/services/rpc-provider/rpc-provider.service';\nimport { configService as _configService } from '@/services/config/config.service';\n\nexport default class BalancerContractsService {\n vault: Vault;\n config: Config;\n provider: JsonRpcProvider;\n\n constructor(\n readonly configService = _configService,\n readonly rpcProviderService = _rpcProviderService\n ) {\n this.provider = this.rpcProviderService.jsonProvider;\n this.config = this.configService.network;\n\n // Init contracts\n this.vault = new Vault(this);\n }\n\n // Combine all the ABIs and remove duplicates\n public get allABIs() {\n return Object.values(\n Object.fromEntries(\n [\n ...vaultAbi,\n ...weightedPoolAbi,\n ...stablePoolAbi,\n ...TokenAbi\n ].map(row => [row.name, row])\n )\n );\n }\n}\n\nexport const balancerContractsService = new BalancerContractsService();\n","import { computed, reactive } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { QueryObserverOptions } from 'react-query/core';\nimport useTokens from '@/composables/useTokens';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { balancerContractsService } from '@/services/balancer/contracts/balancer-contracts.service';\nimport { balancerSubgraphService } from '@/services/balancer/subgraph/balancer-subgraph.service';\nimport { FullPool } from '@/services/balancer/subgraph/types';\nimport { POOLS } from '@/constants/pools';\nimport useApp from '../useApp';\nimport useUserSettings from '../useUserSettings';\nimport { forChange } from '@/lib/utils';\nimport { isStableLike } from '../usePool';\n\nexport default function usePoolQuery(\n id: string,\n options: QueryObserverOptions = {}\n) {\n /**\n * COMPOSABLES\n */\n const { getTokens, injectTokens, prices, dynamicDataLoading } = useTokens();\n const { appLoading } = useApp();\n const { currency } = useUserSettings();\n\n /**\n * COMPUTED\n */\n const enabled = computed(\n () => !appLoading.value && !dynamicDataLoading.value\n );\n\n /**\n * QUERY INPUTS\n */\n const queryKey = QUERY_KEYS.Pools.Current(id);\n\n const queryFn = async () => {\n const [pool] = await balancerSubgraphService.pools.get({\n where: {\n id: id.toLowerCase(),\n totalShares_gt: -1 // Avoid the filtering for low liquidity pools\n }\n });\n\n /*if (isStableLike(pool) && !POOLS.Stable.AllowList.includes(id)) {\n throw new Error('Pool not allowed');\n }*/\n\n await injectTokens([\n ...pool.tokensList,\n balancerSubgraphService.pools.addressFor(pool.id)\n ]);\n await forChange(dynamicDataLoading, false);\n\n const [decoratedPool] = await balancerSubgraphService.pools.decorate(\n [pool],\n '24h',\n prices.value,\n currency.value\n );\n\n const onchainData = await balancerContractsService.vault.getPoolData(\n id,\n pool.poolType,\n getTokens(decoratedPool.tokenAddresses)\n );\n\n return { ...decoratedPool, onchain: onchainData };\n };\n\n const queryOptions = reactive({\n enabled,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","import { computed, reactive } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { QueryObserverOptions } from 'react-query/core';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { balancerSubgraphService } from '@/services/balancer/subgraph/balancer-subgraph.service';\nimport { PoolSnapshots } from '@/services/balancer/subgraph/types';\nimport usePoolQuery from './usePoolQuery';\nimport {\n beethovenxService,\n HistoricalPrices\n} from '@/services/beethovenx/beethovenx.service';\n\n/**\n * TYPES\n */\ninterface QueryResponse {\n prices: HistoricalPrices;\n snapshots: PoolSnapshots;\n}\n\nexport default function usePoolSnapshotsQuery(\n id: string,\n days: number,\n options: QueryObserverOptions = {}\n) {\n /**\n * QUERY DEPENDENCIES\n */\n const poolQuery = usePoolQuery(id);\n\n /**\n * COMPUTED\n */\n const pool = computed(() => poolQuery.data.value);\n const enabled = computed(() => !!pool.value?.id);\n\n /**\n * QUERY INPUTS\n */\n const queryKey = QUERY_KEYS.Pools.Snapshot(id);\n\n const queryFn = async () => {\n if (!pool.value) throw new Error('No pool');\n\n const prices = await beethovenxService.getHistoricalTokenPrices(\n pool.value.tokensList\n );\n const snapshots = await balancerSubgraphService.poolSnapshots.get(id, days);\n\n return { prices, snapshots };\n };\n\n const queryOptions = reactive({\n enabled,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","export const EXTERNAL_LINKS = {\n Balancer: {\n Home: 'https://app.beethovenx.io/',\n Farm: 'https://app.beethovenx.io/#/farm',\n BalForGas:\n 'https://docs.balancer.finance/core-concepts/bal-balancer-governance-token/bal-for-gas',\n Claim: (account: string) => `https://claim.balancer.finance/#/${account}`,\n PoolsV1Dashboard: 'https://pools.balancer.exchange/#/dashboard',\n PoolsV1Explore: 'https://pools.balancer.exchange/#/explore'\n },\n Gauntlet: {\n Home: 'https://gauntlet.network'\n },\n Ethereum: {\n Wallets: 'https://ethereum.org/en/wallets'\n }\n};\n","import { computed, reactive, ref, Ref } from 'vue';\nimport { useInfiniteQuery } from 'vue-query';\nimport { UseInfiniteQueryOptions } from 'react-query/types';\nimport { flatten } from 'lodash';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { POOLS } from '@/constants/pools';\nimport { balancerSubgraphService } from '@/services/balancer/subgraph/balancer-subgraph.service';\nimport { DecoratedPool } from '@/services/balancer/subgraph/types';\nimport useTokens from '../useTokens';\nimport useUserSettings from '../useUserSettings';\nimport useApp from '../useApp';\nimport { forChange } from '@/lib/utils';\n\ntype PoolsQueryResponse = {\n pools: DecoratedPool[];\n tokens: string[];\n skip?: number;\n};\n\ntype FilterOptions = {\n poolIds?: Ref;\n pageSize?: number;\n};\n\nexport default function usePoolsQuery(\n tokenList: Ref = ref([]),\n options: UseInfiniteQueryOptions = {},\n filterOptions?: FilterOptions\n) {\n // COMPOSABLES\n const { injectTokens, dynamicDataLoading, prices } = useTokens();\n const { currency } = useUserSettings();\n const { appLoading } = useApp();\n\n // DATA\n const queryKey = QUERY_KEYS.Pools.All(tokenList, filterOptions?.poolIds);\n\n // COMPUTED\n const enabled = computed(() => !appLoading.value);\n\n // METHODS\n const queryFn = async ({ pageParam = 0 }) => {\n const queryArgs: any = {\n first: filterOptions?.pageSize || POOLS.Pagination.PerPage,\n skip: pageParam,\n where: {\n tokensList_contains: tokenList.value\n }\n };\n if (filterOptions?.poolIds?.value.length) {\n queryArgs.where.id_in = filterOptions.poolIds.value;\n }\n\n const pools = await balancerSubgraphService.pools.get(queryArgs);\n\n const tokens = flatten(pools.map(pool => pool.tokensList));\n await injectTokens(tokens);\n await forChange(dynamicDataLoading, false);\n\n const decoratedPools = await balancerSubgraphService.pools.decorate(\n pools,\n '24h',\n prices.value,\n currency.value\n );\n\n return {\n pools: decoratedPools,\n tokens,\n skip:\n pools.length >= POOLS.Pagination.PerPage\n ? pageParam + POOLS.Pagination.PerPage\n : undefined\n };\n };\n\n const queryOptions = reactive({\n enabled,\n getNextPageParam: (lastPage: PoolsQueryResponse) => lastPage.skip,\n ...options\n });\n\n return useInfiniteQuery(queryKey, queryFn, queryOptions);\n}\n","import { computed, reactive } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { UseQueryOptions } from 'react-query/types';\nimport { flatten, keyBy } from 'lodash';\nimport { bnum, forChange } from '@/lib/utils';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { balancerSubgraphService } from '@/services/balancer/subgraph/balancer-subgraph.service';\nimport { DecoratedPoolWithShares } from '@/services/balancer/subgraph/types';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokenLists from '../useTokenLists';\nimport useTokens from '../useTokens';\nimport useUserSettings from '../useUserSettings';\n\ntype UserPoolsQueryResponse = {\n pools: DecoratedPoolWithShares[];\n totalInvestedAmount: string;\n tokens: string[];\n};\n\nexport default function useUserPoolsQuery(\n options: UseQueryOptions = {}\n) {\n /**\n * COMPOSABLES\n */\n const { injectTokens, prices, dynamicDataLoading } = useTokens();\n const { loadingTokenLists } = useTokenLists();\n const { account, isWalletReady } = useWeb3();\n const { currency } = useUserSettings();\n\n /**\n * COMPUTED\n */\n const enabled = computed(\n () =>\n isWalletReady.value && account.value != null && !loadingTokenLists.value\n );\n\n /**\n * QUERY PROPERTIES\n */\n const queryKey = reactive(QUERY_KEYS.Pools.User(account));\n\n const queryFn = async () => {\n const poolShares = await balancerSubgraphService.poolShares.get({\n where: {\n userAddress: account.value.toLowerCase()\n }\n });\n\n const poolSharesIds = poolShares.map(poolShare => poolShare.poolId.id);\n const poolSharesMap = keyBy(poolShares, poolShare => poolShare.poolId.id);\n\n const pools = await balancerSubgraphService.pools.get({\n where: {\n id_in: poolSharesIds\n }\n });\n\n const tokens = flatten(pools.map(pool => pool.tokensList));\n await injectTokens(tokens);\n await forChange(dynamicDataLoading, false);\n const decoratedPools = await balancerSubgraphService.pools.decorate(\n pools,\n '24h',\n prices.value,\n currency.value\n );\n\n const poolsWithShares = decoratedPools.map(pool => ({\n ...pool,\n shares: bnum(pool.totalLiquidity)\n .div(pool.totalShares)\n .times(poolSharesMap[pool.id].balance)\n .toString()\n }));\n\n const totalInvestedAmount = poolsWithShares\n .map(pool => pool.shares)\n .reduce((totalShares, shares) => totalShares.plus(shares), bnum(0))\n .toString();\n\n return {\n pools: poolsWithShares,\n tokens,\n totalInvestedAmount\n };\n };\n\n const queryOptions = reactive({\n enabled,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","import { computed, reactive } from 'vue';\nimport { useInfiniteQuery } from 'vue-query';\nimport { UseInfiniteQueryOptions } from 'react-query/types';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { Farm } from '@/services/balancer/subgraph/types';\nimport useApp from '../useApp';\nimport { farmSubgraphClient } from '@/services/balancer/subgraph/farm-subgraph.client';\n\ntype FarmsQueryResponse = {\n farms: Farm[];\n skip?: number;\n};\n\nexport default function useFarmsQuery(\n options: UseInfiniteQueryOptions = {}\n) {\n // COMPOSABLES\n const { appLoading } = useApp();\n\n // DATA\n const queryKey = QUERY_KEYS.Farms.All;\n\n // COMPUTED\n const enabled = computed(() => !appLoading.value);\n\n // METHODS\n const queryFn = async () => {\n const data = await farmSubgraphClient.getFarms();\n\n return {\n farms: data.farms\n };\n };\n\n const queryOptions = reactive({\n enabled,\n getNextPageParam: (lastPage: FarmsQueryResponse) => lastPage.skip,\n ...options\n });\n\n return useInfiniteQuery(queryKey, queryFn, queryOptions);\n}\n","import { computed, reactive } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { QueryObserverOptions } from 'react-query/core';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { farmSubgraphClient } from '@/services/balancer/subgraph/farm-subgraph.client';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { FarmUser } from '@/services/balancer/subgraph/types';\nimport useApp from '@/composables/useApp';\nimport { masterChefContractsService } from '@/services/farm/master-chef-contracts.service';\nimport useProtocolDataQuery from '@/composables/queries/useProtocolDataQuery';\nimport useTokens from '@/composables/useTokens';\n\nexport default function useAllFarmsForUserQuery(\n options: QueryObserverOptions = {}\n) {\n const { account, isWalletReady, appNetworkConfig } = useWeb3();\n const { appLoading } = useApp();\n const { priceFor, dynamicDataLoading, loading } = useTokens();\n const protocolDataQuery = useProtocolDataQuery();\n const beetsPrice = computed(\n () => protocolDataQuery.data?.value?.beetsPrice || 0\n );\n const enabled = computed(\n () =>\n isWalletReady.value &&\n account.value != null &&\n !appLoading.value &&\n !loading.value &&\n !dynamicDataLoading.value\n );\n const queryKey = QUERY_KEYS.Farms.UserAllFarms(account);\n\n const queryFn = async () => {\n try {\n const userFarms = await farmSubgraphClient.getUserDataForAllFarms(\n account.value\n );\n const decoratedUserFarms: FarmUser[] = [];\n\n for (const userFarm of userFarms) {\n const pendingBeets = await masterChefContractsService.masterChef.getPendingBeetsForFarm(\n userFarm.pool.id,\n account.value\n );\n\n const pendingRewardToken = await masterChefContractsService.hndRewarder.getPendingReward(\n userFarm.pool.id,\n account.value\n );\n\n const hndPrice = priceFor(appNetworkConfig.addresses.hnd);\n\n decoratedUserFarms.push({\n ...userFarm,\n pendingBeets,\n pendingBeetsValue: pendingBeets * beetsPrice.value,\n pendingRewardToken,\n pendingRewardTokenValue: pendingRewardToken * hndPrice\n });\n }\n\n return decoratedUserFarms;\n } catch (e) {\n console.log('ERROR', e);\n return [];\n }\n };\n\n const queryOptions = reactive({\n enabled,\n refetchInterval: 3000,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","import { computed, ComputedRef } from 'vue';\nimport { flatten } from 'lodash';\nimport useFarmsQuery from '@/composables/queries/useFarmsQuery';\nimport { Farm, FarmUser } from '@/services/balancer/subgraph/types';\nimport useAllFarmsForUserQuery from '@/composables/queries/useAllFarmsForUserQuery';\nimport { masterChefContractsService } from '@/services/farm/master-chef-contracts.service';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTransactions from '@/composables/useTransactions';\nimport { TransactionResponse } from '@ethersproject/providers';\n\nexport default function useFarms(): {\n farms: ComputedRef;\n allFarmsForUser: ComputedRef;\n harvestAllFarms: (\n farmIds: string[]\n ) => Promise;\n refetchFarmsForUser: () => Promise;\n isLoadingFarms: ComputedRef;\n} {\n const { getProvider, appNetworkConfig, account } = useWeb3();\n const { addTransaction } = useTransactions();\n const farmsQuery = useFarmsQuery();\n const allFarmsUserQuery = useAllFarmsForUserQuery();\n const allFarmsForUser = computed(() => allFarmsUserQuery.data.value || []);\n\n const farms: ComputedRef = computed(() =>\n farmsQuery.data.value\n ? flatten(farmsQuery.data.value.pages.map(page => page.farms))\n : []\n );\n\n const isLoadingFarms = computed(\n () =>\n farmsQuery.isLoading.value ||\n farmsQuery.isIdle.value ||\n allFarmsUserQuery.isLoading.value\n );\n\n async function harvestAllFarms(farmIds: string[]) {\n try {\n const provider = getProvider();\n const tx = await masterChefContractsService.masterChef.harvestAll(\n provider,\n farmIds,\n account.value\n );\n\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: 'claim',\n summary: 'Harvest all rewards',\n details: {\n spender: appNetworkConfig.addresses.masterChef\n }\n });\n\n return tx;\n } catch (error) {\n console.error(error);\n }\n }\n\n async function refetchFarmsForUser() {\n allFarmsUserQuery.refetch.value();\n }\n\n return {\n farms,\n allFarmsForUser,\n harvestAllFarms,\n isLoadingFarms,\n refetchFarmsForUser\n };\n}\n","import {\n DecoratedFarm,\n DecoratedPool,\n Farm,\n FarmUser,\n PoolApr\n} from '@/services/balancer/subgraph/types';\nimport { getAddress } from '@ethersproject/address';\nimport useTokens from '@/composables/useTokens';\nimport BigNumber from 'bignumber.js';\n\nexport function calculateTvl(farm: Farm, pool: DecoratedPool) {\n const { tokens, priceFor } = useTokens();\n\n if (pool && pool.totalShares !== '0' && farm.slpBalance !== '0') {\n const valuePerShare =\n parseFloat(pool.totalLiquidity) / parseFloat(pool.totalShares);\n\n return Number(parseInt(farm.slpBalance) / 1e18) * valuePerShare;\n }\n\n const address = getAddress(farm.pair);\n const price = priceFor(address);\n\n if (tokens.value[address] && price) {\n return Number(parseInt(farm.slpBalance) / 1e18) * price;\n }\n\n return 0;\n}\n\nexport function calculateRewardsPerDay(\n farm: Farm,\n pool: DecoratedPool,\n blocksPerDay: number\n) {\n const totalBeetsPerDay = new BigNumber(\n farm.masterChef.beetsPerBlock\n ).multipliedBy(blocksPerDay);\n\n return totalBeetsPerDay\n .multipliedBy(farm.allocPoint / farm.masterChef.totalAllocPoint)\n .dividedBy(1e18)\n .toNumber();\n}\n\nexport function calculateApr(\n farm: Farm,\n pool: DecoratedPool,\n blocksPerYear: number,\n beetsPrice: number,\n rewardTokenPrice: number\n) {\n const tvl = calculateTvl(farm, pool);\n\n if (tvl === 0) {\n return 0;\n }\n\n const beetsPerBlock =\n Number(parseInt(farm.masterChef.beetsPerBlock) / 1e18) * 0.872;\n const beetsPerYear = beetsPerBlock * blocksPerYear;\n const farmBeetsPerYear =\n (farm.allocPoint / farm.masterChef.totalAllocPoint) * beetsPerYear;\n const rewardTokenPerYear =\n Number(parseInt(farm.rewarder?.rewardPerSecond || '0') / 1e18) *\n 86400 *\n 365;\n\n const valuePerYear =\n beetsPrice * farmBeetsPerYear + rewardTokenPrice * rewardTokenPerYear;\n\n return valuePerYear / tvl;\n}\n\nexport function getPoolApr(\n pool: DecoratedPool,\n farm: DecoratedFarm,\n blocksPerYear: number,\n beetsPrice: number,\n rewardTokenPrice: number\n): PoolApr {\n const liquidityMiningApr = farm\n ? `${calculateApr(farm, pool, blocksPerYear, beetsPrice, rewardTokenPrice)}`\n : '0';\n\n return {\n pool: pool.dynamic.apr.pool,\n liquidityMining: liquidityMiningApr,\n total: `${parseFloat(pool.dynamic.apr.pool) +\n parseFloat(liquidityMiningApr)}`\n };\n}\n\nexport function decorateFarm(\n farm: Farm,\n pool: DecoratedPool,\n blocksPerYear: number,\n blocksPerDay: number,\n beetsPrice: number,\n rewardTokenPrice: number,\n farmUser?: FarmUser\n): DecoratedFarm {\n const tvl = calculateTvl(farm, pool);\n const apr = calculateApr(\n farm,\n pool,\n blocksPerYear,\n beetsPrice,\n rewardTokenPrice\n );\n const userShare = new BigNumber(farmUser?.amount || 0)\n .div(farm.slpBalance)\n .toNumber();\n\n return {\n ...farm,\n tvl,\n rewards: calculateRewardsPerDay(farm, pool, blocksPerDay),\n apr,\n stake: tvl * userShare,\n pendingBeets: farmUser?.pendingBeets || 0,\n pendingBeetsValue: (farmUser?.pendingBeets || 0) * beetsPrice,\n share: userShare,\n pendingRewardToken: farmUser?.pendingRewardToken || 0,\n pendingRewardTokenValue: farmUser?.pendingRewardTokenValue || 0\n };\n}\n\nexport function decorateFarms(\n pools: DecoratedPool[],\n farms: Farm[],\n allFarmsForUser: FarmUser[],\n blocksPerYear: number,\n blocksPerDay: number,\n beetsPrice: number,\n rewardTokenPrice: number\n) {\n if (farms.length === 0 || pools.length === 0) {\n return [];\n }\n\n const decorated: DecoratedFarm[] = [];\n\n for (const farm of farms) {\n const pool = pools.find(\n pool => pool.address.toLowerCase() === farm.pair.toLowerCase()\n );\n const farmUser = allFarmsForUser.find(\n userFarm => userFarm.pool.id === farm.id\n );\n\n if (pool) {\n decorated.push(\n decorateFarm(\n farm,\n pool,\n blocksPerYear,\n blocksPerDay,\n beetsPrice,\n rewardTokenPrice,\n farmUser\n )\n );\n }\n }\n\n return decorated;\n}\n","import axios from 'axios';\nimport { configService as _configService } from '@/services/config/config.service';\nimport { getUnixTime, startOfHour, subHours } from 'date-fns';\n\nexport default class BlockSubgraphClient {\n url: string;\n\n constructor(private readonly configService = _configService) {\n this.url = configService.network.blockSubgraph || '';\n }\n\n public async getAverageBlockTime(): Promise {\n const data = await this.getBlocks();\n const blocks = data.blocks;\n\n if (blocks.length === 0) {\n console.error(\n 'Unable to retrieve the blocks, returning a default value of 2 seconds per block'\n );\n return 2;\n }\n\n return blocks.reduce(\n (previousValue, currentValue, currentIndex) => {\n if (previousValue.timestamp) {\n const difference = previousValue.timestamp - currentValue.timestamp;\n\n previousValue.averageBlockTime =\n previousValue.averageBlockTime + difference;\n }\n\n previousValue.timestamp = currentValue.timestamp;\n\n if (currentIndex === blocks.length - 1) {\n return previousValue.averageBlockTime / blocks.length;\n }\n\n return previousValue;\n },\n { timestamp: null, averageBlockTime: 0 }\n );\n }\n\n private async getBlocks() {\n const now = startOfHour(Date.now());\n const start = getUnixTime(subHours(now, 6));\n const end = getUnixTime(now);\n\n const query = `\n query {\n blocks(\n first: 1000\n skip: 0\n orderBy: number\n orderDirection: desc\n where: { timestamp_gt: ${start}, timestamp_lt: ${end} }\n ) {\n id\n number\n timestamp\n }\n }\n `;\n\n return this.get(query);\n }\n\n private async get(query) {\n try {\n const {\n data: { data }\n } = await axios.post(\n this.url,\n { query },\n {\n headers: {\n 'Content-Type': 'application/json'\n }\n }\n );\n return data;\n } catch (error) {\n console.error(error);\n }\n }\n}\n\nexport const blockSubgraphClient = new BlockSubgraphClient();\n","// import { reactive } from 'vue';\nimport { useQuery } from 'vue-query';\n// import { UseQueryOptions } from 'react-query/types';\nimport { blockSubgraphClient } from '@/services/balancer/subgraph/block-subraph.client';\n\n/**\n * TYPES\n */\n/**\n * Fetches all allowances for given tokens for each provided contract address.\n */\n\n// options: UseQueryOptions = {} これが引数だった\nexport default function useAverageBlockTimeQuery() {\n const queryFn = async () => {\n console.log('Fetching average block time is 1.286');\n\n return await blockSubgraphClient.getAverageBlockTime();\n };\n\n // const queryOptions = reactive({\n // ...options\n // });\n\n // const sampleVal = \"1.286\";\n return useQuery(['AverageBlockTime'], queryFn);\n}\n","import { computed } from 'vue';\nimport useAverageBlockTimeQuery from '@/composables/queries/useAverageBlockTimeQuery';\n\nconst SECONDS_PER_DAY = 86400;\n\nexport default function useAverageBlockTime() {\n const averageBlockTimeQuery = useAverageBlockTimeQuery();\n\n const blocksPerSecond = computed(() => averageBlockTimeQuery.data.value || 1);\n const blocksPerMinute = computed(() => 60 / blocksPerSecond.value);\n const blocksPerHour = computed(() => (60 * 60) / blocksPerSecond.value);\n const blocksPerDay = computed(() => SECONDS_PER_DAY / blocksPerSecond.value);\n const blocksPerWeek = computed(\n () => (SECONDS_PER_DAY * 7) / blocksPerSecond.value\n );\n const blocksPerMonth = computed(\n () => (SECONDS_PER_DAY * 30) / blocksPerSecond.value\n );\n const blocksPerYear = computed(() => {\n return (SECONDS_PER_DAY * 365) / blocksPerSecond.value;\n });\n\n return {\n blocksPerSecond,\n blocksPerMinute,\n blocksPerHour,\n blocksPerDay,\n blocksPerWeek,\n blocksPerMonth,\n blocksPerYear\n };\n}\n","import { computed, ComputedRef, Ref, ref } from 'vue';\n\nimport { flatten } from 'lodash';\n\nimport usePoolsQuery from '@/composables/queries/usePoolsQuery';\nimport useUserPoolsQuery from '@/composables/queries/useUserPoolsQuery';\nimport useFarms from '@/composables/farms/useFarms';\nimport { decorateFarms, getPoolApr } from '@/lib/utils/farmHelper';\nimport useAverageBlockTime from '@/composables/useAverageBlockTime';\nimport useProtocolDataQuery from '@/composables/queries/useProtocolDataQuery';\nimport {\n DecoratedPoolWithFarm,\n DecoratedPoolWithRequiredFarm,\n DecoratedPoolWithShares\n} from '@/services/balancer/subgraph/types';\nimport { uniqBy } from 'lodash';\nimport useTokens from '@/composables/useTokens';\nimport useWeb3 from '@/services/web3/useWeb3';\n\nexport default function usePools(poolsTokenList: Ref = ref([])) {\n // COMPOSABLES\n const poolsQuery = usePoolsQuery(poolsTokenList);\n const userPoolsQuery = useUserPoolsQuery();\n const protocolDataQuery = useProtocolDataQuery();\n const { priceFor, dynamicDataLoaded } = useTokens();\n const { appNetworkConfig } = useWeb3();\n const beetsPrice = computed(\n () => protocolDataQuery.data?.value?.beetsPrice || 0\n );\n const rewardTokenPrice = computed(() =>\n dynamicDataLoaded.value ? priceFor(appNetworkConfig.addresses.hnd) : 0\n );\n\n const {\n farms,\n allFarmsForUser,\n isLoadingFarms,\n harvestAllFarms,\n refetchFarmsForUser\n } = useFarms();\n const { blocksPerYear, blocksPerDay } = useAverageBlockTime();\n\n // COMPUTED\n\n const pools = computed(() => {\n if (!poolsQuery.data.value) {\n return [];\n }\n\n const flattened = flatten(\n poolsQuery.data.value.pages.map(page => page.pools)\n );\n\n return flattened;\n });\n\n const decoratedFarms = computed(() => {\n return decorateFarms(\n pools.value,\n farms.value,\n allFarmsForUser.value,\n blocksPerYear.value,\n blocksPerDay.value,\n beetsPrice.value,\n rewardTokenPrice.value\n );\n });\n\n const poolsWithFarms: ComputedRef = computed(() => {\n return pools.value.map(pool => {\n const farm = decoratedFarms.value.find(\n farm => pool.address.toLowerCase() === farm.pair.toLowerCase()\n );\n\n return {\n ...pool,\n farm,\n hasLiquidityMiningRewards: !!farm,\n dynamic: {\n ...pool.dynamic,\n apr: farm\n ? getPoolApr(\n pool,\n farm,\n blocksPerYear.value,\n beetsPrice.value,\n rewardTokenPrice.value\n )\n : pool.dynamic.apr\n }\n };\n });\n });\n\n const onlyPoolsWithFarms: ComputedRef = computed(\n () => {\n return poolsWithFarms.value.filter(\n pool => !!pool.farm\n ) as DecoratedPoolWithRequiredFarm[];\n }\n );\n\n const tokens = computed(() =>\n poolsQuery.data.value\n ? flatten(poolsQuery.data.value.pages.map(page => page.tokens))\n : []\n );\n\n const userPools = computed(() => {\n const userPools = userPoolsQuery.data.value?.pools || [];\n const userFarmPools = onlyPoolsWithFarms.value\n .filter(pool => pool.farm.stake > 0)\n .map(pool => ({ ...pool, shares: '0' }));\n\n return uniqBy([...userPools, ...userFarmPools], 'id').map(pool => {\n const farm = decoratedFarms.value.find(\n farm => pool.address.toLowerCase() === farm.pair.toLowerCase()\n );\n\n return {\n ...pool,\n farm,\n hasLiquidityMiningRewards: !!farm,\n dynamic: {\n ...pool.dynamic,\n apr: farm\n ? getPoolApr(\n pool,\n farm,\n blocksPerYear.value,\n beetsPrice.value,\n rewardTokenPrice.value\n )\n : pool.dynamic.apr\n }\n };\n });\n });\n\n const totalInvestedAmount = computed(\n () => userPoolsQuery.data.value?.totalInvestedAmount\n );\n\n const isLoadingPools = computed(\n () => poolsQuery.isLoading.value || poolsQuery.isIdle.value\n );\n\n const isLoadingUserPools = computed(\n () => userPoolsQuery.isLoading.value || userPoolsQuery.isIdle.value\n );\n\n const poolsHasNextPage = computed(() => poolsQuery.hasNextPage?.value);\n const poolsIsFetchingNextPage = computed(\n () => poolsQuery.isFetchingNextPage?.value\n );\n\n // METHODS\n function loadMorePools() {\n poolsQuery.fetchNextPage.value();\n }\n\n function refetchPools() {\n poolsQuery.refetch.value();\n }\n\n return {\n // computed\n pools,\n tokens,\n userPools,\n totalInvestedAmount,\n isLoadingPools,\n isLoadingUserPools,\n poolsHasNextPage,\n poolsIsFetchingNextPage,\n isLoadingFarms,\n poolsWithFarms,\n onlyPoolsWithFarms,\n\n // methods\n loadMorePools,\n refetchPools,\n\n harvestAllFarms,\n refetchFarmsForUser\n };\n}\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, toDisplayString as _toDisplayString, createVNode as _createVNode, resolveComponent as _resolveComponent, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, withModifiers as _withModifiers } from \"vue\"\n\nconst _hoisted_1 = { class: \"grid grid-cols-1 sm:grid-cols-1 xl:grid-cols-2 gap-4\" }\nconst _hoisted_2 = { class: \"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-2 gap-4\" }\nconst _hoisted_3 = { class: \"text-sm text-gray-500 font-medium mb-2\" }\nconst _hoisted_4 = { class: \"text-xl font-medium truncate flex items-center\" }\nconst _hoisted_5 = /*#__PURE__*/_createVNode(\"div\", { class: \"text-sm text-gray-500 font-medium mb-2\" }, \" My Pending Rewards \", -1)\nconst _hoisted_6 = { class: \"text-xl font-medium truncate flex items-center\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"text-xl font-medium truncate flex items-center\"\n}\nconst _hoisted_8 = { class: \"truncate flex items-center pb-8\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LiquidityMiningTooltip = _resolveComponent(\"LiquidityMiningTooltip\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.stats, (stat, i) => {\n return (_openBlock(), _createBlock(_component_BalCard, { key: i }, {\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_3, _toDisplayString(stat.label), 1),\n _createVNode(\"div\", _hoisted_4, [\n _createTextVNode(_toDisplayString(stat.value) + \" \", 1),\n (stat.id === 'apr')\n ? (_openBlock(), _createBlock(_component_LiquidityMiningTooltip, {\n key: 0,\n pool: _ctx.pool\n }, null, 8, [\"pool\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 2\n }, 1024))\n }), 128))\n ]),\n _createVNode(\"div\", null, [\n _createVNode(_component_BalCard, null, {\n default: _withCtx(() => [\n _hoisted_5,\n _createVNode(\"div\", _hoisted_6, _toDisplayString(_ctx.fNum(_ctx.pool.farm.pendingBeets, 'token_fixed')) + \" BEETS \", 1),\n (_ctx.pool.farm.pendingRewardToken > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_7, _toDisplayString(_ctx.fNum(_ctx.pool.farm.pendingRewardToken, 'token_fixed')) + \" HND \", 1))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_8, _toDisplayString(_ctx.fNum(\n _ctx.pool.farm.pendingBeetsValue + _ctx.pool.farm.pendingRewardTokenValue,\n 'usd'\n )), 1),\n _createVNode(_component_BalBtn, {\n label: \"Harvest\",\n block: \"\",\n color: \"gradient\",\n disabled: \n _ctx.pool.farm.pendingBeets <= 0 && _ctx.pool.farm.pendingRewardToken <= 0\n ,\n loading: _ctx.harvesting,\n onClick: _withModifiers(_ctx.harvestRewards, [\"prevent\"])\n }, null, 8, [\"disabled\", \"loading\", \"onClick\"])\n ]),\n _: 1\n })\n ])\n ]))\n}","\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport useNumbers from '@/composables/useNumbers';\nimport { DecoratedPoolWithRequiredFarm } from '@/services/balancer/subgraph/types';\nimport LiquidityMiningTooltip from '@/components/tooltips/LiquidityMiningTooltip.vue';\nimport useFarm from '@/composables/farms/useFarm';\nimport useEthers from '@/composables/useEthers';\nimport useFarmUserQuery from '@/composables/queries/useFarmUserQuery';\n\nexport default defineComponent({\n components: {\n LiquidityMiningTooltip\n },\n\n props: {\n pool: {\n type: Object as PropType,\n required: true\n }\n },\n\n setup(props) {\n const { fNum } = useNumbers();\n const { txListener } = useEthers();\n const { harvest } = useFarm(ref(props.pool));\n const harvesting = ref(false);\n const farmUserQuery = useFarmUserQuery(props.pool.farm.id);\n const farmUser = computed(() => farmUserQuery.data.value);\n\n async function harvestRewards(): Promise {\n harvesting.value = true;\n const tx = await harvest();\n\n if (!tx) {\n harvesting.value = false;\n return;\n }\n\n txListener(tx, {\n onTxConfirmed: async () => {\n await farmUserQuery.refetch.value();\n harvesting.value = false;\n },\n onTxFailed: () => {\n harvesting.value = false;\n }\n });\n }\n\n // COMPUTED\n const stats = computed(() => {\n const farm = props.pool.farm;\n\n return [\n {\n id: 'tvl',\n label: 'TVL',\n value: fNum(farm.tvl, 'usd')\n },\n {\n id: 'beets',\n label: 'BEETS',\n value: `${fNum(farm.rewards, 'token_lg')} / day`\n },\n {\n id: 'stake',\n label: 'My Balance',\n value: fNum(farm.stake, 'usd')\n },\n {\n id: 'your_share',\n label: 'My Share',\n value: fNum(farm.share, 'percent')\n }\n ];\n });\n\n const pendingRewards = computed(() => {\n return {\n count: farmUser.value?.pendingBeets || 0,\n value: farmUser.value?.pendingBeetsValue || 0\n };\n });\n\n return {\n stats,\n pendingRewards,\n fNum,\n harvestRewards,\n harvesting\n };\n }\n});\n","import { render } from \"./FarmStatCards.vue?vue&type=template&id=4c6a18f1&ts=true\"\nimport script from \"./FarmStatCards.vue?vue&type=script&lang=ts\"\nexport * from \"./FarmStatCards.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./FarmStatCardsLoading.vue?vue&type=template&id=7fac64c6\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, reactive, toRefs, watch } from 'vue';\nimport * as PoolPageComponents from '@/components/pages/pool';\nimport GauntletIcon from '@/components/images/icons/GauntletIcon.vue';\nimport LiquidityMiningTooltip from '@/components/tooltips/LiquidityMiningTooltip.vue';\nimport { useI18n } from 'vue-i18n';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useQueryClient } from 'vue-query';\nimport useNumbers from '@/composables/useNumbers';\nimport { usePool } from '@/composables/usePool';\nimport usePoolQuery from '@/composables/queries/usePoolQuery';\nimport usePoolSnapshotsQuery from '@/composables/queries/usePoolSnapshotsQuery';\nimport { POOLS_ROOT_KEY } from '@/constants/queryKeys';\nimport { POOLS } from '@/constants/pools';\nimport { EXTERNAL_LINKS } from '@/constants/links';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport useApp from '@/composables/useApp';\nimport useProtocolDataQuery from '@/composables/queries/useProtocolDataQuery';\nimport usePools from '@/composables/pools/usePools';\nimport FarmStatCards from '@/components/pages/farm/FarmStatCards.vue';\nimport FarmStatCardsLoading from '@/components/pages/farm/FarmStatCardsLoading.vue';\n\ninterface PoolPageData {\n id: string;\n refetchQueriesOnBlockNumber: number;\n}\n\nconst REFETCH_QUERIES_BLOCK_BUFFER = 3;\n\nexport default defineComponent({\n components: {\n ...PoolPageComponents,\n GauntletIcon,\n LiquidityMiningTooltip,\n FarmStatCardsLoading,\n FarmStatCards\n },\n\n setup() {\n /**\n * COMPOSABLES\n */\n const { appLoading } = useApp();\n const router = useRouter();\n const { t } = useI18n();\n const route = useRoute();\n const { fNum } = useNumbers();\n const { isWalletReady } = useWeb3();\n const queryClient = useQueryClient();\n const { prices } = useTokens();\n const { blockNumber } = useWeb3();\n const { poolsWithFarms } = usePools();\n\n /**\n * QUERIES\n */\n const poolQuery = usePoolQuery(route.params.id as string);\n const poolSnapshotsQuery = usePoolSnapshotsQuery(\n route.params.id as string,\n 30\n );\n\n /**\n * STATE\n */\n const data = reactive({\n id: route.params.id as string,\n refetchQueriesOnBlockNumber: 0\n });\n\n /**\n * COMPUTED\n */\n const pool = computed(() => {\n const poolWithFarm = poolsWithFarms.value.find(\n poolWithFarm => poolWithFarm.id === (route.params.id as string)\n );\n\n if (!poolQuery.data.value) {\n return undefined;\n }\n\n return {\n ...poolQuery.data.value,\n dynamic: poolWithFarm\n ? poolWithFarm.dynamic\n : poolQuery.data.value.dynamic,\n hasLiquidityMiningRewards: !!poolWithFarm,\n farm: poolWithFarm?.farm\n };\n });\n const { isStableLikePool } = usePool(poolQuery.data);\n\n const noInitLiquidity = computed(\n () =>\n !loadingPool.value &&\n pool.value &&\n Number(pool.value.onchain.totalSupply) === 0\n );\n\n const communityManagedFees = computed(\n () => pool.value?.owner == POOLS.DelegateOwner\n );\n const feesManagedByGauntlet = computed(\n () =>\n communityManagedFees.value &&\n POOLS.DynamicFees.Gauntlet.includes(data.id)\n );\n const feesFixed = computed(() => pool.value?.owner == POOLS.ZeroAddress);\n const swapFeeToolTip = computed(() => {\n if (feesManagedByGauntlet.value) {\n return t('feesManagedByGauntlet');\n } else if (communityManagedFees.value) {\n return t('delegateFeesTooltip');\n } else if (feesFixed.value) {\n return t('fixedFeesTooltip');\n } else {\n return t('ownerFeesTooltip');\n }\n });\n\n const loadingPool = computed(\n () =>\n poolQuery.isLoading.value ||\n poolQuery.isIdle.value ||\n poolQuery.error.value\n );\n\n const snapshots = computed(() => poolSnapshotsQuery.data.value?.snapshots);\n const historicalPrices = computed(\n () => poolSnapshotsQuery.data.value?.prices\n );\n const isLoadingSnapshots = computed(\n () =>\n poolSnapshotsQuery.isLoading.value || poolSnapshotsQuery.isIdle.value\n );\n\n const titleTokens = computed(() => {\n if (!pool.value) return [];\n\n return Object.entries(pool.value.onchain.tokens).sort(\n ([, a]: any[], [, b]: any[]) => b.weight - a.weight\n );\n });\n\n const poolTypeLabel = computed(() => {\n if (!pool.value) return '';\n const key = POOLS.Factories[pool.value.factory];\n\n return key ? t(key) : t('unknownPoolType');\n });\n\n const poolName = computed(() => {\n if (!pool.value) return '';\n\n return pool.value.name;\n });\n\n const poolFeeLabel = computed(() => {\n if (!pool.value) return '';\n const feeLabel = fNum(pool.value.onchain.swapFee, 'percent');\n\n if (feesFixed.value) {\n return t('fixedSwapFeeLabel', [feeLabel]);\n } else if (communityManagedFees.value) {\n return feesManagedByGauntlet.value\n ? t('dynamicSwapFeeLabel', [feeLabel])\n : t('communitySwapFeeLabel', [feeLabel]);\n }\n\n // Must be owner-controlled\n return t('dynamicSwapFeeLabel', [feeLabel]);\n });\n\n const missingPrices = computed(() => {\n if (pool.value) {\n const tokensWithPrice = Object.keys(prices.value);\n return !pool.value.tokenAddresses.every(token =>\n tokensWithPrice.includes(token)\n );\n }\n return false;\n });\n\n /**\n * METHODS\n */\n function onNewTx(): void {\n queryClient.invalidateQueries([POOLS_ROOT_KEY, 'current', data.id]);\n data.refetchQueriesOnBlockNumber =\n blockNumber.value + REFETCH_QUERIES_BLOCK_BUFFER;\n }\n\n /**\n * WATCHERS\n */\n watch(blockNumber, () => {\n if (data.refetchQueriesOnBlockNumber === blockNumber.value) {\n queryClient.invalidateQueries([POOLS_ROOT_KEY]);\n } else {\n poolQuery.refetch.value();\n }\n });\n\n watch(poolQuery.error, () => {\n if (poolQuery.error) {\n console.log('poolQuery.error', poolQuery.error);\n router.push({ name: 'home' });\n }\n });\n\n return {\n // data\n ...toRefs(data),\n EXTERNAL_LINKS,\n // computed\n appLoading,\n pool,\n noInitLiquidity,\n poolTypeLabel,\n poolFeeLabel,\n historicalPrices,\n snapshots,\n isLoadingSnapshots,\n loadingPool,\n titleTokens,\n isWalletReady,\n missingPrices,\n feesManagedByGauntlet,\n swapFeeToolTip,\n isStableLikePool,\n poolName,\n // methods\n fNum,\n onNewTx\n };\n }\n});\n","import { render } from \"./Pool.vue?vue&type=template&id=76266212&scoped=true&ts=true\"\nimport script from \"./Pool.vue?vue&type=script&lang=ts\"\nexport * from \"./Pool.vue?vue&type=script&lang=ts\"\n\nimport \"./Pool.vue?vue&type=style&index=0&id=76266212&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-76266212\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createVNode as _createVNode, resolveComponent as _resolveComponent, createTextVNode as _createTextVNode, withCtx as _withCtx, createStaticVNode as _createStaticVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"lm-banner h-48 flex items-center justify-center flex-col\" }\nconst _hoisted_2 = { class: \"text-white font-semibold\" }\nconst _hoisted_3 = { class: \"font-body mt-2 text-white font-semi bold\" }\nconst _hoisted_4 = { class: \"lg:container lg:mx-auto pt-10 md:pt-12\" }\nconst _hoisted_5 = { class: \"px-4\" }\nconst _hoisted_6 = { class: \"mb-1\" }\nconst _hoisted_7 = { class: \"text-black-600\" }\nconst _hoisted_8 = { class: \"md:px-4\" }\nconst _hoisted_9 = { class: \"px-4\" }\nconst _hoisted_10 = { class: \"flex flex-col\" }\nconst _hoisted_11 = { class: \"font-medium mb-1 mt-8\" }\nconst _hoisted_12 = { class: \"flex items-center\" }\nconst _hoisted_13 = /*#__PURE__*/_createStaticVNode(\"

About liquidity mining

Many DeFi protocols distribute tokens to users who perform certain activities that help the network grow. Liquidity Mining aligns incentives between a protocol and its community by distributing voting power to the people who help create a more liquid market.

The Balancer Protocol, via the community Ballers, has allocated BAL tokens to go to Liquidity Providers in certain eligible pools (as listed in the tables above). Tokens are distributed proportional to the amount of liquidity each address contributed, relative to the total liquidity in eligible Balancer pools. BAL tokens give voting rights in community governance. In addition, other protocols like Polygon are further incentivizing liquidity by also distributing MATIC tokens to Balancer Liquidity Providers in certain pools on Polygon.

Liquidity mining details
  • You’re eligible to receive token distributions if you add liquidity to any of the eligible pools.
  • Liquidity mining weeks start and end at 00:00 UTC on Mondays.
  • BAL allocations and pool eligibility are determined weekly by the community ‘Ballers’.
\", 1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_LMTable = _resolveComponent(\"LMTable\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalLink = _resolveComponent(\"BalLink\")\n\n return (_openBlock(), _createBlock(\"div\", null, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"span\", _hoisted_2, \"Week \" + _toDisplayString(_ctx.currentWeek) + \" Liquidity mining incentives\", 1),\n _createVNode(\"h1\", _hoisted_3, \" ~\" + _toDisplayString(_ctx.fNum(_ctx.currentWeekTotalFiat, 'usd')), 1)\n ]),\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(\"div\", _hoisted_5, [\n _createVNode(\"h3\", _hoisted_6, \"Liquidity mining on \" + _toDisplayString(_ctx.shortNetworkName), 1),\n _createVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.description), 1)\n ]),\n _createVNode(\"div\", _hoisted_8, [\n _createVNode(_component_LMTable, {\n \"is-loading\": _ctx.isLoadingPools || _ctx.isLoadingPoolsIdle,\n poolMetadata: _ctx.pools,\n weeks: _ctx.weeks,\n totals: _ctx.totals\n }, null, 8, [\"is-loading\", \"poolMetadata\", \"weeks\", \"totals\"])\n ]),\n _createVNode(\"div\", _hoisted_9, [\n _createVNode(\"div\", _hoisted_10, [\n _createVNode(\"span\", _hoisted_11, \"Liquidity Mining is also on \" + _toDisplayString(_ctx.otherNetwork), 1),\n _createVNode(_component_BalLink, null, {\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_12, [\n _createTextVNode(\" View \" + _toDisplayString(_ctx.otherNetwork) + \" liquidity mining incentives \", 1),\n _createVNode(_component_BalIcon, { name: \"arrow-right\" })\n ])\n ]),\n _: 1\n })\n ]),\n _hoisted_13\n ])\n ])\n ]))\n}","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, renderList as _renderList, Fragment as _Fragment, createTextVNode as _createTextVNode, withCtx as _withCtx, createSlots as _createSlots } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center\" }\nconst _hoisted_2 = { class: \"text-right flex flex-col\" }\nconst _hoisted_3 = { class: \"text-xs\" }\nconst _hoisted_4 = { class: \"px-6 py-4\" }\nconst _hoisted_5 = { class: \"px-6 py-4\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"px-6 py-4 text-right flex flex-col\"\n}\nconst _hoisted_7 = { key: 0 }\nconst _hoisted_8 = {\n key: 1,\n class: \"px-6 py-4 text-right flex flex-col\"\n}\nconst _hoisted_9 = { class: \"text-right flex flex-col\" }\nconst _hoisted_10 = { key: 0 }\nconst _hoisted_11 = { class: \"mt-2 text-gray-500\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAssetSet = _resolveComponent(\"BalAssetSet\")\n const _component_TokenPills = _resolveComponent(\"TokenPills\")\n const _component_BalTable = _resolveComponent(\"BalTable\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n\n return (_openBlock(), _createBlock(_component_BalCard, {\n shadow: \"lg\",\n class: \"mt-4\",\n noPad: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalTable, {\n sticky: \"both\",\n columns: _ctx.columns,\n data: _ctx.data,\n \"is-loading\": _ctx.isLoading,\n \"skeleton-class\": \"h-64\",\n link: {\n to: 'pool',\n getParams: pool => ({ id: pool.id })\n },\n \"initial-state\": { sortDirection: 'desc', sortColumn: _ctx.latestWeek }\n }, _createSlots({\n iconColumnHeader: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n (_ctx.darkMode)\n ? (_openBlock(), _createBlock(\"img\", {\n key: 0,\n src: require('@/assets/images/icons/tokens_white.svg')\n }, null, 8, [\"src\"]))\n : (_openBlock(), _createBlock(\"img\", {\n key: 1,\n src: require('@/assets/images/icons/tokens_black.svg')\n }, null, 8, [\"src\"]))\n ])\n ]),\n iconColumnCell: _withCtx((pool) => [\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(_component_BalAssetSet, {\n addresses: _ctx.orderedTokenAddressesFor(pool),\n width: 100\n }, null, 8, [\"addresses\"])\n ])\n ]),\n poolNameCell: _withCtx((pool) => [\n _createVNode(\"div\", _hoisted_5, [\n _createVNode(_component_TokenPills, {\n tokens: _ctx.orderedPoolTokens(pool),\n isStablePool: _ctx.isStableLike(pool)\n }, null, 8, [\"tokens\", \"isStablePool\"])\n ])\n ]),\n _: 2\n }, [\n _renderList(_ctx.weeks, (week, i) => {\n return {\n name: `header-${week.week}`,\n fn: _withCtx(() => [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"span\", null, _toDisplayString(_ctx.getWeekName(week.week)), 1),\n _createVNode(\"span\", _hoisted_3, \"Starts \" + _toDisplayString(_ctx.getWeekStart(i)), 1)\n ])\n ])\n }\n }),\n _renderList(_ctx.weeks, (week, i) => {\n return {\n name: week.week,\n fn: _withCtx((pool) => [\n (pool.distributions[i].distribution)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_6, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(pool.distributions[i]\n .distribution, (tokenDist, tokenIndex) => {\n return (_openBlock(), _createBlock(\"span\", {\n key: tokenDist.tokenAddress\n }, [\n (tokenIndex !== 0)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_7, \"+\"))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"  \" + _toDisplayString(_ctx.fNum(tokenDist.amount, 'token_lg')) + \" \" + _toDisplayString(_ctx.tokens[_ctx.getAddress(tokenDist.tokenAddress)]?.symbol || 'N/A'), 1)\n ]))\n }), 128))\n ]))\n : (_openBlock(), _createBlock(\"div\", _hoisted_8, \" - \"))\n ])\n }\n }),\n _renderList(_ctx.weeks, (week) => {\n return {\n name: `totals-${week.week}`,\n fn: _withCtx(() => [\n _createVNode(\"div\", _hoisted_9, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.totals[week.week], ({ token, total }, i) => {\n return (_openBlock(), _createBlock(\"span\", {\n key: `totals-${token}`,\n class: \"font-semibold text-right\"\n }, [\n (i !== 0)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_10, \"+\"))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\"  \" + _toDisplayString(_ctx.fNum(total, 'token_lg')) + \" \" + _toDisplayString(_ctx.tokens[_ctx.getAddress(token)]?.symbol || 'N/A'), 1)\n ]))\n }), 128)),\n _createVNode(\"span\", _hoisted_11, \"~$\" + _toDisplayString(_ctx.fNum(_ctx.calculatePricesFor(_ctx.totals[week.week]))), 1)\n ])\n ])\n }\n })\n ]), 1032, [\"columns\", \"data\", \"is-loading\", \"link\", \"initial-state\"])\n ]),\n _: 1\n }))\n}","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, resolveComponent as _resolveComponent, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"-mt-1 flex flex-wrap\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"bg-gray-100 dark:bg-gray-700 rounded-lg flex\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_StableTokenPill = _resolveComponent(\"StableTokenPill\")\n const _component_WeightedTokenPill = _resolveComponent(\"WeightedTokenPill\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n (_ctx.isStablePool)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_2, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.tokens, (token, i) => {\n return (_openBlock(), _createBlock(_component_StableTokenPill, {\n key: token,\n hasBalance: _ctx.hasBalance(token.address),\n symbol: _ctx.symbolFor(token),\n address: token.address,\n isLast: _ctx.tokens.length - 1 === i\n }, null, 8, [\"hasBalance\", \"symbol\", \"address\", \"isLast\"]))\n }), 128))\n ]))\n : (_openBlock(true), _createBlock(_Fragment, { key: 1 }, _renderList(_ctx.tokens, (token) => {\n return (_openBlock(), _createBlock(_component_WeightedTokenPill, {\n key: token.address,\n hasBalance: _ctx.hasBalance(token.address),\n symbol: _ctx.symbolFor(token),\n weight: _ctx.weightFor(token),\n address: token.address\n }, null, 8, [\"hasBalance\", \"symbol\", \"weight\", \"address\"]))\n }), 128))\n ]))\n}","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"mt-2 mr-2 flex items-center px-2 h-10 bg-gray-50 dark:bg-gray-700 rounded-lg relative\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"w-3 h-3 rounded-full border-2 border-white dark:border-gray-850 group-hover:border-gray-50 dark:group-hover:border-gray-800 bg-green-200 dark:bg-green-500 absolute top-0 right-0 -mt-1 -mr-1\"\n}\nconst _hoisted_3 = { class: \"ml-2\" }\nconst _hoisted_4 = { class: \"font-medium text-gray-400 text-xs mt-px ml-1\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n (_ctx.hasBalance)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_2))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_BalAsset, {\n address: _ctx.address,\n size: 24\n }, null, 8, [\"address\"]),\n _createVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.symbol), 1),\n _createVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.weight), 1)\n ]))\n}","\nimport { defineComponent } from 'vue';\nimport BalAsset from '@/components/_global/BalAsset/BalAsset.vue';\n\nexport default defineComponent({\n name: 'WeightedTokenPill',\n\n components: {\n BalAsset\n },\n\n props: {\n hasBalance: { type: Boolean, default: false },\n symbol: { type: String, required: true },\n weight: { type: String, required: true },\n address: { type: String, required: true }\n }\n});\n","import { render } from \"./WeightedTokenPill.vue?vue&type=template&id=ca8e3178&ts=true\"\nimport script from \"./WeightedTokenPill.vue?vue&type=script&lang=ts\"\nexport * from \"./WeightedTokenPill.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex relative h-10 items-center px-2\" }\nconst _hoisted_2 = { class: \"px-2 py-1\" }\nconst _hoisted_3 = { class: \"relative\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"absolute w-1 h-12 -mt-6 ml-px bg-white dark:bg-gray-850 group-hover:bg-gray-50 dark:group-hover:bg-gray-800 transform rotate-12\"\n}\nconst _hoisted_5 = {\n key: 0,\n class: \"w-3 h-3 rounded-full border-2 border-white dark:border-gray-850 group-hover:border-gray-50 dark:group-hover:border-gray-800 bg-green-200 dark:bg-green-500 absolute top-0 right-0 -mt-1 -mr-1\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BalAsset, {\n address: _ctx.address,\n size: 24\n }, null, 8, [\"address\"]),\n _createVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.symbol), 1),\n _createVNode(\"div\", _hoisted_3, [\n (!_ctx.isLast)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_4))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.hasBalance)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_5))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { defineComponent } from 'vue';\nimport BalAsset from '@/components/_global/BalAsset/BalAsset.vue';\n\nexport default defineComponent({\n name: 'StableTokenPill',\n\n components: {\n BalAsset\n },\n\n props: {\n hasBalance: { type: Boolean, default: false },\n symbol: { type: String, required: true },\n address: { type: String, required: true },\n isLast: { type: Boolean, default: false }\n }\n});\n","import { render } from \"./StableTokenPill.vue?vue&type=template&id=11d969bc&ts=true\"\nimport script from \"./StableTokenPill.vue?vue&type=script&lang=ts\"\nexport * from \"./StableTokenPill.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport useNumbers from '@/composables/useNumbers';\nimport { PoolToken } from '@/services/balancer/subgraph/types';\nimport { defineComponent, PropType } from 'vue';\nimport useTokens from '@/composables/useTokens';\nimport WeightedTokenPill from './WeightedTokenPill.vue';\nimport StableTokenPill from './StableTokenPill.vue';\n\nexport default defineComponent({\n name: 'TokenPills',\n\n components: {\n WeightedTokenPill,\n StableTokenPill\n },\n\n props: {\n tokens: {\n type: Array as PropType,\n required: true\n },\n isStablePool: { type: Boolean, required: true }\n },\n\n setup() {\n /**\n * COMPOSABLES\n */\n const { fNum } = useNumbers();\n const { tokens, hasBalance } = useTokens();\n\n /**\n * METHODS\n */\n function symbolFor(token: PoolToken): string {\n return tokens.value[token.address]?.symbol || '---';\n }\n\n function weightFor(token: PoolToken): string {\n return fNum(token.weight, 'percent_lg');\n }\n\n return {\n // methods\n symbolFor,\n weightFor,\n hasBalance\n };\n }\n});\n","import { render } from \"./TokenPills.vue?vue&type=template&id=3bcbf43d&ts=true\"\nimport script from \"./TokenPills.vue?vue&type=script&lang=ts\"\nexport * from \"./TokenPills.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { ColumnDefinition } from '@/components/_global/BalTable/BalTable.vue';\nimport { TokenTotal, WeeklyDistributions } from '@/pages/LiquidityMining.vue';\nimport TokenPills from '../PoolsTable/TokenPills/TokenPills.vue';\nimport {\n DecoratedPoolWithShares,\n PoolToken\n} from '@/services/balancer/subgraph/types';\nimport { getAddress } from '@ethersproject/address';\nimport { computed, defineComponent, PropType, Ref, toRefs } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport useTokens from '@/composables/useTokens';\nimport useNumbers from '@/composables/useNumbers';\nimport { last, sum } from 'lodash';\nimport useDarkMode from '@/composables/useDarkMode';\nimport { isStableLike } from '@/composables/usePool';\nimport { startOfWeek, subWeeks, format } from 'date-fns';\n\nfunction getWeekName(week: string) {\n const parts = week.split('_');\n return `Week ${parts[1]}`;\n}\n\nexport default defineComponent({\n components: {\n TokenPills\n },\n props: {\n weeks: {\n type: Object as PropType,\n required: true\n },\n poolMetadata: {\n type: Object\n },\n isLoading: {\n type: Boolean\n },\n totals: {\n type: Object as PropType>>,\n required: true\n }\n },\n setup(props) {\n const { t } = useI18n();\n const { weeks, poolMetadata } = toRefs(props);\n const { tokens, priceFor } = useTokens();\n const { fNum } = useNumbers();\n const { darkMode } = useDarkMode();\n\n const data = computed(() => {\n if (!poolMetadata.value) return [];\n return poolMetadata.value[0].pools.map(pool => ({\n address: pool.address,\n tokens: pool.tokens,\n distributions: weeks.value.map(week => ({\n week: week.week,\n distribution: week.distributions[pool.id.toLowerCase()]\n })),\n poolType: pool.poolType,\n id: pool.id\n }));\n });\n\n const columns = computed(() => {\n return [\n {\n name: 'Icons',\n id: 'icons',\n accessor: 'uri',\n Header: 'iconColumnHeader',\n Cell: 'iconColumnCell',\n width: 125,\n noGrow: true\n },\n {\n name: t('composition'),\n id: 'poolName',\n accessor: 'id',\n Cell: 'poolNameCell',\n width: 350\n },\n ...weeks.value.map(({ week }, i) => ({\n name: getWeekName(week),\n accessor: week,\n id: week,\n Cell: week,\n Header: `header-${week}`,\n width: 135,\n align: 'right' as any,\n sortKey: pool => {\n return sum(\n (pool.distributions[i].distribution || []).map(d => d.amount)\n );\n },\n totalsCell: `totals-${week}`\n }))\n ];\n });\n\n const latestWeek = computed(() => last(weeks.value)?.week);\n\n function orderedPoolTokens(pool: DecoratedPoolWithShares): PoolToken[] {\n if (isStableLike(pool)) return pool.tokens;\n\n const sortedTokens = pool.tokens.slice();\n sortedTokens.sort((a, b) => parseFloat(b.weight) - parseFloat(a.weight));\n return sortedTokens;\n }\n\n function orderedTokenAddressesFor(pool: DecoratedPoolWithShares) {\n const sortedTokens = orderedPoolTokens(pool);\n return sortedTokens.map(token => getAddress(token.address));\n }\n\n function calculatePricesFor(totals: TokenTotal[]) {\n let totalFiat = 0;\n for (const total of totals) {\n const usdValue = priceFor(getAddress(total.token)) * total.total;\n totalFiat = totalFiat + usdValue;\n }\n return totalFiat;\n }\n\n function getWeekStart(howManyWeeksToSubtract: number) {\n return format(\n startOfWeek(subWeeks(new Date(), howManyWeeksToSubtract)),\n 'dd/MM/yyyy'\n );\n }\n\n return {\n orderedTokenAddressesFor,\n orderedPoolTokens,\n fNum,\n getAddress,\n calculatePricesFor,\n isStableLike,\n getWeekName,\n columns,\n data,\n tokens,\n priceFor,\n darkMode,\n latestWeek,\n getWeekStart\n };\n }\n});\n","import { render } from \"./LMTable.vue?vue&type=template&id=3aa25396&ts=true\"\nimport script from \"./LMTable.vue?vue&type=script&lang=ts\"\nexport * from \"./LMTable.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent } from 'vue';\nimport LMTable from '@/components/tables/LMTable/LMTable.vue';\nimport LiquidityMiningDistributions from '@/lib/utils/liquidityMining/MultiTokenLiquidityMining.json';\nimport usePoolsQuery from '@/composables/queries/usePoolsQuery';\nimport { flatten, last, takeRight, uniq } from 'lodash';\nimport { Network } from '@/constants/network';\nimport useNumbers from '@/composables/useNumbers';\nimport useTokens from '@/composables/useTokens';\nimport { getAddress } from '@ethersproject/address';\nimport useConfig from '@/composables/useConfig';\n\ntype TokenDistribution = {\n tokenAddress: string;\n amount: number;\n};\n\ntype PoolDistribution = {\n chainId: number;\n pools: Record;\n};\n\nexport type TokenTotal = { token: string; total: number };\n\ntype LiquidityMiningDistribution = Record;\n\nexport type WeeklyDistributions = {\n week: string;\n distributions: TokenDistribution[];\n};\n\nexport default defineComponent({\n components: {\n LMTable\n },\n setup() {\n const { fNum } = useNumbers();\n const { priceFor } = useTokens();\n const { networkConfig } = useConfig();\n\n // seperate variable to type the JSON\n const weeksJSON = (LiquidityMiningDistributions as unknown) as LiquidityMiningDistribution;\n\n const totals = computed(() => {\n // map tracking a list of token totals for each week\n const weeklyTotals: Record = {};\n for (const week of weeks) {\n // map tracking totals for each token\n const tokenTotals: Record = {};\n // this will be an array of pools with their token distributions,\n // we just want the values, not the pool id\n const distributions = Object.values(week.distributions);\n for (const distribution of distributions) {\n for (const allocation of distribution) {\n if (!tokenTotals[allocation.tokenAddress]) {\n tokenTotals[allocation.tokenAddress] = {\n token: allocation.tokenAddress,\n total: allocation.amount\n };\n continue;\n } else {\n tokenTotals[allocation.tokenAddress].total =\n tokenTotals[allocation.tokenAddress].total + allocation.amount;\n }\n }\n }\n weeklyTotals[week.week] = Object.values(tokenTotals);\n }\n return weeklyTotals;\n });\n\n const currentWeekTotalFiat = computed(() => {\n let totalFiat = 0;\n const currentWeek = last(Object.values(totals.value));\n if (currentWeek) {\n for (const total of currentWeek) {\n const fiatValue = priceFor(getAddress(total.token)) * total.total;\n totalFiat = totalFiat + fiatValue;\n }\n }\n return totalFiat;\n });\n\n // only concerned with past 3 weeks\n const weeks = takeRight(Object.keys(weeksJSON), 3).map(week => ({\n week: week,\n distributions: weeksJSON[week]\n .filter(d => d.chainId === networkConfig.chainId)\n .map(d => d.pools)[0]\n }));\n\n const poolIds = computed(() =>\n uniq(flatten(weeks.map(d => Object.keys(d.distributions))))\n );\n\n // there shouldn't be too many pools for the LM distribution for each chain\n // so we won't need to get a paginated response, just get all\n const {\n data: poolsResponse,\n isLoading: isLoadingPools,\n isIdle: isLoadingPoolsIdle\n } = usePoolsQuery(undefined, {}, { poolIds, pageSize: 1000 });\n\n const pools = computed(() => poolsResponse.value?.pages);\n\n const shortNetworkName = computed(() => {\n if (networkConfig.chainId === Network.MAINNET) {\n return 'Ethereum';\n }\n if (networkConfig.chainId === Network.POLYGON) {\n return 'Polygon';\n }\n return 'Unknown Network';\n });\n\n const description = computed(() => {\n if (networkConfig.chainId === Network.MAINNET) {\n return `BAL distributions on Ethereum can be claimed weekly by tapping the\n liquidity mining claim tool in the header.`;\n }\n if (networkConfig.chainId === Network.POLYGON) {\n return `BAL distributions on Polygon are automatically airdropped to eligible\n addresses weekly.`;\n }\n return '';\n });\n\n const currentWeek = computed(() => last(last(weeks)?.week.split('_')));\n const otherNetwork = computed(() => {\n if (networkConfig.chainId === Network.MAINNET) return 'Polygon';\n if (networkConfig.chainId === Network.POLYGON) return 'Ethereum';\n return 'Ethereum';\n });\n\n return {\n weeks,\n pools,\n shortNetworkName,\n totals,\n description,\n isLoadingPools,\n isLoadingPoolsIdle,\n currentWeek,\n currentWeekTotalFiat,\n fNum,\n otherNetwork\n };\n }\n});\n","import { render } from \"./LiquidityMining.vue?vue&type=template&id=5bd94953&ts=true\"\nimport script from \"./LiquidityMining.vue?vue&type=script&lang=ts\"\nexport * from \"./LiquidityMining.vue?vue&type=script&lang=ts\"\n\nimport \"./LiquidityMining.vue?vue&type=style&index=0&id=5bd94953&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment, createVNode as _createVNode, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-3fd32942\")\n\n_pushScopeId(\"data-v-3fd32942\")\nconst _hoisted_1 = { class: \"mt-16\" }\nconst _hoisted_2 = { class: \"trade-container\" }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_TradeCard = _resolveComponent(\"TradeCard\")\n const _component_TradeCardGP = _resolveComponent(\"TradeCardGP\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n (_ctx.appLoading || _ctx.loadingTokenLists)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-96\"\n }))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n (_ctx.tradeInterface === _ctx.TradeInterface.BALANCER)\n ? (_openBlock(), _createBlock(_component_TradeCard, { key: 0 }))\n : (_ctx.tradeInterface === _ctx.TradeInterface.GNOSIS)\n ? (_openBlock(), _createBlock(_component_TradeCardGP, { key: 1 }))\n : _createCommentVNode(\"\", true)\n ], 64))\n ])\n ]))\n})","import { toDisplayString as _toDisplayString, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, withCtx as _withCtx, Teleport as _Teleport, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"w-full flex items-center justify-between\" }\nconst _hoisted_2 = { class: \"font-bold\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TradeSettingsPopover = _resolveComponent(\"TradeSettingsPopover\")\n const _component_TradePair = _resolveComponent(\"TradePair\")\n const _component_BalAlert = _resolveComponent(\"BalAlert\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_TradeRoute = _resolveComponent(\"TradeRoute\")\n const _component_SuccessOverlay = _resolveComponent(\"SuccessOverlay\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n const _component_TradeRatesCard = _resolveComponent(\"TradeRatesCard\")\n const _component_TradePreviewModal = _resolveComponent(\"TradePreviewModal\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(_component_BalCard, {\n class: \"relative\",\n shadow: _ctx.tradeCardShadow,\n \"no-border\": !_ctx.darkMode\n }, {\n header: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"h4\", _hoisted_2, _toDisplayString(_ctx.title), 1),\n _createVNode(_component_TradeSettingsPopover, {\n context: _ctx.TradeSettingsContext.trade\n }, null, 8, [\"context\"])\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", null, [\n _createVNode(_component_TradePair, {\n \"token-in-amount-input\": _ctx.tokenInAmount,\n \"token-in-address-input\": _ctx.tokenInAddress,\n \"token-out-amount-input\": _ctx.tokenOutAmount,\n \"token-out-address-input\": _ctx.tokenOutAddress,\n \"exact-in\": _ctx.exactIn,\n \"price-impact\": _ctx.priceImpact,\n onTokenInAmountChange: _cache[1] || (_cache[1] = value => (_ctx.tokenInAmount = value)),\n onTokenInAddressChange: _cache[2] || (_cache[2] = value => (_ctx.tokenInAddress = value)),\n onTokenOutAmountChange: _cache[3] || (_cache[3] = value => (_ctx.tokenOutAmount = value)),\n onTokenOutAddressChange: _cache[4] || (_cache[4] = value => (_ctx.tokenOutAddress = value)),\n onExactInChange: _cache[5] || (_cache[5] = value => (_ctx.exactIn = value)),\n onChange: _ctx.handleAmountChange\n }, null, 8, [\"token-in-amount-input\", \"token-in-address-input\", \"token-out-amount-input\", \"token-out-address-input\", \"exact-in\", \"price-impact\", \"onChange\"]),\n (_ctx.error)\n ? (_openBlock(), _createBlock(_component_BalAlert, {\n key: 0,\n class: \"mb-4\",\n type: \"error\",\n size: \"sm\",\n title: _ctx.error.header,\n description: _ctx.error.body,\n \"action-label\": _ctx.error.label,\n block: \"\",\n onActionClick: _ctx.handleErrorButtonClick\n }, null, 8, [\"title\", \"description\", \"action-label\", \"onActionClick\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.poolsLoading || _ctx.isLoadingApprovals)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 1,\n loading: true,\n \"loading-label\": _ctx.$t('loading'),\n block: \"\"\n }, null, 8, [\"loading-label\"]))\n : (_openBlock(), _createBlock(_component_BalBtn, {\n key: 2,\n label: 'Preview trade',\n disabled: _ctx.tradeDisabled,\n \"loading-label\": _ctx.$t('confirming'),\n color: \"gradient\",\n block: \"\",\n onClick: _withModifiers(_ctx.showTradePreviewModal, [\"prevent\"])\n }, null, 8, [\"disabled\", \"loading-label\", \"onClick\"])),\n _createVNode(_component_TradeRoute, {\n class: \"mt-5\",\n \"address-in\": _ctx.tokenInAddress,\n \"amount-in\": _ctx.tokenInAmount,\n \"address-out\": _ctx.tokenOutAddress,\n \"amount-out\": _ctx.tokenOutAmount,\n pools: _ctx.pools,\n \"sor-return\": _ctx.sorReturn\n }, null, 8, [\"address-in\", \"amount-in\", \"address-out\", \"amount-out\", \"pools\", \"sor-return\"])\n ]),\n (_ctx.tradeSuccess)\n ? (_openBlock(), _createBlock(_component_SuccessOverlay, {\n key: 0,\n title: _ctx.$t('tradeSettled'),\n description: _ctx.$t('tradeSuccess'),\n closeLabel: _ctx.$t('close'),\n \"explorer-link\": _ctx.explorer.txLink(_ctx.txHash),\n onClose: _cache[6] || (_cache[6] = ($event: any) => (_ctx.tradeSuccess = false))\n }, null, 8, [\"title\", \"description\", \"closeLabel\", \"explorer-link\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"shadow\", \"no-border\"]),\n (_ctx.sorManagerIsInitialized)\n ? (_openBlock(), _createBlock(_component_TradeRatesCard, {\n key: 0,\n \"sor-manager\": _ctx.sorManagerRef\n }, null, 8, [\"sor-manager\"]))\n : _createCommentVNode(\"\", true),\n (_openBlock(), _createBlock(_Teleport, { to: \"#modal\" }, [\n (_ctx.modalTradePreviewIsOpen)\n ? (_openBlock(), _createBlock(_component_TradePreviewModal, {\n key: 0,\n \"is-v1-swap\": _ctx.sorReturn.isV1swap,\n \"address-in\": _ctx.tokenInAddress,\n \"amount-in\": _ctx.tokenInAmount,\n \"address-out\": _ctx.tokenOutAddress,\n \"amount-out\": _ctx.tokenOutAmount,\n trading: _ctx.trading,\n \"slippage-error\": _ctx.slippageError,\n onTrade: _ctx.trade,\n onClose: _cache[7] || (_cache[7] = ($event: any) => (_ctx.modalTradePreviewIsOpen = false))\n }, null, 8, [\"is-v1-swap\", \"address-in\", \"amount-in\", \"address-out\", \"amount-out\", \"trading\", \"slippage-error\", \"onTrade\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ], 64))\n}","import { computed, Ref, ref, watch } from 'vue';\nimport { parseUnits } from '@ethersproject/units';\nimport { TransactionResponse } from '@ethersproject/providers';\nimport { approveTokens } from '@/lib/utils/balancer/tokens';\nimport { configService } from '@/services/config/config.service';\nimport { TokenInfoMap } from '@/types/TokenList';\nimport useTokens from '../useTokens';\nimport useConfig from '../useConfig';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTransactions from '../useTransactions';\nimport useEthers from '../useEthers';\nimport { useI18n } from 'vue-i18n';\n\nexport default function useTokenApproval(\n tokenInAddress: Ref,\n amount: Ref,\n tokens: Ref\n) {\n /**\n * STATE\n */\n const approving = ref(false);\n const approved = ref(false);\n const { addTransaction } = useTransactions();\n const { t } = useI18n();\n\n /**\n * COMPOSABLES\n */\n const { getProvider } = useWeb3();\n const { txListener } = useEthers();\n const { networkConfig } = useConfig();\n const { approvalsRequired, dynamicDataLoading } = useTokens();\n\n /**\n * COMPUTED\n */\n const allowanceState = computed(() => {\n if (tokenInAddress.value === networkConfig.nativeAsset.address) {\n return {\n isUnlockedV1: true,\n isUnlockedV2: true,\n approvedSpenders: {}\n };\n }\n\n if (!tokenInAddress.value || !amount.value || approved.value === true)\n return {\n isUnlockedV1: true,\n isUnlockedV2: true,\n approvedSpenders: {}\n };\n\n const requiredAllowancesV1 = approvalsRequired(\n [tokenInAddress.value],\n [amount.value],\n configService.network.addresses.exchangeProxy\n );\n\n const requiredAllowancesV2 = approvalsRequired(\n [tokenInAddress.value],\n [amount.value]\n );\n\n return {\n isUnlockedV1: requiredAllowancesV1.length === 0,\n isUnlockedV2: requiredAllowancesV2.length === 0\n };\n });\n\n const isUnlockedV1 = computed(() => allowanceState.value.isUnlockedV1);\n const isUnlockedV2 = computed(() => allowanceState.value.isUnlockedV2);\n\n /**\n * METHODS\n */\n async function approveSpender(spender: string): Promise {\n approving.value = true;\n try {\n const [tx] = await approveTokens(getProvider(), spender, [\n tokenInAddress.value\n ]);\n txHandler(tx, spender);\n } catch (e) {\n console.log(e);\n approving.value = false;\n }\n }\n\n async function approveV1(): Promise {\n console.log('[TokenApproval] Unlock V1');\n approveSpender(configService.network.addresses.exchangeProxy);\n }\n\n async function approveV2(): Promise {\n console.log('[TokenApproval] Unlock V2');\n approveSpender(configService.network.addresses.vault);\n }\n\n function txHandler(tx: TransactionResponse, spender: string): void {\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: 'approve',\n summary: t('transactionSummary.approveForTrading', [\n tokens.value[tokenInAddress.value].symbol\n ]),\n details: {\n contractAddress: tokenInAddress.value,\n spender\n }\n });\n\n txListener(tx, {\n onTxConfirmed: () => {\n approving.value = false;\n approved.value = true;\n },\n onTxFailed: () => {\n approving.value = false;\n }\n });\n }\n\n /**\n * WATCHERS\n */\n watch(tokenInAddress, async () => {\n if (tokenInAddress.value === networkConfig.nativeAsset.address) {\n approved.value = true;\n } else {\n approved.value = false;\n }\n });\n\n return {\n approved,\n approving,\n approveV1,\n approveV2,\n approveSpender,\n allowanceState,\n isUnlockedV1,\n isUnlockedV2,\n isLoading: dynamicDataLoading\n };\n}\n","import { computed, Ref } from 'vue';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '../useTokens';\n\nconst MIN_NATIVE_ASSET_REQUIRED = 0.0001;\n\nexport enum TradeValidation {\n VALID,\n NO_ACCOUNT,\n EMPTY,\n NO_NATIVE_ASSET,\n NO_BALANCE,\n NO_LIQUIDITY\n}\n\nexport default function useValidation(\n tokenInAddress: Ref,\n tokenInAmount: Ref,\n tokenOutAddress: Ref,\n tokenOutAmount: Ref\n) {\n const { isWalletReady } = useWeb3();\n const { nativeAsset, balances } = useTokens();\n\n const tokensAmountsValid = computed(\n () =>\n isValidTokenAmount(tokenInAmount.value) &&\n isValidTokenAmount(tokenOutAmount.value)\n );\n\n const validationStatus = computed(() => {\n if (!isWalletReady) return TradeValidation.NO_ACCOUNT;\n\n if (\n !isValidTokenAmount(tokenInAmount.value) &&\n !isValidTokenAmount(tokenOutAmount.value)\n )\n return TradeValidation.EMPTY;\n\n const nativeAssetBalance = parseFloat(balances.value[nativeAsset.address]);\n if (nativeAssetBalance < MIN_NATIVE_ASSET_REQUIRED) {\n return TradeValidation.NO_NATIVE_ASSET;\n }\n\n if (\n !balances.value[tokenInAddress.value] ||\n parseFloat(balances.value[tokenInAddress.value]) <\n parseFloat(tokenInAmount.value)\n )\n return TradeValidation.NO_BALANCE;\n\n if (\n parseFloat(tokenOutAmount.value) === 0 ||\n tokenOutAmount.value.trim() === '' ||\n parseFloat(tokenInAmount.value) === 0 ||\n tokenInAmount.value.trim() === ''\n )\n return TradeValidation.NO_LIQUIDITY;\n\n return TradeValidation.VALID;\n });\n\n function isValidTokenAmount(tokenAmount: string) {\n return parseFloat(tokenAmount) > 0 && tokenAmount.trim() !== '';\n }\n\n const errorMessage = computed(() => validationStatus.value);\n\n return {\n validationStatus,\n errorMessage,\n isValidTokenAmount,\n tokensAmountsValid\n };\n}\n","import { TransactionResponse, Web3Provider } from '@ethersproject/providers';\nimport { BigNumberish } from 'ethers';\nimport { BigNumber } from 'bignumber.js';\nimport { sendTransaction } from '@/lib/utils/balancer/web3';\nimport configs from '@/lib/config';\nimport { configService } from '@/services/config/config.service';\nimport { getStETHByWstETH, getWstETHByStETH } from './lido';\n\nexport enum WrapType {\n NonWrap = 0,\n Wrap,\n Unwrap\n}\n\nexport const isNativeAssetWrap = (\n tokenIn: string,\n tokenOut: string\n): boolean => {\n const nativeAddress = configService.network.nativeAsset.address;\n const { weth } = configService.network.addresses;\n return tokenIn === nativeAddress && tokenOut === weth;\n};\n\nexport const getWrapAction = (tokenIn: string, tokenOut: string): WrapType => {\n const nativeAddress = configService.network.nativeAsset.address;\n const { weth, stETH, wstETH } = configService.network.addresses;\n\n if (\n tokenIn.toLowerCase() === nativeAddress.toLowerCase() &&\n tokenOut.toLowerCase() === weth.toLowerCase()\n )\n return WrapType.Wrap;\n if (\n tokenIn.toLowerCase() === stETH.toLowerCase() &&\n tokenOut.toLowerCase() === wstETH.toLowerCase()\n )\n return WrapType.Wrap;\n\n if (\n tokenOut.toLowerCase() === nativeAddress.toLowerCase() &&\n tokenIn.toLowerCase() === weth.toLowerCase()\n )\n return WrapType.Unwrap;\n if (\n tokenOut.toLowerCase() === stETH.toLowerCase() &&\n tokenIn.toLowerCase() === wstETH.toLowerCase()\n )\n return WrapType.Unwrap;\n\n return WrapType.NonWrap;\n};\n\nexport const getWrapOutput = (\n wrapper: string,\n wrapType: WrapType,\n wrapAmount: BigNumberish\n) => {\n if (wrapType === WrapType.NonWrap) throw new Error('Invalid wrap type');\n const { weth, wstETH } = configService.network.addresses;\n\n if (wrapper.toLowerCase() === weth.toLowerCase()) return wrapAmount;\n if (wrapper.toLowerCase() === wstETH.toLowerCase()) {\n return wrapType === WrapType.Wrap\n ? getWstETHByStETH(wrapAmount)\n : getStETHByWstETH(wrapAmount);\n }\n throw new Error('Unknown wrapper');\n};\n\nexport async function wrap(\n network: string,\n web3: Web3Provider,\n wrapper: string,\n amount: BigNumber\n): Promise {\n try {\n if (\n wrapper.toLowerCase() === configs[network].addresses.weth.toLowerCase()\n ) {\n return wrapNative(network, web3, amount);\n } else if (\n wrapper.toLowerCase() === configs[network].addresses.wstETH.toLowerCase()\n ) {\n return wrapLido(network, web3, amount);\n }\n throw new Error('Unrecognised wrapper contract');\n } catch (e) {\n console.log('[Wrapper] Wrap error:', e);\n return Promise.reject(e);\n }\n}\n\nexport async function unwrap(\n network: string,\n web3: Web3Provider,\n wrapper: string,\n amount: BigNumber\n): Promise {\n try {\n if (\n wrapper.toLowerCase() === configs[network].addresses.weth.toLowerCase()\n ) {\n return unwrapNative(network, web3, amount);\n } else if (\n wrapper.toLowerCase() === configs[network].addresses.wstETH.toLowerCase()\n ) {\n return unwrapLido(network, web3, amount);\n }\n throw new Error('Unrecognised wrapper contract');\n } catch (e) {\n console.log('[Wrapper] Unwrap error:', e);\n return Promise.reject(e);\n }\n}\n\nconst wrapNative = async (\n network: string,\n web3: Web3Provider,\n amount: BigNumber\n): Promise =>\n sendTransaction(\n web3,\n configs[network].addresses.weth,\n ['function deposit() payable'],\n 'deposit',\n [],\n { value: amount.toString() }\n );\n\nconst unwrapNative = (\n network: string,\n web3: Web3Provider,\n amount: BigNumber\n): Promise =>\n sendTransaction(\n web3,\n configs[network].addresses.weth,\n ['function withdraw(uint256 wad)'],\n 'withdraw',\n [amount.toString()]\n );\n\nconst wrapLido = async (\n network: string,\n web3: Web3Provider,\n amount: BigNumber\n): Promise =>\n sendTransaction(\n web3,\n configs[network].addresses.wstETH,\n ['function wrap(uint256 _stETHAmount) returns (uint256)'],\n 'wrap',\n [amount.toString()]\n );\n\nconst unwrapLido = async (\n network: string,\n web3: Web3Provider,\n amount: BigNumber\n): Promise =>\n sendTransaction(\n web3,\n configs[network].addresses.wstETH,\n ['function unwrap(uint256 _wstETHAmount) returns (uint256)'],\n 'unwrap',\n [amount.toString()]\n );\n","import { configService } from '@/services/config/config.service';\nimport { rpcProviderService } from '@/services/rpc-provider/rpc-provider.service';\nimport { BigNumberish, Contract } from 'ethers';\nimport { getAddress } from 'ethers/lib/utils';\n\nconst {\n stETH: stEthAddress,\n wstETH: wstEthAddress\n} = configService.network.addresses;\n\nexport function isStETH(tokenInAddress: string, tokenOutAddress: string) {\n if (!tokenInAddress || !tokenOutAddress || !stEthAddress) return false;\n\n return [tokenInAddress, tokenOutAddress]\n .map(getAddress)\n .includes(getAddress(stEthAddress));\n}\n\n/**\n * @notice Get amount of wstETH for a given amount of stETH\n */\nexport function getWstETHByStETH(stETHAmount: BigNumberish) {\n const wstETH = new Contract(\n wstEthAddress,\n [\n 'function getWstETHByStETH(uint256 stETHAmount) external view returns (uint256)'\n ],\n rpcProviderService.jsonProvider\n );\n return wstETH.getWstETHByStETH(stETHAmount);\n}\n\n/**\n * @notice Get amount of stETH for a given amount of wstETH\n */\nexport function getStETHByWstETH(wstETHAmount: BigNumberish) {\n const wstETH = new Contract(\n wstEthAddress,\n [\n 'function getStETHByWstETH(uint256 wstETHAmount) external view returns (uint256)'\n ],\n rpcProviderService.jsonProvider\n );\n return wstETH.getStETHByWstETH(wstETHAmount);\n}\n","import { Swap } from '@balancer-labs/sor/dist/types';\nimport { TransactionResponse, Web3Provider } from '@ethersproject/providers';\nimport { AddressZero, MaxUint256 } from '@ethersproject/constants';\nimport { SwapV2 } from '@balancer-labs/sor2/dist/types';\nimport { BigNumber } from 'bignumber.js';\nimport { sendTransaction } from '@/lib/utils/balancer/web3';\nimport exchangeProxyAbi from '@/lib/abi/ExchangeProxy.json';\nimport vaultAbi from '@/lib/abi/Vault.json';\nimport lidoRelayerAbi from '@/lib/abi/LidoRelayer.json';\nimport configs from '@/lib/config';\nimport { SorReturn } from '@/lib/utils/balancer/helpers/sor/sorManager';\nimport { NATIVE_ASSET_ADDRESS } from '@/constants/tokens';\nimport { getWstETHByStETH, isStETH } from './lido';\nimport { configService } from '@/services/config/config.service';\nimport { bnum } from '..';\n\nconst SWAP_KIND_IN = 0;\nconst SWAP_KIND_OUT = 1;\n\ntype FundManagement = {\n sender: string;\n recipient: string;\n fromInternalBalance: boolean;\n toInternalBalance: boolean;\n};\n\ntype SingleSwap = {\n poolId: string;\n kind: number;\n assetIn: string;\n assetOut: string;\n amount: string;\n userData: string;\n};\n\nexport async function swapIn(\n network: string,\n provider: Web3Provider,\n sorReturn: SorReturn,\n tokenInAmount: BigNumber,\n tokenOutAmountMin: BigNumber\n): Promise {\n if (isStETH(sorReturn.v2result.tokenIn, sorReturn.v2result.tokenOut)) {\n return lidoBatchSwapGivenIn(\n network,\n provider,\n sorReturn.v2result.tokenIn,\n sorReturn.v2result.tokenOut,\n tokenInAmount,\n tokenOutAmountMin,\n sorReturn.v2result.swaps,\n sorReturn.v2result.tokenAddresses\n );\n } else if (sorReturn.isV1swap) {\n return batchSwapGivenInV1(\n network,\n provider,\n sorReturn.tokenIn,\n sorReturn.tokenOut,\n tokenInAmount,\n tokenOutAmountMin,\n sorReturn.v1result[0]\n );\n } else {\n return batchSwapGivenInV2(\n network,\n provider,\n sorReturn.v2result.tokenIn,\n sorReturn.v2result.tokenOut,\n tokenInAmount,\n tokenOutAmountMin,\n sorReturn.v2result.swaps,\n sorReturn.v2result.tokenAddresses\n );\n }\n}\n\nexport async function swapOut(\n network: string,\n provider: Web3Provider,\n sorReturn: SorReturn,\n tokenInAmountMax: BigNumber,\n tokenOutAmount: BigNumber\n): Promise {\n if (isStETH(sorReturn.v2result.tokenIn, sorReturn.v2result.tokenOut)) {\n return lidoBatchSwapGivenOut(\n network,\n provider,\n sorReturn.v2result.tokenIn,\n sorReturn.v2result.tokenOut,\n tokenInAmountMax,\n tokenOutAmount,\n sorReturn.v2result.swaps,\n sorReturn.v2result.tokenAddresses\n );\n } else if (sorReturn.isV1swap) {\n return batchSwapGivenOutV1(\n network,\n provider,\n sorReturn.tokenIn,\n sorReturn.tokenOut,\n tokenInAmountMax,\n sorReturn.v1result[0]\n );\n } else {\n return batchSwapGivenOutV2(\n network,\n provider,\n sorReturn.v2result.tokenIn,\n sorReturn.v2result.tokenOut,\n tokenInAmountMax,\n tokenOutAmount,\n sorReturn.v2result.swaps,\n sorReturn.v2result.tokenAddresses\n );\n }\n}\n\nexport async function batchSwapGivenInV1(\n network: string,\n web3: Web3Provider,\n tokenIn: string,\n tokenOut: string,\n tokenInAmount: BigNumber,\n tokenOutAmountMin: BigNumber,\n swaps: Swap[][]\n): Promise {\n console.log('[Swapper] batchSwapGivenInV1');\n const overrides: any = {};\n\n if (tokenIn === NATIVE_ASSET_ADDRESS) {\n overrides.value = `0x${tokenInAmount.toString(16)}`;\n }\n\n try {\n return sendTransaction(\n web3,\n configs[network].addresses.exchangeProxy,\n exchangeProxyAbi,\n 'multihopBatchSwapExactIn',\n [\n swaps,\n tokenIn,\n tokenOut,\n tokenInAmount.toString(),\n tokenOutAmountMin.toString()\n ],\n overrides\n );\n } catch (e) {\n console.log('[Swapper] batchSwapGivenInV1 Error:', e);\n return Promise.reject(e);\n }\n}\n\nexport async function batchSwapGivenOutV1(\n network: string,\n web3: Web3Provider,\n tokenIn: string,\n tokenOut: string,\n tokenInAmountMax: BigNumber,\n swaps: Swap[][]\n): Promise {\n console.log('[Swapper] batchSwapGivenOutV1');\n const overrides: any = {};\n\n if (tokenIn === NATIVE_ASSET_ADDRESS) {\n overrides.value = `0x${tokenInAmountMax.toString(16)}`;\n }\n\n try {\n return sendTransaction(\n web3,\n configs[network].addresses.exchangeProxy,\n exchangeProxyAbi,\n 'multihopBatchSwapExactOut',\n [swaps, tokenIn, tokenOut, tokenInAmountMax.toString()],\n overrides\n );\n } catch (e) {\n console.log('[Swapper] batchSwapGivenOutV1 Error:', e);\n return Promise.reject(e);\n }\n}\n\nasync function batchSwapGivenInV2(\n network: string,\n web3: Web3Provider,\n tokenIn: string,\n tokenOut: string,\n tokenInAmount: BigNumber,\n tokenOutAmountMin: BigNumber,\n swaps: SwapV2[],\n tokenAddresses: string[]\n): Promise {\n console.log('[Swapper] batchSwapGivenInV2');\n const overrides: any = {};\n\n if (tokenIn === AddressZero) {\n overrides.value = `0x${tokenInAmount.toString(16)}`;\n }\n\n const address = await web3.getSigner().getAddress();\n\n const funds: FundManagement = {\n sender: address,\n recipient: address,\n fromInternalBalance: false,\n toInternalBalance: false\n };\n\n // Limits:\n // +ve means max to send\n // -ve mean min to receive\n // For a multihop the intermediate tokens should be 0\n const limits: string[] = [];\n tokenAddresses.forEach((token, i) => {\n if (token.toLowerCase() === tokenIn.toLowerCase()) {\n limits[i] = tokenInAmount.toString();\n } else if (token.toLowerCase() === tokenOut.toLowerCase()) {\n limits[i] = tokenOutAmountMin.times(-1).toString();\n } else {\n limits[i] = '0';\n }\n });\n console.log('Limits', limits);\n\n try {\n // Do a single swap instead of a batch to save gas\n if (swaps.length == 1) {\n console.log('[Swapper] Overriding with single swap() GivenIn');\n\n const single: SingleSwap = {\n poolId: swaps[0].poolId,\n kind: SWAP_KIND_IN,\n assetIn: tokenAddresses[swaps[0].assetInIndex],\n assetOut: tokenAddresses[swaps[0].assetOutIndex],\n amount: swaps[0].amount,\n userData: swaps[0].userData\n };\n\n return sendTransaction(\n web3,\n configs[network].addresses.vault,\n vaultAbi,\n 'swap',\n [single, funds, tokenOutAmountMin.toString(), MaxUint256],\n overrides\n );\n }\n\n return sendTransaction(\n web3,\n configs[network].addresses.vault,\n vaultAbi,\n 'batchSwap',\n [SWAP_KIND_IN, swaps, tokenAddresses, funds, limits, MaxUint256],\n overrides\n );\n } catch (e) {\n console.log('[Swapper] batchSwapGivenInV2 Error:', e);\n return Promise.reject(e);\n }\n}\n\nasync function batchSwapGivenOutV2(\n network: string,\n web3: Web3Provider,\n tokenIn: string,\n tokenOut: string,\n tokenInAmountMax: BigNumber,\n tokenOutAmount: BigNumber,\n swaps: SwapV2[],\n tokenAddresses: string[]\n): Promise {\n console.log('[Swapper] batchSwapGivenOutV2');\n const overrides: any = {};\n\n if (tokenIn === AddressZero) {\n overrides.value = `0x${tokenInAmountMax.toString(16)}`;\n }\n\n const address = await web3.getSigner().getAddress();\n\n const funds: FundManagement = {\n sender: address,\n recipient: address,\n fromInternalBalance: false,\n toInternalBalance: false\n };\n\n // Limits:\n // +ve means max to send\n // -ve mean min to receive\n // For a multihop the intermediate tokens should be 0\n const limits: string[] = [];\n tokenAddresses.forEach((token, i) => {\n if (token.toLowerCase() === tokenIn.toLowerCase()) {\n limits[i] = tokenInAmountMax.toString();\n } else if (token.toLowerCase() === tokenOut.toLowerCase()) {\n limits[i] = tokenOutAmount.times(-1).toString();\n } else {\n limits[i] = '0';\n }\n });\n console.log('Limits', limits);\n\n try {\n // Do a single swap instead of a batch to save gas\n if (swaps.length == 1) {\n console.log('[Swapper] Overriding with single swap() GivenOut');\n\n const single: SingleSwap = {\n poolId: swaps[0].poolId,\n kind: SWAP_KIND_OUT,\n assetIn: tokenAddresses[swaps[0].assetInIndex],\n assetOut: tokenAddresses[swaps[0].assetOutIndex],\n amount: swaps[0].amount,\n userData: swaps[0].userData\n };\n\n return sendTransaction(\n web3,\n configs[network].addresses.vault,\n vaultAbi,\n 'swap',\n [single, funds, tokenInAmountMax.toString(), MaxUint256],\n overrides\n );\n }\n\n return sendTransaction(\n web3,\n configs[network].addresses.vault,\n vaultAbi,\n 'batchSwap',\n [SWAP_KIND_OUT, swaps, tokenAddresses, funds, limits, MaxUint256],\n overrides\n );\n } catch (e) {\n console.log('[Swapper] batchSwapGivenOutV2 Error:', e);\n return Promise.reject(e);\n }\n}\n\nasync function lidoBatchSwapGivenIn(\n network: string,\n web3: Web3Provider,\n tokenIn: string,\n tokenOut: string,\n tokenInAmount: BigNumber,\n tokenOutAmountMin: BigNumber,\n swaps: SwapV2[],\n tokenAddresses: string[]\n): Promise {\n console.log('[Swapper] lidoBatchSwapGivenIn');\n const overrides: any = {};\n\n if (tokenIn === AddressZero) {\n overrides.value = `0x${tokenInAmount.toString(16)}`;\n }\n\n // Convert tokenIn/tokenOut so that it matches what's in tokenAddresses\n const { stETH, wstETH } = configService.network.addresses;\n if (tokenIn === stETH.toLowerCase()) {\n tokenIn = wstETH.toLowerCase();\n tokenInAmount = bnum(await getWstETHByStETH(tokenInAmount.toString()));\n } else if (tokenOut === stETH.toLowerCase()) {\n tokenOut = wstETH.toLowerCase();\n tokenOutAmountMin = bnum(\n await getWstETHByStETH(tokenOutAmountMin.toString())\n );\n }\n\n const address = await web3.getSigner().getAddress();\n\n const funds: FundManagement = {\n sender: address,\n recipient: address,\n fromInternalBalance: false,\n toInternalBalance: false\n };\n\n // Limits:\n // +ve means max to send\n // -ve mean min to receive\n // For a multihop the intermediate tokens should be 0\n const limits: string[] = [];\n tokenAddresses.forEach((token, i) => {\n if (token.toLowerCase() === tokenIn.toLowerCase()) {\n limits[i] = tokenInAmount.toString();\n } else if (token.toLowerCase() === tokenOut.toLowerCase()) {\n limits[i] = tokenOutAmountMin.times(-1).toString();\n } else {\n limits[i] = '0';\n }\n });\n console.log('Limits', limits);\n\n try {\n // Do a single swap instead of a batch to save gas\n if (swaps.length == 1) {\n console.log('[Swapper] Overriding with single swap() GivenIn');\n\n const single: SingleSwap = {\n poolId: swaps[0].poolId,\n kind: SWAP_KIND_IN,\n assetIn: tokenAddresses[swaps[0].assetInIndex],\n assetOut: tokenAddresses[swaps[0].assetOutIndex],\n amount: swaps[0].amount,\n userData: swaps[0].userData\n };\n\n return sendTransaction(\n web3,\n configs[network].addresses.lidoRelayer,\n lidoRelayerAbi,\n 'swap',\n [single, funds, tokenOutAmountMin.toString(), MaxUint256],\n overrides\n );\n }\n\n return sendTransaction(\n web3,\n configs[network].addresses.lidoRelayer,\n lidoRelayerAbi,\n 'batchSwap',\n [SWAP_KIND_IN, swaps, tokenAddresses, funds, limits, MaxUint256],\n overrides\n );\n } catch (e) {\n console.log('[Swapper] batchSwapGivenIn Error:', e);\n return Promise.reject(e);\n }\n}\n\nasync function lidoBatchSwapGivenOut(\n network: string,\n web3: Web3Provider,\n tokenIn: string,\n tokenOut: string,\n tokenInAmountMax: BigNumber,\n tokenOutAmount: BigNumber,\n swaps: SwapV2[],\n tokenAddresses: string[]\n): Promise {\n console.log('[Swapper] lidoBatchSwapGivenOut');\n const overrides: any = {};\n\n if (tokenIn === AddressZero) {\n overrides.value = `0x${tokenInAmountMax.toString(16)}`;\n }\n\n // Convert tokenIn/tokenOut so that it matches what's in tokenAddresses\n const { stETH, wstETH } = configService.network.addresses;\n if (tokenIn === stETH.toLowerCase()) {\n tokenIn = wstETH.toLowerCase();\n tokenInAmountMax = bnum(\n await getWstETHByStETH(tokenInAmountMax.toString())\n );\n } else if (tokenOut === stETH.toLowerCase()) {\n tokenOut = wstETH.toLowerCase();\n tokenOutAmount = bnum(await getWstETHByStETH(tokenOutAmount.toString()));\n }\n\n const address = await web3.getSigner().getAddress();\n\n const funds: FundManagement = {\n sender: address,\n recipient: address,\n fromInternalBalance: false,\n toInternalBalance: false\n };\n\n // Limits:\n // +ve means max to send\n // -ve mean min to receive\n // For a multihop the intermediate tokens should be 0\n const limits: string[] = [];\n tokenAddresses.forEach((token, i) => {\n if (token.toLowerCase() === tokenIn.toLowerCase()) {\n limits[i] = tokenInAmountMax.toString();\n } else if (token.toLowerCase() === tokenOut.toLowerCase()) {\n limits[i] = tokenOutAmount.times(-1).toString();\n } else {\n limits[i] = '0';\n }\n });\n console.log('Limits', limits);\n\n try {\n // Do a single swap instead of a batch to save gas\n if (swaps.length == 1) {\n console.log('[Swapper] Overriding with single swap() GivenOut');\n\n const single: SingleSwap = {\n poolId: swaps[0].poolId,\n kind: SWAP_KIND_OUT,\n assetIn: tokenAddresses[swaps[0].assetInIndex],\n assetOut: tokenAddresses[swaps[0].assetOutIndex],\n amount: swaps[0].amount,\n userData: swaps[0].userData\n };\n\n return sendTransaction(\n web3,\n configs[network].addresses.lidoRelayer,\n lidoRelayerAbi,\n 'swap',\n [single, funds, tokenInAmountMax.toString(), MaxUint256],\n overrides\n );\n }\n\n return sendTransaction(\n web3,\n configs[network].addresses.lidoRelayer,\n lidoRelayerAbi,\n 'batchSwap',\n [SWAP_KIND_OUT, swaps, tokenAddresses, funds, limits, MaxUint256],\n overrides\n );\n } catch (e) {\n console.log('[Swapper] batchSwapGivenOut Error:', e);\n return Promise.reject(e);\n }\n}\n","import {\n Ref,\n onMounted,\n ref,\n computed,\n ComputedRef,\n reactive,\n toRefs\n} from 'vue';\nimport { useStore } from 'vuex';\nimport { useIntervalFn } from '@vueuse/core';\nimport { BigNumber } from 'bignumber.js';\nimport { Pool } from '@balancer-labs/sor/dist/types';\nimport { SubgraphPoolBase, SwapTypes } from '@balancer-labs/sor2';\nimport { useI18n } from 'vue-i18n';\n\nimport { scale, bnum } from '@/lib/utils';\nimport {\n getWrapOutput,\n unwrap,\n wrap,\n WrapType\n} from '@/lib/utils/balancer/wrapper';\nimport {\n SorManager,\n SorReturn,\n LiquiditySelection\n} from '@/lib/utils/balancer/helpers/sor/sorManager';\nimport { swapIn, swapOut } from '@/lib/utils/balancer/swapper';\nimport { configService } from '@/services/config/config.service';\nimport { rpcProviderService } from '@/services/rpc-provider/rpc-provider.service';\n\nimport useFathom from '../useFathom';\nimport useWeb3 from '@/services/web3/useWeb3';\n\nimport { TransactionResponse } from '@ethersproject/providers';\nimport useEthers from '../useEthers';\nimport { TradeQuote } from './types';\nimport useTransactions, { TransactionAction } from '../useTransactions';\nimport useNumbers from '../useNumbers';\nimport { TokenInfo, TokenInfoMap } from '@/types/TokenList';\nimport useTokens from '../useTokens';\nimport { getStETHByWstETH } from '@/lib/utils/balancer/lido';\nimport { formatUnits, parseUnits } from 'ethers/lib/utils';\n\nconst GAS_PRICE = process.env.VUE_APP_GAS_PRICE || '100000000000';\nconst MAX_POOLS = process.env.VUE_APP_MAX_POOLS || '4';\nconst SWAP_COST = process.env.VUE_APP_SWAP_COST || '100000';\nconst MIN_PRICE_IMPACT = 0.0001;\nconst HIGH_PRICE_IMPACT_THRESHOLD = 0.05;\nconst state = reactive({\n errors: {\n highPriceImpact: false\n }\n});\n\ntype Props = {\n exactIn: Ref;\n tokenInAddressInput: Ref;\n tokenInAmountInput: Ref;\n tokenOutAddressInput: Ref;\n tokenOutAmountInput: Ref;\n tokens: Ref;\n wrapType: Ref;\n tokenInAmountScaled?: ComputedRef;\n tokenOutAmountScaled?: ComputedRef;\n sorConfig?: {\n refetchPools: boolean;\n handleAmountsOnFetchPools: boolean;\n };\n tokenIn: ComputedRef;\n tokenOut: ComputedRef;\n slippageBufferRate: ComputedRef;\n};\n\nexport type UseSor = ReturnType;\n\nexport default function useSor({\n exactIn,\n tokenInAddressInput,\n tokenInAmountInput,\n tokenOutAddressInput,\n tokenOutAmountInput,\n tokens,\n wrapType,\n tokenInAmountScaled,\n tokenOutAmountScaled,\n sorConfig = {\n refetchPools: true,\n handleAmountsOnFetchPools: true\n },\n tokenIn,\n tokenOut,\n slippageBufferRate\n}: Props) {\n let sorManager: SorManager | undefined = undefined;\n const pools = ref<(Pool | SubgraphPoolBase)[]>([]);\n const sorReturn = ref({\n isV1swap: false,\n isV1best: false,\n hasSwaps: false,\n tokenIn: '',\n tokenOut: '',\n returnDecimals: 18,\n returnAmount: new BigNumber(0),\n marketSpNormalised: new BigNumber(0),\n v1result: [[], new BigNumber(0), new BigNumber(0)],\n v2result: {\n tokenAddresses: [],\n swaps: [],\n swapAmount: new BigNumber(0),\n returnAmount: new BigNumber(0),\n returnAmountConsideringFees: new BigNumber(0),\n tokenIn: '',\n tokenOut: '',\n marketSp: new BigNumber(0)\n }\n });\n const trading = ref(false);\n const confirming = ref(false);\n const priceImpact = ref(0);\n const latestTxHash = ref('');\n const latestTx = ref(null);\n const poolsLoading = ref(true);\n const slippageError = ref(false);\n const sorManagerInitialized = ref(false);\n const sorManagerRef = ref(null);\n\n // COMPOSABLES\n const store = useStore();\n const {\n getProvider: getWeb3Provider,\n isV1Supported,\n appNetworkConfig\n } = useWeb3();\n const provider = computed(() => getWeb3Provider());\n const { trackGoal, Goals } = useFathom();\n const { txListener } = useEthers();\n const { addTransaction } = useTransactions();\n const { fNum } = useNumbers();\n const { t } = useI18n();\n const { injectTokens, priceFor } = useTokens();\n\n const liquiditySelection = computed(() => store.state.app.tradeLiquidity);\n\n onMounted(async () => {\n const unknownAssets: string[] = [];\n if (!tokens.value[tokenInAddressInput.value]) {\n unknownAssets.push(tokenInAddressInput.value);\n }\n if (!tokens.value[tokenOutAddressInput.value]) {\n unknownAssets.push(tokenOutAddressInput.value);\n }\n await injectTokens(unknownAssets);\n await initSor();\n await handleAmountChange();\n });\n\n useIntervalFn(async () => {\n if (sorConfig.refetchPools && sorManager) {\n fetchPools();\n }\n }, 30 * 1e3);\n\n function resetState() {\n state.errors.highPriceImpact = false;\n }\n\n async function initSor(): Promise {\n const poolsUrlV1 = `${\n configService.network.poolsUrlV1\n }?timestamp=${Date.now()}`;\n const poolsUrlV2 = `${\n configService.network.poolsUrlV2\n }?timestamp=${Date.now()}`;\n const subgraphUrl = configService.network.subgraph;\n\n // If V1 previously selected on another network then it uses this and returns no liquidity.\n if (!isV1Supported) {\n store.commit('app/setTradeLiquidity', LiquiditySelection.V2);\n }\n\n sorManager = new SorManager(\n isV1Supported,\n rpcProviderService.jsonProvider,\n new BigNumber(GAS_PRICE),\n Number(MAX_POOLS),\n configService.network.chainId,\n configService.network.addresses.weth,\n poolsUrlV1,\n poolsUrlV2,\n subgraphUrl\n );\n\n sorManagerInitialized.value = true;\n sorManagerRef.value = sorManager;\n\n fetchPools();\n }\n\n async function fetchPools(): Promise {\n if (!sorManager) {\n return;\n }\n\n console.time('[SOR] fetchPools');\n await sorManager.fetchPools();\n console.timeEnd('[SOR] fetchPools');\n poolsLoading.value = false;\n // Updates any swaps with up to date pools/balances\n if (sorConfig.handleAmountsOnFetchPools) {\n handleAmountChange();\n }\n }\n\n async function handleAmountChange(): Promise {\n const amount = exactIn.value\n ? tokenInAmountInput.value\n : tokenOutAmountInput.value;\n // Avoid using SOR if querying a zero value or (un)wrapping trade\n const zeroValueTrade = amount === '' || new BigNumber(amount).isZero();\n if (zeroValueTrade) {\n tokenInAmountInput.value = amount;\n tokenOutAmountInput.value = amount;\n priceImpact.value = 0;\n sorReturn.value.hasSwaps = false;\n sorReturn.value.returnAmount = new BigNumber(0);\n return;\n }\n\n const tokenInAddress = tokenInAddressInput.value;\n const tokenOutAddress = tokenOutAddressInput.value;\n\n if (!tokenInAddress || !tokenOutAddress) {\n if (exactIn.value) tokenOutAmountInput.value = '';\n else tokenInAmountInput.value = '';\n return;\n }\n\n const tokenInDecimals = tokens.value[tokenInAddressInput.value]?.decimals;\n const tokenOutDecimals = tokens.value[tokenOutAddressInput.value]?.decimals;\n\n if (wrapType.value !== WrapType.NonWrap) {\n const wrapper =\n wrapType.value === WrapType.Wrap ? tokenOutAddress : tokenInAddress;\n\n if (exactIn.value) {\n tokenInAmountInput.value = amount;\n\n const outputAmount = await getWrapOutput(\n wrapper,\n wrapType.value,\n scale(bnum(amount), tokenInDecimals).toString()\n );\n tokenOutAmountInput.value = scale(\n bnum(outputAmount),\n -tokenInDecimals\n ).toString();\n } else {\n tokenOutAmountInput.value = amount;\n\n const inputAmount = await getWrapOutput(\n wrapper,\n wrapType.value === WrapType.Wrap ? WrapType.Unwrap : WrapType.Wrap,\n scale(bnum(amount), tokenOutDecimals).toString()\n );\n tokenInAmountInput.value = scale(\n bnum(inputAmount),\n -tokenOutDecimals\n ).toString();\n }\n\n sorReturn.value.hasSwaps = false;\n priceImpact.value = 0;\n return;\n }\n\n if (!sorManager || !sorManager.hasPoolData()) {\n if (exactIn.value) tokenOutAmountInput.value = '';\n else tokenInAmountInput.value = '';\n return;\n }\n\n if (exactIn.value) {\n await setSwapCost(\n tokenOutAddressInput.value,\n tokenOutDecimals,\n sorManager\n );\n\n const tokenInAmountNormalised = new BigNumber(amount); // Normalized value\n const tokenInAmountScaled = scale(\n tokenInAmountNormalised,\n tokenInDecimals\n );\n\n const swapReturn: SorReturn = await sorManager.getBestSwap(\n tokenInAddress,\n tokenOutAddress,\n tokenInDecimals,\n tokenOutDecimals,\n SwapTypes.SwapExactIn,\n tokenInAmountScaled,\n tokenInDecimals,\n liquiditySelection.value\n );\n\n sorReturn.value = swapReturn; // TO DO - is it needed?\n const tokenOutAmountNormalised = scale(\n swapReturn.returnAmount,\n -tokenOutDecimals\n );\n tokenOutAmountInput.value =\n tokenOutAmountNormalised.toNumber() > 0\n ? tokenOutAmountNormalised.toFixed(6, BigNumber.ROUND_DOWN)\n : '';\n\n if (!sorReturn.value.hasSwaps) {\n priceImpact.value = 0;\n } else {\n let returnAmtNormalised = scale(\n swapReturn.returnAmount,\n -tokenOutDecimals\n );\n\n returnAmtNormalised = await adjustedPiAmount(\n returnAmtNormalised,\n tokenOutAddress,\n tokenOutDecimals\n );\n\n const effectivePrice = tokenInAmountNormalised.div(returnAmtNormalised);\n const priceImpactCalc = effectivePrice\n .div(swapReturn.marketSpNormalised)\n .minus(1);\n\n priceImpact.value = BigNumber.max(\n priceImpactCalc,\n MIN_PRICE_IMPACT\n ).toNumber();\n }\n } else {\n // Notice that outputToken is tokenOut if swapType == 'swapExactIn' and tokenIn if swapType == 'swapExactOut'\n await setSwapCost(tokenInAddressInput.value, tokenInDecimals, sorManager);\n\n let tokenOutAmountNormalised = new BigNumber(amount);\n const tokenOutAmount = scale(tokenOutAmountNormalised, tokenOutDecimals);\n\n console.log('[SOR Manager] swapExactOut');\n\n const swapReturn: SorReturn = await sorManager.getBestSwap(\n tokenInAddress,\n tokenOutAddress,\n tokenInDecimals,\n tokenOutDecimals,\n SwapTypes.SwapExactOut,\n tokenOutAmount,\n tokenOutDecimals,\n liquiditySelection.value\n );\n\n sorReturn.value = swapReturn; // TO DO - is it needed?\n\n const tradeAmount: BigNumber = swapReturn.returnAmount;\n const tokenInAmountNormalised = scale(tradeAmount, -tokenInDecimals);\n tokenInAmountInput.value =\n tokenInAmountNormalised.toNumber() > 0\n ? tokenInAmountNormalised.toFixed(6, BigNumber.ROUND_UP)\n : '';\n\n if (!sorReturn.value.hasSwaps) {\n priceImpact.value = 0;\n } else {\n tokenOutAmountNormalised = await adjustedPiAmount(\n tokenOutAmountNormalised,\n tokenOutAddress,\n tokenOutDecimals\n );\n\n const effectivePrice = tokenInAmountNormalised.div(\n tokenOutAmountNormalised\n );\n const priceImpactCalc = effectivePrice\n .div(swapReturn.marketSpNormalised)\n .minus(1);\n\n priceImpact.value = BigNumber.max(\n priceImpactCalc,\n MIN_PRICE_IMPACT\n ).toNumber();\n }\n }\n\n pools.value = sorManager.selectedPools;\n\n state.errors.highPriceImpact =\n priceImpact.value >= HIGH_PRICE_IMPACT_THRESHOLD;\n }\n\n function txHandler(tx: TransactionResponse, action: TransactionAction): void {\n confirming.value = false;\n\n let summary = '';\n const tokenInAmountFormatted = fNum(tokenInAmountInput.value, 'token');\n const tokenOutAmountFormatted = fNum(tokenOutAmountInput.value, 'token');\n\n const tokenInSymbol = tokenIn.value.symbol;\n const tokenOutSymbol = tokenOut.value.symbol;\n\n if (['wrap', 'unwrap'].includes(action)) {\n summary = t('transactionSummary.wrapUnwrap', [\n tokenInAmountFormatted,\n tokenInSymbol,\n tokenOutSymbol\n ]);\n } else {\n summary = `${tokenInAmountFormatted} ${tokenInSymbol} -> ${tokenOutAmountFormatted} ${tokenOutSymbol}`;\n }\n\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action,\n summary,\n details: {\n tokenIn: tokenIn.value,\n tokenOut: tokenOut.value,\n tokenInAddress: tokenInAddressInput.value,\n tokenOutAddress: tokenOutAddressInput.value,\n tokenInAmount: tokenInAmountInput.value,\n tokenOutAmount: tokenOutAmountInput.value,\n exactIn: exactIn.value,\n quote: getQuote(),\n priceImpact: priceImpact.value,\n slippageBufferRate: slippageBufferRate.value\n }\n });\n\n txListener(tx, {\n onTxConfirmed: () => {\n trading.value = false;\n latestTxHash.value = tx.hash;\n latestTx.value = tx;\n trackGoal(Goals.Swapped);\n },\n onTxFailed: () => {\n trading.value = false;\n }\n });\n }\n\n async function trade(successCallback?: () => void) {\n trackGoal(Goals.ClickSwap);\n trading.value = true;\n confirming.value = true;\n\n const tokenInAddress = tokenInAddressInput.value;\n const tokenOutAddress = tokenOutAddressInput.value;\n const tokenInDecimals = tokens.value[tokenInAddress].decimals;\n const tokenOutDecimals = tokens.value[tokenOutAddress].decimals;\n const tokenInAmountNumber = new BigNumber(tokenInAmountInput.value);\n const tokenInAmountScaled = scale(tokenInAmountNumber, tokenInDecimals);\n\n if (wrapType.value == WrapType.Wrap) {\n try {\n const tx = await wrap(\n appNetworkConfig.key,\n provider.value as any,\n tokenOutAddress,\n tokenInAmountScaled\n );\n console.log('Wrap tx', tx);\n\n txHandler(tx, 'wrap');\n\n if (successCallback != null) {\n successCallback();\n }\n } catch (e) {\n console.log(e);\n trading.value = false;\n confirming.value = false;\n }\n return;\n } else if (wrapType.value == WrapType.Unwrap) {\n try {\n const tx = await unwrap(\n appNetworkConfig.key,\n provider.value as any,\n tokenInAddress,\n tokenInAmountScaled\n );\n console.log('Unwrap tx', tx);\n\n txHandler(tx, 'unwrap');\n\n if (successCallback != null) {\n successCallback();\n }\n } catch (e) {\n console.log(e);\n trading.value = false;\n confirming.value = false;\n }\n return;\n }\n\n if (exactIn.value) {\n const tokenOutAmountNumber = new BigNumber(tokenOutAmountInput.value);\n const tokenOutAmount = scale(tokenOutAmountNumber, tokenOutDecimals);\n const minAmount = getMinOut(tokenOutAmount);\n const sr: SorReturn = sorReturn.value as SorReturn;\n\n try {\n const tx = await swapIn(\n appNetworkConfig.key,\n provider.value as any,\n sr,\n tokenInAmountScaled,\n minAmount\n );\n console.log('Swap in tx', tx);\n\n txHandler(tx, 'trade');\n\n if (successCallback != null) {\n successCallback();\n }\n } catch (e) {\n if (isSlippageError(e)) {\n slippageError.value = true;\n }\n\n console.log(e);\n trading.value = false;\n confirming.value = false;\n }\n } else {\n const tokenInAmountMax = getMaxIn(tokenInAmountScaled);\n const sr: SorReturn = sorReturn.value as SorReturn;\n const tokenOutAmountNormalised = new BigNumber(tokenOutAmountInput.value);\n const tokenOutAmountScaled = scale(\n tokenOutAmountNormalised,\n tokenOutDecimals\n );\n\n try {\n const tx = await swapOut(\n appNetworkConfig.key,\n provider.value as any,\n sr,\n tokenInAmountMax,\n tokenOutAmountScaled\n );\n console.log('Swap out tx', tx);\n\n txHandler(tx, 'trade');\n\n if (successCallback != null) {\n successCallback();\n }\n } catch (e) {\n if (isSlippageError(e)) {\n slippageError.value = true;\n }\n\n console.log(e);\n trading.value = false;\n confirming.value = false;\n }\n }\n }\n\n // Uses stored market prices to calculate swap cost in token denomination\n function calculateSwapCost(tokenAddress: string): BigNumber {\n const ethPriceFiat = priceFor(appNetworkConfig.nativeAsset.address);\n const tokenPriceFiat = priceFor(tokenAddress);\n const gasPriceWei = store.state.market.gasPrice || GAS_PRICE;\n const gasPriceScaled = scale(bnum(gasPriceWei), -18);\n const ethPriceToken = bnum(Number(ethPriceFiat) / Number(tokenPriceFiat));\n const swapCost = bnum(SWAP_COST);\n const costSwapToken = gasPriceScaled.times(swapCost).times(ethPriceToken);\n return costSwapToken;\n }\n\n // Sets SOR swap cost for more efficient routing\n async function setSwapCost(\n tokenAddress: string,\n tokenDecimals: number,\n sorManager: SorManager\n ): Promise {\n // If using Polygon or Fantom get price of swap using stored market prices\n // If mainnet price retrieved on-chain using SOR\n if (appNetworkConfig.chainId === 137 || appNetworkConfig.chainId === 250) {\n const swapCostToken = calculateSwapCost(tokenOutAddressInput.value);\n await sorManager.setCostOutputToken(\n tokenAddress,\n tokenDecimals,\n swapCostToken\n );\n } else {\n await sorManager.setCostOutputToken(tokenAddress, tokenDecimals);\n }\n }\n\n function getMaxIn(amount: BigNumber) {\n return amount\n .times(1 + slippageBufferRate.value)\n .integerValue(BigNumber.ROUND_DOWN);\n }\n\n function getMinOut(amount: BigNumber) {\n return amount\n .div(1 + slippageBufferRate.value)\n .integerValue(BigNumber.ROUND_DOWN);\n }\n\n function getQuote(): TradeQuote {\n const maximumInAmount =\n tokenInAmountScaled != null\n ? getMaxIn(tokenInAmountScaled.value).toString()\n : '';\n\n const minimumOutAmount =\n tokenOutAmountScaled != null\n ? getMinOut(tokenOutAmountScaled.value).toString()\n : '';\n\n return {\n feeAmountInToken: '0',\n feeAmountOutToken: '0',\n maximumInAmount,\n minimumOutAmount\n };\n }\n\n function isSlippageError(e) {\n return e.message.indexOf('BAL#507') !== -1;\n }\n\n /**\n * Under certain circumstance we need to adjust an amount\n * for the price impact calc due to background wrapping taking place\n * e.g. when trading weth to wstEth.\n */\n async function adjustedPiAmount(\n amount: BigNumber,\n address: string,\n decimals: number\n ): Promise {\n if (address === appNetworkConfig.addresses.wstETH) {\n const denormAmount = parseUnits(amount.toString(), decimals);\n const denormStEthAmount = await getStETHByWstETH(denormAmount);\n return bnum(formatUnits(denormStEthAmount, decimals));\n }\n return amount;\n }\n\n return {\n ...toRefs(state),\n sorManager,\n sorReturn,\n pools,\n initSor,\n handleAmountChange,\n exactIn,\n trade,\n trading,\n priceImpact,\n latestTxHash,\n latestTx,\n fetchPools,\n poolsLoading,\n getQuote,\n resetState,\n confirming,\n slippageError,\n sorManagerInitialized,\n sorManagerRef\n };\n}\n","import { toDisplayString as _toDisplayString, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createTextVNode as _createTextVNode, Teleport as _Teleport, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"dark:border-b dark:border-gray-850\" }\nconst _hoisted_2 = { class: \"p-2 flex justify-between text-sm rounded-t-lg dark:bg-gray-900 border dark:border-gray-900 w-full border-b-0\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"text-gray-500\"\n}\nconst _hoisted_4 = { class: \"flex flex-col ml-3 w-24 leading-none truncate\" }\nconst _hoisted_5 = { class: \"font-bold\" }\nconst _hoisted_6 = {\n key: 1,\n class: \"font-bold\"\n}\nconst _hoisted_7 = { class: \"p-2\" }\nconst _hoisted_8 = { class: \"flex items-center mb-4\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"flex-auto ml-4\"\n}\nconst _hoisted_10 = { class: \"dark:border-b dark:border-gray-850\" }\nconst _hoisted_11 = { class: \"p-2 flex justify-between text-sm rounded-t-lg dark:bg-gray-900 border dark:border-gray-900 w-full border-b-0\" }\nconst _hoisted_12 = {\n key: 0,\n class: \"text-gray-500\"\n}\nconst _hoisted_13 = { class: \"flex flex-col ml-3 w-24 leading-none truncate\" }\nconst _hoisted_14 = { class: \"font-bold\" }\nconst _hoisted_15 = {\n key: 1,\n class: \"font-bold\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalTextInput = _resolveComponent(\"BalTextInput\")\n const _component_TradePairToggle = _resolveComponent(\"TradePairToggle\")\n const _component_SelectTokenModal = _resolveComponent(\"SelectTokenModal\")\n const _component_TradeEthBufferModal = _resolveComponent(\"TradeEthBufferModal\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t('send')), 1),\n (_ctx.tokenInValue > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.fNum(_ctx.tokenInValue, 'usd')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createVNode(_component_BalTextInput, {\n name: \"tokenIn\",\n \"model-value\": _ctx.tokenInAmountInput,\n onInput: _cache[3] || (_cache[3] = value => _ctx.handleInAmountChange(value)),\n type: \"number\",\n \"decimal-limit\": _ctx.tokenInDecimals,\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"validate-on\": \"input\",\n \"square-top\": \"\",\n \"prepend-border\": \"\"\n }, {\n prepend: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"flex items-center w-32 h-full cursor-pointer\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.openModalSelectToken('input')))\n }, [\n (_ctx.tokenInAddressInput)\n ? (_openBlock(), _createBlock(_component_BalAsset, {\n key: 0,\n address: _ctx.tokenInAddressInput,\n size: 28\n }, null, 8, [\"address\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_4, [\n (_ctx.tokenInSymbol.length > 5)\n ? (_openBlock(), _createBlock(_component_BalTooltip, { key: 0 }, {\n activator: _withCtx(() => [\n _createVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.tokenInSymbol), 1)\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", null, _toDisplayString(_ctx.tokenInSymbol), 1)\n ]),\n _: 1\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_6, _toDisplayString(_ctx.tokenInSymbol), 1))\n ]),\n _createVNode(_component_BalIcon, {\n name: 'chevron-down',\n size: 'sm',\n class: \"text-green-500 group-hover:text-red-500\"\n })\n ])\n ]),\n info: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"cursor-pointer\",\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.handleMax && _ctx.handleMax(...args)))\n }, _toDisplayString(_ctx.$t('balance')) + \": \" + _toDisplayString(_ctx.fNum(_ctx.balanceLabel, 'token')), 1)\n ]),\n append: _withCtx(() => [\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(_component_BalBtn, {\n size: \"xs\",\n color: \"white\",\n onClick: _ctx.handleMax\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('max')), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ]),\n _: 1\n }, 8, [\"model-value\", \"decimal-limit\"]),\n _createVNode(\"div\", _hoisted_8, [\n _createVNode(_component_TradePairToggle, { onToggle: _ctx.handleSwitchTokens }, null, 8, [\"onToggle\"]),\n (_ctx.rateMessage)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_9, [\n _createVNode(\"span\", {\n class: \"text-sm text-gray-500 cursor-pointer\",\n onClick: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_ctx.toggleRate && _ctx.toggleRate(...args))),\n textContent: _toDisplayString(_ctx.rateMessage)\n }, null, 8, [\"textContent\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(\"div\", _hoisted_10, [\n _createVNode(\"div\", _hoisted_11, [\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t('receive')), 1),\n (_ctx.tokenOutValue > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_12, _toDisplayString(_ctx.fNum(_ctx.tokenOutValue, 'usd')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createVNode(_component_BalTextInput, {\n name: 'tokenOut',\n \"model-value\": _ctx.tokenOutAmountInput,\n onInput: _cache[6] || (_cache[6] = value => _ctx.handleOutAmountChange(value)),\n type: \"number\",\n \"decimal-limit\": _ctx.tokenOutDecimals,\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"square-top\": \"\"\n }, {\n prepend: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"flex items-center w-32 h-full cursor-pointer\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.openModalSelectToken('output')))\n }, [\n (_ctx.tokenOutAddressInput)\n ? (_openBlock(), _createBlock(_component_BalAsset, {\n key: 0,\n address: _ctx.tokenOutAddressInput,\n size: 28\n }, null, 8, [\"address\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_13, [\n (_ctx.tokenOutSymbol.length > 5)\n ? (_openBlock(), _createBlock(_component_BalTooltip, { key: 0 }, {\n activator: _withCtx(() => [\n _createVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.tokenOutSymbol), 1)\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", null, _toDisplayString(_ctx.tokenOutSymbol), 1)\n ]),\n _: 1\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_15, _toDisplayString(_ctx.tokenOutSymbol), 1))\n ]),\n _createVNode(_component_BalIcon, {\n name: 'chevron-down',\n size: 'sm',\n class: \"text-green-500 group-hover:text-red-500\"\n })\n ])\n ]),\n info: _withCtx(() => [\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t('priceImpact')) + \": \" + _toDisplayString(_ctx.fNum(_ctx.priceImpact, 'percent')), 1)\n ]),\n _: 1\n }, 8, [\"model-value\", \"decimal-limit\"])\n ]),\n (_openBlock(), _createBlock(_Teleport, { to: \"#modal\" }, [\n (_ctx.modalSelectTokenIsOpen)\n ? (_openBlock(), _createBlock(_component_SelectTokenModal, {\n key: 0,\n excludedTokens: [_ctx.tokenInAddressInput, _ctx.tokenOutAddressInput],\n onClose: _cache[7] || (_cache[7] = ($event: any) => (_ctx.modalSelectTokenIsOpen = false)),\n onSelect: _ctx.handleSelectToken,\n \"include-ether\": \"\"\n }, null, 8, [\"excludedTokens\", \"onSelect\"]))\n : _createCommentVNode(\"\", true)\n ])),\n (_openBlock(), _createBlock(_Teleport, { to: \"#modal\" }, [\n (_ctx.modalEthBufferIsOpen)\n ? (_openBlock(), _createBlock(_component_TradeEthBufferModal, {\n key: 0,\n onClose: _cache[8] || (_cache[8] = ($event: any) => (_ctx.modalEthBufferIsOpen = false))\n }))\n : _createCommentVNode(\"\", true)\n ]))\n ], 64))\n}","import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-1f41cae6\")\n\n_pushScopeId(\"data-v-1f41cae6\")\nconst _hoisted_1 = /*#__PURE__*/_createVNode(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 21 18\",\n class: \"icon-trade-toggle w-5 h-3\"\n}, [\n /*#__PURE__*/_createVNode(\"path\", {\n d: \"M6.26693 16.2421L6.26693 3.5252L8.70412 5.96238C9.03943 6.29801 9.58349 6.29801 9.91943 5.96238C10.2554 5.62676 10.2551 5.08301 9.91943 4.74707L6.01537 0.843008C5.97568 0.80332 5.93193 0.767695 5.88537 0.736133C5.87349 0.728633 5.86037 0.72332 5.84849 0.716445C5.81287 0.694883 5.77693 0.67332 5.73787 0.657383C5.72005 0.650195 5.70099 0.646758 5.68287 0.640195C5.64818 0.628633 5.6138 0.615508 5.57724 0.608008C5.52162 0.596758 5.46505 0.59082 5.40724 0.59082C5.34943 0.59082 5.29287 0.596758 5.23724 0.608008C5.20068 0.615195 5.1663 0.62832 5.13162 0.640195C5.11349 0.646758 5.09443 0.649883 5.07662 0.657383C5.03787 0.673633 5.00193 0.694883 4.96599 0.716445C4.95412 0.72332 4.94099 0.728633 4.92912 0.736133C4.88255 0.767695 4.8388 0.80332 4.79912 0.843008L0.895679 4.74645C0.727866 4.91426 0.643804 5.13395 0.643804 5.35395C0.643804 5.57395 0.727866 5.79363 0.895679 5.96145C1.23099 6.29707 1.77505 6.29707 2.11099 5.96145L4.54787 3.52488L4.54787 16.2418C4.54787 16.7164 4.93255 17.1011 5.40724 17.1011C5.88193 17.1011 6.26693 16.7168 6.26693 16.2421Z\",\n class: \"text-green-500 group-hover:text-green-500 fill-current\"\n }),\n /*#__PURE__*/_createVNode(\"path\", {\n d: \"M15.7625 17.2669C15.7987 17.2597 15.8328 17.2469 15.8672 17.235C15.8856 17.2284 15.905 17.2253 15.9231 17.2175C15.9612 17.2013 15.9966 17.1806 16.0322 17.1591C16.0447 17.1519 16.0584 17.1462 16.0706 17.1384C16.1172 17.1069 16.1609 17.0713 16.2006 17.0316L20.1037 13.1284C20.4394 12.7928 20.4394 12.2491 20.1037 11.9131C19.7684 11.5775 19.2244 11.5775 18.8884 11.9131L16.4516 14.3497V1.63281C16.4516 1.15813 16.0669 0.773438 15.5922 0.773438C15.1175 0.773438 14.7328 1.15813 14.7328 1.63281V14.3497L12.2956 11.9125C11.9603 11.5769 11.4163 11.5769 11.0803 11.9125C10.9125 12.0803 10.8284 12.3 10.8284 12.52C10.8284 12.74 10.9125 12.9597 11.0803 13.1275L14.9841 17.0316C15.0238 17.0713 15.0675 17.1069 15.1141 17.1384C15.1262 17.1462 15.14 17.1519 15.1525 17.1591C15.1878 17.1803 15.2234 17.2013 15.2616 17.2175C15.2797 17.225 15.2991 17.2284 15.3175 17.235C15.3519 17.2466 15.3859 17.2594 15.4222 17.2669C15.4778 17.2778 15.5344 17.2841 15.5922 17.2841C15.65 17.2841 15.7069 17.2778 15.7625 17.2669Z\",\n class: \"dark:text-gray-700 fill-current\"\n })\n], -1)\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n return (_openBlock(), _createBlock(\"div\", {\n class: \"toggle-btn w-9 h-9 flex justify-center items-center cursor-pointer rounded-full dark:bg-gray-900 shadow-sm group\",\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.toggle && _ctx.toggle(...args)))\n }, [\n _createVNode(\"div\", {\n class: [\"ease-in-out duration-300\", { 'transform rotate-180': _ctx.isRotated }]\n }, [\n _hoisted_1\n ], 2)\n ]))\n})","\nimport { defineComponent, ref } from 'vue';\n\nexport default defineComponent({\n emits: ['toggle'],\n setup(_props, { emit }) {\n const isRotated = ref(false);\n\n function toggle(): void {\n isRotated.value = !isRotated.value;\n emit('toggle');\n }\n\n return {\n isRotated,\n toggle\n };\n }\n});\n","import { render } from \"./TradePairToggle.vue?vue&type=template&id=1f41cae6&scoped=true&ts=true\"\nimport script from \"./TradePairToggle.vue?vue&type=script&lang=ts\"\nexport * from \"./TradePairToggle.vue?vue&type=script&lang=ts\"\n\nimport \"./TradePairToggle.vue?vue&type=style&index=0&id=1f41cae6&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1f41cae6\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"w-full flex justify-between items-center\" }\nconst _hoisted_2 = { class: \"flex items-center\" }\nconst _hoisted_3 = { class: \"text-xs text-gray-500\" }\nconst _hoisted_4 = { class: \"flex items-center ml-2\" }\nconst _hoisted_5 = { class: \"mr-1 \" }\nconst _hoisted_6 = {\n key: 0,\n class: \"h-96 overflow-y-scroll\"\n}\nconst _hoisted_7 = { class: \"border-b dark:border-gray-700 flex\" }\nconst _hoisted_8 = { class: \"overflow-hidden rounded-lg\" }\nconst _hoisted_9 = {\n key: 1,\n class: \"h-96 flex items-center justify-center\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_Search = _resolveComponent(\"Search\")\n const _component_TokenListsListItem = _resolveComponent(\"TokenListsListItem\")\n const _component_TokenListItem = _resolveComponent(\"TokenListItem\")\n const _component_RecycleScroller = _resolveComponent(\"RecycleScroller\")\n const _component_BalLoadingIcon = _resolveComponent(\"BalLoadingIcon\")\n const _component_BalModal = _resolveComponent(\"BalModal\")\n\n return (_openBlock(), _createBlock(_component_BalModal, {\n show: \"\",\n onClose: _cache[4] || (_cache[4] = ($event: any) => (_ctx.$emit('close'))),\n \"no-content-pad\": \"\"\n }, {\n header: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n (_ctx.selectTokenList)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 0,\n color: \"gray\",\n size: \"xs\",\n class: \"mr-2\",\n flat: \"\",\n circle: \"\",\n onClick: _ctx.onListExit\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"arrow-left\",\n size: \"sm\"\n })\n ]),\n _: 1\n }, 8, [\"onClick\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"h5\", null, _toDisplayString(_ctx.title), 1)\n ]),\n (!_ctx.selectTokenList)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.toggleSelectTokenList && _ctx.toggleSelectTokenList(...args))),\n class: \"flex items-center group cursor-pointer\"\n }, [\n _createVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('tokenLists')), 1),\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(\"span\", _hoisted_5, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.activeTokenLists, (tokenlist, i) => {\n return (_openBlock(), _createBlock(\"img\", {\n key: i,\n src: _ctx.resolve(tokenlist.logoURI),\n class: \"rounded-full inline-block shadow w-6 h-6\"\n }, null, 8, [\"src\"]))\n }), 128))\n ]),\n _createVNode(_component_BalIcon, {\n name: \"chevron-down\",\n size: \"sm\",\n class: \"ml-1 text-green-500 group-hover:text-red-500 group-focus:text-red-500 transition-all duration-200 ease-out \"\n })\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n default: _withCtx(() => [\n (_ctx.selectTokenList)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_Search, {\n modelValue: _ctx.query,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => (_ctx.query = $event)),\n placeholder: _ctx.$t('searchByName'),\n class: \"px-4 py-3 flex-auto border-b dark:border-gray-700\"\n }, null, 8, [\"modelValue\", \"placeholder\"]),\n _createVNode(\"div\", null, [\n (Object.keys(_ctx.tokenLists).length > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_6, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.tokenLists, (tokenList, uri) => {\n return (_openBlock(), _createBlock(_component_TokenListsListItem, {\n key: uri,\n isActive: _ctx.isActiveList(uri),\n tokenlist: tokenList,\n uri: uri,\n onToggle: ($event: any) => (_ctx.onToggleList(uri))\n }, null, 8, [\"isActive\", \"tokenlist\", \"uri\", \"onToggle\"]))\n }), 128))\n ]))\n : (_openBlock(), _createBlock(\"div\", {\n key: 1,\n textContent: _toDisplayString(_ctx.$t('errorNoLists')),\n class: \"h-96 flex items-center justify-center\"\n }, null, 8, [\"textContent\"]))\n ])\n ], 64))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(_component_Search, {\n modelValue: _ctx.query,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => (_ctx.query = $event)),\n placeholder: _ctx.$t('searchBy'),\n class: \"px-4 py-3 flex-auto\"\n }, null, 8, [\"modelValue\", \"placeholder\"])\n ]),\n _createVNode(\"div\", _hoisted_8, [\n (_ctx.tokens.length > 0)\n ? (_openBlock(), _createBlock(_component_RecycleScroller, {\n key: 0,\n class: \"h-96 overflow-y-scroll\",\n items: _ctx.tokens,\n \"item-size\": 64,\n \"key-field\": \"address\",\n buffer: 100\n }, {\n default: _withCtx(({ item: token }) => [\n _createVNode(\"a\", {\n onClick: ($event: any) => (_ctx.onSelectToken(token.address))\n }, [\n _createVNode(_component_TokenListItem, {\n token: token,\n balanceLoading: _ctx.dynamicDataLoading\n }, null, 8, [\"token\", \"balanceLoading\"])\n ], 8, [\"onClick\"])\n ]),\n _: 1\n }, 8, [\"items\"]))\n : (_ctx.loading)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_9, [\n _createVNode(_component_BalLoadingIcon)\n ]))\n : (_openBlock(), _createBlock(\"div\", {\n key: 2,\n textContent: _toDisplayString(_ctx.$t('errorNoTokens')),\n class: \"h-96 p-12 text-center text-gray-500\"\n }, null, 8, [\"textContent\"]))\n ])\n ], 64))\n ]),\n _: 1\n }))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n ref: \"animateRef\",\n class: \"flex py-3 px-4 highlight items-center leading-5 text-base opacity-0\"\n}\nconst _hoisted_2 = { class: \"flex-auto\" }\nconst _hoisted_3 = { class: \"text-gray text-sm w-40 md:w-60 truncate\" }\nconst _hoisted_4 = { class: \"flex flex-col items-end text-right font-medium\" }\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\" < 0.0001 \")\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\"-\")\nconst _hoisted_7 = {\n key: 3,\n class: \"text-gray-500 text-sm font-normal\"\n}\nconst _hoisted_8 = /*#__PURE__*/_createTextVNode(\"-\")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_BalLoadingNumber = _resolveComponent(\"BalLoadingNumber\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BalAsset, {\n address: $props.token.address,\n iconURI: $props.token.logoURI,\n size: 34,\n class: \"mr-3\"\n }, null, 8, [\"address\", \"iconURI\"]),\n _createVNode(\"div\", _hoisted_2, [\n _createTextVNode(_toDisplayString($props.token.symbol) + \" \", 1),\n _createVNode(\"div\", _hoisted_3, _toDisplayString($props.token.name), 1)\n ]),\n _createVNode(\"span\", _hoisted_4, [\n ($props.balanceLoading)\n ? (_openBlock(), _createBlock(_component_BalLoadingNumber, {\n key: 0,\n type: \"token\"\n }))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n ($setup.balance > 0)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n ($setup.balance >= 0.0001)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createTextVNode(_toDisplayString($setup.fNum($setup.balance, 'token')), 1)\n ], 64))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _hoisted_5\n ], 64))\n ], 64))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _hoisted_6\n ], 64))\n ], 64)),\n ($props.balanceLoading)\n ? (_openBlock(), _createBlock(_component_BalLoadingNumber, {\n key: 2,\n type: \"fiat\",\n numberWidth: \"2\",\n numberHeight: \"4\",\n class: \"text-sm font-normal\"\n }))\n : (_openBlock(), _createBlock(\"div\", _hoisted_7, [\n ($setup.value > 0)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createTextVNode(_toDisplayString($setup.fNum($setup.value, 'usd')), 1)\n ], 64))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _hoisted_8\n ], 64))\n ]))\n ])\n ], 512))\n}","\nimport useNumbers from '@/composables/useNumbers';\nimport anime from 'animejs';\nimport { onMounted, onUnmounted, PropType, ref, computed } from 'vue';\nimport { TokenInfo } from '@/types/TokenList';\nimport useTokens from '@/composables/useTokens';\nimport useUserSettings from '@/composables/useUserSettings';\n\nexport default {\n name: 'TokenListItem',\n\n props: {\n token: { type: Object as PropType, required: true },\n balanceLoading: { type: Boolean, default: true }\n },\n\n setup(props) {\n /**\n * COMPOSABLES\n */\n const { fNum } = useNumbers();\n const animateRef = ref();\n const { balances, prices } = useTokens();\n const { currency } = useUserSettings();\n\n /**\n * COMPUTED\n */\n const balance = computed(() => Number(balances.value[props.token.address]));\n const price = computed(() =>\n prices.value[props.token.address]\n ? prices.value[props.token.address][currency.value]\n : 0\n );\n const value = computed(() => balance.value * price.value);\n\n /**\n * CALLBACKS\n */\n onMounted(() => {\n anime({\n opacity: 1,\n targets: animateRef.value,\n delay: anime.stagger(100)\n });\n });\n\n onUnmounted(() => {\n anime({\n opacity: 0,\n targets: animateRef.value\n });\n });\n\n return {\n fNum,\n animateRef,\n balance,\n value\n };\n }\n};\n","import { render } from \"./TokenListItem.vue?vue&type=template&id=44e2b2a3&ts=true\"\nimport script from \"./TokenListItem.vue?vue&type=script&lang=ts\"\nexport * from \"./TokenListItem.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createVNode as _createVNode, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, withCtx as _withCtx, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex py-3 px-4 highlight items-center leading-5 text-base\" }\nconst _hoisted_2 = { class: \"flex-auto\" }\nconst _hoisted_3 = { class: \"text-gray text-sm flex items-center\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalLink = _resolveComponent(\"BalLink\")\n const _component_BalToggle = _resolveComponent(\"BalToggle\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"img\", {\n src: _ctx._url($props.tokenlist.logoURI),\n class: \"rounded-full inline-block align-middle mr-3\",\n width: \"34\",\n height: \"34\"\n }, null, 8, [\"src\"]),\n _createVNode(\"div\", _hoisted_2, [\n _createTextVNode(_toDisplayString($props.tokenlist.name) + \" \", 1),\n _createVNode(\"div\", _hoisted_3, [\n _createTextVNode(_toDisplayString($setup.fNum($props.tokenlist.tokens.length)) + \" \" + _toDisplayString(_ctx.$t('tokensLowerCase')) + \" \", 1),\n _createVNode(_component_BalLink, {\n href: _ctx.listUrl,\n external: \"\",\n class: \"flex items-center\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"arrow-up-right\",\n size: \"sm\",\n class: \"ml-1 text-gray-500 hover:text-green-500 transition-colors\"\n })\n ]),\n _: 1\n }, 8, [\"href\"])\n ])\n ]),\n (_ctx.notBalancer)\n ? (_openBlock(), _createBlock(_component_BalToggle, {\n key: 0,\n name: \"active\",\n checked: $props.isActive,\n onToggle: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('toggle')))\n }, null, 8, [\"checked\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { PropType, reactive, toRefs } from 'vue';\nimport useNumbers from '@/composables/useNumbers';\nimport { TokenList } from '@/types/TokenList';\nimport useUrls from '@/composables/useUrls';\n\nexport default {\n name: 'TokenListsListItem',\n\n props: {\n tokenlist: {\n type: Object as PropType\n },\n uri: {\n type: String,\n required: true\n },\n isActive: {\n type: Boolean,\n default: false\n }\n },\n\n emits: ['toggle'],\n\n setup(props) {\n /**\n * COMPOSABLES\n */\n const { fNum } = useNumbers();\n const { resolve } = useUrls();\n\n /**\n * STATE\n */\n const state = reactive({\n notBalancer: props.tokenlist?.name !== 'Balancer',\n listUrl: resolve(props.uri)\n });\n\n return {\n ...toRefs(state),\n fNum\n };\n }\n};\n","import { render } from \"./TokenListsListItem.vue?vue&type=template&id=f001567e&ts=true\"\nimport script from \"./TokenListsListItem.vue?vue&type=script&lang=ts\"\nexport * from \"./TokenListsListItem.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./Search.vue?vue&type=template&id=3fe5f611\"\nimport script from \"./Search.vue?vue&type=script&lang=js\"\nexport * from \"./Search.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport {\n defineComponent,\n reactive,\n toRefs,\n computed,\n PropType,\n watch,\n toRef\n} from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport useTokenLists from '@/composables/useTokenLists';\nimport TokenListItem from '@/components/lists/TokenListItem.vue';\nimport TokenListsListItem from '@/components/lists/TokenListsListItem.vue';\nimport Search from './Search.vue';\nimport useTokens from '@/composables/useTokens';\nimport { orderBy } from 'lodash';\nimport useUrls from '@/composables/useUrls';\nimport { TokenInfoMap } from '@/types/TokenList';\n\ninterface ComponentState {\n loading: boolean;\n selectTokenList: boolean;\n query: string;\n results: TokenInfoMap;\n}\n\nexport default defineComponent({\n components: {\n TokenListItem,\n TokenListsListItem,\n Search\n },\n\n emits: ['close', 'selectTokenlist', 'select'],\n\n props: {\n open: { type: Boolean, default: false },\n excludedTokens: { type: Array as PropType, default: () => [] },\n includeEther: { type: Boolean, default: false }\n },\n\n setup(props, { emit }) {\n /**\n * STATE\n */\n const state: ComponentState = reactive({\n loading: false,\n selectTokenList: false,\n query: '',\n results: {}\n });\n\n /**\n * COMPOSABLES\n */\n const {\n activeTokenLists,\n approvedTokenLists,\n toggleTokenList,\n isActiveList\n } = useTokenLists();\n const {\n searchTokens,\n priceFor,\n balanceFor,\n dynamicDataLoading,\n nativeAsset\n } = useTokens();\n const { t } = useI18n();\n const { resolve } = useUrls();\n\n /**\n * COMPUTED\n */\n const title = computed(() => {\n if (state.selectTokenList) return t('manageLists');\n return t('selectToken');\n });\n\n const tokenLists = computed(() => {\n const query = state.query.toLowerCase();\n const tokenListArray = Object.entries(approvedTokenLists.value);\n const results = tokenListArray.filter(([, tokenList]) =>\n tokenList.name.toLowerCase().includes(query)\n );\n return Object.fromEntries(results);\n });\n\n const tokens = computed(() => {\n const tokensWithValues = Object.values(state.results).map(token => {\n const balance = balanceFor(token.address);\n const price = priceFor(token.address);\n const value = Number(balance) * price;\n return {\n ...token,\n price,\n balance,\n value\n };\n });\n\n return orderBy(tokensWithValues, ['value', 'balance'], ['desc', 'desc']);\n });\n\n const excludedTokens = computed(() => [\n ...props.excludedTokens,\n ...(props.includeEther ? [] : [nativeAsset.address])\n ]);\n\n /**\n * METHODS\n */\n function onSelectToken(token: string): void {\n emit('select', token);\n emit('close');\n }\n\n async function onToggleList(uri: string): Promise {\n toggleTokenList(uri);\n state.results = await searchTokens(state.query, excludedTokens.value);\n }\n\n function onListExit(): void {\n state.selectTokenList = false;\n state.query = '';\n }\n\n function toggleSelectTokenList(): void {\n state.selectTokenList = !state.selectTokenList;\n state.query = '';\n }\n\n /**\n * WATCHERS\n */\n watch(\n toRef(state, 'query'),\n async newQuery => {\n state.results = await searchTokens(newQuery, excludedTokens.value);\n },\n { immediate: true }\n );\n\n return {\n // data\n ...toRefs(state),\n // computed\n title,\n tokens,\n tokenLists,\n activeTokenLists,\n dynamicDataLoading,\n // methods\n onSelectToken,\n onToggleList,\n onListExit,\n toggleSelectTokenList,\n isActiveList,\n resolve\n };\n }\n});\n","import { render } from \"./SelectTokenModal.vue?vue&type=template&id=2a6e7d84&ts=true\"\nimport script from \"./SelectTokenModal.vue?vue&type=script&lang=ts\"\nexport * from \"./SelectTokenModal.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createVNode as _createVNode, resolveComponent as _resolveComponent, withModifiers as _withModifiers, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"-mx-4 p-4 items-center\" }\nconst _hoisted_2 = { class: \"mx-2\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalModal = _resolveComponent(\"BalModal\")\n\n return (_openBlock(), _createBlock(_component_BalModal, {\n show: \"\",\n onClose: _ctx.onClose\n }, {\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, \" You only have \" + _toDisplayString(_ctx.nativeAssetBalance) + \" \" + _toDisplayString(_ctx.nativeAssetSymbol) + \" in your wallet. Remember to save enough for gas. \", 1),\n _createVNode(_component_BalBtn, {\n class: \"mt-8\",\n label: \"Ok\",\n block: \"\",\n onClick: _withModifiers(_ctx.onClose, [\"prevent\"])\n }, null, 8, [\"onClick\"])\n ])\n ]),\n _: 1\n }, 8, [\"onClose\"]))\n}","\nimport { computed, defineComponent } from 'vue';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport { NATIVE_ASSET_ADDRESS } from '@/constants/tokens';\nimport numeral from 'numeral';\n\nexport default defineComponent({\n emits: ['close'],\n props: {},\n setup(props, { emit }) {\n const { balances } = useTokens();\n const { appNetworkConfig } = useWeb3();\n\n const nativeAssetSymbol = computed(\n () => appNetworkConfig.nativeAsset.symbol\n );\n\n const nativeAssetBalance = computed(() =>\n numeral(balances.value[NATIVE_ASSET_ADDRESS]).format('0.[0000]')\n );\n\n function onClose() {\n emit('close');\n }\n\n return {\n onClose,\n nativeAssetSymbol,\n nativeAssetBalance\n };\n }\n});\n","import { render } from \"./TradeEthBufferModal.vue?vue&type=template&id=5626c768&ts=true\"\nimport script from \"./TradeEthBufferModal.vue?vue&type=script&lang=ts\"\nexport * from \"./TradeEthBufferModal.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent, toRefs, computed, ref } from 'vue';\n\nimport useNumbers from '@/composables/useNumbers';\n\nimport TradePairToggle from '@/components/cards/TradeCard/TradePairToggle.vue';\nimport SelectTokenModal from '@/components/modals/SelectTokenModal/SelectTokenModal.vue';\nimport useTokens from '@/composables/useTokens';\nimport { NATIVE_ASSET_ADDRESS } from '@/constants/tokens';\nimport TradeEthBufferModal from '@/components/cards/TradeCard/TradeEthBufferModal.vue';\n\nconst ETH_BUFFER = 0.3;\nconst ETH_MODAL_MESSAGE_BUFFER = 1;\n\nexport default defineComponent({\n components: {\n TradePairToggle,\n SelectTokenModal,\n TradeEthBufferModal\n },\n props: {\n tokenInAmountInput: {\n type: String,\n required: true\n },\n tokenInAddressInput: {\n type: String,\n required: true\n },\n tokenOutAmountInput: {\n type: String,\n required: true\n },\n tokenOutAddressInput: {\n type: String,\n required: true\n },\n exactIn: {\n type: Boolean,\n required: true\n },\n priceImpact: {\n type: Number,\n required: true\n }\n },\n emits: [\n 'tokenInAddressChange',\n 'tokenInAmountChange',\n 'tokenOutAddressChange',\n 'tokenOutAmountChange',\n 'exactInChange',\n 'change'\n ],\n setup(props, { emit }) {\n const { tokens, balances, injectTokens } = useTokens();\n const { fNum, toFiat } = useNumbers();\n\n const {\n tokenInAmountInput,\n tokenInAddressInput,\n tokenOutAmountInput,\n tokenOutAddressInput,\n exactIn\n } = toRefs(props);\n\n const tokenInValue = computed(() =>\n toFiat(tokenInAmountInput.value, tokenInAddressInput.value)\n );\n\n const tokenInSymbol = computed(() => {\n const tokenIn = tokens.value[tokenInAddressInput.value];\n const symbol = tokenIn ? tokenIn.symbol : '';\n return symbol;\n });\n\n const tokenOutValue = computed(() =>\n toFiat(tokenOutAmountInput.value, tokenOutAddressInput.value)\n );\n\n const tokenOutSymbol = computed(() => {\n const tokenOut = tokens.value[tokenOutAddressInput.value];\n const symbol = tokenOut ? tokenOut.symbol : '';\n return symbol;\n });\n\n const tokenInDecimals = computed(() => {\n const decimals = tokens.value[tokenInAddressInput.value]\n ? tokens.value[tokenInAddressInput.value].decimals\n : 18;\n return decimals;\n });\n\n const tokenOutDecimals = computed(() => {\n const decimals = tokens.value[tokenOutAddressInput.value]\n ? tokens.value[tokenOutAddressInput.value].decimals\n : 18;\n return decimals;\n });\n\n const isInRate = ref(true);\n const modalSelectTokenType = ref('input');\n const modalSelectTokenIsOpen = ref(false);\n const modalEthBufferIsOpen = ref(false);\n\n function handleMax(): void {\n const balance = balances.value[tokenInAddressInput.value] || '0';\n const balanceNumber = parseFloat(balance);\n const maxAmount =\n tokenInAddressInput.value !== NATIVE_ASSET_ADDRESS\n ? balance\n : balanceNumber > ETH_BUFFER\n ? (balanceNumber - ETH_BUFFER).toString()\n : '0';\n handleInAmountChange(maxAmount);\n\n if (\n tokenInAddressInput.value === NATIVE_ASSET_ADDRESS &&\n balanceNumber < ETH_MODAL_MESSAGE_BUFFER\n ) {\n modalEthBufferIsOpen.value = true;\n }\n }\n\n function handleInAmountChange(value: string): void {\n emit('exactInChange', true);\n emit('tokenInAmountChange', value);\n emit('change', value);\n }\n\n function handleOutAmountChange(value: string): void {\n emit('exactInChange', false);\n emit('tokenOutAmountChange', value);\n emit('change', value);\n }\n\n function handleSwitchTokens(): void {\n emit('exactInChange', !exactIn.value);\n emit('tokenInAmountChange', tokenOutAmountInput.value);\n emit('tokenInAddressChange', tokenOutAddressInput.value);\n emit('tokenOutAmountChange', tokenInAmountInput.value);\n emit('tokenOutAddressChange', tokenInAddressInput.value);\n }\n\n function handleSelectToken(address: string): void {\n if (modalSelectTokenType.value === 'input') {\n if (address === tokenOutAddressInput.value) {\n handleSwitchTokens();\n return;\n } else emit('tokenInAddressChange', address);\n } else {\n if (address === tokenInAddressInput.value) {\n handleSwitchTokens();\n return;\n } else emit('tokenOutAddressChange', address);\n }\n injectTokens([address]);\n }\n\n const rateMessage = computed(() => {\n const tokenIn = tokens.value[tokenInAddressInput.value];\n const tokenOut = tokens.value[tokenOutAddressInput.value];\n if (!tokenIn || !tokenOut) {\n return '';\n }\n const tokenInAmount = parseFloat(tokenInAmountInput.value);\n const tokenOutAmount = parseFloat(tokenOutAmountInput.value);\n if (!tokenInAmount || !tokenOutAmount) {\n return '';\n }\n if (isInRate.value) {\n const rate = tokenOutAmount / tokenInAmount;\n const message = `1 ${tokenIn.symbol} = ${fNum(rate, 'token')} ${\n tokenOut.symbol\n }`;\n return message;\n } else {\n const rate = tokenInAmount / tokenOutAmount;\n const message = `1 ${tokenOut.symbol} = ${fNum(rate, 'token')} ${\n tokenIn.symbol\n }`;\n return message;\n }\n });\n\n function toggleRate(): void {\n isInRate.value = !isInRate.value;\n }\n\n function openModalSelectToken(type: string): void {\n modalSelectTokenIsOpen.value = true;\n modalSelectTokenType.value = type;\n }\n\n const balanceLabel = computed(\n () => balances.value[tokenInAddressInput.value]\n );\n\n return {\n fNum,\n handleMax,\n balanceLabel,\n handleInAmountChange,\n handleOutAmountChange,\n handleSwitchTokens,\n rateMessage,\n toggleRate,\n tokenInValue,\n tokenInSymbol,\n tokenOutValue,\n tokenOutSymbol,\n modalSelectTokenIsOpen,\n openModalSelectToken,\n handleSelectToken,\n tokenInDecimals,\n tokenOutDecimals,\n modalEthBufferIsOpen\n };\n }\n});\n","import { render } from \"./TradePair.vue?vue&type=template&id=ee704446&ts=true\"\nimport script from \"./TradePair.vue?vue&type=script&lang=ts\"\nexport * from \"./TradePair.vue?vue&type=script&lang=ts\"\n\nimport \"./TradePair.vue?vue&type=style&index=0&id=ee704446&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, withCtx as _withCtx, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-b9b7efb4\")\n\n_pushScopeId(\"data-v-b9b7efb4\")\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = { class: \"mb-6 text-md\" }\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = { class: \"-mx-4 p-4 flex items-center border-b border-t dark:border-gray-800\" }\nconst _hoisted_5 = { class: \"flex flex-col\" }\nconst _hoisted_6 = { class: \"font-bold\" }\nconst _hoisted_7 = { class: \"text-gray-500 text-sm\" }\nconst _hoisted_8 = { class: \"mt-6 mb-3 text-sm\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"mb-3 card-container\"\n}\nconst _hoisted_10 = { class: \"card-step text-green-500\" }\nconst _hoisted_11 = {\n key: 1,\n class: \"text-gray-500 dark:text-gray-400\"\n}\nconst _hoisted_12 = { class: \"ml-3\" }\nconst _hoisted_13 = { key: 0 }\nconst _hoisted_14 = { key: 1 }\nconst _hoisted_15 = {\n key: 1,\n class: \"card-container\"\n}\nconst _hoisted_16 = { class: \"card-step text-green-500\" }\nconst _hoisted_17 = {\n key: 1,\n class: \"text-gray-500 dark:text-gray-400\"\n}\nconst _hoisted_18 = { class: \"ml-3\" }\nconst _hoisted_19 = { key: 0 }\nconst _hoisted_20 = { key: 1 }\nconst _hoisted_21 = { class: \"mt-3 card-container\" }\nconst _hoisted_22 = { class: \"card-step text-gray-500 dark:text-gray-400\" }\nconst _hoisted_23 = { class: \"ml-3\" }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalAssetSet = _resolveComponent(\"BalAssetSet\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalModal = _resolveComponent(\"BalModal\")\n\n return (_openBlock(), _createBlock(_component_BalModal, {\n show: \"\",\n onClose: _ctx.onClose,\n title: \n _ctx.slippageError\n ? _ctx.$t('slippageErrorHeadline')\n : _ctx.$t('previewTradeTransactions')\n \n }, {\n default: _withId(() => [\n (_ctx.slippageError)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t('slippageErrorBody')), 1),\n _createVNode(_component_BalBtn, {\n class: \"mt-5\",\n label: \"Close\",\n color: \"red\",\n block: \"\",\n onClick: _ctx.onClose\n }, null, 8, [\"onClick\"])\n ]))\n : (_openBlock(), _createBlock(\"div\", _hoisted_3, [\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(_component_BalAssetSet, {\n addresses: [_ctx.addressIn, _ctx.addressOut],\n size: 32,\n width: 55\n }, null, 8, [\"addresses\"]),\n _createVNode(\"div\", _hoisted_5, [\n _createVNode(\"div\", _hoisted_6, _toDisplayString(_ctx.fNum(_ctx.amountIn, 'token')) + \" \" + _toDisplayString(_ctx.symbolIn) + \" -> \" + _toDisplayString(_ctx.fNum(_ctx.amountOut, 'token')) + \" \" + _toDisplayString(_ctx.symbolOut), 1),\n _createVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.valueIn ? _ctx.fNum(_ctx.valueIn, 'usd') : ''), 1)\n ])\n ]),\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_8, \" Requires \" + _toDisplayString(_ctx.totalRequiredTransactions) + \" \" + _toDisplayString(_ctx.requiresApproval ? 'transactions' : 'transaction') + \": \", 1),\n _createVNode(\"div\", null, [\n (_ctx.requiresLidoRelayerApproval)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_9, [\n _createVNode(\"div\", _hoisted_10, [\n (_ctx.isLidoRelayerApproved)\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 0,\n name: \"check\",\n class: \"text-green-500\"\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_11, \"1\"))\n ]),\n _createVNode(\"div\", _hoisted_12, [\n (_ctx.isLidoRelayerApproved)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_13, _toDisplayString(_ctx.$t('approvedLidoRelayer')), 1))\n : (_openBlock(), _createBlock(\"span\", _hoisted_14, _toDisplayString(_ctx.$t('approveLidoRelayer')), 1))\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.requiresTokenApproval)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_15, [\n _createVNode(\"div\", _hoisted_16, [\n (_ctx.isTokenApproved)\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 0,\n name: \"check\",\n class: \"text-green-500\"\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_17, _toDisplayString(_ctx.requiresLidoRelayerApproval ? 2 : 1), 1))\n ]),\n _createVNode(\"div\", _hoisted_18, [\n (_ctx.isTokenApproved)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('approved')) + \" \" + _toDisplayString(_ctx.symbolIn), 1))\n : (_openBlock(), _createBlock(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('approve')) + \" \" + _toDisplayString(_ctx.symbolIn), 1))\n ])\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_21, [\n _createVNode(\"div\", _hoisted_22, _toDisplayString(_ctx.totalRequiredTransactions), 1),\n _createVNode(\"div\", _hoisted_23, _toDisplayString(_ctx.$t('trade')) + \" \" + _toDisplayString(_ctx.valueIn ? _ctx.fNum(_ctx.valueIn, 'usd') : '') + \" \" + _toDisplayString(_ctx.symbolIn) + \" -> \" + _toDisplayString(_ctx.symbolOut), 1)\n ])\n ])\n ]),\n (_ctx.requiresLidoRelayerApproval && !_ctx.isLidoRelayerApproved)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 0,\n class: \"mt-5\",\n label: _ctx.$t('approveLidoRelayer'),\n loading: _ctx.approvingLidoRelayer,\n \"loading-label\": `${_ctx.$t('approvingLidoRelayer')}…`,\n color: \"gradient\",\n block: \"\",\n onClick: _withModifiers(_ctx.approveLidoRelayer, [\"prevent\"])\n }, null, 8, [\"label\", \"loading\", \"loading-label\", \"onClick\"]))\n : (_ctx.requiresTokenApproval && !_ctx.isTokenApproved)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 1,\n class: \"mt-5\",\n label: `${_ctx.$t('approve')} ${_ctx.symbolIn}`,\n loading: _ctx.approvingToken,\n \"loading-label\": `${_ctx.$t('approving')} ${_ctx.symbolIn}…`,\n color: \"gradient\",\n block: \"\",\n onClick: _withModifiers(_ctx.approveToken, [\"prevent\"])\n }, null, 8, [\"label\", \"loading\", \"loading-label\", \"onClick\"]))\n : (_openBlock(), _createBlock(_component_BalBtn, {\n key: 2,\n class: \"mt-5\",\n label: _ctx.$t('confirmTrade'),\n loading: _ctx.trading,\n \"loading-label\": _ctx.$t('confirming'),\n color: \"gradient\",\n block: \"\",\n onClick: _withModifiers(_ctx.trade, [\"prevent\"])\n }, null, 8, [\"label\", \"loading\", \"loading-label\", \"onClick\"]))\n ]))\n ]),\n _: 1\n }, 8, [\"onClose\", \"title\"]))\n})","import { reactive, computed, Ref } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { UseQueryOptions } from 'react-query/types';\nimport { Contract } from 'ethers/lib/ethers';\n\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { FETCH_ONCE_OPTIONS } from '@/constants/vue-query';\n\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { configService } from '@/services/config/config.service';\n\nimport vaultAbi from '@/lib/abi/Vault.json';\n\n/**\n * TYPES\n */\ntype QueryResponse = boolean;\n\nexport default function useRelayerApprovalQuery(\n relayer: Ref,\n options: UseQueryOptions = {}\n) {\n /**\n * COMPOSABLES\n */\n const { getProvider, account, isWalletReady } = useWeb3();\n\n /**\n * COMPUTED\n */\n const enabled = computed(() => isWalletReady.value);\n\n const vaultContract = computed(\n () =>\n new Contract(\n configService.network.addresses.vault,\n vaultAbi,\n getProvider()\n )\n );\n\n /**\n * QUERY INPUTS\n */\n const queryKey = reactive(\n QUERY_KEYS.Account.RelayerApprovals(account, relayer)\n );\n\n const queryFn = async (): Promise => {\n const approved = await vaultContract.value.hasApprovedRelayer(\n account.value,\n relayer.value\n );\n\n return approved;\n };\n\n const queryOptions = reactive({\n enabled,\n ...FETCH_ONCE_OPTIONS,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","import { computed, Ref, ref } from 'vue';\nimport { useI18n } from 'vue-i18n';\n\nimport useWeb3 from '@/services/web3/useWeb3';\n\nimport useTransactions from '../useTransactions';\nimport useEthers from '../useEthers';\nimport { configService } from '@/services/config/config.service';\n\nimport vaultAbi from '@/lib/abi/Vault.json';\nimport { sendTransaction } from '@/lib/utils/balancer/web3';\nimport useRelayerApprovalQuery from '../queries/useRelayerApprovalQuery';\nimport { GP_RELAYER_CONTRACT_ADDRESS } from '@/services/gnosis/constants';\n\nconst vaultAddress = configService.network.addresses.vault;\n\nexport enum Relayer {\n GNOSIS = 'gnosis',\n LIDO = 'lido'\n}\n\nexport default function useRelayerApproval(\n relayer: Relayer,\n isEnabled: Ref\n) {\n /**\n * STATE\n */\n const approving = ref(false);\n const approved = ref(false);\n\n /**\n * COMPOSABLES\n */\n const { getProvider, account } = useWeb3();\n const relayerAddress = ref(\n relayer === Relayer.LIDO\n ? configService.network.addresses.lidoRelayer\n : GP_RELAYER_CONTRACT_ADDRESS\n );\n const { txListener } = useEthers();\n const { addTransaction } = useTransactions();\n const { t } = useI18n();\n const relayerApproval = useRelayerApprovalQuery(relayerAddress);\n\n /**\n * COMPUTED\n */\n\n const isUnlocked = computed(() =>\n approved.value || !isEnabled.value ? true : !!relayerApproval.data.value\n );\n\n /**\n * METHODS\n */\n async function approve(): Promise {\n approving.value = true;\n try {\n const tx = await sendTransaction(\n getProvider(),\n configService.network.addresses.vault,\n vaultAbi,\n 'setRelayerApproval',\n [account.value, relayerAddress.value, true]\n );\n\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: 'approve',\n summary:\n relayer === Relayer.LIDO\n ? t('transactionSummary.approveLidoRelayer')\n : t('transactionSummary.approveGnosisRelayer'),\n details: {\n contractAddress: vaultAddress,\n spender: relayerAddress.value\n }\n });\n\n txListener(tx, {\n onTxConfirmed: () => {\n approving.value = false;\n approved.value = true;\n relayerApproval.refetch.value();\n },\n onTxFailed: () => {\n approving.value = false;\n }\n });\n } catch (e) {\n console.log(e);\n approving.value = false;\n }\n }\n\n return {\n approving,\n approve,\n approved,\n isUnlocked\n };\n}\n","\nimport { defineComponent, toRefs, computed } from 'vue';\nimport useNumbers from '@/composables/useNumbers';\nimport useTokenApproval from '@/composables/trade/useTokenApproval';\nimport useRelayerApproval, {\n Relayer\n} from '@/composables/trade/useRelayerApproval';\nimport useTokens from '@/composables/useTokens';\n\nimport { NATIVE_ASSET_ADDRESS } from '@/constants/tokens';\nimport { getWrapAction, WrapType } from '@/lib/utils/balancer/wrapper';\nimport { isStETH } from '@/lib/utils/balancer/lido';\n\nexport default defineComponent({\n emits: ['trade', 'close'],\n props: {\n open: {\n type: Boolean,\n default: false\n },\n isV1Swap: {\n type: Boolean,\n required: true\n },\n addressIn: {\n type: String,\n required: true\n },\n amountIn: {\n type: String,\n required: true\n },\n addressOut: {\n type: String,\n required: true\n },\n amountOut: {\n type: String,\n required: true\n },\n trading: {\n type: Boolean,\n required: true\n },\n slippageError: {\n type: Boolean,\n required: true\n }\n },\n setup(props, { emit }) {\n const { fNum, toFiat } = useNumbers();\n\n const { addressIn, amountIn, addressOut, isV1Swap } = toRefs(props);\n\n const { tokens, approvalRequired } = useTokens();\n\n const wrapType = computed(() =>\n getWrapAction(addressIn.value, addressOut.value)\n );\n const isWrap = computed(() => wrapType.value === WrapType.Wrap);\n const isUnwrap = computed(() => wrapType.value === WrapType.Unwrap);\n\n const isStETHTrade = computed(\n () =>\n isStETH(addressIn.value, addressOut.value) &&\n wrapType.value === WrapType.NonWrap\n );\n\n const tokenApproval = useTokenApproval(addressIn, amountIn, tokens);\n\n console.log('use token approval', addressIn.value);\n\n const lidoRelayerApproval = useRelayerApproval(Relayer.LIDO, isStETHTrade);\n\n const valueIn = computed(() => toFiat(amountIn.value, addressIn.value));\n\n const symbolIn = computed(() => {\n const token = tokens.value[addressIn.value];\n if (!token) {\n return '';\n }\n return token.symbol;\n });\n\n const symbolOut = computed(() => {\n const token = tokens.value[addressOut.value];\n if (!token) {\n return '';\n }\n return token.symbol;\n });\n\n const isEthTrade = computed(() => addressIn.value === NATIVE_ASSET_ADDRESS);\n\n const requiresTokenApproval = computed(() =>\n isUnwrap.value || isEthTrade.value ? false : true\n );\n\n const isLidoRelayerApproved = computed(\n () => lidoRelayerApproval.isUnlocked.value\n );\n const requiresLidoRelayerApproval = computed(\n () =>\n isStETHTrade.value &&\n (!isLidoRelayerApproved.value || lidoRelayerApproval.approved.value)\n );\n\n const requiresApproval = computed(\n () => requiresTokenApproval.value || requiresLidoRelayerApproval.value\n );\n\n const isTokenApproved = computed(() => {\n if (tokenApproval.approved.value) {\n return true;\n }\n\n const { isUnlockedV1, isUnlockedV2 } = tokenApproval.allowanceState.value;\n\n console.log('locked values', { isUnlockedV1, isUnlockedV2 });\n\n if (isWrap.value && !isEthTrade.value) {\n // If we're wrapping a token other than native ETH\n // we need to approve the underlying on the wrapper\n return !approvalRequired(\n addressIn.value,\n amountIn.value,\n addressOut.value\n );\n }\n return isV1Swap.value ? isUnlockedV1 : isUnlockedV2;\n });\n\n async function approveLidoRelayer(): Promise {\n await lidoRelayerApproval.approve();\n }\n\n async function approveToken(): Promise {\n if (isWrap.value && !isEthTrade.value) {\n // If we're wrapping a token other than native ETH\n // we need to approve the underlying on the wrapper\n await tokenApproval.approveSpender(addressOut.value);\n } else if (isV1Swap.value) {\n await tokenApproval.approveV1();\n } else {\n await tokenApproval.approveV2();\n }\n }\n\n const approvingToken = computed(() => tokenApproval.approving.value);\n\n const approvingLidoRelayer = computed(\n () => lidoRelayerApproval.approving.value\n );\n\n const totalRequiredTransactions = computed(() => {\n let txCount = 1; // trade\n\n if (requiresTokenApproval.value) {\n txCount++;\n }\n if (requiresLidoRelayerApproval.value) {\n txCount++;\n }\n return txCount;\n });\n\n function trade() {\n emit('trade');\n }\n\n function onClose() {\n emit('close');\n }\n\n return {\n // methods\n fNum,\n onClose,\n approveLidoRelayer,\n approveToken,\n trade,\n // computed\n requiresApproval,\n requiresTokenApproval,\n requiresLidoRelayerApproval,\n isTokenApproved,\n isLidoRelayerApproved,\n valueIn,\n symbolIn,\n symbolOut,\n approvingLidoRelayer,\n approvingToken,\n lidoRelayerApproval,\n totalRequiredTransactions\n };\n }\n});\n","import { render } from \"./TradePreviewModal.vue?vue&type=template&id=b9b7efb4&scoped=true&ts=true\"\nimport script from \"./TradePreviewModal.vue?vue&type=script&lang=ts\"\nexport * from \"./TradePreviewModal.vue?vue&type=script&lang=ts\"\n\nimport \"./TradePreviewModal.vue?vue&type=style&index=0&id=b9b7efb4&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-b9b7efb4\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-732ee322\")\n\n_pushScopeId(\"data-v-732ee322\")\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = { class: \"mr-2\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"mt-5\"\n}\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = { class: \"flex justify-between text-xs\" }\nconst _hoisted_6 = { class: \"font-bold\" }\nconst _hoisted_7 = { class: \"flex flex-col items-end\" }\nconst _hoisted_8 = { class: \"font-bold\" }\nconst _hoisted_9 = { class: \"relative mt-2\" }\nconst _hoisted_10 = /*#__PURE__*/_createVNode(\"div\", { class: \"pair-line absolute h-1/2 mx-9 border-b border-dashed border-gray-500\" }, null, -1)\nconst _hoisted_11 = { class: \"relative z-10 flex justify-between\" }\nconst _hoisted_12 = { class: \"relative my-1.5 mx-4\" }\nconst _hoisted_13 = { class: \"relative z-10\" }\nconst _hoisted_14 = { class: \"w-4 ml-4 flex items-center\" }\nconst _hoisted_15 = { class: \"flex\" }\nconst _hoisted_16 = { class: \"w-10 mr-4 text-xs text-right text-gray-500\" }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n\n return (_ctx.routes.length > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", {\n class: \"flex text-gray-500 items-center cursor-pointer\",\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.toggleVisibility && _ctx.toggleVisibility(...args)))\n }, [\n _createVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.label), 1),\n (_ctx.visible)\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 0,\n name: \"chevron-up\",\n size: \"sm\"\n }))\n : (_openBlock(), _createBlock(_component_BalIcon, {\n key: 1,\n name: \"chevron-down\",\n size: \"sm\"\n }))\n ]),\n (_ctx.visible)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_3, [\n (_ctx.routes.length === 0)\n ? (_openBlock(), _createBlock(\"div\", {\n key: 0,\n textContent: _toDisplayString(_ctx.$t('noData')),\n class: \"mt-5 text-sm text-gray-500\"\n }, null, 8, [\"textContent\"]))\n : (_openBlock(), _createBlock(\"div\", _hoisted_4, [\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_5, [\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_6, _toDisplayString(_ctx.input.amount), 1),\n _createVNode(\"div\", null, _toDisplayString(_ctx.input.symbol), 1)\n ]),\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(\"div\", _hoisted_8, _toDisplayString(_ctx.output.amount), 1),\n _createVNode(\"div\", null, _toDisplayString(_ctx.output.symbol), 1)\n ])\n ]),\n _createVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createVNode(\"div\", _hoisted_11, [\n _createVNode(_component_BalAsset, {\n address: _ctx.input.address,\n size: 36\n }, null, 8, [\"address\"]),\n _createVNode(_component_BalAsset, {\n address: _ctx.output.address,\n size: 36\n }, null, 8, [\"address\"])\n ])\n ])\n ]),\n _createVNode(\"div\", {\n class: \"flex justify-between\",\n style: { margin: `8px ${12 + _ctx.routes.length}px` }\n }, [\n _createVNode(_component_BalIcon, {\n name: \"triangle\",\n size: \"xxs\",\n filled: true,\n class: \"transform rotate-180 text-gray-500\"\n }),\n _createVNode(_component_BalIcon, {\n name: \"triangle\",\n size: \"xxs\",\n filled: true,\n class: \"text-gray-500\"\n })\n ], 4),\n _createVNode(\"div\", _hoisted_12, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.routes, (route, index) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: index,\n style: {\n height: `${18 + 70 * index}px`,\n width: `calc(100% - ${4 * (_ctx.routes.length - index - 1)}px + 1px)`,\n margin: `0 ${2 * (_ctx.routes.length - index - 1) - 1}px`\n },\n class: \"absolute border-l border-r border-b border-gray-500 rounded-b-md\"\n }, null, 4))\n }), 128)),\n _createVNode(\"div\", _hoisted_13, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.routes, (route) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: route.hops[0]?.pool?.address,\n class: \"mt-9 first:mt-0 flex justify-between\"\n }, [\n _createVNode(\"div\", _hoisted_14, [\n _createVNode(_component_BalIcon, {\n name: \"triangle\",\n size: \"xxs\",\n filled: true,\n class: \"transform rotate-90 text-gray-500\"\n })\n ]),\n _createVNode(\"div\", _hoisted_15, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(route.hops, (hop) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: hop?.pool?.address,\n class: \"ml-4 first:ml-0 flex bg-white hover:bg-gray-50 dark:bg-gray-900 dark:hover:bg-gray-800 border border-gray-100 hover:border-gray-300 dark:border-gray-600 dark:hover:border-gray-400 rounded-xl shadow transition-colors\"\n }, [\n _createVNode(\"a\", {\n class: \"flex p-1.5\",\n href: _ctx.getPoolLink(hop.pool.id),\n target: \"_blank\"\n }, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(hop.pool.tokens, (token) => {\n return (_openBlock(), _createBlock(_component_BalAsset, {\n class: \"ml-1.5 first:ml-0\",\n key: token.address,\n address: token.address,\n size: 20\n }, null, 8, [\"address\"]))\n }), 128))\n ], 8, [\"href\"])\n ]))\n }), 128))\n ]),\n _createVNode(\"div\", _hoisted_16, _toDisplayString(_ctx.formatShare(route.share)), 1)\n ]))\n }), 128))\n ])\n ])\n ]))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n})","\nimport BigNumber from 'bignumber.js';\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport { getAddress } from '@ethersproject/address';\nimport { AddressZero } from '@ethersproject/constants';\nimport { Pool, Swap } from '@balancer-labs/sor/dist/types';\nimport { SubgraphPoolBase, SwapV2 } from '@balancer-labs/sor2';\n\nimport useNumbers from '@/composables/useNumbers';\nimport { SorReturn } from '@/lib/utils/balancer/helpers/sor/sorManager';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport { NATIVE_ASSET_ADDRESS } from '@/constants/tokens';\n\ninterface Route {\n share: number;\n hops: Hop[];\n}\n\ninterface Hop {\n pool: {\n id: string;\n tokens: Asset[];\n };\n tokenIn: string;\n tokenOut: string;\n amount: BigNumber;\n}\n\ninterface Asset {\n address: string;\n share: number;\n}\n\nexport default defineComponent({\n props: {\n addressIn: {\n type: String,\n required: true\n },\n amountIn: {\n type: String,\n required: true\n },\n addressOut: {\n type: String,\n required: true\n },\n amountOut: {\n type: String,\n required: true\n },\n pools: {\n type: Array as PropType<(Pool | SubgraphPoolBase)[]>,\n required: true\n },\n sorReturn: {\n type: Object as PropType,\n required: true\n }\n },\n setup(props) {\n const { fNum } = useNumbers();\n\n const { appNetworkConfig } = useWeb3();\n const { tokens } = useTokens();\n\n const visible = ref(false);\n\n function toggleVisibility(): void {\n visible.value = !visible.value;\n }\n\n const label = computed(() => {\n return `Order Routing`;\n });\n\n const input = computed(() => {\n const symbol = tokens.value[props.addressIn].symbol;\n return {\n amount: props.amountIn,\n address: props.addressIn,\n symbol\n };\n });\n\n const output = computed(() => {\n const symbol = tokens.value[props.addressOut].symbol;\n return {\n amount: props.amountOut,\n address: props.addressOut,\n symbol\n };\n });\n\n const routes = computed(() => {\n const { sorReturn } = props;\n\n if (!sorReturn.hasSwaps) {\n return [];\n }\n\n if (sorReturn.isV1swap) {\n const pools = props.pools as Pool[];\n const swaps = sorReturn.v1result[0];\n\n return getV1Routes(pools, swaps);\n } else {\n const pools = props.pools as SubgraphPoolBase[];\n const swaps = sorReturn.v2result.swaps;\n const addresses = sorReturn.v2result.tokenAddresses;\n const addressIn = props.addressIn as string;\n const addressOut = props.addressOut as string;\n\n return getV2Routes(addressIn, addressOut, pools, swaps, addresses);\n }\n });\n\n function getV1Routes(pools: Pool[], swaps: Swap[][]) {\n if (!pools.length || !swaps.length) {\n return [];\n }\n\n const totalSwapAmount = swaps.reduce((total, rawHops) => {\n return total.plus(rawHops[0].swapAmount || '0');\n }, new BigNumber(0));\n const routes = swaps.map(rawHops => {\n const swapAmount = new BigNumber(rawHops[0].swapAmount || '0');\n const share = swapAmount.div(totalSwapAmount).toNumber();\n const hops = rawHops.map(rawHop => {\n const tokenIn = getAddress(rawHop.tokenIn);\n const tokenOut = getAddress(rawHop.tokenOut);\n const rawPool = pools.find(pool => pool.id === rawHop.pool);\n if (!rawPool) {\n return {};\n }\n const totalWeight = new BigNumber(rawPool.totalWeight);\n const pool = {\n id: rawPool.id,\n tokens: rawPool.tokens\n .map(token => {\n const address = getAddress(token.address);\n const weight = new BigNumber(token.denormWeight);\n const share = weight.div(totalWeight).toNumber();\n return {\n address,\n share\n };\n })\n .sort((a, b) => {\n if (a.address === tokenIn || b.address === tokenOut) {\n return -1;\n }\n if (a.address === tokenOut || b.address === tokenIn) {\n return 1;\n }\n return a.share - b.share;\n })\n .filter((_token, index, tokens) => {\n // Show first 2 and last 2 tokens\n return index < 2 || index > tokens.length - 3;\n })\n };\n return {\n pool,\n tokenIn,\n tokenOut\n };\n });\n return {\n share,\n hops\n };\n }) as Route[];\n\n return routes;\n }\n\n function getV2Routes(\n addressIn: string,\n addressOut: string,\n pools: SubgraphPoolBase[],\n swaps: SwapV2[],\n addresses: string[]\n ) {\n const { addresses: constants } = appNetworkConfig;\n\n addressIn =\n addressIn === NATIVE_ASSET_ADDRESS\n ? constants.weth\n : getAddress(addressIn);\n addressOut =\n addressOut === NATIVE_ASSET_ADDRESS\n ? constants.weth\n : getAddress(addressOut);\n\n if (\n !pools.length ||\n !swaps.length ||\n !addresses.length ||\n addresses.length === 1\n ) {\n return [];\n }\n\n // To get total amount we can use all swaps because multihops have a value of 0\n const totalSwapAmount = swaps.reduce((total, rawHops) => {\n return total.plus(rawHops.amount || '0');\n }, new BigNumber(0));\n\n // Contains direct and multihops\n const routes: Route[] = [];\n // Contains every token > token hop\n const allHops: Hop[] = [];\n for (let i = 0; i < swaps.length; i++) {\n const swap = swaps[i];\n const rawPool = pools.find(pool => pool.id === swap.poolId);\n\n if (!rawPool) {\n return {};\n }\n\n const tokenIn =\n addresses[swap.assetInIndex] === AddressZero\n ? constants.weth\n : getAddress(addresses[swap.assetInIndex]);\n const tokenOut =\n addresses[swap.assetOutIndex] === AddressZero\n ? constants.weth\n : getAddress(addresses[swap.assetOutIndex]);\n\n const isDirectSwap =\n tokenIn === addressIn && tokenOut === addressOut ? true : false;\n\n const pool = {\n id: rawPool.id,\n tokens: rawPool.tokens\n .map(token => {\n return {\n address: getAddress(token.address),\n share:\n parseFloat(token.weight || '') || 1 / rawPool.tokens.length\n };\n })\n .sort((a, b) => {\n if (a.address === tokenIn || b.address === tokenOut) {\n return -1;\n }\n if (a.address === tokenOut || b.address === tokenIn) {\n return 1;\n }\n return a.share - b.share;\n })\n .filter((_token, index, tokens) => {\n // Show first 2 and last 2 tokens\n return index < 2 || index > tokens.length - 3;\n })\n };\n\n const hop = {\n pool,\n tokenIn,\n tokenOut,\n amount: new BigNumber(swap.amount || '0')\n };\n\n allHops.push(hop);\n\n if (isDirectSwap) {\n // Direct swaps are pushed to routes array immediately\n const share = hop.amount.div(totalSwapAmount).toNumber();\n const route = {\n share,\n hops: [hop]\n } as Route;\n routes.push(route);\n } else {\n // Only multihops that have a previous partner in sequence are pushed to routes\n if (tokenOut === addressOut && swap.amount === '0') {\n // TokenOut with amount of 0 for multihop means it's a swapExactIn and previous swap is partner of hop\n const swapAmount = new BigNumber(allHops[i - 1].amount);\n const share = swapAmount.div(totalSwapAmount).toNumber();\n const route = {\n share,\n hops: [allHops[i - 1], hop]\n } as Route;\n routes.push(route);\n } else if (tokenIn === addressIn && swap.amount === '0') {\n // TokenIn with amount of 0 for multihop means it's a swapExactOut and previous swap is partner of hop\n const swapAmount = new BigNumber(allHops[i - 1].amount);\n const share = swapAmount.div(totalSwapAmount).toNumber();\n const route = {\n share,\n hops: [hop, allHops[i - 1]]\n } as Route;\n routes.push(route);\n }\n }\n }\n\n return routes;\n }\n\n function formatShare(share: number): string {\n return fNum(share, 'percent');\n }\n\n function getPoolLink(id: string): string {\n const chainId = appNetworkConfig.chainId;\n const prefixMap = {\n 1: 'app.',\n 42: 'kovan.',\n 137: 'polygon.',\n 4: 'development.',\n 250: 'app.'\n };\n const prefix = prefixMap[chainId] || '';\n if (props.sorReturn.isV1swap && chainId === 1) {\n return `https://pools.balancer.exchange/#/pool/${id}`;\n } else {\n return props.sorReturn.isV1swap\n ? `https://${prefix}pools.balancer.exchange/#/pool/${id}`\n : `https://${prefix}beethovenx.io/#pool/${id}`;\n }\n }\n\n return {\n visible,\n toggleVisibility,\n\n label,\n input,\n output,\n routes,\n\n formatShare,\n getPoolLink\n };\n }\n});\n","import { render } from \"./TradeRoute.vue?vue&type=template&id=732ee322&scoped=true&ts=true\"\nimport script from \"./TradeRoute.vue?vue&type=script&lang=ts\"\nexport * from \"./TradeRoute.vue?vue&type=script&lang=ts\"\n\nimport \"./TradeRoute.vue?vue&type=style&index=0&id=732ee322&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-732ee322\"]])\n\nexport default __exports__","import { createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createVNode(\"div\", { class: \"flex items-center border-gray-700 border-b pt-3 px-4 pb-2\" }, [\n /*#__PURE__*/_createVNode(\"div\", { class: \"flex-1\" }, [\n /*#__PURE__*/_createVNode(\"span\", { class: \"font-medium\" }, \"Live swap rates\")\n ]),\n /*#__PURE__*/_createVNode(\"div\", { class: \"w-20 flex justify-center\" }, [\n /*#__PURE__*/_createVNode(\"img\", {\n src: \"https://assets.coingecko.com/coins/images/15223/small/logo_200x200.png\",\n width: \"32\"\n })\n ]),\n /*#__PURE__*/_createVNode(\"div\", { class: \"w-20 flex justify-center\" }, [\n /*#__PURE__*/_createVNode(\"img\", {\n src: \"https://storageapi.fleek.co/beethovenxfi-team-bucket/SPIRIT.png\",\n width: \"32\"\n })\n ]),\n /*#__PURE__*/_createVNode(\"div\", { class: \"w-20 flex justify-center\" }, [\n /*#__PURE__*/_createVNode(\"img\", {\n src: \"https://beethoven-assets.s3.eu-central-1.amazonaws.com/beets-icon-large.png\",\n width: \"32\"\n })\n ])\n], -1)\nconst _hoisted_2 = { class: \"flex items-center flex-1\" }\nconst _hoisted_3 = { class: \"ml-2 font-medium w-8\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n\n return (_openBlock(), _createBlock(_component_BalCard, {\n shadow: \"lg\",\n class: \"mt-8\",\n noPad: \"\"\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.items, (item, idx) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: item.id,\n class: [\n 'flex items-center border-gray-700 pt-2 px-3',\n idx === _ctx.items.length - 1 ? 'pb-4' : 'pb-2 border-b'\n ]\n }, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(_component_BalAsset, {\n address: item.tokenIn,\n size: 24\n }, null, 8, [\"address\"]),\n _createVNode(\"div\", _hoisted_3, _toDisplayString(item.amountInNumberFormatted), 1),\n _createVNode(_component_BalIcon, {\n name: \"arrow-right\",\n size: \"sm\",\n class: \"ml-1 mr-2 flex items-center\"\n }),\n _createVNode(_component_BalAsset, {\n address: item.tokenOut,\n size: 24\n }, null, 8, [\"address\"])\n ]),\n _createVNode(\"div\", {\n class: [\n 'w-20 flex justify-center',\n _ctx.spooky[idx] > _ctx.beets[idx] && _ctx.spooky[idx] > _ctx.spirit[idx]\n ? 'text-green-500'\n : ''\n ]\n }, [\n _createTextVNode(_toDisplayString(_ctx.spooky[idx] ? _ctx.numeral(_ctx.spooky[idx]).format(item.amountOutFormat) : '') + \" \", 1),\n (!_ctx.spooky[idx])\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-4 w-12 mx-auto\",\n white: \"\"\n }))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createVNode(\"div\", {\n class: [\n 'w-20 flex justify-center',\n _ctx.spirit[idx] > _ctx.spooky[idx] && _ctx.spirit[idx] > _ctx.beets[idx]\n ? 'text-green-500'\n : ''\n ]\n }, [\n _createTextVNode(_toDisplayString(_ctx.spirit[idx] ? _ctx.numeral(_ctx.spirit[idx]).format(item.amountOutFormat) : '') + \" \", 1),\n (!_ctx.spirit[idx])\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-4 w-12 mx-auto\",\n white: \"\"\n }))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createVNode(\"div\", {\n class: [\n 'w-20 flex justify-center',\n _ctx.beets[idx] > _ctx.spooky[idx] && _ctx.beets[idx] > _ctx.spirit[idx]\n ? 'text-green-500'\n : ''\n ]\n }, [\n _createTextVNode(_toDisplayString(_ctx.beets[idx] ? _ctx.numeral(_ctx.beets[idx]).format(item.amountOutFormat) : '') + \" \", 1),\n (!_ctx.beets[idx])\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-4 w-12 mx-auto\",\n white: \"\"\n }))\n : _createCommentVNode(\"\", true)\n ], 2)\n ], 2))\n }), 128))\n ]),\n _: 1\n }))\n}","import Service from '@/services/balancer/contracts/balancer-contracts.service';\nimport ConfigService from '@/services/config/config.service';\nimport { Multicaller } from '@/lib/utils/balancer/contract';\nimport { default as UniswapV2Router02 } from '@/lib/abi/UniswapV2Router02.json';\nimport { GetAmountsOutInput } from '@/services/dex/dex-contract-types';\nimport { BigNumber } from 'bignumber.js';\n\nexport default class UniSwapRouter {\n private readonly service: Service;\n\n constructor(\n service,\n private readonly routerAddress: string,\n private readonly configService = new ConfigService()\n ) {\n this.service = service;\n this.routerAddress = routerAddress;\n }\n\n public async getAmountsOut(\n inputs: GetAmountsOutInput[]\n ): Promise {\n const multicaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n UniswapV2Router02\n );\n\n for (let i = 0; i < inputs.length; i++) {\n multicaller.call(\n `getAmountsOut${i}`,\n this.routerAddress,\n 'getAmountsOut',\n [inputs[i].amountIn.toString(), inputs[i].path]\n );\n }\n\n const result = await multicaller.execute();\n const output: BigNumber[] = [];\n\n for (let i = 0; i < inputs.length; i++) {\n //`getAmountsOut${i}`\n output.push(\n result[`getAmountsOut${i}`][result[`getAmountsOut${i}`].length - 1]\n );\n }\n\n return output;\n }\n}\n","import { Config } from '@/lib/config';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { rpcProviderService as _rpcProviderService } from '@/services/rpc-provider/rpc-provider.service';\nimport { configService as _configService } from '@/services/config/config.service';\nimport UniSwapRouter from '@/services/dex/contracts/uni-swap-router';\n\nexport default class DexContractsService {\n public readonly spookySwap: UniSwapRouter;\n public readonly spiritSwap: UniSwapRouter;\n private readonly config: Config;\n private readonly provider: JsonRpcProvider;\n\n constructor(\n readonly configService = _configService,\n readonly rpcProviderService = _rpcProviderService\n ) {\n this.provider = this.rpcProviderService.jsonProvider;\n this.config = this.configService.network;\n\n this.spookySwap = new UniSwapRouter(\n this,\n '0xF491e7B69E4244ad4002BC14e878a34207E38c29'\n );\n this.spiritSwap = new UniSwapRouter(\n this,\n '0x16327e3fbdaca3bcf7e38f5af2599d2ddc33ae52'\n );\n }\n}\n\nexport const dexContractsService = new DexContractsService();\n","import { computed, reactive } from 'vue';\nimport { useQuery } from 'vue-query';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport useApp from '@/composables/useApp';\nimport { dexContractsService } from '@/services/dex/dex-contracts.service';\nimport { BigNumber } from 'bignumber.js';\nimport {\n LiquiditySelection,\n SorManager\n} from '@/lib/utils/balancer/helpers/sor/sorManager';\nimport { SwapTypes } from '@balancer-labs/sor2';\nimport { scale, scaleDown, sleep } from '@/lib/utils';\nimport useTokens from '@/composables/useTokens';\nimport useWeb3 from '@/services/web3/useWeb3';\n\ninterface QueryResponse {\n spooky: number[];\n spirit: number[];\n beets: number[];\n}\n\ninterface DexesQueryInput {\n amountIn: string;\n amountInNumber: number;\n tokenIn: string;\n tokenOut: string;\n tokenInDecimal: number;\n tokenOutDecimal: number;\n spookyPath: string[];\n spiritPath: string[];\n}\n\nexport default function useDexesQuery(\n sorManager: SorManager,\n inputs: DexesQueryInput[]\n) {\n const { appLoading } = useApp();\n const { loading } = useTokens();\n const { isWalletReady } = useWeb3();\n const enabled = computed(() => !appLoading.value && !loading.value);\n const queryKey = reactive(QUERY_KEYS.Dexes.GetAmountsOut);\n\n const queryFn = async () => {\n await sleep(3000);\n\n const response = await Promise.all(\n inputs.map(async input => {\n const tokenInAmountNormalised = new BigNumber(\n `${input.amountInNumber}`\n ); // Normalized value\n const tokenInAmountScaled = scale(\n tokenInAmountNormalised,\n input.tokenInDecimal\n );\n\n return sorManager.getBestSwap(\n input.tokenIn,\n input.tokenOut,\n input.tokenInDecimal,\n input.tokenOutDecimal,\n SwapTypes.SwapExactIn,\n tokenInAmountScaled,\n input.tokenInDecimal,\n LiquiditySelection.V2\n );\n })\n );\n\n const result = {\n spooky: (\n await dexContractsService.spookySwap.getAmountsOut(\n inputs.map(input => ({ ...input, path: input.spookyPath }))\n )\n ).map((value, idx) =>\n scaleDown(\n new BigNumber(value.toString()),\n inputs[idx].tokenOutDecimal\n ).toNumber()\n ),\n spirit: (\n await dexContractsService.spiritSwap.getAmountsOut(\n inputs.map(input => ({ ...input, path: input.spiritPath }))\n )\n ).map((value, idx) =>\n scaleDown(\n new BigNumber(value.toString()),\n inputs[idx].tokenOutDecimal\n ).toNumber()\n ),\n beets: response.map((value, idx) =>\n scaleDown(value.returnAmount, inputs[idx].tokenOutDecimal).toNumber()\n )\n };\n\n return result;\n };\n\n const queryOptions = reactive({\n enabled\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","\nimport { computed, defineComponent, PropType, ref, watch } from 'vue';\nimport useNumbers from '@/composables/useNumbers';\nimport numeral from 'numeral';\nimport { SorManager } from '@/lib/utils/balancer/helpers/sor/sorManager';\nimport useDexesQuery from '@/composables/queries/useDexesQuery';\nimport { getAddress } from '@ethersproject/address';\n\nconst WFTM = getAddress('0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83');\nconst USDC = getAddress('0x04068DA6C83AFCFA0e13ba15A6696662335D5B75');\nconst BTC = getAddress('0x321162Cd933E2Be498Cd2267a90534A804051b11');\nconst ETH = getAddress('0x74b23882a30290451A17c44f4F05243b6b58C76d');\nconst DAI = getAddress('0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e');\nconst MIM = getAddress('0x82f0b8b456c1a451378467398982d4834b6829c1');\nconst SPIRIT = getAddress('0x5cc61a78f164885776aa610fb0fe1257df78e59b');\nconst SPELL = getAddress('0x468003b688943977e6130f4f68f23aad939a1040');\nconst FUSDT = getAddress('0x049d68029688eabf473097a2fc38ef61633a3c7a');\n\nconst SWAPS = [\n {\n id: '0',\n amountIn: '60000000000',\n spookyPath: [USDC, WFTM, BTC],\n spiritPath: [USDC, WFTM, BTC],\n tokenIn: USDC,\n tokenInDecimal: 6,\n tokenOut: BTC,\n tokenOutDecimal: 8,\n amountInNumber: 60000,\n amountInNumberFormatted: '60k',\n amountOutFormat: '0.0000'\n },\n {\n id: '1',\n amountIn: '5000000000000000000000',\n spookyPath: [WFTM, ETH],\n spiritPath: [WFTM, ETH],\n tokenIn: WFTM,\n tokenOut: ETH,\n tokenInDecimal: 18,\n tokenOutDecimal: 18,\n amountInNumber: 5000,\n amountInNumberFormatted: '5k',\n amountOutFormat: '0.[0000]'\n },\n {\n id: '2',\n amountIn: '10000000000',\n spookyPath: [USDC, WFTM, DAI],\n spiritPath: [USDC, WFTM, SPIRIT, DAI],\n tokenIn: USDC,\n tokenOut: DAI,\n tokenInDecimal: 6,\n tokenOutDecimal: 18,\n amountInNumber: 10000,\n amountInNumberFormatted: '10k',\n amountOutFormat: '0,0'\n },\n {\n id: '3',\n amountIn: '1000000000000000000000',\n spookyPath: [MIM, WFTM, SPELL],\n spiritPath: [MIM, WFTM, FUSDT, SPELL],\n tokenIn: MIM,\n tokenOut: SPELL,\n tokenInDecimal: 18,\n tokenOutDecimal: 18,\n amountInNumber: 1000,\n amountInNumberFormatted: '1k',\n amountOutFormat: '0,0'\n },\n {\n id: '4',\n amountIn: '100000000',\n spookyPath: [BTC, WFTM, USDC],\n spiritPath: [BTC, WFTM, USDC],\n tokenIn: BTC,\n tokenInDecimal: 8,\n tokenOut: USDC,\n tokenOutDecimal: 6,\n amountInNumber: 1,\n amountInNumberFormatted: '1.0',\n amountOutFormat: '0,0'\n },\n {\n id: '5',\n amountIn: '3000000000000000000',\n spookyPath: [ETH, WFTM],\n spiritPath: [ETH, WFTM],\n tokenIn: ETH,\n tokenOut: WFTM,\n tokenInDecimal: 18,\n tokenOutDecimal: 18,\n amountInNumber: 3,\n amountInNumberFormatted: '3.0',\n amountOutFormat: '0,0'\n },\n {\n id: '6',\n amountIn: '10000000000000000000000',\n spookyPath: [DAI, WFTM, USDC],\n spiritPath: [DAI, SPIRIT, WFTM, USDC],\n tokenIn: DAI,\n tokenOut: USDC,\n tokenInDecimal: 18,\n tokenOutDecimal: 6,\n amountInNumber: 10000,\n amountInNumberFormatted: '10k',\n amountOutFormat: '0,0'\n },\n {\n id: '7',\n amountIn: '50000000000000000000000',\n spookyPath: [SPELL, WFTM, MIM],\n spiritPath: [SPELL, FUSDT, WFTM, MIM],\n tokenIn: SPELL,\n tokenOut: MIM,\n tokenInDecimal: 18,\n tokenOutDecimal: 18,\n amountInNumber: 50000,\n amountInNumberFormatted: '50k',\n amountOutFormat: '0,0'\n }\n];\n\nexport default defineComponent({\n components: {},\n\n props: {\n sorManager: {\n type: Object as PropType,\n required: true\n }\n },\n\n setup(props) {\n const { fNum } = useNumbers();\n const { isLoading, data, isIdle } = useDexesQuery(props.sorManager, SWAPS);\n\n setInterval(() => {\n toggle.value = !toggle.value;\n }, 7500);\n\n const toggle = ref(false);\n const spooky = computed(() => {\n if (!data.value?.spooky) {\n return [];\n }\n\n return toggle.value\n ? data.value.spooky.slice(0, 4)\n : data.value.spooky.slice(4, 8);\n });\n\n const spirit = computed(() => {\n if (!data.value?.spirit) {\n return [];\n }\n\n return toggle.value\n ? data.value.spirit.slice(0, 4)\n : data.value.spirit.slice(4, 8);\n });\n\n const beets = computed(() => {\n if (!data.value?.beets) {\n return [];\n }\n\n return toggle.value\n ? data.value.beets.slice(0, 4)\n : data.value.beets.slice(4, 8);\n });\n const loading = computed(() => isLoading.value || isIdle.value);\n\n const items = computed(() =>\n toggle.value ? SWAPS.slice(0, 4) : SWAPS.slice(4, 8)\n );\n\n return {\n // data\n items,\n spooky,\n spirit,\n beets,\n loading,\n\n // methods\n fNum,\n numeral,\n toggle\n };\n }\n});\n","import { render } from \"./TradeRatesCard.vue?vue&type=template&id=7cf81b20&ts=true\"\nimport script from \"./TradeRatesCard.vue?vue&type=script&lang=ts\"\nexport * from \"./TradeRatesCard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { isRequired } from '@/lib/utils/validations';\nimport { computed, defineComponent, ref, watch } from 'vue';\nimport { useStore } from 'vuex';\nimport { useRouter } from 'vue-router';\nimport { getAddress, isAddress } from '@ethersproject/address';\n\nimport useTokenApproval from '@/composables/trade/useTokenApproval';\nimport useValidation, {\n TradeValidation\n} from '@/composables/trade/useValidation';\nimport useSor from '@/composables/trade/useSor';\n\nimport SuccessOverlay from '@/components/cards/SuccessOverlay.vue';\nimport TradePair from '@/components/cards/TradeCard/TradePair.vue';\nimport TradePreviewModal from '@/components/modals/TradePreviewModal.vue';\nimport TradeRoute from '@/components/cards/TradeCard/TradeRoute.vue';\nimport TradeSettingsPopover, {\n TradeSettingsContext\n} from '@/components/popovers/TradeSettingsPopover.vue';\nimport { useI18n } from 'vue-i18n';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useBreakpoints from '@/composables/useBreakpoints';\nimport useTokens from '@/composables/useTokens';\nimport useDarkMode from '@/composables/useDarkMode';\nimport { configService } from '@/services/config/config.service';\n\nimport { getWrapAction, WrapType } from '@/lib/utils/balancer/wrapper';\nimport TradeRatesCard from '@/components/cards/TradeRatesCard/TradeRatesCard.vue';\nimport useUserSettings from '@/composables/useUserSettings';\nimport { useRoute } from 'vue-router';\nconst { nativeAsset } = configService.network;\n\nexport default defineComponent({\n components: {\n TradeRatesCard,\n SuccessOverlay,\n TradePair,\n TradePreviewModal,\n TradeRoute,\n TradeSettingsPopover\n },\n\n setup() {\n const route = useRoute();\n const highPiAccepted = ref(false);\n const store = useStore();\n const router = useRouter();\n const { explorerLinks } = useWeb3();\n const { t } = useI18n();\n const { bp } = useBreakpoints();\n\n const { tokens } = useTokens();\n const { userNetworkConfig } = useWeb3();\n const { darkMode } = useDarkMode();\n const { slippage } = useUserSettings();\n\n const exactIn = ref(true);\n const tokenInAddress = ref('');\n const tokenInAmount = ref('');\n const tokenOutAddress = ref('');\n const tokenOutAmount = ref('');\n const tradeSuccess = ref(false);\n const txHash = ref('');\n const modalTradePreviewIsOpen = ref(false);\n\n const slippageBufferRate = computed(() => parseFloat(slippage.value));\n\n const tokenIn = computed(() => tokens.value[tokenInAddress.value]);\n\n const tokenOut = computed(() => tokens.value[tokenOutAddress.value]);\n\n const liquiditySelection = computed(() => store.state.app.tradeLiquidity);\n\n const tradeCardShadow = computed(() => {\n switch (bp.value) {\n case 'xs':\n return 'none';\n case 'sm':\n return 'lg';\n default:\n return 'xl';\n }\n });\n\n const wrapType = computed(() => {\n console.log(\n 'wrap action',\n getWrapAction(tokenInAddress.value, tokenOutAddress.value)\n );\n\n return getWrapAction(tokenInAddress.value, tokenOutAddress.value);\n });\n const isWrap = computed(() => wrapType.value === WrapType.Wrap);\n const isUnwrap = computed(() => wrapType.value === WrapType.Unwrap);\n\n const isHighPriceImpact = computed(() => {\n return priceImpact.value >= 0.05 && !highPiAccepted.value;\n });\n\n const tradeDisabled = computed(() => {\n if (errorMessage.value !== TradeValidation.VALID) return true;\n if (isHighPriceImpact.value) return true;\n return false;\n });\n\n // COMPOSABLES\n const { isLoading: isLoadingApprovals } = useTokenApproval(\n tokenInAddress,\n tokenInAmount,\n tokens\n );\n const {\n trading,\n trade,\n initSor,\n handleAmountChange,\n priceImpact,\n sorReturn,\n latestTxHash,\n pools,\n fetchPools,\n poolsLoading,\n slippageError,\n sorManager,\n sorManagerInitialized,\n sorManagerRef\n } = useSor({\n exactIn,\n tokenInAddressInput: tokenInAddress,\n tokenInAmountInput: tokenInAmount,\n tokenOutAddressInput: tokenOutAddress,\n tokenOutAmountInput: tokenOutAmount,\n tokens,\n wrapType,\n tokenIn,\n tokenOut,\n slippageBufferRate\n });\n const { errorMessage } = useValidation(\n tokenInAddress,\n tokenInAmount,\n tokenOutAddress,\n tokenOutAmount\n );\n\n const sorManagerIsInitialized = computed(() => sorManagerInitialized.value);\n\n const title = computed(() => {\n if (isWrap.value) return t('wrap');\n if (isUnwrap.value) return t('unwrap');\n return t('trade');\n });\n\n const error = computed(() => {\n if (isHighPriceImpact.value) {\n return {\n header: t('highPriceImpact'),\n body: t('highPriceImpactDetailed'),\n label: t('accept')\n };\n }\n switch (errorMessage.value) {\n case TradeValidation.NO_NATIVE_ASSET:\n return {\n header: t('noNativeAsset', [nativeAsset.symbol]),\n body: t('noNativeAssetDetailed', [\n nativeAsset.symbol,\n configService.network.chainName\n ])\n };\n case TradeValidation.NO_BALANCE:\n return {\n header: t('insufficientBalance'),\n body: t('insufficientBalanceDetailed')\n };\n case TradeValidation.NO_LIQUIDITY:\n return {\n header: t('insufficientLiquidity'),\n body: t('insufficientLiquidityDetailed')\n };\n default:\n return undefined;\n }\n });\n\n function handleErrorButtonClick() {\n if (isHighPriceImpact.value) {\n highPiAccepted.value = true;\n }\n }\n function redirectToInvest() {\n computed(() => route.path === '/farm');\n }\n\n async function populateInitialTokens(): Promise {\n let assetIn = router.currentRoute.value.params.assetIn as string;\n if (assetIn === nativeAsset.deeplinkId) assetIn = nativeAsset.address;\n else if (isAddress(assetIn)) assetIn = getAddress(assetIn);\n let assetOut = router.currentRoute.value.params.assetOut as string;\n if (assetOut === nativeAsset.deeplinkId) assetOut = nativeAsset.address;\n else if (isAddress(assetOut)) assetOut = getAddress(assetOut);\n\n tokenInAddress.value = assetIn || store.state.trade.inputAsset;\n tokenOutAddress.value = assetOut || store.state.trade.outputAsset;\n }\n\n function showTradePreviewModal() {\n slippageError.value = false;\n modalTradePreviewIsOpen.value = true;\n }\n\n watch(userNetworkConfig, async () => {\n await initSor();\n await handleAmountChange();\n });\n\n watch(tokenInAddress, () => {\n store.commit('trade/setInputAsset', tokenInAddress.value);\n handleAmountChange();\n });\n\n watch(tokenOutAddress, () => {\n store.commit('trade/setOutputAsset', tokenOutAddress.value);\n handleAmountChange();\n });\n\n watch(liquiditySelection, () => {\n // When the liquidity type is changed we need to update the trade to use that selection\n handleAmountChange();\n });\n\n watch(latestTxHash, () => {\n // Refresh SOR pools\n fetchPools();\n txHash.value = latestTxHash.value;\n tradeSuccess.value = true;\n modalTradePreviewIsOpen.value = false;\n });\n\n populateInitialTokens();\n\n return {\n redirectToInvest,\n highPiAccepted,\n title,\n error,\n handleErrorButtonClick,\n tokenInAddress,\n tokenInAmount,\n tokenOutAddress,\n tokenOutAmount,\n exactIn,\n handleAmountChange,\n errorMessage,\n sorReturn,\n pools,\n trading,\n trade,\n txHash,\n modalTradePreviewIsOpen,\n tradeSuccess,\n priceImpact,\n isRequired,\n tradeDisabled,\n TradeSettingsContext,\n poolsLoading,\n showTradePreviewModal,\n isLoadingApprovals,\n bp,\n darkMode,\n tradeCardShadow,\n explorer: explorerLinks,\n slippageError,\n sorManager,\n sorManagerIsInitialized,\n sorManagerRef\n };\n }\n});\n","import { render } from \"./TradeCard.vue?vue&type=template&id=59702808&ts=true\"\nimport script from \"./TradeCard.vue?vue&type=script&lang=ts\"\nexport * from \"./TradeCard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, createTextVNode as _createTextVNode, withCtx as _withCtx, Teleport as _Teleport, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"w-full flex items-center justify-between\" }\nconst _hoisted_2 = { class: \"font-bold\" }\nconst _hoisted_3 = {\n key: 4,\n class: \"mt-6 bg-gray-50 rounded text-sm p-3 grid gap-2 grid-flow-col text-gray-600 dark:bg-gray-800 dark:text-gray-400\"\n}\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\"Trades from ETH route through Balancer liquidity pools and incur gas fees. \")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\" to avoid gas. \")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TradeSettingsPopover = _resolveComponent(\"TradeSettingsPopover\")\n const _component_TradePairGP = _resolveComponent(\"TradePairGP\")\n const _component_BalAlert = _resolveComponent(\"BalAlert\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_LightBulbIcon = _resolveComponent(\"LightBulbIcon\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n const _component_TradePreviewModalGP = _resolveComponent(\"TradePreviewModalGP\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(_component_BalCard, {\n class: \"relative\",\n shadow: _ctx.tradeCardShadow,\n \"no-border\": \"\"\n }, {\n header: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"h4\", _hoisted_2, _toDisplayString(_ctx.title), 1),\n _createVNode(_component_TradeSettingsPopover, {\n context: _ctx.TradeSettingsContext.trade\n }, null, 8, [\"context\"])\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", null, [\n _createVNode(_component_TradePairGP, {\n \"token-in-amount-input\": _ctx.tokenInAmount,\n \"token-in-address-input\": _ctx.tokenInAddress,\n \"token-out-amount-input\": _ctx.tokenOutAmount,\n \"token-out-address-input\": _ctx.tokenOutAddress,\n \"exact-in\": _ctx.exactIn,\n \"effective-price-message\": _ctx.trading.effectivePriceMessage,\n onTokenInAmountChange: _cache[1] || (_cache[1] = value => (_ctx.tokenInAmount = value)),\n onTokenInAddressChange: _cache[2] || (_cache[2] = value => (_ctx.tokenInAddress = value)),\n onTokenOutAmountChange: _cache[3] || (_cache[3] = value => (_ctx.tokenOutAmount = value)),\n onTokenOutAddressChange: _cache[4] || (_cache[4] = value => (_ctx.tokenOutAddress = value)),\n onExactInChange: _cache[5] || (_cache[5] = value => (_ctx.exactIn = value)),\n onChange: _ctx.trading.handleAmountChange\n }, null, 8, [\"token-in-amount-input\", \"token-in-address-input\", \"token-out-amount-input\", \"token-out-address-input\", \"exact-in\", \"effective-price-message\", \"onChange\"]),\n (_ctx.error)\n ? (_openBlock(), _createBlock(_component_BalAlert, {\n key: 0,\n class: \"p-3 mb-4\",\n type: \"error\",\n size: \"sm\",\n title: _ctx.error.header,\n description: _ctx.error.body,\n \"action-label\": _ctx.error.label,\n block: \"\",\n onActionClick: _ctx.handleErrorButtonClick\n }, null, 8, [\"title\", \"description\", \"action-label\", \"onActionClick\"]))\n : (_ctx.warning)\n ? (_openBlock(), _createBlock(_component_BalAlert, {\n key: 1,\n class: \"p-3 mb-4\",\n type: \"warning\",\n size: \"sm\",\n title: _ctx.warning.header,\n description: _ctx.warning.body,\n block: \"\"\n }, null, 8, [\"title\", \"description\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.trading.isLoading.value)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 2,\n loading: true,\n \"loading-label\": \n _ctx.trading.isGnosisTrade.value ? _ctx.$t('loadingBestPrice') : _ctx.$t('loading')\n ,\n block: \"\"\n }, null, 8, [\"loading-label\"]))\n : (_openBlock(), _createBlock(_component_BalBtn, {\n key: 3,\n label: _ctx.$t('preview'),\n disabled: _ctx.tradeDisabled,\n \"loading-label\": _ctx.$t('confirming'),\n color: \"gradient\",\n block: \"\",\n onClick: _cache[6] || (_cache[6] = _withModifiers(($event: any) => (_ctx.modalTradePreviewIsOpen = true), [\"prevent\"]))\n }, null, 8, [\"label\", \"disabled\", \"loading-label\"])),\n (_ctx.trading.isBalancerTrade.value)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_3, [\n _createVNode(_component_LightBulbIcon),\n _createVNode(\"span\", null, [\n _hoisted_4,\n _createVNode(\"a\", {\n onClick: _cache[7] || (_cache[7] = ($event: any) => (_ctx.switchToWETH())),\n class: \"text-green-500\"\n }, \" Trade from WETH \"),\n _hoisted_5\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }, 8, [\"shadow\"]),\n (_openBlock(), _createBlock(_Teleport, { to: \"#modal\" }, [\n (_ctx.modalTradePreviewIsOpen)\n ? (_openBlock(), _createBlock(_component_TradePreviewModalGP, {\n key: 0,\n trading: _ctx.trading,\n onTrade: _ctx.trade,\n onClose: _cache[8] || (_cache[8] = ($event: any) => (_ctx.modalTradePreviewIsOpen = false))\n }, null, 8, [\"trading\", \"onTrade\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ], 64))\n}","import { computed, ComputedRef, reactive, ref, Ref, toRefs } from 'vue';\nimport { useStore } from 'vuex';\nimport { BigNumber } from 'bignumber.js';\nimport { formatUnits } from '@ethersproject/units';\nimport { OrderBalance, OrderKind } from '@gnosis.pm/gp-v2-contracts';\nimport { bnum } from '@/lib/utils';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { FeeInformation, OrderMetaData } from '@/services/gnosis/types';\nimport {\n calculateValidTo,\n signOrder,\n UnsignedOrder\n} from '@/services/gnosis/signing';\nimport { gnosisOperator } from '@/services/gnosis/operator.service';\nimport useTransactions from '../useTransactions';\nimport { Token } from '@/types';\nimport { TradeQuote } from './types';\nimport useNumbers from '../useNumbers';\nimport { TokenInfo } from '@/types/TokenList';\nimport useTokens from '../useTokens';\n\nconst HIGH_FEE_THRESHOLD = 0.2;\n\nconst state = reactive({\n errors: {\n feeExceedsPrice: false,\n priceExceedsBalance: false\n },\n warnings: {\n highFees: false\n }\n});\n\nexport type GnosisTransactionDetails = {\n tokenIn: Token;\n tokenOut: Token;\n tokenInAddress: string;\n tokenOutAddress: string;\n tokenInAmount: string;\n tokenOutAmount: string;\n exactIn: boolean;\n quote: TradeQuote;\n slippageBufferRate: number;\n order: {\n validTo: OrderMetaData['validTo'];\n partiallyFillable: OrderMetaData['partiallyFillable'];\n };\n};\n\ntype Props = {\n exactIn: Ref;\n tokenInAddressInput: Ref;\n tokenInAmountInput: Ref;\n tokenOutAddressInput: Ref;\n tokenOutAmountInput: Ref;\n tokenInAmountScaled: ComputedRef;\n tokenOutAmountScaled: ComputedRef;\n tokenIn: ComputedRef;\n tokenOut: ComputedRef;\n slippageBufferRate: ComputedRef;\n};\n\nexport default function useGnosis({\n exactIn,\n tokenInAddressInput,\n tokenInAmountInput,\n tokenOutAddressInput,\n tokenOutAmountInput,\n tokenInAmountScaled,\n tokenOutAmountScaled,\n tokenIn,\n tokenOut,\n slippageBufferRate\n}: Props) {\n // COMPOSABLES\n const store = useStore();\n const { account, getSigner } = useWeb3();\n const { addTransaction } = useTransactions();\n const { fNum } = useNumbers();\n const { balanceFor } = useTokens();\n\n // DATA\n const feeQuote = ref(null);\n const updatingQuotes = ref(false);\n const confirming = ref(false);\n\n // COMPUTED\n const appTransactionDeadline = computed(\n () => store.state.app.transactionDeadline\n );\n\n const hasErrors = computed(() =>\n Object.values(state.errors).some(hasError => hasError)\n );\n\n // METHODS\n function getFeeAmount() {\n const feeAmountInToken = feeQuote.value?.amount ?? '0';\n const feeAmountOutToken = tokenOutAmountScaled.value\n .div(tokenInAmountScaled.value)\n .times(feeAmountInToken)\n .integerValue(BigNumber.ROUND_DOWN)\n .toString();\n\n return {\n feeAmountInToken,\n feeAmountOutToken\n };\n }\n\n function getQuote(): TradeQuote {\n const { feeAmountInToken, feeAmountOutToken } = getFeeAmount();\n\n const maximumInAmount = tokenInAmountScaled.value\n .plus(feeAmountInToken)\n .times(1 + slippageBufferRate.value)\n .integerValue(BigNumber.ROUND_DOWN)\n .toString();\n\n const minimumOutAmount = tokenOutAmountScaled.value\n .minus(feeAmountOutToken)\n .div(1 + slippageBufferRate.value)\n .integerValue(BigNumber.ROUND_DOWN)\n .toString();\n\n return {\n feeAmountInToken,\n feeAmountOutToken,\n maximumInAmount,\n minimumOutAmount\n };\n }\n\n async function trade(successCallback?: () => void) {\n try {\n confirming.value = true;\n const quote = getQuote();\n\n const unsignedOrder: UnsignedOrder = {\n sellToken: tokenInAddressInput.value,\n buyToken: tokenOutAddressInput.value,\n sellAmount: bnum(\n exactIn.value ? tokenInAmountScaled.value : quote.maximumInAmount\n )\n .minus(quote.feeAmountInToken)\n .toString(),\n buyAmount: exactIn.value\n ? quote.minimumOutAmount\n : tokenOutAmountScaled.value.toString(),\n validTo: calculateValidTo(appTransactionDeadline.value),\n appData:\n '0xE9F29AE547955463ED535162AEFEE525D8D309571A2B18BC26086C8C35D781EB',\n feeAmount: quote.feeAmountInToken,\n kind: exactIn.value ? OrderKind.SELL : OrderKind.BUY,\n receiver: account.value,\n partiallyFillable: false, // Always fill or kill,\n sellTokenBalance: OrderBalance.EXTERNAL\n };\n\n const { signature, signingScheme } = await signOrder(\n unsignedOrder,\n getSigner()\n );\n\n const orderId = await gnosisOperator.postSignedOrder({\n order: {\n ...unsignedOrder,\n signature,\n receiver: account.value,\n signingScheme\n },\n owner: account.value\n });\n\n const sellAmount = exactIn.value\n ? tokenInAmountInput.value\n : formatUnits(quote.maximumInAmount, tokenIn.value.decimals).toString();\n\n const buyAmount = exactIn.value\n ? formatUnits(\n quote.minimumOutAmount,\n tokenOut.value.decimals\n ).toString()\n : tokenOutAmountInput.value;\n\n const tokenInAmountEst = exactIn.value ? '' : '~';\n const tokenOutAmountEst = exactIn.value ? '~' : '';\n\n const summary = `${tokenInAmountEst}${fNum(sellAmount, 'token')} ${\n tokenIn.value.symbol\n } -> ${tokenOutAmountEst}${fNum(buyAmount, 'token')} ${\n tokenOut.value.symbol\n }`;\n\n const { validTo, partiallyFillable } = unsignedOrder;\n\n addTransaction({\n id: orderId,\n type: 'order',\n action: 'trade',\n summary,\n details: {\n tokenIn: tokenIn.value,\n tokenOut: tokenOut.value,\n tokenInAddress: tokenInAddressInput.value,\n tokenOutAddress: tokenOutAddressInput.value,\n tokenInAmount: tokenInAmountInput.value,\n tokenOutAmount: tokenOutAmountInput.value,\n exactIn: exactIn.value,\n quote,\n slippageBufferRate: slippageBufferRate.value,\n order: {\n validTo,\n partiallyFillable\n }\n }\n });\n\n if (successCallback != null) {\n successCallback();\n }\n confirming.value = false;\n } catch (e) {\n console.log(e);\n confirming.value = false;\n }\n }\n\n function resetState(shouldResetFees = true) {\n state.errors.feeExceedsPrice = false;\n state.errors.priceExceedsBalance = false;\n\n state.warnings.highFees = false;\n\n if (shouldResetFees) {\n feeQuote.value = null;\n }\n }\n\n async function handleAmountChange() {\n const amountToExchange = exactIn.value\n ? tokenInAmountScaled.value\n : tokenOutAmountScaled.value;\n\n if (amountToExchange.isZero()) {\n tokenInAmountInput.value = '0';\n tokenOutAmountInput.value = '0';\n return;\n }\n\n if (amountToExchange.isNaN()) {\n tokenInAmountInput.value = '';\n tokenOutAmountInput.value = '';\n return;\n }\n\n updatingQuotes.value = true;\n\n try {\n const queryParams = {\n sellToken: tokenInAddressInput.value,\n buyToken: tokenOutAddressInput.value,\n amount: amountToExchange.toString(),\n kind: exactIn.value ? OrderKind.SELL : OrderKind.BUY\n };\n\n // TODO: there is a chance to optimize here and not make a new request if the fee is not expired\n const feeQuoteResult = await gnosisOperator.getFeeQuote(queryParams);\n\n if (feeQuoteResult != null) {\n if (exactIn.value) {\n state.errors.feeExceedsPrice = amountToExchange\n .minus(feeQuoteResult.amount)\n .isNegative();\n }\n if (!state.errors.feeExceedsPrice) {\n const priceQuoteResult = await gnosisOperator.getPriceQuote(\n queryParams\n );\n\n if (priceQuoteResult != null && priceQuoteResult.amount != null) {\n feeQuote.value = feeQuoteResult;\n\n if (exactIn.value) {\n tokenOutAmountInput.value = bnum(\n formatUnits(priceQuoteResult.amount, tokenOut.value.decimals)\n ).toFixed(6, BigNumber.ROUND_DOWN);\n\n const { feeAmountInToken } = getQuote();\n\n state.warnings.highFees = bnum(feeAmountInToken)\n .div(amountToExchange)\n .gt(HIGH_FEE_THRESHOLD);\n } else {\n tokenInAmountInput.value = bnum(\n formatUnits(priceQuoteResult.amount, tokenIn.value.decimals)\n ).toFixed(6, BigNumber.ROUND_DOWN);\n\n const { feeAmountOutToken, maximumInAmount } = getQuote();\n\n state.warnings.highFees = bnum(feeAmountOutToken)\n .div(amountToExchange)\n .gt(HIGH_FEE_THRESHOLD);\n\n state.errors.priceExceedsBalance = bnum(\n formatUnits(maximumInAmount, tokenIn.value.decimals)\n ).gt(balanceFor(tokenIn.value.address));\n }\n }\n }\n }\n } catch (e) {\n console.log('[Gnosis Quotes] Failed to update quotes', e);\n }\n updatingQuotes.value = false;\n }\n\n return {\n // methods\n trade,\n handleAmountChange,\n resetState,\n\n // computed\n ...toRefs(state),\n feeQuote,\n updatingQuotes,\n hasErrors,\n confirming,\n getQuote\n };\n}\n","import { computed, Ref, watch } from 'vue';\nimport { useStore } from 'vuex';\nimport { bnum, scale } from '@/lib/utils';\nimport useNumbers from '../useNumbers';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useSor from './useSor';\nimport useGnosis from './useGnosis';\nimport useTokens from '../useTokens';\nimport { NATIVE_ASSET_ADDRESS } from '@/constants/tokens';\nimport { getWrapAction, WrapType } from '@/lib/utils/balancer/wrapper';\nimport useUserSettings from '../useUserSettings';\n\nexport type TradeRoute = 'wrapUnwrap' | 'balancer' | 'gnosis';\n\nexport type UseTrading = ReturnType;\n\nexport default function useTrading(\n exactIn: Ref,\n tokenInAddressInput: Ref,\n tokenInAmountInput: Ref,\n tokenOutAddressInput: Ref,\n tokenOutAmountInput: Ref\n) {\n // COMPOSABLES\n const store = useStore();\n const { fNum } = useNumbers();\n const { tokens } = useTokens();\n const { blockNumber } = useWeb3();\n\n // COMPUTED\n const { slippage } = useUserSettings();\n const slippageBufferRate = computed(() => parseFloat(slippage.value));\n\n const liquiditySelection = computed(() => store.state.app.tradeLiquidity);\n\n const wrapType = computed(() =>\n getWrapAction(tokenInAddressInput.value, tokenOutAddressInput.value)\n );\n const isWrap = computed(() => wrapType.value === WrapType.Wrap);\n const isUnwrap = computed(() => wrapType.value === WrapType.Unwrap);\n\n const tokenIn = computed(() => tokens.value[tokenInAddressInput.value]);\n\n const tokenOut = computed(() => tokens.value[tokenOutAddressInput.value]);\n\n const isEthTrade = computed(\n () => tokenInAddressInput.value === NATIVE_ASSET_ADDRESS\n );\n\n const tokenInAmountScaled = computed(() =>\n scale(bnum(tokenInAmountInput.value), tokenIn.value.decimals)\n );\n\n const tokenOutAmountScaled = computed(() =>\n scale(bnum(tokenOutAmountInput.value), tokenOut.value.decimals)\n );\n\n const requiresTokenApproval = computed(() => {\n if (wrapType.value === WrapType.Unwrap || isEthTrade.value) {\n return false;\n }\n return true;\n });\n\n const effectivePriceMessage = computed(() => {\n const tokenInAmount = parseFloat(tokenInAmountInput.value);\n const tokenOutAmount = parseFloat(tokenOutAmountInput.value);\n\n if (tokenInAmount > 0 && tokenOutAmount > 0) {\n return {\n tokenIn: `1 ${tokenIn.value?.symbol} = ${fNum(\n bnum(tokenOutAmount)\n .div(tokenInAmount)\n .toString(),\n 'token'\n )} ${tokenOut.value?.symbol}`,\n tokenOut: `1 ${tokenOut.value?.symbol} = ${fNum(\n bnum(tokenInAmount)\n .div(tokenOutAmount)\n .toString(),\n 'token'\n )} ${tokenIn.value?.symbol}`\n };\n }\n return {\n tokenIn: '',\n tokenOut: ''\n };\n });\n\n const tradeRoute = computed(() => {\n if (wrapType.value !== WrapType.NonWrap) {\n return 'wrapUnwrap';\n }\n\n return isEthTrade.value ? 'balancer' : 'gnosis';\n });\n\n const isGnosisTrade = computed(() => tradeRoute.value === 'gnosis');\n\n const isBalancerTrade = computed(() => tradeRoute.value === 'balancer');\n\n const isWrapUnwrapTrade = computed(() => tradeRoute.value === 'wrapUnwrap');\n\n const hasTradeQuote = computed(\n () =>\n parseFloat(tokenInAmountInput.value) > 0 &&\n parseFloat(tokenOutAmountInput.value) > 0\n );\n\n const sor = useSor({\n exactIn,\n tokenInAddressInput,\n tokenInAmountInput,\n tokenOutAddressInput,\n tokenOutAmountInput,\n tokens,\n wrapType,\n tokenInAmountScaled,\n tokenOutAmountScaled,\n sorConfig: {\n handleAmountsOnFetchPools: false,\n refetchPools: false\n },\n tokenIn,\n tokenOut,\n slippageBufferRate\n });\n\n const gnosis = useGnosis({\n exactIn,\n tokenInAddressInput,\n tokenInAmountInput,\n tokenOutAddressInput,\n tokenOutAmountInput,\n tokenInAmountScaled,\n tokenOutAmountScaled,\n tokenIn,\n tokenOut,\n slippageBufferRate\n });\n\n const isLoading = computed(() => {\n if (hasTradeQuote.value || isWrapUnwrapTrade.value) {\n return false;\n }\n\n return isBalancerTrade.value\n ? sor.poolsLoading.value\n : gnosis.updatingQuotes.value;\n });\n\n const isConfirming = computed(\n () => sor.confirming.value || gnosis.confirming.value\n );\n\n // METHODS\n function trade(successCallback?: () => void) {\n if (isGnosisTrade.value) {\n return gnosis.trade(() => {\n if (successCallback) {\n successCallback();\n }\n\n gnosis.resetState();\n });\n } else {\n // handles both Balancer and Wrap/Unwrap trades\n return sor.trade(() => {\n if (successCallback) {\n successCallback();\n }\n\n sor.resetState();\n });\n }\n }\n\n function getQuote() {\n if (isGnosisTrade.value) {\n return gnosis.getQuote();\n } else {\n return sor.getQuote();\n }\n }\n\n function handleAmountChange() {\n if (exactIn.value) {\n tokenOutAmountInput.value = '';\n } else {\n tokenInAmountInput.value = '';\n }\n\n if (isGnosisTrade.value) {\n gnosis.resetState(false);\n gnosis.handleAmountChange();\n } else {\n sor.resetState();\n sor.handleAmountChange();\n }\n }\n\n // WATCHERS\n watch(tokenInAddressInput, async () => {\n store.commit('trade/setInputAsset', tokenInAddressInput.value);\n\n handleAmountChange();\n });\n\n watch(tokenOutAddressInput, () => {\n store.commit('trade/setOutputAsset', tokenOutAddressInput.value);\n\n handleAmountChange();\n });\n\n watch(blockNumber, () => {\n if (isGnosisTrade.value) {\n if (!gnosis.hasErrors.value) {\n gnosis.handleAmountChange();\n }\n } else if (isBalancerTrade.value) {\n sor.fetchPools();\n }\n });\n\n watch(slippageBufferRate, () => {\n handleAmountChange();\n });\n\n watch(liquiditySelection, () => {\n if (isBalancerTrade.value) {\n handleAmountChange();\n }\n });\n\n return {\n // computed\n isWrap,\n isUnwrap,\n isEthTrade,\n tokenIn,\n tokenOut,\n tokenInAmountScaled,\n tokenOutAmountScaled,\n tokens,\n requiresTokenApproval,\n effectivePriceMessage,\n tradeRoute,\n exactIn,\n isLoading,\n gnosis,\n sor,\n isGnosisTrade,\n isBalancerTrade,\n wrapType,\n isWrapUnwrapTrade,\n tokenInAddressInput,\n tokenInAmountInput,\n tokenOutAddressInput,\n tokenOutAmountInput,\n slippageBufferRate,\n isConfirming,\n\n // methods\n getQuote,\n trade,\n handleAmountChange\n };\n}\n","import { toDisplayString as _toDisplayString, createVNode as _createVNode, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, Fragment as _Fragment, withModifiers as _withModifiers, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-8a64398e\")\n\n_pushScopeId(\"data-v-8a64398e\")\nconst _hoisted_1 = { class: \"w-full p-3 border-b bg-gray-50 rounded-t-lg text-sm dark:border-gray-800 dark:bg-gray-800\" }\nconst _hoisted_2 = { class: \"p-3 border-gray-100 border-b relative dark:border-gray-900\" }\nconst _hoisted_3 = { class: \"flex items-center\" }\nconst _hoisted_4 = { class: \"mr-3\" }\nconst _hoisted_5 = { class: \"font-medium\" }\nconst _hoisted_6 = { class: \"text-gray-500 dark:text-gray-400 text-sm\" }\nconst _hoisted_7 = { class: \"arrow-down\" }\nconst _hoisted_8 = { class: \"p-3\" }\nconst _hoisted_9 = { class: \"flex items-center\" }\nconst _hoisted_10 = { class: \"mr-3\" }\nconst _hoisted_11 = { class: \"font-medium\" }\nconst _hoisted_12 = { class: \"text-gray-500 dark:text-gray-400 text-sm\" }\nconst _hoisted_13 = { key: 0 }\nconst _hoisted_14 = { class: \"p-3 flex w-full items-center justify-between border-b dark:border-gray-900\" }\nconst _hoisted_15 = { class: \"font-semibold\" }\nconst _hoisted_16 = { class: \"flex divide-x dark:divide-gray-500 text-xs uppercase\" }\nconst _hoisted_17 = { class: \"p-3 text-sm\" }\nconst _hoisted_18 = { class: \"summary-item-row\" }\nconst _hoisted_19 = {\n key: 0,\n class: \"summary-item-row\"\n}\nconst _hoisted_20 = { class: \"text-green-400\" }\nconst _hoisted_21 = { class: \"summary-item-row\" }\nconst _hoisted_22 = { class: \"w-full p-3 rounded-b-lg bg-white text-sm dark:bg-gray-800\" }\nconst _hoisted_23 = { class: \"summary-item-row font-medium\" }\nconst _hoisted_24 = { class: \"w-64\" }\nconst _hoisted_25 = { class: \"summary-item-row text-gray-500 dark:text-gray-400\" }\nconst _hoisted_26 = { class: \"w-64\" }\nconst _hoisted_27 = {\n key: 1,\n class: \"flex my-5 justify-center items-center\"\n}\nconst _hoisted_28 = /*#__PURE__*/_createTextVNode(\"1\")\nconst _hoisted_29 = { class: \"w-64\" }\nconst _hoisted_30 = { class: \"mb-2 font-semibold\" }\nconst _hoisted_31 = {\n key: 1,\n class: \"step-seperator\"\n}\nconst _hoisted_32 = { class: \"w-64\" }\nconst _hoisted_33 = { class: \"mb-2 font-semibold\" }\nconst _hoisted_34 = {\n key: 3,\n class: \"step-seperator\"\n}\nconst _hoisted_35 = { class: \"w-64\" }\nconst _hoisted_36 = { class: \"mb-2 font-semibold\" }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_ArrowDownIcon = _resolveComponent(\"ArrowDownIcon\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n const _component_BalAlert = _resolveComponent(\"BalAlert\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_TradeRoute = _resolveComponent(\"TradeRoute\")\n const _component_BalModal = _resolveComponent(\"BalModal\")\n\n return (_openBlock(), _createBlock(_component_BalModal, {\n show: \"\",\n onClose: _ctx.onClose,\n title: _ctx.labels.modalTitle\n }, {\n default: _withId(() => [\n _createVNode(\"div\", null, [\n _createVNode(_component_BalCard, {\n noPad: \"\",\n class: \"relative mb-6 overflow-auto\"\n }, {\n header: _withId(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"span\", null, _toDisplayString(_ctx.$t('effectivePrice')), 1),\n _createTextVNode(\" \" + _toDisplayString(_ctx.trading.exactIn.value\n ? _ctx.trading.effectivePriceMessage.value.tokenIn\n : _ctx.trading.effectivePriceMessage.value.tokenOut), 1)\n ])\n ]),\n default: _withId(() => [\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", _hoisted_3, [\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(_component_BalAsset, {\n address: _ctx.trading.tokenIn.value.address,\n size: 36\n }, null, 8, [\"address\"])\n ]),\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.fNum(_ctx.trading.tokenInAmountInput.value, 'token')) + \" \" + _toDisplayString(_ctx.trading.tokenIn.value.symbol), 1),\n _createVNode(\"div\", _hoisted_6, _toDisplayString(_ctx.tokenInFiatValue), 1)\n ])\n ])\n ]),\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(_component_ArrowDownIcon)\n ]),\n _createVNode(\"div\", _hoisted_8, [\n _createVNode(\"div\", _hoisted_9, [\n _createVNode(\"div\", _hoisted_10, [\n _createVNode(_component_BalAsset, {\n address: _ctx.trading.tokenOut.value.address,\n size: 36\n }, null, 8, [\"address\"])\n ]),\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_11, _toDisplayString(_ctx.fNum(_ctx.trading.tokenOutAmountInput.value, 'token')) + \" \" + _toDisplayString(_ctx.trading.tokenOut.value.symbol), 1),\n _createVNode(\"div\", _hoisted_12, [\n _createTextVNode(_toDisplayString(_ctx.tokenOutFiatValue) + \" \", 1),\n (\n _ctx.trading.isBalancerTrade.value ||\n _ctx.trading.isWrapUnwrapTrade.value\n )\n ? (_openBlock(), _createBlock(\"span\", _hoisted_13, \" / \" + _toDisplayString(_ctx.$t('priceImpact')) + \": \" + _toDisplayString(_ctx.fNum(_ctx.trading.sor.priceImpact.value, 'percent')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ])\n ])\n ])\n ]),\n _: 1\n }),\n _createVNode(_component_BalCard, {\n noPad: \"\",\n shadow: \"none\",\n class: \"mb-3\"\n }, {\n header: _withId(() => [\n _createVNode(\"div\", _hoisted_14, [\n _createVNode(\"div\", _hoisted_15, _toDisplayString(_ctx.labels.tradeSummary.title), 1),\n _createVNode(\"div\", _hoisted_16, [\n _createVNode(\"div\", {\n class: [\n 'pr-2 cursor-pointer font-medium',\n { 'text-blue-600': !_ctx.showSummaryInFiat }\n ],\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.showSummaryInFiat = false))\n }, _toDisplayString(_ctx.$t('tokens')), 3),\n _createVNode(\"div\", {\n class: [\n 'pl-2 cursor-pointer font-medium uppercase',\n { 'text-blue-600': _ctx.showSummaryInFiat }\n ],\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.showSummaryInFiat = true))\n }, _toDisplayString(_ctx.FiatCurrency.usd), 3)\n ])\n ])\n ]),\n footer: _withId(() => [\n _createVNode(\"div\", _hoisted_22, [\n _createVNode(\"div\", _hoisted_23, [\n _createVNode(\"div\", _hoisted_24, _toDisplayString(_ctx.labels.tradeSummary.totalAfterFees), 1),\n _createVNode(\"div\", null, _toDisplayString(_ctx.summary.totalWithoutSlippage), 1)\n ]),\n _createVNode(\"div\", _hoisted_25, [\n _createVNode(\"div\", _hoisted_26, _toDisplayString(_ctx.labels.tradeSummary.totalWithSlippage), 1),\n _createVNode(\"div\", null, _toDisplayString(_ctx.trading.isWrapUnwrapTrade.value\n ? ''\n : _ctx.summary.totalWithSlippage), 1)\n ])\n ])\n ]),\n default: _withId(() => [\n _createVNode(\"div\", _hoisted_17, [\n _createVNode(\"div\", _hoisted_18, [\n _createVNode(\"div\", null, _toDisplayString(_ctx.labels.tradeSummary.totalBeforeFees), 1),\n _createVNode(\"div\", null, _toDisplayString(_ctx.summary.amountBeforeFees), 1)\n ]),\n (_ctx.trading.isGnosisTrade.value)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_19, [\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t('tradeSummary.gasCosts')), 1),\n _createVNode(\"div\", _hoisted_20, \"-\" + _toDisplayString(_ctx.zeroFee), 1)\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_21, [\n _createVNode(\"div\", null, _toDisplayString(_ctx.labels.tradeSummary.tradeFees), 1),\n _createVNode(\"div\", null, _toDisplayString(_ctx.trading.isWrapUnwrapTrade.value\n ? _ctx.zeroFee\n : _ctx.trading.isGnosisTrade.value\n ? _ctx.trading.exactIn.value\n ? `-${_ctx.summary.tradeFees}`\n : `+${_ctx.summary.tradeFees}`\n : _ctx.summary.tradeFees), 1)\n ])\n ])\n ]),\n _: 1\n }),\n (_ctx.showPriceUpdateError)\n ? (_openBlock(), _createBlock(_component_BalAlert, {\n key: 0,\n class: \"p-3 mb-4\",\n type: \"error\",\n size: \"md\",\n title: _ctx.$t('priceUpdatedAlert.title'),\n description: \n _ctx.$t('priceUpdatedAlert.description', [\n _ctx.fNum(_ctx.PRICE_UPDATE_THRESHOLD, 'percent')\n ])\n ,\n \"action-label\": _ctx.$t('priceUpdatedAlert.actionLabel'),\n block: \"\",\n onActionClick: _ctx.cofirmPriceUpdate\n }, null, 8, [\"title\", \"description\", \"action-label\", \"onActionClick\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.totalRequiredTransactions > 1)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_27, [\n (_ctx.showGnosisRelayerApprovalStep)\n ? (_openBlock(), _createBlock(_component_BalTooltip, {\n key: 0,\n disabled: !_ctx.requiresGnosisRelayerApproval\n }, {\n activator: _withId(() => [\n _createVNode(\"div\", {\n class: [\n 'step',\n {\n 'step-active':\n _ctx.activeTransactionType === 'gnosisRelayerApproval',\n 'step-approved': !_ctx.requiresGnosisRelayerApproval\n }\n ]\n }, [\n (!_ctx.requiresGnosisRelayerApproval)\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 0,\n name: \"check\",\n class: \"text-green-500\"\n }))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _hoisted_28\n ], 64))\n ], 2)\n ]),\n default: _withId(() => [\n _createVNode(\"div\", _hoisted_29, [\n _createVNode(\"div\", _hoisted_30, [\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t(\n 'tradeSummary.transactionTypesTooltips.gnosisRelayerApproval.title'\n )), 1)\n ]),\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t(\n 'tradeSummary.transactionTypesTooltips.gnosisRelayerApproval.content'\n )), 1)\n ])\n ]),\n _: 1\n }, 8, [\"disabled\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.showGnosisRelayerApprovalStep)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_31))\n : _createCommentVNode(\"\", true),\n (_ctx.showTokenApprovalStep)\n ? (_openBlock(), _createBlock(_component_BalTooltip, {\n key: 2,\n disabled: !_ctx.requiresTokenApproval\n }, {\n activator: _withId(() => [\n _createVNode(\"div\", {\n class: [\n 'step',\n {\n 'step-active': _ctx.activeTransactionType === 'tokenApproval',\n 'step-approved': !_ctx.requiresTokenApproval\n }\n ]\n }, [\n (!_ctx.requiresTokenApproval)\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 0,\n name: \"check\",\n class: \"text-green-500\"\n }))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _createTextVNode(_toDisplayString(_ctx.showGnosisRelayerApprovalStep ? 2 : 1), 1)\n ], 64))\n ], 2)\n ]),\n default: _withId(() => [\n _createVNode(\"div\", _hoisted_32, [\n _createVNode(\"div\", _hoisted_33, _toDisplayString(_ctx.$t(\n 'tradeSummary.transactionTypesTooltips.tokenApproval.title',\n [_ctx.trading.tokenIn.value.symbol]\n )), 1),\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t(\n 'tradeSummary.transactionTypesTooltips.tokenApproval.content'\n )), 1)\n ])\n ]),\n _: 1\n }, 8, [\"disabled\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.showTokenApprovalStep)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_34))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_BalTooltip, null, {\n activator: _withId(() => [\n _createVNode(\"div\", {\n class: [\n 'step',\n {\n 'step-active': _ctx.activeTransactionType === 'trade'\n }\n ]\n }, _toDisplayString(_ctx.totalRequiredTransactions), 3)\n ]),\n default: _withId(() => [\n _createVNode(\"div\", _hoisted_35, [\n _createVNode(\"div\", _hoisted_36, _toDisplayString(_ctx.$t('tradeSummary.transactionTypesTooltips.trade.title')), 1),\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t('tradeSummary.transactionTypesTooltips.trade.content')), 1)\n ])\n ]),\n _: 1\n })\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.requiresGnosisRelayerApproval)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 2,\n color: \"gradient\",\n block: \"\",\n onClick: _withModifiers(_ctx.gnosisRelayerApproval.approve, [\"prevent\"]),\n loading: _ctx.gnosisRelayerApproval.approving.value,\n \"loading-label\": `${_ctx.$t('approvingGnosisRelayer')}...`\n }, {\n default: _withId(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('approveGnosisRelayer')), 1)\n ]),\n _: 1\n }, 8, [\"onClick\", \"loading\", \"loading-label\"]))\n : (_ctx.requiresTokenApproval)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 3,\n loading: _ctx.tokenApproval.approving.value,\n \"loading-label\": `${_ctx.$t('approving')} ${_ctx.trading.tokenIn.value.symbol}...`,\n color: \"gradient\",\n block: \"\",\n onClick: _withModifiers(_ctx.approveToken, [\"prevent\"])\n }, {\n default: _withId(() => [\n _createTextVNode(_toDisplayString(`${_ctx.$t('approve')} ${_ctx.trading.tokenIn.value.symbol}`), 1)\n ]),\n _: 1\n }, 8, [\"loading\", \"loading-label\", \"onClick\"]))\n : (_openBlock(), _createBlock(_component_BalBtn, {\n key: 4,\n color: \"gradient\",\n block: \"\",\n onClick: _withModifiers(_ctx.trade, [\"prevent\"]),\n loading: _ctx.trading.isConfirming.value,\n \"loading-label\": _ctx.$t('confirming'),\n disabled: _ctx.tradeDisabled,\n class: \"relative\"\n }, {\n default: _withId(() => [\n _createTextVNode(_toDisplayString(_ctx.labels.confirmTrade), 1)\n ]),\n _: 1\n }, 8, [\"onClick\", \"loading\", \"loading-label\", \"disabled\"]))\n ]),\n (_ctx.showTradeRoute)\n ? (_openBlock(), _createBlock(_component_BalCard, {\n key: 0,\n shadow: \"none\",\n class: \"mt-3\"\n }, {\n default: _withId(() => [\n _createVNode(_component_TradeRoute, {\n \"address-in\": _ctx.trading.tokenIn.value.address,\n \"amount-in\": _ctx.trading.tokenInAmountInput.value,\n \"address-out\": _ctx.trading.tokenOut.value.address,\n \"amount-out\": _ctx.trading.tokenOutAmountInput.value,\n pools: _ctx.trading.sor.pools.value,\n \"sor-return\": _ctx.trading.sor.sorReturn.value\n }, null, 8, [\"address-in\", \"amount-in\", \"address-out\", \"amount-out\", \"pools\", \"sor-return\"])\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"onClose\", \"title\"]))\n})","\nimport { defineComponent, computed, PropType, ref, watch } from 'vue';\nimport { useStore } from 'vuex';\nimport { formatUnits } from '@ethersproject/units';\nimport { useI18n } from 'vue-i18n';\nimport { mapValues } from 'lodash';\n\nimport { UseTrading } from '@/composables/trade/useTrading';\nimport useNumbers from '@/composables/useNumbers';\nimport useRelayerApproval, {\n Relayer\n} from '@/composables/trade/useRelayerApproval';\nimport useTokenApproval from '@/composables/trade/useTokenApproval';\nimport useTokens from '@/composables/useTokens';\nimport { TradeQuote } from '@/composables/trade/types';\nimport useWeb3 from '@/services/web3/useWeb3';\n\nimport TradeRoute from '@/components/cards/TradeCard/TradeRoute.vue';\n\nimport { bnum } from '@/lib/utils';\n\nimport { FiatCurrency } from '@/constants/currency';\n\nconst PRICE_UPDATE_THRESHOLD = 0.02;\n\nexport default defineComponent({\n components: {\n TradeRoute\n },\n emits: ['trade', 'close'],\n props: {\n trading: {\n type: Object as PropType,\n required: true\n }\n },\n setup(props, { emit }) {\n // COMPOSABLES\n const store = useStore();\n const { t } = useI18n();\n const { fNum, toFiat } = useNumbers();\n const { tokens, approvalRequired } = useTokens();\n const { blockNumber } = useWeb3();\n const lastQuote = ref(\n props.trading.isWrapUnwrapTrade.value ? null : props.trading.getQuote()\n );\n const priceUpdated = ref(false);\n const priceUpdateAccepted = ref(false);\n\n // DATA\n const showSummaryInFiat = ref(false);\n\n // COMPUTED\n const slippageRatePercent = computed(() =>\n fNum(store.state.app.slippage, 'percent')\n );\n\n const addressIn = computed(() => props.trading.tokenIn.value.address);\n\n const tokenInFiatValue = computed(() =>\n fNum(\n toFiat(\n props.trading.tokenInAmountInput.value,\n props.trading.tokenIn.value.address\n ),\n 'usd'\n )\n );\n\n const tokenOutFiatValue = computed(() =>\n fNum(\n toFiat(\n props.trading.tokenOutAmountInput.value,\n props.trading.tokenOut.value.address\n ),\n 'usd'\n )\n );\n\n const showTradeRoute = computed(() => props.trading.isBalancerTrade.value);\n\n const zeroFee = computed(() =>\n showSummaryInFiat.value ? fNum('0', 'usd') : '0.0 ETH'\n );\n\n const summary = computed(() => {\n const summaryItems = {\n amountBeforeFees: '',\n tradeFees: '',\n totalWithoutSlippage: '',\n totalWithSlippage: ''\n };\n\n const exactIn = props.trading.exactIn.value;\n\n const tokenIn = props.trading.tokenIn.value;\n const tokenOut = props.trading.tokenOut.value;\n\n const tokenInAmountInput = props.trading.tokenInAmountInput.value;\n const tokenOutAmountInput = props.trading.tokenOutAmountInput.value;\n\n if (props.trading.isWrapUnwrapTrade.value) {\n summaryItems.amountBeforeFees = tokenInAmountInput;\n summaryItems.tradeFees = '0';\n summaryItems.totalWithoutSlippage = tokenInAmountInput;\n summaryItems.totalWithSlippage = tokenInAmountInput;\n } else {\n const quote = props.trading.getQuote();\n\n if (exactIn) {\n summaryItems.amountBeforeFees = tokenOutAmountInput;\n summaryItems.tradeFees = formatUnits(\n quote.feeAmountOutToken,\n tokenOut.decimals\n );\n summaryItems.totalWithoutSlippage = bnum(\n summaryItems.amountBeforeFees\n )\n .minus(summaryItems.tradeFees)\n .toString();\n summaryItems.totalWithSlippage = formatUnits(\n quote.minimumOutAmount,\n tokenOut.decimals\n );\n } else {\n summaryItems.amountBeforeFees = tokenInAmountInput;\n summaryItems.tradeFees = formatUnits(\n quote.feeAmountInToken,\n tokenIn.decimals\n );\n summaryItems.totalWithoutSlippage = bnum(\n summaryItems.amountBeforeFees\n )\n .plus(summaryItems.tradeFees)\n .toString();\n summaryItems.totalWithSlippage = formatUnits(\n quote.maximumInAmount,\n tokenIn.decimals\n );\n }\n }\n\n if (showSummaryInFiat.value) {\n return mapValues(summaryItems, itemValue =>\n fNum(\n toFiat(itemValue, exactIn ? tokenOut.address : tokenIn.address),\n 'usd'\n )\n );\n } else {\n return mapValues(\n summaryItems,\n itemValue =>\n `${fNum(itemValue, 'token')} ${\n exactIn || props.trading.isWrapUnwrapTrade.value\n ? tokenOut.symbol\n : tokenIn.symbol\n }`\n );\n }\n });\n\n const labels = computed(() => {\n if (props.trading.isWrap.value) {\n return {\n modalTitle: t('previewWrap', [props.trading.tokenIn.value.symbol]),\n confirmTrade: t('confirmWrap', [props.trading.tokenIn.value.symbol]),\n tradeSummary: {\n title: t('tradeSummary.wrap.title'),\n tradeFees: t('tradeSummary.wrap.tradeFees'),\n totalBeforeFees: t('tradeSummary.wrap.totalBeforeFees'),\n totalAfterFees: t('tradeSummary.wrap.totalAfterFees'),\n totalWithSlippage: t('tradeSummary.wrap.totalWithSlippage', [\n props.trading.tokenIn.value.symbol\n ])\n }\n };\n } else if (props.trading.isUnwrap.value) {\n return {\n modalTitle: t('previewUnwrap', [props.trading.tokenOut.value.symbol]),\n confirmTrade: t('confirmUnwrap', [\n props.trading.tokenOut.value.symbol\n ]),\n tradeSummary: {\n title: t('tradeSummary.unwrap.title'),\n tradeFees: t('tradeSummary.unwrap.tradeFees'),\n totalBeforeFees: t('tradeSummary.unwrap.totalBeforeFees'),\n totalAfterFees: t('tradeSummary.unwrap.totalAfterFees'),\n totalWithSlippage: t('tradeSummary.unwrap.totalWithSlippage', [\n props.trading.tokenOut.value.symbol\n ])\n }\n };\n } else if (props.trading.exactIn.value) {\n return {\n modalTitle: t('previewTrade'),\n confirmTrade: t('confirmTrade'),\n tradeSummary: {\n title: t('tradeSummary.exactIn.title', [\n props.trading.tokenIn.value.symbol\n ]),\n tradeFees: t('tradeSummary.exactIn.tradeFees'),\n totalBeforeFees: t('tradeSummary.exactIn.totalBeforeFees'),\n totalAfterFees: t('tradeSummary.exactIn.totalAfterFees'),\n totalWithSlippage: t('tradeSummary.exactIn.totalWithSlippage', [\n slippageRatePercent.value\n ])\n }\n };\n }\n // exact out\n return {\n modalTitle: t('previewTrade'),\n confirmTrade: t('confirmTrade'),\n tradeSummary: {\n title: t('tradeSummary.exactOut.title', [\n props.trading.tokenOut.value.symbol\n ]),\n tradeFees: t('tradeSummary.exactOut.tradeFees'),\n totalBeforeFees: t('tradeSummary.exactOut.totalBeforeFees'),\n totalAfterFees: t('tradeSummary.exactOut.totalAfterFees'),\n totalWithSlippage: t('tradeSummary.exactOut.totalWithSlippage', [\n slippageRatePercent.value\n ])\n }\n };\n });\n\n const tokenApproval = useTokenApproval(\n addressIn,\n props.trading.tokenInAmountInput,\n tokens\n );\n\n const gnosisRelayerApproval = useRelayerApproval(\n Relayer.GNOSIS,\n props.trading.isGnosisTrade\n );\n\n const requiresTokenApproval = computed(() => {\n if (props.trading.isWrap.value && !props.trading.isEthTrade.value) {\n return approvalRequired(\n props.trading.tokenIn.value.address,\n props.trading.tokenInAmountInput.value,\n props.trading.tokenOut.value.address\n );\n } else {\n return (\n props.trading.requiresTokenApproval.value &&\n !tokenApproval.isUnlockedV2.value\n );\n }\n });\n\n const requiresGnosisRelayerApproval = computed(\n () =>\n props.trading.isGnosisTrade.value &&\n props.trading.requiresTokenApproval.value &&\n !gnosisRelayerApproval.isUnlocked.value\n );\n\n const showTokenApprovalStep = computed(\n () =>\n requiresTokenApproval.value ||\n tokenApproval.approved.value ||\n tokenApproval.approving.value\n );\n\n const showGnosisRelayerApprovalStep = computed(\n () =>\n requiresGnosisRelayerApproval.value ||\n gnosisRelayerApproval.approved.value ||\n gnosisRelayerApproval.approving.value\n );\n\n const totalRequiredTransactions = computed(() => {\n let txCount = 1; // trade\n if (showTokenApprovalStep.value) {\n txCount++;\n }\n if (showGnosisRelayerApprovalStep.value) {\n txCount++;\n }\n return txCount;\n });\n\n const activeTransactionType = computed<\n 'gnosisRelayerApproval' | 'tokenApproval' | 'trade'\n >(() => {\n if (requiresGnosisRelayerApproval.value) {\n return 'gnosisRelayerApproval';\n }\n if (requiresTokenApproval.value) {\n return 'tokenApproval';\n }\n return 'trade';\n });\n\n const requiresApproval = computed(\n () => requiresGnosisRelayerApproval.value || requiresTokenApproval.value\n );\n\n const showPriceUpdateError = computed(\n () =>\n !requiresApproval.value &&\n priceUpdated.value &&\n !priceUpdateAccepted.value\n );\n\n const tradeDisabled = computed(\n () => requiresApproval.value || showPriceUpdateError.value\n );\n\n // METHODS\n function trade() {\n emit('trade');\n }\n\n function onClose() {\n emit('close');\n }\n\n function cofirmPriceUpdate() {\n priceUpdated.value = false;\n priceUpdateAccepted.value = true;\n lastQuote.value = props.trading.getQuote();\n }\n\n function handlePriceUpdate() {\n if (lastQuote.value != null) {\n const newQuote = props.trading.getQuote();\n\n if (props.trading.exactIn.value) {\n priceUpdated.value = bnum(lastQuote.value.minimumOutAmount)\n .minus(newQuote.minimumOutAmount)\n .abs()\n .div(lastQuote.value.minimumOutAmount)\n .gt(PRICE_UPDATE_THRESHOLD);\n } else {\n priceUpdated.value = bnum(lastQuote.value.maximumInAmount)\n .minus(newQuote.maximumInAmount)\n .abs()\n .div(lastQuote.value.maximumInAmount)\n .gt(PRICE_UPDATE_THRESHOLD);\n }\n\n if (priceUpdated.value) {\n priceUpdateAccepted.value = false;\n }\n }\n }\n\n async function approveToken(): Promise {\n if (props.trading.isWrap.value && !props.trading.isEthTrade.value) {\n // If we're wrapping a token other than native ETH\n // we need to approve the underlying on the wrapper\n await tokenApproval.approveSpender(\n props.trading.tokenOut.value.address\n );\n } else {\n tokenApproval.approveV2();\n }\n }\n\n // WATCHERS\n watch(blockNumber, () => {\n handlePriceUpdate();\n });\n\n return {\n // constants\n FiatCurrency,\n\n // methods\n fNum,\n onClose,\n trade,\n cofirmPriceUpdate,\n\n // computed\n tokenInFiatValue,\n tokenOutFiatValue,\n summary,\n showSummaryInFiat,\n slippageRatePercent,\n showTradeRoute,\n labels,\n zeroFee,\n priceUpdated,\n tradeDisabled,\n showPriceUpdateError,\n totalRequiredTransactions,\n requiresApproval,\n gnosisRelayerApproval,\n tokenApproval,\n requiresTokenApproval,\n requiresGnosisRelayerApproval,\n approveToken,\n showTokenApprovalStep,\n showGnosisRelayerApprovalStep,\n activeTransactionType,\n\n // consants\n PRICE_UPDATE_THRESHOLD\n };\n }\n});\n","import { render } from \"./TradePreviewModalGP.vue?vue&type=template&id=8a64398e&scoped=true&ts=true\"\nimport script from \"./TradePreviewModalGP.vue?vue&type=script&lang=ts\"\nexport * from \"./TradePreviewModalGP.vue?vue&type=script&lang=ts\"\n\nimport \"./TradePreviewModalGP.vue?vue&type=style&index=0&id=8a64398e&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-8a64398e\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createTextVNode as _createTextVNode, Teleport as _Teleport, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"dark:border-b dark:border-gray-500\" }\nconst _hoisted_2 = { class: \"p-2 flex justify-between text-sm rounded-t-lg dark:bg-gray-900 border dark:border-gray-500 w-full border-b-0\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"text-gray-500\"\n}\nconst _hoisted_4 = { class: \"flex flex-col ml-3 w-24 leading-none truncate\" }\nconst _hoisted_5 = { class: \"font-bold\" }\nconst _hoisted_6 = {\n key: 1,\n class: \"font-bold\"\n}\nconst _hoisted_7 = { class: \"p-2\" }\nconst _hoisted_8 = { class: \"flex items-center mb-4\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"flex-auto ml-4\"\n}\nconst _hoisted_10 = { class: \"dark:border-b dark:border-gray-500\" }\nconst _hoisted_11 = { class: \"p-2 flex justify-between text-sm rounded-t-lg dark:bg-gray-900 border dark:border-gray-500 w-full border-b-0\" }\nconst _hoisted_12 = {\n key: 0,\n class: \"text-gray-500\"\n}\nconst _hoisted_13 = { class: \"flex flex-col ml-3 w-24 leading-none truncate\" }\nconst _hoisted_14 = { class: \"font-semibold\" }\nconst _hoisted_15 = {\n key: 1,\n class: \"font-semibold\"\n}\nconst _hoisted_16 = { class: \"p-2\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalTextInput = _resolveComponent(\"BalTextInput\")\n const _component_TradePairToggle = _resolveComponent(\"TradePairToggle\")\n const _component_SelectTokenModal = _resolveComponent(\"SelectTokenModal\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t('send')), 1),\n (_ctx.tokenInValue > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.fNum(_ctx.tokenInValue, 'usd')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createVNode(_component_BalTextInput, {\n name: 'tokenIn',\n \"model-value\": _ctx.tokenInAmountInput,\n onInput: _cache[3] || (_cache[3] = value => _ctx.handleInAmountChange(value)),\n type: \"number\",\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"validate-on\": \"input\",\n \"square-top\": \"\",\n \"prepend-border\": \"\"\n }, {\n prepend: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"flex items-center w-32 h-full cursor-pointer\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.openModalSelectToken('input')))\n }, [\n (_ctx.tokenInAddressInput)\n ? (_openBlock(), _createBlock(_component_BalAsset, {\n key: 0,\n address: _ctx.tokenInAddressInput,\n size: 28\n }, null, 8, [\"address\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_4, [\n (_ctx.tokenInSymbol.length > 5)\n ? (_openBlock(), _createBlock(_component_BalTooltip, { key: 0 }, {\n activator: _withCtx(() => [\n _createVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.tokenInSymbol), 1)\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", null, _toDisplayString(_ctx.tokenInSymbol), 1)\n ]),\n _: 1\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_6, _toDisplayString(_ctx.tokenInSymbol), 1))\n ]),\n _createVNode(_component_BalIcon, {\n name: 'chevron-down',\n size: 'sm',\n class: \"text-green-500 group-hover:text-red-500\"\n })\n ])\n ]),\n info: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"cursor-pointer\",\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.handleInMax && _ctx.handleInMax(...args)))\n }, _toDisplayString(_ctx.$t('balance')) + \": \" + _toDisplayString(_ctx.fNum(_ctx.tokenInBalance, 'token')), 1)\n ]),\n append: _withCtx(() => [\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(_component_BalBtn, {\n size: \"xs\",\n color: \"white\",\n onClick: _ctx.handleInMax\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('max')), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ]),\n _: 1\n }, 8, [\"model-value\"]),\n _createVNode(\"div\", _hoisted_8, [\n _createVNode(_component_TradePairToggle, { onToggle: _ctx.handleSwitchTokens }, null, 8, [\"onToggle\"]),\n (_ctx.rateMessage)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_9, [\n _createVNode(\"span\", {\n class: \"text-sm text-gray-500 cursor-pointer\",\n onClick: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_ctx.toggleRate && _ctx.toggleRate(...args))),\n textContent: _toDisplayString(_ctx.rateMessage)\n }, null, 8, [\"textContent\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(\"div\", _hoisted_10, [\n _createVNode(\"div\", _hoisted_11, [\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t('receive')), 1),\n (_ctx.tokenOutValue > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_12, _toDisplayString(_ctx.fNum(_ctx.tokenOutValue, 'usd')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createVNode(_component_BalTextInput, {\n name: 'tokenOut',\n \"model-value\": _ctx.tokenOutAmountInput,\n onInput: _cache[7] || (_cache[7] = value => _ctx.handleOutAmountChange(value)),\n type: \"number\",\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"square-top\": \"\"\n }, {\n prepend: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"flex items-center w-32 h-full cursor-pointer\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (_ctx.openModalSelectToken('output')))\n }, [\n (_ctx.tokenOutAddressInput)\n ? (_openBlock(), _createBlock(_component_BalAsset, {\n key: 0,\n address: _ctx.tokenOutAddressInput,\n size: 28\n }, null, 8, [\"address\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_13, [\n (_ctx.tokenOutSymbol.length > 5)\n ? (_openBlock(), _createBlock(_component_BalTooltip, { key: 0 }, {\n activator: _withCtx(() => [\n _createVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.tokenOutSymbol), 1)\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", null, _toDisplayString(_ctx.tokenOutSymbol), 1)\n ]),\n _: 1\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_15, _toDisplayString(_ctx.tokenOutSymbol), 1))\n ]),\n _createVNode(_component_BalIcon, {\n name: 'chevron-down',\n size: 'sm',\n class: \"text-green-500 group-hover:text-red-500\"\n })\n ])\n ]),\n info: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"cursor-pointer\",\n onClick: _cache[6] || (_cache[6] = \n//@ts-ignore\n(...args) => (_ctx.handleOutMax && _ctx.handleOutMax(...args)))\n }, _toDisplayString(_ctx.$t('balance')) + \": \" + _toDisplayString(_ctx.fNum(_ctx.tokenOutBalance, 'token')), 1)\n ]),\n append: _withCtx(() => [\n _createVNode(\"div\", _hoisted_16, [\n _createVNode(_component_BalBtn, {\n size: \"xs\",\n color: \"white\",\n onClick: _ctx.handleOutMax\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('max')), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ]),\n _: 1\n }, 8, [\"model-value\"])\n ]),\n (_openBlock(), _createBlock(_Teleport, { to: \"#modal\" }, [\n (_ctx.modalSelectTokenIsOpen)\n ? (_openBlock(), _createBlock(_component_SelectTokenModal, {\n key: 0,\n excludedTokens: [_ctx.tokenInAddressInput, _ctx.tokenOutAddressInput],\n onClose: _cache[8] || (_cache[8] = ($event: any) => (_ctx.modalSelectTokenIsOpen = false)),\n onSelect: _ctx.handleSelectToken,\n \"include-ether\": \"\"\n }, null, 8, [\"excludedTokens\", \"onSelect\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ], 64))\n}","\nimport { defineComponent, toRefs, computed, ref, PropType } from 'vue';\nimport useNumbers from '@/composables/useNumbers';\nimport TradePairToggle from '@/components/cards/TradeCard/TradePairToggle.vue';\nimport SelectTokenModal from '@/components/modals/SelectTokenModal/SelectTokenModal.vue';\nimport useTokens from '@/composables/useTokens';\nimport { UseTrading } from '@/composables/trade/useTrading';\nimport { NATIVE_ASSET_ADDRESS } from '@/constants/tokens';\n\nconst ETH_BUFFER = 0.1;\n\nexport default defineComponent({\n components: {\n TradePairToggle,\n SelectTokenModal\n },\n props: {\n tokenInAmountInput: {\n type: String,\n required: true\n },\n tokenInAddressInput: {\n type: String,\n required: true\n },\n tokenOutAmountInput: {\n type: String,\n required: true\n },\n tokenOutAddressInput: {\n type: String,\n required: true\n },\n exactIn: {\n type: Boolean,\n required: true\n },\n effectivePriceMessage: {\n type: Object as PropType,\n required: true\n }\n },\n emits: [\n 'tokenInAddressChange',\n 'tokenInAmountChange',\n 'tokenOutAddressChange',\n 'tokenOutAmountChange',\n 'exactInChange',\n 'change'\n ],\n setup(props, { emit }) {\n // COMPOSABLES\n const { fNum, toFiat } = useNumbers();\n\n // DATA\n const {\n tokenInAmountInput,\n tokenInAddressInput,\n tokenOutAmountInput,\n tokenOutAddressInput,\n exactIn\n } = toRefs(props);\n\n const isInRate = ref(true);\n const modalSelectTokenType = ref('input');\n const modalSelectTokenIsOpen = ref(false);\n\n const { tokens, balances, injectTokens } = useTokens();\n\n const tokenInValue = computed(() =>\n toFiat(tokenInAmountInput.value, tokenInAddressInput.value)\n );\n\n const tokenInSymbol = computed(() => {\n const tokenIn = tokens.value[tokenInAddressInput.value];\n const symbol = tokenIn ? tokenIn.symbol : '';\n return symbol;\n });\n\n const tokenOutValue = computed(() =>\n toFiat(tokenOutAmountInput.value, tokenOutAddressInput.value)\n );\n\n const tokenOutSymbol = computed(() => {\n const tokenOut = tokens.value[tokenOutAddressInput.value];\n const symbol = tokenOut ? tokenOut.symbol : '';\n return symbol;\n });\n\n const tokenInBalance = computed(\n () => balances.value[tokenInAddressInput.value] || '0'\n );\n\n const tokenOutBalance = computed(\n () => balances.value[tokenOutAddressInput.value] || '0'\n );\n\n // METHODS\n\n function getMaxAmount(\n tokenAddress: string,\n balance: string,\n balanceNumber: number\n ) {\n return tokenAddress !== NATIVE_ASSET_ADDRESS\n ? balance\n : balanceNumber > ETH_BUFFER\n ? (balanceNumber - ETH_BUFFER).toString()\n : '0';\n }\n function handleInMax() {\n const balance = tokenInBalance.value;\n const balanceNumber = parseFloat(balance);\n const maxAmount = getMaxAmount(\n tokenInAddressInput.value,\n balance,\n balanceNumber\n );\n\n handleInAmountChange(maxAmount);\n }\n\n function handleOutMax() {\n const balance = tokenOutBalance.value;\n const balanceNumber = parseFloat(balance);\n const maxAmount = getMaxAmount(\n tokenOutAddressInput.value,\n balance,\n balanceNumber\n );\n handleOutAmountChange(maxAmount);\n }\n\n function handleInAmountChange(value: string): void {\n emit('exactInChange', true);\n emit('tokenInAmountChange', value);\n emit('change', value);\n }\n\n function handleOutAmountChange(value: string): void {\n emit('exactInChange', false);\n emit('tokenOutAmountChange', value);\n emit('change', value);\n }\n\n function handleSwitchTokens(): void {\n emit('exactInChange', !exactIn.value);\n emit('tokenInAmountChange', tokenOutAmountInput.value);\n emit('tokenInAddressChange', tokenOutAddressInput.value);\n emit('tokenOutAmountChange', tokenInAmountInput.value);\n emit('tokenOutAddressChange', tokenInAddressInput.value);\n }\n\n function handleSelectToken(address: string): void {\n if (modalSelectTokenType.value === 'input') {\n if (address === tokenOutAddressInput.value) {\n handleSwitchTokens();\n return;\n } else emit('tokenInAddressChange', address);\n } else {\n if (address === tokenInAddressInput.value) {\n handleSwitchTokens();\n return;\n } else emit('tokenOutAddressChange', address);\n }\n injectTokens([address]);\n }\n\n const rateMessage = computed(() =>\n isInRate.value\n ? props.effectivePriceMessage.value.tokenIn\n : props.effectivePriceMessage.value.tokenOut\n );\n\n function toggleRate(): void {\n isInRate.value = !isInRate.value;\n }\n\n function openModalSelectToken(type: string): void {\n modalSelectTokenIsOpen.value = true;\n modalSelectTokenType.value = type;\n }\n\n return {\n tokens,\n fNum,\n handleInMax,\n handleOutMax,\n tokenInBalance,\n tokenOutBalance,\n handleInAmountChange,\n handleOutAmountChange,\n handleSwitchTokens,\n rateMessage,\n toggleRate,\n tokenInValue,\n tokenInSymbol,\n tokenOutValue,\n tokenOutSymbol,\n modalSelectTokenIsOpen,\n openModalSelectToken,\n handleSelectToken\n };\n }\n});\n","import { render } from \"./TradePairGP.vue?vue&type=template&id=c27aaa9e&ts=true\"\nimport script from \"./TradePairGP.vue?vue&type=script&lang=ts\"\nexport * from \"./TradePairGP.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { ref, defineComponent, computed } from 'vue';\nimport { useStore } from 'vuex';\nimport { useRouter } from 'vue-router';\n\nimport { useI18n } from 'vue-i18n';\nimport { isAddress, getAddress } from '@ethersproject/address';\nimport { formatUnits } from '@ethersproject/units';\nimport useValidation, {\n TradeValidation\n} from '@/composables/trade/useValidation';\nimport useTrading from '@/composables/trade/useTrading';\nimport useTokenApproval from '@/composables/trade/useTokenApproval';\nimport useTokens from '@/composables/useTokens';\nimport useBreakpoints from '@/composables/useBreakpoints';\nimport useNumbers from '@/composables/useNumbers';\n\nimport { TOKENS } from '@/constants/tokens';\n\nimport { isRequired } from '@/lib/utils/validations';\nimport { WrapType } from '@/lib/utils/balancer/wrapper';\n\nimport TradePreviewModalGP from '@/components/modals/TradePreviewModalGP.vue';\nimport TradeSettingsPopover, {\n TradeSettingsContext\n} from '@/components/popovers/TradeSettingsPopover.vue';\n\nimport { configService } from '@/services/config/config.service';\n\nimport TradePairGP from './TradePairGP.vue';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useRelayerApproval, {\n Relayer\n} from '@/composables/trade/useRelayerApproval';\n\nconst { nativeAsset } = configService.network;\n\nexport default defineComponent({\n components: {\n TradePairGP,\n TradePreviewModalGP,\n TradeSettingsPopover\n },\n\n setup() {\n // COMPOSABLES\n const store = useStore();\n const router = useRouter();\n const { t } = useI18n();\n const { bp } = useBreakpoints();\n const { fNum } = useNumbers();\n const { appNetworkConfig } = useWeb3();\n const { tokens } = useTokens();\n\n // DATA\n const exactIn = ref(true);\n const tokenInAddress = ref('');\n const tokenInAmount = ref('');\n const tokenOutAddress = ref('');\n const tokenOutAmount = ref('');\n const modalTradePreviewIsOpen = ref(false);\n const dismissedErrors = ref({\n highPriceImpact: false\n });\n\n const tradeCardShadow = computed(() => {\n switch (bp.value) {\n case 'xs':\n return 'none';\n case 'sm':\n return 'lg';\n default:\n return 'xl';\n }\n });\n\n const trading = useTrading(\n exactIn,\n tokenInAddress,\n tokenInAmount,\n tokenOutAddress,\n tokenOutAmount\n );\n\n // COMPUTED\n const { errorMessage } = useValidation(\n tokenInAddress,\n tokenInAmount,\n tokenOutAddress,\n tokenOutAmount\n );\n\n const isHighPriceImpact = computed(\n () =>\n trading.sor.errors.value.highPriceImpact &&\n !dismissedErrors.value.highPriceImpact\n );\n\n const tradeDisabled = computed(() => {\n const hasValidationErrors = errorMessage.value !== TradeValidation.VALID;\n const hasGnosisErrors =\n trading.isGnosisTrade.value && trading.gnosis.hasErrors.value;\n const hasBalancerErrors =\n trading.isBalancerTrade.value && isHighPriceImpact.value;\n\n return hasValidationErrors || hasGnosisErrors || hasBalancerErrors;\n });\n\n useTokenApproval(tokenInAddress, tokenInAmount, tokens);\n useRelayerApproval(Relayer.GNOSIS, trading.isGnosisTrade);\n\n const title = computed(() => {\n if (trading.wrapType.value === WrapType.Wrap) {\n return `${t('wrap')} ${trading.tokenIn.value.symbol}`;\n }\n if (trading.wrapType.value === WrapType.Unwrap) {\n return `${t('unwrap')} ${trading.tokenOut.value.symbol}`;\n }\n return t('trade');\n });\n\n const error = computed(() => {\n switch (errorMessage.value) {\n case TradeValidation.NO_NATIVE_ASSET: {\n return {\n header: t('noNativeAsset', [nativeAsset.symbol]),\n body: t('noNativeAssetDetailed', [\n nativeAsset.symbol,\n configService.network.chainName\n ])\n };\n }\n case TradeValidation.NO_BALANCE: {\n return {\n header: t('insufficientBalance'),\n body: t('insufficientBalanceDetailed')\n };\n }\n case TradeValidation.NO_LIQUIDITY: {\n return {\n header: t('insufficientLiquidity'),\n body: t('insufficientLiquidityDetailed')\n };\n }\n default:\n }\n\n if (trading.isGnosisTrade.value) {\n if (trading.gnosis.errors.value.feeExceedsPrice) {\n return {\n header: t('gnosisErrors.lowAmount.header'),\n body: t('gnosisErrors.lowAmount.body')\n };\n }\n if (trading.gnosis.errors.value.priceExceedsBalance) {\n return {\n header: t('gnosisErrors.lowBalance.header', [\n trading.tokenIn.value.symbol\n ]),\n body: t('gnosisErrors.lowBalance.body', [\n trading.tokenIn.value.symbol,\n fNum(\n formatUnits(\n trading.getQuote().maximumInAmount,\n trading.tokenIn.value.decimals\n ),\n 'token'\n ),\n fNum(trading.slippageBufferRate.value, 'percent')\n ])\n };\n }\n } else if (trading.isBalancerTrade.value) {\n if (isHighPriceImpact.value) {\n return {\n header: t('highPriceImpact'),\n body: t('highPriceImpactDetailed'),\n label: t('accept')\n };\n }\n }\n\n return undefined;\n });\n\n const warning = computed(() => {\n if (trading.isGnosisTrade.value) {\n if (trading.gnosis.warnings.value.highFees) {\n return {\n header: t('gnosisWarnings.highFees.header'),\n body: t('gnosisWarnings.highFees.body')\n };\n }\n }\n\n return undefined;\n });\n\n // METHODS\n function trade() {\n trading.trade(() => {\n tokenInAmount.value = '';\n tokenOutAmount.value = '';\n modalTradePreviewIsOpen.value = false;\n });\n }\n\n function handleErrorButtonClick() {\n if (trading.sor.errors.value.highPriceImpact) {\n dismissedErrors.value.highPriceImpact = true;\n }\n }\n\n async function populateInitialTokens(): Promise {\n let assetIn = router.currentRoute.value.params.assetIn as string;\n\n if (assetIn === nativeAsset.deeplinkId) {\n assetIn = nativeAsset.address;\n } else if (isAddress(assetIn)) {\n assetIn = getAddress(assetIn);\n }\n\n let assetOut = router.currentRoute.value.params.assetOut as string;\n\n if (assetOut === nativeAsset.deeplinkId) {\n assetOut = nativeAsset.address;\n } else if (isAddress(assetOut)) {\n assetOut = getAddress(assetOut);\n }\n\n tokenInAddress.value = assetIn || store.state.trade.inputAsset;\n tokenOutAddress.value = assetOut || store.state.trade.outputAsset;\n }\n\n function switchToWETH() {\n tokenInAddress.value = TOKENS.AddressMap[appNetworkConfig.key].WETH;\n }\n\n // INIT\n populateInitialTokens();\n\n return {\n // constants\n TOKENS,\n // context\n TradeSettingsContext,\n\n // data\n tokenInAddress,\n tokenInAmount,\n tokenOutAddress,\n tokenOutAmount,\n modalTradePreviewIsOpen,\n exactIn,\n trading,\n\n // computed\n title,\n error,\n warning,\n errorMessage,\n isRequired,\n tradeDisabled,\n tradeCardShadow,\n\n // methods\n trade,\n switchToWETH,\n handleErrorButtonClick\n };\n }\n});\n","import { render } from \"./TradeCardGP.vue?vue&type=template&id=5268cdb5&ts=true\"\nimport script from \"./TradeCardGP.vue?vue&type=script&lang=ts\"\nexport * from \"./TradeCardGP.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { ref } from 'vue';\n\n// STATE\nconst selectedTokens = ref([]);\n\nexport default function usePoolFilters() {\n function setSelectedTokens(addresses: string[]): void {\n selectedTokens.value = addresses;\n }\n\n function addSelectedToken(address: string): void {\n selectedTokens.value.push(address);\n }\n\n function removeSelectedToken(address: string): void {\n const tokenIndex = selectedTokens.value.indexOf(address);\n selectedTokens.value.splice(tokenIndex, 1);\n }\n\n return {\n // state\n selectedTokens,\n // methods\n setSelectedTokens,\n addSelectedToken,\n removeSelectedToken\n };\n}\n","\nimport { computed, defineComponent, onMounted } from 'vue';\nimport { useStore } from 'vuex';\n\nimport TradeCard from '@/components/cards/TradeCard/TradeCard.vue';\nimport TradeCardGP from '@/components/cards/TradeCardGP/TradeCardGP.vue';\nimport useTokenLists from '@/composables/useTokenLists';\nimport { TradeInterface } from '@/store/modules/app';\nimport usePoolFilters from '@/composables/pools/usePoolFilters';\nimport TradeRatesCard from '@/components/cards/TradeRatesCard/TradeRatesCard.vue';\n\nexport default defineComponent({\n components: {\n TradeCard,\n TradeCardGP\n },\n\n setup() {\n // COMPOSABLES\n const store = useStore();\n const { loadingTokenLists } = useTokenLists();\n const { setSelectedTokens } = usePoolFilters();\n\n // COMPUTED\n const appLoading = computed(() => store.state.app.loading);\n const tradeInterface = computed(() => store.state.app.tradeInterface);\n\n onMounted(() => {\n // selectedPoolTokens are only persisted between the Home/Pool pages\n setSelectedTokens([]);\n });\n\n return {\n appLoading,\n tradeInterface,\n loadingTokenLists,\n TradeInterface\n };\n }\n});\n","import { render } from \"./Trade.vue?vue&type=template&id=3fd32942&scoped=true&ts=true\"\nimport script from \"./Trade.vue?vue&type=script&lang=ts\"\nexport * from \"./Trade.vue?vue&type=script&lang=ts\"\n\nimport \"./Trade.vue?vue&type=style&index=0&id=3fd32942&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3fd32942\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-46b979d9\")\n\n_pushScopeId(\"data-v-46b979d9\")\nconst _hoisted_1 = { class: \"lg:container lg:mx-auto pt-8\" }\nconst _hoisted_2 = { class: \"grid grid-cols-1 lg:grid-cols-3 gap-y-8 gap-x-0 lg:gap-x-8\" }\nconst _hoisted_3 = { class: \"col-span-2 mb-4\" }\nconst _hoisted_4 = {\n key: 1,\n class: \"px-4 lg:px-0 flex flex-col\"\n}\nconst _hoisted_5 = { class: \"flex flex-wrap items-center -mt-2\" }\nconst _hoisted_6 = { class: \"pool-title\" }\nconst _hoisted_7 = { class: \"ml-2\" }\nconst _hoisted_8 = {\n key: 0,\n class: \"font-medium text-gray-400 text-xs mt-px ml-1\"\n}\nconst _hoisted_9 = /*#__PURE__*/_createVNode(\"div\", { class: \"hidden lg:block\" }, null, -1)\nconst _hoisted_10 = { class: \"col-span-2 order-2 lg:order-1\" }\nconst _hoisted_11 = { class: \"grid grid-cols-1 gap-y-8\" }\nconst _hoisted_12 = { class: \"mb-4 px-1 lg:px-0\" }\nconst _hoisted_13 = { class: \"order-1 lg:order-2 px-1 lg:px-0\" }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_FarmStatCardsLoading = _resolveComponent(\"FarmStatCardsLoading\")\n const _component_FarmStatCards = _resolveComponent(\"FarmStatCards\")\n const _component_FarmActionsCard = _resolveComponent(\"FarmActionsCard\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", _hoisted_3, [\n (_ctx.loading)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-16\"\n }))\n : (_openBlock(), _createBlock(\"div\", _hoisted_4, [\n _createVNode(\"div\", _hoisted_5, [\n _createVNode(\"h3\", _hoisted_6, _toDisplayString(_ctx.pool?.name), 1),\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.titleTokens, (token, i) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: i,\n class: \"mt-2 mr-2 flex items-center px-2 h-10 bg-gray-50 dark:bg-gray-850 rounded-lg\"\n }, [\n _createVNode(_component_BalAsset, {\n address: token.address,\n size: 24\n }, null, 8, [\"address\"]),\n _createVNode(\"span\", _hoisted_7, _toDisplayString(token.symbol), 1),\n (!_ctx.isStableLikePool)\n ? (_openBlock(), _createBlock(\"span\", _hoisted_8, _toDisplayString(_ctx.fNum(token.weight, 'percent_lg')), 1))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ])\n ]))\n ]),\n _hoisted_9,\n _createVNode(\"div\", _hoisted_10, [\n _createVNode(\"div\", _hoisted_11, [\n _createVNode(\"div\", _hoisted_12, [\n (_ctx.loading)\n ? (_openBlock(), _createBlock(_component_FarmStatCardsLoading, { key: 0 }))\n : (_openBlock(), _createBlock(_component_FarmStatCards, {\n key: 1,\n pool: _ctx.pool\n }, null, 8, [\"pool\"]))\n ])\n ])\n ]),\n _createVNode(\"div\", _hoisted_13, [\n (_ctx.loading)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-96 sticky top-24\"\n }))\n : (_openBlock(), _createBlock(_component_FarmActionsCard, {\n key: 1,\n pool: _ctx.pool,\n \"missing-prices\": _ctx.missingPrices,\n onOnTx: _ctx.onNewTx,\n class: \"sticky top-24\"\n }, null, 8, [\"pool\", \"missing-prices\", \"onOnTx\"]))\n ])\n ])\n ]))\n})","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"relative overflow-hidden\" }\nconst _hoisted_2 = { class: \"flex justify-between items-end border-b dark:border-gray-900 px-4\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalTabs = _resolveComponent(\"BalTabs\")\n const _component_FarmDepositForm = _resolveComponent(\"FarmDepositForm\")\n const _component_SuccessOverlay = _resolveComponent(\"SuccessOverlay\")\n const _component_FarmWithdrawForm = _resolveComponent(\"FarmWithdrawForm\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n\n return (_openBlock(), _createBlock(_component_BalCard, { noPad: \"\" }, {\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(_component_BalTabs, {\n modelValue: _ctx.activeTab,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.activeTab = $event)),\n tabs: _ctx.tabs,\n class: \"pt-4 -mb-px\",\n \"no-pad\": \"\"\n }, null, 8, [\"modelValue\", \"tabs\"])\n ]),\n (_ctx.activeTab === 'deposit')\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_FarmDepositForm, {\n pool: _ctx.pool,\n onSuccess: _cache[2] || (_cache[2] = ($event: any) => (_ctx.handleInvestment($event)))\n }, null, 8, [\"pool\"]),\n (_ctx.investmentSuccess)\n ? (_openBlock(), _createBlock(_component_SuccessOverlay, {\n key: 0,\n title: _ctx.$t('farmDepositSettled'),\n description: _ctx.$t('farmDepositSuccess'),\n closeLabel: _ctx.$t('close'),\n explorerLink: _ctx.explorer.txLink(_ctx.txHash),\n onClose: _cache[3] || (_cache[3] = ($event: any) => (_ctx.investmentSuccess = false))\n }, null, 8, [\"title\", \"description\", \"closeLabel\", \"explorerLink\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true),\n (_ctx.activeTab === 'withdraw')\n ? (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _createVNode(_component_FarmWithdrawForm, {\n pool: _ctx.pool,\n onSuccess: _cache[4] || (_cache[4] = ($event: any) => (_ctx.handleWithdrawal($event)))\n }, null, 8, [\"pool\"]),\n (_ctx.withdrawalSuccess)\n ? (_openBlock(), _createBlock(_component_SuccessOverlay, {\n key: 0,\n title: _ctx.$t('farmWithdrawalSettled'),\n description: _ctx.$t('farmWithdrawalSuccess'),\n closeLabel: _ctx.$t('close'),\n explorerLink: _ctx.explorer.txLink(_ctx.txHash),\n onClose: _cache[5] || (_cache[5] = ($event: any) => (_ctx.withdrawalSuccess = false))\n }, null, 8, [\"title\", \"description\", \"closeLabel\", \"explorerLink\"]))\n : _createCommentVNode(\"\", true)\n ], 64))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }))\n}","\nimport { defineComponent, PropType, ref } from 'vue';\nimport SuccessOverlay from '@/components/cards/SuccessOverlay.vue';\nimport { useI18n } from 'vue-i18n';\nimport useFathom from '@/composables/useFathom';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport FarmDepositForm from '@/components/forms/farm_actions/FarmDepositForm.vue';\nimport { DecoratedPoolWithRequiredFarm } from '@/services/balancer/subgraph/types';\nimport FarmWithdrawForm from '@/components/forms/farm_actions/FarmWithdrawForm.vue';\n\nexport default defineComponent({\n name: 'FarmActionsCard',\n\n emits: ['onTx'],\n\n components: {\n FarmWithdrawForm,\n FarmDepositForm,\n SuccessOverlay\n },\n\n props: {\n pool: {\n type: Object as PropType,\n required: true\n },\n missingPrices: { type: Boolean, default: false }\n },\n\n setup(_, { emit }) {\n /**\n * COMPOSABLES\n */\n const { t } = useI18n();\n const { trackGoal, Goals } = useFathom();\n const { explorerLinks: explorer } = useWeb3();\n\n /**\n * STATE\n */\n const tabs = [\n { value: 'deposit', label: 'Deposit' },\n { value: 'withdraw', label: t('withdraw') }\n ];\n const activeTab = ref(tabs[0].value);\n const investmentSuccess = ref(false);\n const withdrawalSuccess = ref(false);\n const txHash = ref('');\n\n /**\n * METHODS\n */\n function handleInvestment(txReceipt): void {\n investmentSuccess.value = true;\n txHash.value = txReceipt.hash;\n trackGoal(Goals.Invested);\n emit('onTx', txReceipt);\n }\n\n function handleWithdrawal(txReceipt): void {\n withdrawalSuccess.value = true;\n txHash.value = txReceipt.hash;\n trackGoal(Goals.Withdrawal);\n emit('onTx', txReceipt);\n }\n\n return {\n // data\n activeTab,\n tabs,\n investmentSuccess,\n withdrawalSuccess,\n txHash,\n // methods\n handleInvestment,\n handleWithdrawal,\n explorer\n };\n }\n});\n","import { render } from \"./FarmActionsCard.vue?vue&type=template&id=0b12da2e&ts=true\"\nimport script from \"./FarmActionsCard.vue?vue&type=script&lang=ts\"\nexport * from \"./FarmActionsCard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, reactive, toRefs, watch } from 'vue';\nimport * as PoolPageComponents from '@/components/pages/pool';\nimport { useRoute } from 'vue-router';\nimport { useQueryClient } from 'vue-query';\nimport useNumbers from '@/composables/useNumbers';\nimport usePoolQuery from '@/composables/queries/usePoolQuery';\nimport { POOLS_ROOT_KEY } from '@/constants/queryKeys';\nimport { EXTERNAL_LINKS } from '@/constants/links';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport useApp from '@/composables/useApp';\nimport FarmActionsCard from '@/components/pages/farm/FarmActionsCard.vue';\nimport { FarmStatCards } from '@/components/pages/farm';\nimport { isStableLike, usePool } from '@/composables/usePool';\nimport useFarm from '@/composables/farms/useFarm';\nimport FarmStatCardsLoading from '@/components/pages/farm/FarmStatCardsLoading.vue';\nimport {\n DecoratedPoolWithRequiredFarm,\n PoolToken\n} from '@/services/balancer/subgraph/types';\nimport usePools from '@/composables/pools/usePools';\n\ninterface PoolPageData {\n id: string;\n refetchQueriesOnBlockNumber: number;\n}\n\nconst REFETCH_QUERIES_BLOCK_BUFFER = 3;\n\nexport default defineComponent({\n components: {\n FarmStatCardsLoading,\n ...PoolPageComponents,\n FarmActionsCard,\n FarmStatCards\n },\n\n setup() {\n /**\n * COMPOSABLES\n */\n const { appLoading } = useApp();\n const route = useRoute();\n const { fNum } = useNumbers();\n const { isWalletReady } = useWeb3();\n const queryClient = useQueryClient();\n const { prices } = useTokens();\n const { blockNumber } = useWeb3();\n const {\n onlyPoolsWithFarms,\n isLoadingPools,\n isLoadingFarms,\n refetchPools\n } = usePools();\n const poolQuery = usePoolQuery(route.params.id as string);\n\n /**\n * STATE\n */\n const data = reactive({\n id: route.params.id as string,\n refetchQueriesOnBlockNumber: 0\n });\n\n /**\n * COMPUTED\n */\n const pool = computed(() =>\n onlyPoolsWithFarms.value.find(pool => pool.id === route.params.id)\n );\n const { isStableLikePool } = usePool(pool);\n const { harvest } = useFarm(pool);\n\n const loading = computed(\n () =>\n isLoadingPools.value ||\n isLoadingFarms.value ||\n poolQuery.isLoading.value\n );\n\n const titleTokens = computed(() => {\n if (!pool.value) return [];\n\n return orderedPoolTokens(pool.value);\n });\n\n const missingPrices = computed(() => {\n if (pool.value) {\n const tokensWithPrice = Object.keys(prices.value);\n return !pool.value.tokenAddresses.every(token =>\n tokensWithPrice.includes(token)\n );\n }\n return false;\n });\n\n /**\n * METHODS\n */\n function onNewTx(): void {\n queryClient.invalidateQueries([POOLS_ROOT_KEY, 'current', data.id]);\n data.refetchQueriesOnBlockNumber =\n blockNumber.value + REFETCH_QUERIES_BLOCK_BUFFER;\n }\n\n function harvestAll() {\n harvest();\n }\n\n /**\n * WATCHERS\n */\n watch(blockNumber, () => {\n if (data.refetchQueriesOnBlockNumber === blockNumber.value) {\n queryClient.invalidateQueries([POOLS_ROOT_KEY]);\n } else {\n refetchPools();\n }\n });\n\n /*watch(poolQuery.error, () => {\n router.push({ name: 'farm' });\n });*/\n\n function orderedPoolTokens(\n pool: DecoratedPoolWithRequiredFarm\n ): PoolToken[] {\n if (isStableLike(pool)) return pool.tokens;\n\n const sortedTokens = pool.tokens.slice();\n sortedTokens.sort((a, b) => parseFloat(b.weight) - parseFloat(a.weight));\n return sortedTokens;\n }\n\n return {\n // data\n ...toRefs(data),\n EXTERNAL_LINKS,\n // computed\n appLoading,\n pool,\n loading,\n titleTokens,\n isWalletReady,\n missingPrices,\n isStableLikePool,\n // methods\n fNum,\n onNewTx,\n harvestAll\n };\n }\n});\n","import { render } from \"./FarmDetail.vue?vue&type=template&id=46b979d9&scoped=true&ts=true\"\nimport script from \"./FarmDetail.vue?vue&type=script&lang=ts\"\nexport * from \"./FarmDetail.vue?vue&type=script&lang=ts\"\n\nimport \"./FarmDetail.vue?vue&type=style&index=0&id=46b979d9&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-46b979d9\"]])\n\nexport default __exports__","import { createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"lg:container lg:mx-auto mt-12\" }\nconst _hoisted_2 = { class: \"grid grid-cols-1 lg:grid-cols-3 gap-y-8 gap-x-0 lg:gap-x-8 mt-8\" }\nconst _hoisted_3 = { class: \"col-span-2 order-2 lg:order-1\" }\nconst _hoisted_4 = { class: \"grid grid-cols-1 gap-y-8\" }\nconst _hoisted_5 = /*#__PURE__*/_createVNode(\"div\", null, [\n /*#__PURE__*/_createVNode(\"h2\", { class: \"text-red-500 mb-2\" }, \"BEETS\")\n], -1)\nconst _hoisted_6 = { class: \"px-1 lg:px-0\" }\nconst _hoisted_7 = { class: \"mb-4 px-1 lg:px-0\" }\nconst _hoisted_8 = { class: \"order-1 lg:order-2 px-1 lg:px-0 pt-16\" }\nconst _hoisted_9 = { class: \"pt-2\" }\nconst _hoisted_10 = { class: \"mt-24 mb-24\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BeetsLBPChart = _resolveComponent(\"BeetsLBPChart\")\n const _component_BeetsLBPStatCards = _resolveComponent(\"BeetsLBPStatCards\")\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_LBPTradeCard = _resolveComponent(\"LBPTradeCard\")\n const _component_LBPTable = _resolveComponent(\"LBPTable\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", _hoisted_3, [\n _createVNode(\"div\", _hoisted_4, [\n _hoisted_5,\n _createVNode(\"div\", _hoisted_6, [\n _createVNode(_component_BeetsLBPChart, {\n loading: _ctx.loadingTokenPrices || _ctx.loadingPool,\n \"lbp-token-name\": _ctx.lbpTokenName,\n \"lbp-token-address\": _ctx.lbpTokenAddress,\n \"lbp-pool-id\": _ctx.lbpPoolId,\n \"lbp-end-time\": _ctx.lbpEndTime,\n \"lbp-start-time\": _ctx.lbpStartTime,\n \"token-prices\": _ctx.tokenPrices,\n \"usdc-address\": _ctx.usdcAddress,\n \"weight-step\": _ctx.lbpWeightStep,\n \"time-step\": _ctx.lbpTimeStep,\n pool: _ctx.pool\n }, null, 8, [\"loading\", \"lbp-token-name\", \"lbp-token-address\", \"lbp-pool-id\", \"lbp-end-time\", \"lbp-start-time\", \"token-prices\", \"usdc-address\", \"weight-step\", \"time-step\", \"pool\"])\n ]),\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(_component_BeetsLBPStatCards, {\n pool: _ctx.pool,\n \"lbp-token-address\": _ctx.lbpTokenAddress,\n \"lbp-token-name\": _ctx.lbpTokenName,\n \"lbp-token-starting-amount\": _ctx.lbpTokenStartingAmount,\n \"usdc-address\": _ctx.usdcAddress,\n \"lbp-end-time\": _ctx.lbpEndTime,\n \"lbp-start-time\": _ctx.lbpStartTime,\n loading: _ctx.loadingPool,\n \"lbp-pool-id\": _ctx.lbpPoolId,\n \"is-before-lbp-start\": _ctx.isBeforeLbpStart,\n onLbpStateChange: _ctx.handleLbpStateChange\n }, null, 8, [\"pool\", \"lbp-token-address\", \"lbp-token-name\", \"lbp-token-starting-amount\", \"usdc-address\", \"lbp-end-time\", \"lbp-start-time\", \"loading\", \"lbp-pool-id\", \"is-before-lbp-start\", \"onLbpStateChange\"])\n ])\n ])\n ]),\n _createVNode(\"div\", _hoisted_8, [\n _createVNode(\"div\", _hoisted_9, [\n (_ctx.appLoading || _ctx.loadingTokenLists)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-96\"\n }))\n : (_openBlock(), _createBlock(_component_LBPTradeCard, {\n key: 1,\n \"lbp-token-name\": _ctx.lbpTokenName,\n \"lbp-token-address\": _ctx.lbpTokenAddressFormatted,\n \"usdc-address\": _ctx.usdcAddressFormatted,\n \"swap-enabled\": _ctx.swapEnabled,\n onOnTx: _ctx.onNewTx\n }, null, 8, [\"lbp-token-name\", \"lbp-token-address\", \"usdc-address\", \"swap-enabled\", \"onOnTx\"]))\n ])\n ])\n ]),\n _createVNode(\"div\", _hoisted_10, [\n _createVNode(_component_LBPTable, {\n \"lbp-token-name\": _ctx.lbpTokenName,\n \"lbp-token-address\": _ctx.lbpTokenAddress,\n \"lbp-pool-id\": _ctx.lbpPoolId\n }, null, 8, [\"lbp-token-name\", \"lbp-token-address\", \"lbp-pool-id\"])\n ])\n ]))\n}","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = {\n key: 1,\n class: \"chart mr-n2 ml-n2\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_BalLbpLineChart = _resolveComponent(\"BalLbpLineChart\")\n\n return (_ctx.loading || _ctx.appLoading)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-96\"\n }))\n : (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(_component_BalLbpLineChart, {\n data: _ctx.series,\n isPeriodSelectionEnabled: false,\n axisLabelFormatter: { yAxis: '$0.000', xAxis: 'datetime' },\n color: _ctx.chartColors,\n legendState: {},\n height: \"96\",\n showLegend: true\n }, null, 8, [\"data\", \"axisLabelFormatter\", \"color\"])\n ]))\n}","\nimport { computed, defineComponent, PropType } from 'vue';\nimport { useStore } from 'vuex';\nimport { zip } from 'lodash';\nimport {\n addSeconds,\n format,\n formatISO,\n fromUnixTime,\n isBefore,\n parseISO\n} from 'date-fns';\nimport useTailwind from '@/composables/useTailwind';\nimport {\n DecoratedPool,\n SubgraphTokenPrice\n} from '@/services/balancer/subgraph/types';\n\ninterface HistoryItem {\n timestamp: number;\n price: number[];\n amounts: string[];\n totalShares: string;\n}\n\nexport default defineComponent({\n name: 'BeetsLBPChart',\n\n props: {\n lbpTokenName: { type: String, required: true },\n lbpTokenAddress: { type: String, required: true },\n lbpPoolId: { type: String, required: true },\n lbpEndTime: { type: String, required: true },\n lbpStartTime: { type: String, required: true },\n weightStep: { type: Number, required: true },\n timeStep: { type: Number, required: true },\n loading: { type: Boolean, default: true },\n usdcAddress: { type: String, required: true },\n tokenPrices: {\n type: Array as PropType,\n required: true\n },\n pool: { type: Object as PropType, required: true }\n },\n\n setup(props) {\n const store = useStore();\n const appLoading = computed(() => store.state.app.loading);\n const tailwind = useTailwind();\n const beets = computed(() =>\n props.pool?.tokens?.find(\n token => token.address.toLowerCase() === props.lbpTokenAddress\n )\n );\n const usdc = computed(() =>\n props.pool?.tokens?.find(\n token => token.address.toLowerCase() === props.usdcAddress\n )\n );\n const currentBeetsPrice = computed(() => {\n if (!beets.value || !usdc.value) {\n return 0;\n }\n\n const beetsBalance = parseFloat(beets.value?.balance || '0');\n const beetsWeight = parseFloat(beets.value?.weight || '0');\n const usdcBalance = parseFloat(usdc.value?.balance || '0');\n const usdcWeight = parseFloat(usdc.value?.weight || '0');\n\n return ((beetsWeight / usdcWeight) * usdcBalance) / beetsBalance;\n });\n\n const lastPriceTimestamp = computed(() => {\n const prices = props.tokenPrices;\n\n return prices && prices.length > 0\n ? formatISO(fromUnixTime(prices[prices.length - 1].timestamp))\n : props.lbpStartTime;\n });\n\n const chartColors = [\n //tailwind.theme.colors.gray['500'],\n tailwind.theme.colors.green['400']\n ];\n\n const beetsPriceValues = computed(() => {\n if (!beets.value || !usdc.value) {\n return [];\n }\n const fistTime = isBefore(new Date(), parseISO(props.lbpStartTime))\n ? parseISO(props.lbpStartTime)\n : new Date();\n const tokenPrices = (props.tokenPrices || []).filter(\n tokenPrice => tokenPrice.amount > '0.0001'\n );\n const times = [\n ...tokenPrices.map(price =>\n format(fromUnixTime(price.timestamp), 'yyyy-MM-dd HH:mm:ss')\n ),\n format(parseISO(lastPriceTimestamp.value), 'yyyy-MM-dd HH:mm:ss'),\n format(fistTime, 'yyyy-MM-dd HH:mm:ss')\n ];\n const prices = [\n ...tokenPrices.map(price => parseFloat(price.price)),\n currentBeetsPrice.value,\n currentBeetsPrice.value\n ];\n\n return zip(times, prices);\n });\n\n const predictedPriceValues = computed(() => {\n if (!beets.value || !usdc.value) {\n return [];\n }\n\n const fistTime = isBefore(new Date(), parseISO(props.lbpStartTime))\n ? parseISO(props.lbpStartTime)\n : new Date();\n const beetsBalance = parseFloat(beets.value.balance);\n const usdcBalance = parseFloat(usdc.value.balance);\n let beetsWeight = parseFloat(beets.value.weight);\n let usdcWeight = parseFloat(usdc.value.weight);\n const predicted: number[] = [currentBeetsPrice.value];\n const times: string[] = [format(fistTime, 'yyyy-MM-dd HH:mm:ss')];\n const endTimestamp = parseISO(props.lbpEndTime);\n let timestamp = fistTime;\n\n while (isBefore(addSeconds(timestamp, props.timeStep), endTimestamp)) {\n timestamp = addSeconds(timestamp, props.timeStep);\n beetsWeight -= props.weightStep;\n usdcWeight += props.weightStep;\n\n const beetsPrice =\n ((beetsWeight / usdcWeight) * usdcBalance) / beetsBalance;\n\n predicted.push(beetsPrice);\n times.push(format(timestamp, 'yyyy-MM-dd HH:mm:ss'));\n }\n\n times.push(format(endTimestamp, 'yyyy-MM-dd HH:mm:ss'));\n predicted.push(((80 / 20) * usdcBalance) / beetsBalance);\n\n return zip(times, predicted);\n });\n\n const series = computed(() => {\n return [\n /*{\n name: 'Predicted Price*',\n values: predictedPriceValues.value\n },*/\n {\n name: 'BEETS Price',\n values: beetsPriceValues.value\n }\n ];\n });\n\n return {\n series,\n appLoading,\n chartColors,\n lastPriceTimestamp\n };\n }\n});\n","import { render } from \"./BeetsLBPChart.vue?vue&type=template&id=a2f51710&ts=true\"\nimport script from \"./BeetsLBPChart.vue?vue&type=script&lang=ts\"\nexport * from \"./BeetsLBPChart.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"grid grid-cols-1 md:grid-cols-3 gap-4\" }\nconst _hoisted_2 = /*#__PURE__*/_createVNode(\"div\", { class: \"text-sm text-gray-500 font-medium mb-2\" }, \" BEETS Price \", -1)\nconst _hoisted_3 = { class: \"text-xl font-medium flex items-center\" }\nconst _hoisted_4 = /*#__PURE__*/_createVNode(\"div\", { class: \"text-sm text-gray-500 font-medium mb-2\" }, \" Market Cap \", -1)\nconst _hoisted_5 = { class: \"text-xl font-medium truncate flex items-center\" }\nconst _hoisted_6 = /*#__PURE__*/_createVNode(\"div\", { class: \"text-sm text-gray-500 font-medium mb-2\" }, \" Circulating Supply \", -1)\nconst _hoisted_7 = { class: \"text-xl font-medium flex items-end relative\" }\nconst _hoisted_8 = /*#__PURE__*/_createVNode(\"div\", {\n class: \"text-sm text-gray-500\",\n style: { paddingBottom: '2px' }\n}, \" BEETS \", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n (_ctx.loading)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, _renderList(3, (n) => {\n return _createVNode(_component_BalLoadingBlock, {\n key: n,\n class: \"h-28\"\n })\n }), 64))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _createVNode(_component_BalCard, null, {\n default: _withCtx(() => [\n _hoisted_2,\n _createVNode(\"div\", _hoisted_3, \" $\" + _toDisplayString(_ctx.numeral(_ctx.beetsPrice).format('0.[0000]')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_BalCard, null, {\n default: _withCtx(() => [\n _hoisted_4,\n _createVNode(\"div\", _hoisted_5, \" $\" + _toDisplayString(_ctx.fNum(_ctx.marketCap, 'usd_lg')), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_BalCard, null, {\n default: _withCtx(() => [\n _hoisted_6,\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(\"div\", null, _toDisplayString(_ctx.fNum(_ctx.circulatingSupply, 'token_lg')) + \" \", 1),\n _hoisted_8\n ])\n ]),\n _: 1\n })\n ], 64))\n ]))\n}","\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport useNumbers from '@/composables/useNumbers';\nimport { differenceInMilliseconds, format, parseISO } from 'date-fns';\nimport { DecoratedPool } from '@/services/balancer/subgraph/types';\nimport numeral from 'numeral';\nimport useProtocolDataQuery from '@/composables/queries/useProtocolDataQuery';\n\nexport default defineComponent({\n components: {},\n\n emits: ['lbpStateChange'],\n\n props: {\n lbpTokenName: { type: String, required: true },\n lbpTokenAddress: { type: String, required: true },\n lbpTokenStartingAmount: { type: Number, required: true },\n usdcAddress: { type: String, required: true },\n lbpStartTime: { type: String, required: true },\n lbpEndTime: { type: String, required: true },\n pool: { type: Object as PropType },\n loading: { type: Boolean, default: true },\n isBeforeLbpStart: { type: Boolean, required: true }\n },\n\n setup(props) {\n const { fNum } = useNumbers();\n const harvesting = ref(false);\n\n const timeRemaining = computed(() =>\n props.isBeforeLbpStart\n ? differenceInMilliseconds(parseISO(props.lbpStartTime), new Date())\n : differenceInMilliseconds(parseISO(props.lbpEndTime), new Date())\n );\n\n const countdownDateFormatted = computed(() =>\n props.isBeforeLbpStart\n ? format(parseISO(props.lbpStartTime), 'MMM d') +\n ' at ' +\n format(parseISO(props.lbpStartTime), 'HH:mm')\n : format(parseISO(props.lbpEndTime), 'MMM d') +\n ' at ' +\n format(parseISO(props.lbpEndTime), 'HH:mm')\n );\n\n const countdownLabel = computed(() =>\n props.isBeforeLbpStart ? 'Starts In' : 'Ends In'\n );\n\n const lbpData = computed(() => {\n const tokens = props.pool?.tokens;\n const beets = tokens?.find(\n token => token.address.toLowerCase() === props.lbpTokenAddress\n );\n const usdc = tokens?.find(\n token => token.address.toLowerCase() === props.usdcAddress\n );\n\n if (!beets || !usdc) {\n return null;\n }\n\n const remaining = parseFloat(beets.balance);\n const sold = props.lbpTokenStartingAmount - remaining;\n const tokenPrice =\n ((parseFloat(beets.weight) / parseFloat(usdc.weight)) *\n parseFloat(usdc.balance)) /\n parseFloat(beets.balance);\n const predictedPrice =\n ((0.8 / 0.2) * parseFloat(usdc.balance)) / parseFloat(beets.balance);\n\n return {\n sold,\n remaining,\n percentSold: sold / props.lbpTokenStartingAmount,\n tokenPrice: numeral(tokenPrice).format('$0,0.0000'),\n predictedPrice: numeral(predictedPrice).format('$0,0.0000'),\n beetsWeight: numeral(parseFloat(beets.weight) * 100).format('0.[00]'),\n usdcWeight: numeral(parseFloat(usdc.weight) * 100).format('0.[00]')\n };\n });\n\n function transformTime(slotProps) {\n return {\n ...slotProps,\n hours: slotProps.hours < 10 ? `0${slotProps.hours}` : slotProps.hours,\n minutes:\n slotProps.minutes < 10 ? `0${slotProps.minutes}` : slotProps.minutes,\n seconds:\n slotProps.seconds < 10 ? `0${slotProps.seconds}` : slotProps.seconds\n };\n }\n\n const protocolDataQuery = useProtocolDataQuery();\n const tvl = computed(\n () => protocolDataQuery.data?.value?.totalLiquidity || 0\n );\n\n const beetsPrice = computed(\n () => protocolDataQuery.data?.value?.beetsPrice || 0\n );\n const circulatingSupply = computed(\n () => protocolDataQuery.data.value?.circulatingSupply || 0\n );\n const marketCap = computed(() => {\n return beetsPrice.value * circulatingSupply.value;\n });\n\n return {\n fNum,\n harvesting,\n transformTime,\n timeRemaining,\n lbpData,\n countdownDateFormatted,\n countdownLabel,\n tvl,\n beetsPrice,\n marketCap,\n circulatingSupply,\n numeral\n };\n }\n});\n","import { render } from \"./BeetsLBPStatCards.vue?vue&type=template&id=27992c0c&ts=true\"\nimport script from \"./BeetsLBPStatCards.vue?vue&type=script&lang=ts\"\nexport * from \"./BeetsLBPStatCards.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, withCtx as _withCtx, Teleport as _Teleport, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"w-full flex items-center justify-between\" }\nconst _hoisted_2 = { class: \"font-bold\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_TradeSettingsPopover = _resolveComponent(\"TradeSettingsPopover\")\n const _component_LbpTradePair = _resolveComponent(\"LbpTradePair\")\n const _component_BalAlert = _resolveComponent(\"BalAlert\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_TradeRoute = _resolveComponent(\"TradeRoute\")\n const _component_SuccessOverlay = _resolveComponent(\"SuccessOverlay\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n const _component_TradePreviewModal = _resolveComponent(\"TradePreviewModal\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(_component_BalCard, {\n class: \"relative\",\n shadow: _ctx.tradeCardShadow,\n \"no-border\": !_ctx.darkMode\n }, {\n header: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"h4\", _hoisted_2, _toDisplayString(_ctx.lbpTokenAddress.toLowerCase() === _ctx.tokenOutAddress.toLowerCase()\n ? 'Buy'\n : 'Sell') + \" \" + _toDisplayString(_ctx.lbpTokenName), 1),\n _createVNode(_component_TradeSettingsPopover, {\n context: _ctx.TradeSettingsContext.trade\n }, null, 8, [\"context\"])\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", null, [\n _createVNode(_component_LbpTradePair, {\n lbpTokenAddress: _ctx.lbpTokenAddress,\n \"token-in-amount-input\": _ctx.tokenInAmount,\n \"token-in-address-input\": _ctx.tokenInAddress,\n \"token-out-amount-input\": _ctx.tokenOutAmount,\n \"token-out-address-input\": _ctx.tokenOutAddress,\n \"exact-in\": _ctx.exactIn,\n \"price-impact\": _ctx.priceImpact,\n onTokenInAmountChange: _cache[1] || (_cache[1] = value => (_ctx.tokenInAmount = value)),\n onTokenInAddressChange: _cache[2] || (_cache[2] = value => (_ctx.tokenInAddress = value)),\n onTokenOutAmountChange: _cache[3] || (_cache[3] = value => (_ctx.tokenOutAmount = value)),\n onTokenOutAddressChange: _cache[4] || (_cache[4] = value => (_ctx.tokenOutAddress = value)),\n onExactInChange: _cache[5] || (_cache[5] = value => (_ctx.exactIn = value)),\n onChange: _ctx.handleAmountChange\n }, null, 8, [\"lbpTokenAddress\", \"token-in-amount-input\", \"token-in-address-input\", \"token-out-amount-input\", \"token-out-address-input\", \"exact-in\", \"price-impact\", \"onChange\"]),\n (_ctx.error)\n ? (_openBlock(), _createBlock(_component_BalAlert, {\n key: 0,\n class: \"mb-4\",\n type: \"error\",\n size: \"sm\",\n title: _ctx.error.header,\n description: _ctx.error.body,\n \"action-label\": _ctx.error.label,\n block: \"\",\n onActionClick: _ctx.handleErrorButtonClick\n }, null, 8, [\"title\", \"description\", \"action-label\", \"onActionClick\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.poolsLoading || _ctx.isLoadingApprovals)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 1,\n loading: true,\n \"loading-label\": _ctx.$t('loading'),\n block: \"\"\n }, null, 8, [\"loading-label\"]))\n : (_openBlock(), _createBlock(_component_BalBtn, {\n key: 2,\n label: 'Preview trade',\n disabled: _ctx.tradeDisabled,\n \"loading-label\": _ctx.$t('confirming'),\n color: \"gradient\",\n block: \"\",\n onClick: _withModifiers(_ctx.showTradePreviewModal, [\"prevent\"])\n }, null, 8, [\"disabled\", \"loading-label\", \"onClick\"])),\n _createVNode(_component_TradeRoute, {\n class: \"mt-5\",\n \"address-in\": _ctx.tokenInAddress,\n \"amount-in\": _ctx.tokenInAmount,\n \"address-out\": _ctx.tokenOutAddress,\n \"amount-out\": _ctx.tokenOutAmount,\n pools: _ctx.pools,\n \"sor-return\": _ctx.sorReturn\n }, null, 8, [\"address-in\", \"amount-in\", \"address-out\", \"amount-out\", \"pools\", \"sor-return\"])\n ]),\n (_ctx.tradeSuccess)\n ? (_openBlock(), _createBlock(_component_SuccessOverlay, {\n key: 0,\n title: _ctx.$t('tradeSettled'),\n description: _ctx.$t('tradeSuccess'),\n closeLabel: _ctx.$t('close'),\n \"explorer-link\": _ctx.explorer.txLink(_ctx.txHash),\n onClose: _cache[6] || (_cache[6] = ($event: any) => (_ctx.tradeSuccess = false))\n }, null, 8, [\"title\", \"description\", \"closeLabel\", \"explorer-link\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }, 8, [\"shadow\", \"no-border\"]),\n (_openBlock(), _createBlock(_Teleport, { to: \"#modal\" }, [\n (_ctx.modalTradePreviewIsOpen)\n ? (_openBlock(), _createBlock(_component_TradePreviewModal, {\n key: 0,\n \"is-v1-swap\": _ctx.sorReturn.isV1swap,\n \"address-in\": _ctx.tokenInAddress,\n \"amount-in\": _ctx.tokenInAmount,\n \"address-out\": _ctx.tokenOutAddress,\n \"amount-out\": _ctx.tokenOutAmount,\n trading: _ctx.trading,\n \"slippage-error\": _ctx.slippageError,\n onTrade: _ctx.trade,\n onClose: _cache[7] || (_cache[7] = ($event: any) => (_ctx.modalTradePreviewIsOpen = false))\n }, null, 8, [\"is-v1-swap\", \"address-in\", \"amount-in\", \"address-out\", \"amount-out\", \"trading\", \"slippage-error\", \"onTrade\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ], 64))\n}","import { toDisplayString as _toDisplayString, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createTextVNode as _createTextVNode, Teleport as _Teleport, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"dark:border-b dark:border-gray-850\" }\nconst _hoisted_2 = { class: \"p-2 flex justify-between text-sm rounded-t-lg dark:bg-gray-900 border dark:border-gray-900 w-full border-b-0\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"text-gray-500\"\n}\nconst _hoisted_4 = { class: \"flex flex-col ml-3 w-24 leading-none truncate\" }\nconst _hoisted_5 = { class: \"font-bold\" }\nconst _hoisted_6 = {\n key: 1,\n class: \"font-bold\"\n}\nconst _hoisted_7 = { class: \"p-2\" }\nconst _hoisted_8 = { class: \"flex items-center mb-4\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"flex-auto ml-4\"\n}\nconst _hoisted_10 = { class: \"dark:border-b dark:border-gray-850\" }\nconst _hoisted_11 = { class: \"p-2 flex justify-between text-sm rounded-t-lg dark:bg-gray-900 border dark:border-gray-900 w-full border-b-0\" }\nconst _hoisted_12 = {\n key: 0,\n class: \"text-gray-500\"\n}\nconst _hoisted_13 = { class: \"flex flex-col ml-3 w-24 leading-none truncate\" }\nconst _hoisted_14 = { class: \"font-bold\" }\nconst _hoisted_15 = {\n key: 1,\n class: \"font-bold\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalTextInput = _resolveComponent(\"BalTextInput\")\n const _component_TradePairToggle = _resolveComponent(\"TradePairToggle\")\n const _component_SelectTokenModal = _resolveComponent(\"SelectTokenModal\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t('send')), 1),\n (_ctx.tokenInValue > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_3, _toDisplayString(_ctx.fNum(_ctx.tokenInValue, 'usd')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createVNode(_component_BalTextInput, {\n name: \"tokenIn\",\n \"model-value\": _ctx.tokenInAmountInput,\n onInput: _cache[3] || (_cache[3] = value => _ctx.handleInAmountChange(value)),\n type: \"number\",\n \"decimal-limit\": _ctx.tokenInDecimals,\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"validate-on\": \"input\",\n \"square-top\": \"\",\n \"prepend-border\": \"\"\n }, {\n prepend: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"flex items-center w-32 h-full cursor-pointer\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (\n !_ctx.tokenInIsLbpToken ? _ctx.openModalSelectToken('input') : undefined\n ))\n }, [\n (_ctx.tokenInAddressInput)\n ? (_openBlock(), _createBlock(_component_BalAsset, {\n key: 0,\n address: _ctx.tokenInAddressInput,\n size: 28\n }, null, 8, [\"address\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_4, [\n (_ctx.tokenInSymbol.length > 5)\n ? (_openBlock(), _createBlock(_component_BalTooltip, { key: 0 }, {\n activator: _withCtx(() => [\n _createVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.tokenInSymbol), 1)\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", null, _toDisplayString(_ctx.tokenInSymbol), 1)\n ]),\n _: 1\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_6, _toDisplayString(_ctx.tokenInSymbol), 1))\n ]),\n (!_ctx.tokenInIsLbpToken)\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 1,\n name: 'chevron-down',\n size: 'sm',\n class: \"text-green-500 group-hover:text-red-500\"\n }))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n info: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"cursor-pointer\",\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.handleMax && _ctx.handleMax(...args)))\n }, _toDisplayString(_ctx.$t('balance')) + \": \" + _toDisplayString(_ctx.fNum(_ctx.balanceLabel, 'token')), 1)\n ]),\n append: _withCtx(() => [\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(_component_BalBtn, {\n size: \"xs\",\n color: \"white\",\n onClick: _ctx.handleMax\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('max')), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ]),\n _: 1\n }, 8, [\"model-value\", \"decimal-limit\"]),\n _createVNode(\"div\", _hoisted_8, [\n _createVNode(_component_TradePairToggle, { onToggle: _ctx.handleSwitchTokens }, null, 8, [\"onToggle\"]),\n (_ctx.rateMessage)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_9, [\n _createVNode(\"span\", {\n class: \"text-sm text-gray-500 cursor-pointer\",\n onClick: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_ctx.toggleRate && _ctx.toggleRate(...args))),\n textContent: _toDisplayString(_ctx.rateMessage)\n }, null, 8, [\"textContent\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(\"div\", _hoisted_10, [\n _createVNode(\"div\", _hoisted_11, [\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t('receive')), 1),\n (_ctx.tokenOutValue > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_12, _toDisplayString(_ctx.fNum(_ctx.tokenOutValue, 'usd')), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createVNode(_component_BalTextInput, {\n name: 'tokenOut',\n \"model-value\": _ctx.tokenOutAmountInput,\n onInput: _cache[6] || (_cache[6] = value => _ctx.handleOutAmountChange(value)),\n type: \"number\",\n \"decimal-limit\": _ctx.tokenOutDecimals,\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"square-top\": \"\"\n }, {\n prepend: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"flex items-center w-32 h-full cursor-pointer\",\n onClick: _cache[5] || (_cache[5] = ($event: any) => (\n !_ctx.tokenOutIsLbpToken ? _ctx.openModalSelectToken('input') : undefined\n ))\n }, [\n (_ctx.tokenOutAddressInput)\n ? (_openBlock(), _createBlock(_component_BalAsset, {\n key: 0,\n address: _ctx.tokenOutAddressInput,\n size: 28\n }, null, 8, [\"address\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_13, [\n (_ctx.tokenOutSymbol.length > 5)\n ? (_openBlock(), _createBlock(_component_BalTooltip, { key: 0 }, {\n activator: _withCtx(() => [\n _createVNode(\"span\", _hoisted_14, _toDisplayString(_ctx.tokenOutSymbol), 1)\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", null, _toDisplayString(_ctx.tokenOutSymbol), 1)\n ]),\n _: 1\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_15, _toDisplayString(_ctx.tokenOutSymbol), 1))\n ]),\n (!_ctx.tokenOutIsLbpToken)\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 1,\n name: 'chevron-down',\n size: 'sm',\n class: \"text-green-500 group-hover:text-red-500\"\n }))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n info: _withCtx(() => [\n _createVNode(\"div\", null, _toDisplayString(_ctx.$t('priceImpact')) + \": \" + _toDisplayString(_ctx.fNum(_ctx.priceImpact, 'percent')), 1)\n ]),\n _: 1\n }, 8, [\"model-value\", \"decimal-limit\"])\n ]),\n (_openBlock(), _createBlock(_Teleport, { to: \"#modal\" }, [\n (_ctx.modalSelectTokenIsOpen)\n ? (_openBlock(), _createBlock(_component_SelectTokenModal, {\n key: 0,\n excludedTokens: [_ctx.tokenInAddressInput, _ctx.tokenOutAddressInput],\n onClose: _cache[7] || (_cache[7] = ($event: any) => (_ctx.modalSelectTokenIsOpen = false)),\n onSelect: _ctx.handleSelectToken,\n \"include-ether\": \"\"\n }, null, 8, [\"excludedTokens\", \"onSelect\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ], 64))\n}","\nimport { defineComponent, toRefs, computed, ref } from 'vue';\n\nimport useNumbers from '@/composables/useNumbers';\n\nimport TradePairToggle from '@/components/cards/TradeCard/TradePairToggle.vue';\nimport SelectTokenModal from '@/components/modals/SelectTokenModal/SelectTokenModal.vue';\nimport useTokens from '@/composables/useTokens';\nimport { NATIVE_ASSET_ADDRESS } from '@/constants/tokens';\n\nconst ETH_BUFFER = 0.1;\n\nexport default defineComponent({\n components: {\n TradePairToggle,\n SelectTokenModal\n },\n props: {\n tokenInAmountInput: {\n type: String,\n required: true\n },\n tokenInAddressInput: {\n type: String,\n required: true\n },\n tokenOutAmountInput: {\n type: String,\n required: true\n },\n tokenOutAddressInput: {\n type: String,\n required: true\n },\n exactIn: {\n type: Boolean,\n required: true\n },\n priceImpact: {\n type: Number,\n required: true\n },\n lbpTokenAddress: {\n type: String,\n required: true\n }\n },\n emits: [\n 'tokenInAddressChange',\n 'tokenInAmountChange',\n 'tokenOutAddressChange',\n 'tokenOutAmountChange',\n 'exactInChange',\n 'change'\n ],\n setup(props, { emit }) {\n const { tokens, balances, injectTokens } = useTokens();\n const { fNum, toFiat } = useNumbers();\n\n const {\n tokenInAmountInput,\n tokenInAddressInput,\n tokenOutAmountInput,\n tokenOutAddressInput,\n exactIn\n } = toRefs(props);\n\n const tokenInValue = computed(() =>\n toFiat(tokenInAmountInput.value, tokenInAddressInput.value)\n );\n\n const tokenInSymbol = computed(() => {\n const tokenIn = tokens.value[tokenInAddressInput.value];\n const symbol = tokenIn ? tokenIn.symbol : '';\n return symbol;\n });\n\n const tokenOutValue = computed(() =>\n toFiat(tokenOutAmountInput.value, tokenOutAddressInput.value)\n );\n\n const tokenOutSymbol = computed(() => {\n const tokenOut = tokens.value[tokenOutAddressInput.value];\n const symbol = tokenOut ? tokenOut.symbol : '';\n return symbol;\n });\n\n const tokenInDecimals = computed(() => {\n const decimals = tokens.value[tokenInAddressInput.value]\n ? tokens.value[tokenInAddressInput.value].decimals\n : 18;\n return decimals;\n });\n\n const tokenOutDecimals = computed(() => {\n const decimals = tokens.value[tokenOutAddressInput.value]\n ? tokens.value[tokenOutAddressInput.value].decimals\n : 18;\n return decimals;\n });\n\n const isInRate = ref(true);\n const modalSelectTokenType = ref('input');\n const modalSelectTokenIsOpen = ref(false);\n\n function handleMax(): void {\n const balance = balances.value[tokenInAddressInput.value] || '0';\n const balanceNumber = parseFloat(balance);\n const maxAmount =\n tokenInAddressInput.value !== NATIVE_ASSET_ADDRESS\n ? balance\n : balanceNumber > ETH_BUFFER\n ? (balanceNumber - ETH_BUFFER).toString()\n : '0';\n handleInAmountChange(maxAmount);\n }\n\n function handleInAmountChange(value: string): void {\n emit('exactInChange', true);\n emit('tokenInAmountChange', value);\n emit('change', value);\n }\n\n function handleOutAmountChange(value: string): void {\n emit('exactInChange', false);\n emit('tokenOutAmountChange', value);\n emit('change', value);\n }\n\n function handleSwitchTokens(): void {\n emit('exactInChange', !exactIn.value);\n emit('tokenInAmountChange', tokenOutAmountInput.value);\n emit('tokenInAddressChange', tokenOutAddressInput.value);\n emit('tokenOutAmountChange', tokenInAmountInput.value);\n emit('tokenOutAddressChange', tokenInAddressInput.value);\n }\n\n function handleSelectToken(address: string): void {\n if (modalSelectTokenType.value === 'input') {\n if (address === tokenOutAddressInput.value) {\n handleSwitchTokens();\n return;\n } else emit('tokenInAddressChange', address);\n } else {\n if (address === tokenInAddressInput.value) {\n handleSwitchTokens();\n return;\n } else emit('tokenOutAddressChange', address);\n }\n injectTokens([address]);\n }\n\n const rateMessage = computed(() => {\n const tokenIn = tokens.value[tokenInAddressInput.value];\n const tokenOut = tokens.value[tokenOutAddressInput.value];\n if (!tokenIn || !tokenOut) {\n return '';\n }\n const tokenInAmount = parseFloat(tokenInAmountInput.value);\n const tokenOutAmount = parseFloat(tokenOutAmountInput.value);\n if (!tokenInAmount || !tokenOutAmount) {\n return '';\n }\n if (isInRate.value) {\n const rate = tokenOutAmount / tokenInAmount;\n const message = `1 ${tokenIn.symbol} = ${fNum(rate, 'token')} ${\n tokenOut.symbol\n }`;\n return message;\n } else {\n const rate = tokenInAmount / tokenOutAmount;\n const message = `1 ${tokenOut.symbol} = ${fNum(rate, 'token')} ${\n tokenIn.symbol\n }`;\n return message;\n }\n });\n\n function toggleRate(): void {\n isInRate.value = !isInRate.value;\n }\n\n function openModalSelectToken(type: string): void {\n modalSelectTokenIsOpen.value = true;\n modalSelectTokenType.value = type;\n }\n\n const balanceLabel = computed(\n () => balances.value[tokenInAddressInput.value]\n );\n\n const tokenInIsLbpToken = computed(\n () =>\n props.lbpTokenAddress.toLowerCase() ===\n tokenInAddressInput.value.toLowerCase()\n );\n\n const tokenOutIsLbpToken = computed(\n () =>\n props.lbpTokenAddress.toLowerCase() ===\n tokenOutAddressInput.value.toLowerCase()\n );\n\n return {\n fNum,\n handleMax,\n balanceLabel,\n handleInAmountChange,\n handleOutAmountChange,\n handleSwitchTokens,\n rateMessage,\n toggleRate,\n tokenInValue,\n tokenInSymbol,\n tokenOutValue,\n tokenOutSymbol,\n modalSelectTokenIsOpen,\n openModalSelectToken,\n handleSelectToken,\n tokenInDecimals,\n tokenOutDecimals,\n tokenInIsLbpToken,\n tokenOutIsLbpToken\n };\n }\n});\n","import { render } from \"./LBPTradePair.vue?vue&type=template&id=5662d53e&ts=true\"\nimport script from \"./LBPTradePair.vue?vue&type=script&lang=ts\"\nexport * from \"./LBPTradePair.vue?vue&type=script&lang=ts\"\n\nimport \"./LBPTradePair.vue?vue&type=style&index=0&id=5662d53e&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { isRequired } from '@/lib/utils/validations';\nimport { computed, defineComponent, ref, watch } from 'vue';\nimport { useStore } from 'vuex';\n\nimport useTokenApproval from '@/composables/trade/useTokenApproval';\nimport useValidation, {\n TradeValidation\n} from '@/composables/trade/useValidation';\nimport useSor from '@/composables/trade/useSor';\n\nimport SuccessOverlay from '@/components/cards/SuccessOverlay.vue';\nimport TradePreviewModal from '@/components/modals/TradePreviewModal.vue';\nimport TradeRoute from '@/components/cards/TradeCard/TradeRoute.vue';\nimport TradeSettingsPopover, {\n TradeSettingsContext\n} from '@/components/popovers/TradeSettingsPopover.vue';\nimport { useI18n } from 'vue-i18n';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useBreakpoints from '@/composables/useBreakpoints';\nimport useTokens from '@/composables/useTokens';\nimport useDarkMode from '@/composables/useDarkMode';\nimport { configService } from '@/services/config/config.service';\n\nimport { getWrapAction, WrapType } from '@/lib/utils/balancer/wrapper';\nimport LbpTradePair from '@/components/cards/LBPTradeCard/LBPTradePair.vue';\n\nconst { nativeAsset } = configService.network;\n\nexport default defineComponent({\n components: {\n SuccessOverlay,\n LbpTradePair,\n TradePreviewModal,\n TradeRoute,\n TradeSettingsPopover\n },\n\n emits: ['onTx'],\n\n props: {\n usdcAddress: { type: String, required: true },\n lbpTokenName: { type: String, required: true },\n lbpTokenAddress: { type: String, required: true },\n swapEnabled: { type: Boolean }\n },\n\n setup(props, { emit }) {\n const highPiAccepted = ref(false);\n const store = useStore();\n const { explorerLinks } = useWeb3();\n const { t } = useI18n();\n const { bp } = useBreakpoints();\n\n const { tokens } = useTokens();\n const { userNetworkConfig } = useWeb3();\n const { darkMode } = useDarkMode();\n\n const exactIn = ref(true);\n const tokenInAddress = ref('');\n const tokenInAmount = ref('');\n const tokenOutAddress = ref('');\n const tokenOutAmount = ref('');\n const tradeSuccess = ref(false);\n const txHash = ref('');\n const modalTradePreviewIsOpen = ref(false);\n\n const slippageBufferRate = computed(() =>\n parseFloat(store.state.app.slippage)\n );\n\n const tokenIn = computed(() => tokens.value[tokenInAddress.value]);\n\n const tokenOut = computed(() => tokens.value[tokenOutAddress.value]);\n\n const liquiditySelection = computed(() => store.state.app.tradeLiquidity);\n\n const tradeCardShadow = computed(() => {\n switch (bp.value) {\n case 'xs':\n return 'none';\n case 'sm':\n return 'lg';\n default:\n return 'xl';\n }\n });\n\n const wrapType = computed(() => {\n return getWrapAction(tokenInAddress.value, tokenOutAddress.value);\n });\n const isWrap = computed(() => wrapType.value === WrapType.Wrap);\n const isUnwrap = computed(() => wrapType.value === WrapType.Unwrap);\n\n const isHighPriceImpact = computed(() => {\n return priceImpact.value >= 0.05 && !highPiAccepted.value;\n });\n\n const tradeDisabled = computed(() => {\n if (errorMessage.value !== TradeValidation.VALID) return true;\n if (isHighPriceImpact.value) return true;\n return false;\n });\n\n // COMPOSABLES\n const { isLoading: isLoadingApprovals } = useTokenApproval(\n tokenInAddress,\n tokenInAmount,\n tokens\n );\n const {\n trading,\n trade,\n initSor,\n handleAmountChange,\n priceImpact,\n sorReturn,\n latestTxHash,\n latestTx,\n pools,\n fetchPools,\n poolsLoading,\n slippageError\n } = useSor({\n exactIn,\n tokenInAddressInput: tokenInAddress,\n tokenInAmountInput: tokenInAmount,\n tokenOutAddressInput: tokenOutAddress,\n tokenOutAmountInput: tokenOutAmount,\n tokens,\n wrapType,\n tokenIn,\n tokenOut,\n slippageBufferRate\n });\n const { errorMessage } = useValidation(\n tokenInAddress,\n tokenInAmount,\n tokenOutAddress,\n tokenOutAmount\n );\n\n const title = computed(() => {\n if (isWrap.value) return t('wrap');\n if (isUnwrap.value) return t('unwrap');\n return t('trade');\n });\n\n const error = computed(() => {\n console.log('swap enabled', props.swapEnabled);\n if (props.swapEnabled === false) {\n return {\n header: 'Swapping disabled',\n body: 'Swapping is disabled for this Event.'\n };\n }\n\n if (isHighPriceImpact.value) {\n return {\n header: t('highPriceImpact'),\n body: t('highPriceImpactDetailed'),\n label: t('accept')\n };\n }\n switch (errorMessage.value) {\n case TradeValidation.NO_NATIVE_ASSET:\n return {\n header: t('noNativeAsset', [nativeAsset.symbol]),\n body: t('noNativeAssetDetailed', [\n nativeAsset.symbol,\n configService.network.chainName\n ])\n };\n case TradeValidation.NO_BALANCE:\n return {\n header: t('insufficientBalance'),\n body: t('insufficientBalanceDetailed')\n };\n case TradeValidation.NO_LIQUIDITY:\n return {\n header: t('insufficientLiquidity'),\n body: t('insufficientLiquidityDetailed')\n };\n default:\n return undefined;\n }\n });\n\n function handleErrorButtonClick() {\n if (isHighPriceImpact.value) {\n highPiAccepted.value = true;\n }\n }\n\n async function populateInitialTokens(): Promise {\n tokenInAddress.value = props.usdcAddress;\n tokenOutAddress.value = props.lbpTokenAddress;\n }\n\n function showTradePreviewModal() {\n slippageError.value = false;\n modalTradePreviewIsOpen.value = true;\n }\n\n watch(userNetworkConfig, async () => {\n await initSor();\n await handleAmountChange();\n });\n\n watch(tokenInAddress, () => {\n store.commit('trade/setInputAsset', tokenInAddress.value);\n handleAmountChange();\n });\n\n watch(tokenOutAddress, () => {\n store.commit('trade/setOutputAsset', tokenOutAddress.value);\n handleAmountChange();\n });\n\n watch(liquiditySelection, () => {\n // When the liquidity type is changed we need to update the trade to use that selection\n handleAmountChange();\n });\n\n watch(latestTxHash, () => {\n // Refresh SOR pools\n fetchPools();\n txHash.value = latestTxHash.value;\n tradeSuccess.value = true;\n modalTradePreviewIsOpen.value = false;\n\n emit('onTx', latestTx.value);\n });\n\n populateInitialTokens();\n\n return {\n highPiAccepted,\n title,\n error,\n handleErrorButtonClick,\n tokenInAddress,\n tokenInAmount,\n tokenOutAddress,\n tokenOutAmount,\n exactIn,\n handleAmountChange,\n errorMessage,\n sorReturn,\n pools,\n trading,\n trade,\n txHash,\n modalTradePreviewIsOpen,\n tradeSuccess,\n priceImpact,\n isRequired,\n tradeDisabled,\n TradeSettingsContext,\n poolsLoading,\n showTradePreviewModal,\n isLoadingApprovals,\n bp,\n darkMode,\n tradeCardShadow,\n explorer: explorerLinks,\n slippageError\n };\n }\n});\n","import { render } from \"./LBPTradeCard.vue?vue&type=template&id=d82bfd0c&ts=true\"\nimport script from \"./LBPTradeCard.vue?vue&type=script&lang=ts\"\nexport * from \"./LBPTradeCard.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createVNode(\"h4\", { class: \"px-4 lg:px-0 mb-2\" }, \"Transactions\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalTable = _resolveComponent(\"BalTable\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _hoisted_1,\n _createVNode(_component_BalCard, {\n shadow: \"lg\",\n class: \"mt-4\",\n square: _ctx.upToLargeBreakpoint,\n noBorder: _ctx.upToLargeBreakpoint,\n noPad: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalTable, {\n columns: _ctx.columns,\n data: _ctx.data,\n \"is-loading\": _ctx.isLoading,\n \"skeleton-class\": \"h-64\",\n sticky: \"both\",\n square: _ctx.upToLargeBreakpoint,\n onLoadMore: _ctx.loadMoreSwaps,\n isSortable: false,\n \"is-paginated\": _ctx.hasNextPage,\n isLoadingMore: _ctx.isLoadingMore\n }, null, 8, [\"columns\", \"data\", \"is-loading\", \"square\", \"onLoadMore\", \"is-paginated\", \"isLoadingMore\"])\n ]),\n _: 1\n }, 8, [\"square\", \"noBorder\"])\n ], 64))\n}","import { computed, reactive, Ref } from 'vue';\nimport { useInfiniteQuery } from 'vue-query';\nimport { UseInfiniteQueryOptions } from 'react-query/types';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { balancerSubgraphService } from '@/services/balancer/subgraph/balancer-subgraph.service';\nimport { SubgraphSwap } from '@/services/balancer/subgraph/types';\nimport useApp from '../useApp';\n\ntype SwapsQueryResponse = {\n swaps: SubgraphSwap[];\n skip?: number;\n};\n\ntype FilterOptions = {\n poolIds?: Ref;\n pageSize?: number;\n};\n\nconst PAGE_SIZE = 20;\n\nexport default function useSwapsQuery(\n options: UseInfiniteQueryOptions = {},\n filterOptions?: FilterOptions\n) {\n // COMPOSABLES\n const { appLoading } = useApp();\n\n // DATA\n const queryKey = QUERY_KEYS.Swaps.Current(filterOptions?.poolIds);\n\n // COMPUTED\n const enabled = computed(() => !appLoading.value);\n\n // METHODS\n const queryFn = async ({ pageParam = 0 }) => {\n const queryArgs: any = {\n first: filterOptions?.pageSize || PAGE_SIZE,\n skip: pageParam,\n where: {\n tokenAmountIn_gt: 0.01\n },\n orderBy: 'timestamp',\n orderDirection: 'desc'\n };\n\n if (filterOptions?.poolIds?.value.length) {\n queryArgs.where.poolId_in = filterOptions.poolIds.value;\n }\n\n const swaps = await balancerSubgraphService.swaps.get(queryArgs);\n\n return {\n swaps,\n skip: swaps.length >= PAGE_SIZE ? pageParam + PAGE_SIZE : undefined\n };\n };\n\n const queryOptions = reactive({\n enabled,\n getNextPageParam: (lastPage: SwapsQueryResponse) => lastPage.skip,\n ...options\n });\n\n return useInfiniteQuery(queryKey, queryFn, queryOptions);\n}\n","\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { SubgraphSwap } from '@/services/balancer/subgraph/types';\nimport { getAddress } from '@ethersproject/address';\nimport useNumbers from '@/composables/useNumbers';\nimport { ColumnDefinition } from '@/components/_global/BalTable/BalTable.vue';\nimport useDarkMode from '@/composables/useDarkMode';\nimport useBreakpoints from '@/composables/useBreakpoints';\nimport { isStableLike } from '@/composables/usePool';\nimport useTokens from '@/composables/useTokens';\nimport { calculateRewardsPerDay } from '@/lib/utils/farmHelper';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { format } from 'date-fns';\nimport useSwapsQuery from '@/composables/queries/useSwapsQuery';\nimport { flatten, orderBy } from 'lodash';\nimport numeral from 'numeral';\n\nexport default defineComponent({\n components: {\n //LiquidityMiningTooltip,\n },\n\n props: {\n lbpTokenName: { type: String, required: true },\n lbpTokenAddress: { type: String, required: true },\n lbpPoolId: { type: String, required: true },\n loading: { type: Boolean, default: false },\n loadMore: {\n type: Function as PropType<() => void>\n }\n },\n\n setup(props) {\n const { fNum } = useNumbers();\n const router = useRouter();\n const { darkMode } = useDarkMode();\n const { upToLargeBreakpoint } = useBreakpoints();\n const { tokens, priceFor } = useTokens();\n const { isWalletReady } = useWeb3();\n\n const swapsQuery = useSwapsQuery(\n {},\n {\n poolIds: ref([\n '0x03c6b3f09d2504606936b1a4decefad204687890000200000000000000000015',\n '0xcde5a11a4acb4ee4c805352cec57e236bdbc3837000200000000000000000019'\n ])\n }\n );\n\n const swaps = computed(() =>\n swapsQuery.data.value\n ? orderBy(\n flatten(swapsQuery.data.value.pages.map(page => page.swaps)),\n 'timestamp',\n 'desc'\n )\n : []\n );\n\n function loadMoreSwaps() {\n swapsQuery.fetchNextPage.value();\n }\n\n const columns = ref[]>([\n {\n name: 'Time',\n id: 'timestamp',\n accessor: 'timestamp',\n sortKey: 'timestamp',\n width: 250\n },\n {\n name: 'Type',\n id: 'type',\n accessor: 'type',\n sortKey: 'type',\n width: 150\n },\n {\n name: 'Input',\n id: 'input',\n accessor: 'input',\n sortKey: 'input',\n width: 150\n },\n {\n name: 'Output',\n id: 'output',\n accessor: 'output',\n sortKey: 'output',\n width: 150\n },\n {\n name: 'BEETS Price',\n id: 'price',\n accessor: 'price',\n sortKey: 'price',\n width: 150\n },\n {\n name: 'Wallet',\n id: 'wallet',\n accessor: 'wallet',\n sortKey: 'wallet',\n width: 150\n }\n ]);\n\n const data = computed(() => {\n console.log('swap', swaps.value);\n return (swaps.value || []).map(swap => ({\n timestamp:\n format(swap.timestamp * 1000, 'MMM dd') +\n ' at ' +\n format(swap.timestamp * 1000, 'HH:mm'),\n type: swap.tokenOut === props.lbpTokenAddress ? 'Buy' : 'Sell',\n input: `${numeral(parseFloat(swap.tokenAmountIn)).format('0,0.[00]')} ${\n swap.tokenInSym\n }`,\n output: `${numeral(parseFloat(swap.tokenAmountOut)).format(\n '0,0.[00]'\n )} ${swap.tokenOutSym}`,\n price: `$${\n swap.tokenOut === props.lbpTokenAddress\n ? (\n (parseFloat(swap.tokenAmountIn) /\n parseFloat(swap.tokenAmountOut)) *\n priceFor(getAddress(swap.tokenIn))\n ).toFixed(4)\n : (\n (parseFloat(swap.tokenAmountOut) /\n parseFloat(swap.tokenAmountIn)) *\n priceFor(getAddress(swap.tokenOut))\n ).toFixed(4)\n }`,\n wallet: `${swap.userAddress.id.substr(\n 0,\n 6\n )}...${swap.userAddress.id.substr(-4)}`\n }));\n });\n\n return {\n // data\n columns,\n data,\n\n // computed\n darkMode,\n upToLargeBreakpoint,\n\n // methods\n getAddress,\n fNum,\n isStableLike,\n calculateRewardsPerDay,\n loadMoreSwaps,\n isLoading: swapsQuery.isLoading,\n isLoadingMore: swapsQuery.isFetchingNextPage,\n hasNextPage: swapsQuery.hasNextPage\n };\n }\n});\n","import { render } from \"./LBPTable.vue?vue&type=template&id=0b7c9292&ts=true\"\nimport script from \"./LBPTable.vue?vue&type=script&lang=ts\"\nexport * from \"./LBPTable.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { computed, reactive, Ref } from 'vue';\nimport { useQuery } from 'vue-query';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { balancerSubgraphService } from '@/services/balancer/subgraph/balancer-subgraph.service';\nimport { SubgraphTokenPrice } from '@/services/balancer/subgraph/types';\nimport useApp from '../useApp';\nimport { QueryObserverOptions } from 'react-query/core';\n\nconst PAGE_SIZE = 1000;\n\nexport default function useSubgraphTokenPricesQuery(\n poolId: Ref,\n asset: Ref,\n minTimestamp: Ref,\n options: QueryObserverOptions = {}\n) {\n // COMPOSABLES\n const { appLoading } = useApp();\n\n // DATA\n const queryKey = QUERY_KEYS.TokenPrices.Current(poolId, asset);\n\n // COMPUTED\n const enabled = computed(() => !appLoading.value);\n\n // METHODS\n const queryFn = async () => {\n let numPricesFromResponse = 0;\n let tokenPrices: SubgraphTokenPrice[] = [];\n let skip = 0;\n\n //ugly loop to make sure we get all of the prices\n do {\n const response = await balancerSubgraphService.tokenPrices.get({\n first: PAGE_SIZE,\n skip,\n where: {\n poolId: poolId.value,\n asset: asset.value,\n timestamp_gt: minTimestamp.value\n },\n orderBy: 'timestamp',\n orderDirection: 'asc'\n });\n\n tokenPrices = [...tokenPrices, ...response];\n numPricesFromResponse = response.length;\n skip += PAGE_SIZE;\n } while (numPricesFromResponse >= PAGE_SIZE);\n\n return tokenPrices;\n };\n\n const queryOptions = reactive({\n enabled,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","\nimport { computed, defineComponent, reactive, ref, watch } from 'vue';\nimport * as PoolPageComponents from '@/components/pages/pool';\nimport { useQueryClient } from 'vue-query';\nimport useNumbers from '@/composables/useNumbers';\nimport usePoolQuery from '@/composables/queries/usePoolQuery';\nimport { EXTERNAL_LINKS } from '@/constants/links';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useApp from '@/composables/useApp';\nimport BeetsLBPChart from '@/components/pages/lbp/BeetsLBPChart.vue';\nimport BeetsLBPStatCards from '@/components/pages/lbp/BeetsLBPStatCards.vue';\nimport LBPTradeCard from '@/components/cards/LBPTradeCard/LBPTradeCard.vue';\nimport LBPTable from '@/components/tables/LBPTable/LBPTable.vue';\nimport useSubgraphTokenPricesQuery from '@/composables/queries/useSubgraphTokenPricesQuery';\nimport {\n POOLS_ROOT_KEY,\n SWAPS_ROOT_KEY,\n TOKEN_PRICES_ROOT_KEY\n} from '@/constants/queryKeys';\nimport useTokenLists from '@/composables/useTokenLists';\nimport {\n format,\n isAfter,\n isBefore,\n parseISO,\n getUnixTime,\n subDays\n} from 'date-fns';\n\ninterface LbpPageData {\n refetchQueriesOnBlockNumber: number;\n}\n\nconst REFETCH_QUERIES_BLOCK_BUFFER = 3;\n\nexport default defineComponent({\n components: {\n ...PoolPageComponents,\n BeetsLBPChart,\n BeetsLBPStatCards,\n LBPTradeCard,\n LBPTable\n },\n\n setup() {\n /**\n * COMPOSABLES\n */\n const { appLoading } = useApp();\n const { fNum } = useNumbers();\n const { appNetworkConfig } = useWeb3();\n const queryClient = useQueryClient();\n const { blockNumber } = useWeb3();\n const { loadingTokenLists } = useTokenLists();\n const lbpConfig = appNetworkConfig.lbp;\n\n const isLbpOver = ref(isAfter(new Date(), parseISO(lbpConfig.endTime)));\n const isBeforeLbpStart = ref(\n isBefore(new Date(), parseISO(lbpConfig.startTime))\n );\n\n const poolQuery = usePoolQuery(lbpConfig.poolId);\n const loadingPool = computed(\n () =>\n poolQuery.isLoading.value ||\n poolQuery.isIdle.value ||\n poolQuery.error.value\n );\n const pool = computed(() => {\n return poolQuery.data.value;\n });\n const enabled = computed(() => !!pool.value?.id);\n const swapEnabled = computed(() => poolQuery.data.value?.swapEnabled);\n\n const tokenPricesQuery = useSubgraphTokenPricesQuery(\n ref(lbpConfig.poolId),\n ref(lbpConfig.tokenAddress.toLowerCase()),\n ref(`${getUnixTime(subDays(new Date(), 1))}`)\n );\n const tokenPrices = computed(() => tokenPricesQuery.data.value || []);\n const loadingTokenPrices = computed(\n () =>\n tokenPricesQuery.isLoading.value ||\n tokenPricesQuery.isIdle.value ||\n tokenPricesQuery.error.value\n );\n\n const data = reactive({ refetchQueriesOnBlockNumber: 0 });\n\n const startDateTimeFormatted = computed(() =>\n format(parseISO(lbpConfig.startTime), 'MMM d, HH:mm')\n );\n\n /**\n * METHODS\n */\n function onNewTx(): void {\n isLbpOver.value = isAfter(new Date(), parseISO(lbpConfig.endTime));\n isBeforeLbpStart.value = isBefore(\n new Date(),\n parseISO(lbpConfig.startTime)\n );\n\n queryClient.invalidateQueries([POOLS_ROOT_KEY]);\n queryClient.invalidateQueries([\n POOLS_ROOT_KEY,\n 'current',\n lbpConfig.poolId\n ]);\n queryClient.invalidateQueries([SWAPS_ROOT_KEY]);\n queryClient.invalidateQueries([TOKEN_PRICES_ROOT_KEY]);\n data.refetchQueriesOnBlockNumber =\n blockNumber.value + REFETCH_QUERIES_BLOCK_BUFFER;\n }\n\n /**\n * WATCHERS\n */\n watch(blockNumber, () => {\n isLbpOver.value = isAfter(new Date(), parseISO(lbpConfig.endTime));\n isBeforeLbpStart.value = isBefore(\n new Date(),\n parseISO(lbpConfig.startTime)\n );\n\n if (data.refetchQueriesOnBlockNumber === blockNumber.value) {\n queryClient.invalidateQueries([POOLS_ROOT_KEY]);\n queryClient.invalidateQueries([\n POOLS_ROOT_KEY,\n 'current',\n lbpConfig.poolId\n ]);\n queryClient.invalidateQueries([SWAPS_ROOT_KEY]);\n queryClient.invalidateQueries([TOKEN_PRICES_ROOT_KEY]);\n } else {\n poolQuery.refetch.value();\n tokenPricesQuery.refetch.value();\n }\n });\n\n function handleLbpStateChange() {\n isLbpOver.value = isAfter(new Date(), parseISO(lbpConfig.endTime));\n isBeforeLbpStart.value = isBefore(\n new Date(),\n parseISO(lbpConfig.startTime)\n );\n }\n\n return {\n EXTERNAL_LINKS,\n appLoading,\n fNum,\n pool,\n enabled,\n lbpPoolId: lbpConfig.poolId,\n lbpTokenAddress: lbpConfig.tokenAddress.toLowerCase(),\n lbpTokenName: lbpConfig.tokenSymbol,\n lbpTokenStartingAmount: lbpConfig.startingAmount,\n lbpStartTime: lbpConfig.startTime,\n lbpEndTime: lbpConfig.endTime,\n lbpWeightStep: lbpConfig.weightStep,\n lbpTimeStep: lbpConfig.timeStep,\n usdcAddress: lbpConfig.usdcAddress.toLowerCase(),\n lbpTokenAddressFormatted: lbpConfig.tokenAddress,\n usdcAddressFormatted: lbpConfig.usdcAddress,\n loadingPool,\n tokenPrices,\n loadingTokenPrices,\n loadingTokenLists,\n swapEnabled,\n isLbpOver,\n onNewTx,\n isBeforeLbpStart,\n startDateTimeFormatted,\n handleLbpStateChange\n };\n }\n});\n","import { render } from \"./BeetsLBP.vue?vue&type=template&id=15e3de83&ts=true\"\nimport script from \"./BeetsLBP.vue?vue&type=script&lang=ts\"\nexport * from \"./BeetsLBP.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"lg:container lg:mx-auto pt-24 md:pt-16\" }\nconst _hoisted_2 = { class: \"px-4 lg:px-0\" }\nconst _hoisted_3 = /*#__PURE__*/_createVNode(\"h3\", { class: \"mb-2\" }, \"My Investments\", -1)\nconst _hoisted_4 = {\n key: 0,\n class: \"px-4 lg:px-0\"\n}\nconst _hoisted_5 = { class: \"text-black-600\" }\nconst _hoisted_6 = /*#__PURE__*/_createVNode(\"div\", { class: \"mb-16\" }, null, -1)\nconst _hoisted_7 = { class: \"px-4 lg:px-0\" }\nconst _hoisted_8 = /*#__PURE__*/_createVNode(\"h3\", { class: \"mb-3\" }, \"Beethoven-X Investment Pools\", -1)\nconst _hoisted_9 = { class: \"px-4 lg:px-0 mb-3 flex\" }\nconst _hoisted_10 = /*#__PURE__*/_createVNode(\"div\", { class: \"flex-1\" }, [\n /*#__PURE__*/_createVNode(\"h3\", null, \"Community Investment Pools\"),\n /*#__PURE__*/_createVNode(\"p\", null, \" Investment pools created by the community. Please DYOR before investing in any community pool. \")\n], -1)\nconst _hoisted_11 = {\n key: 1,\n class: \"px-4 lg:px-0\"\n}\nconst _hoisted_12 = { class: \"text-black-600\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAlert = _resolveComponent(\"BalAlert\")\n const _component_PoolsTable = _resolveComponent(\"PoolsTable\")\n const _component_BalLink = _resolveComponent(\"BalLink\")\n const _component_TokenSearchInput = _resolveComponent(\"TokenSearchInput\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n (_ctx.isWalletReady && _ctx.userPools && _ctx.userPools.length > 0)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n (_ctx.hasUnstakedBpt)\n ? (_openBlock(), _createBlock(_component_BalAlert, {\n key: 0,\n title: \"You have unstaked BPT in your wallet\",\n description: \"If you deposit your BPT into the farm, you will earn additional rewards paid out in BEETS.\",\n type: \"warning\",\n size: \"sm\",\n class: \"\"\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(_component_PoolsTable, {\n isLoading: _ctx.isLoadingUserPools,\n data: _ctx.userPools,\n noPoolsLabel: _ctx.$t('noInvestments'),\n showPoolShares: \"\",\n class: \"mb-8\"\n }, null, 8, [\"isLoading\", \"data\", \"noPoolsLabel\"]),\n (!_ctx.hideV1Links)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_4, [\n _createVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.$t('seeV1BalancerInvestments')), 1),\n _createVNode(_component_BalLink, {\n href: _ctx.EXTERNAL_LINKS.Balancer.PoolsV1Dashboard,\n external: \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('goToBalancerV1Site')), 1)\n ]),\n _: 1\n }, 8, [\"href\"])\n ]))\n : _createCommentVNode(\"\", true),\n _hoisted_6\n ], 64))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_7, [\n _hoisted_8,\n _createVNode(_component_TokenSearchInput, {\n modelValue: _ctx.selectedTokens,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => (_ctx.selectedTokens = $event)),\n loading: _ctx.isLoadingPools,\n onAdd: _ctx.addSelectedToken,\n onRemove: _ctx.removeSelectedToken\n }, null, 8, [\"modelValue\", \"loading\", \"onAdd\", \"onRemove\"])\n ]),\n _createVNode(_component_PoolsTable, {\n isLoading: _ctx.isLoadingPools,\n data: _ctx.filteredPools,\n noPoolsLabel: _ctx.$t('noPoolsFound'),\n isPaginated: _ctx.poolsHasNextPage,\n isLoadingMore: _ctx.poolsIsFetchingNextPage,\n onLoadMore: _ctx.loadMorePools,\n class: \"mb-16\"\n }, null, 8, [\"isLoading\", \"data\", \"noPoolsLabel\", \"isPaginated\", \"isLoadingMore\", \"onLoadMore\"]),\n _createVNode(\"div\", _hoisted_9, [\n _hoisted_10,\n _createVNode(_component_BalBtn, {\n label: \"Compose a pool\",\n onClick: _ctx.goToPoolCreate\n }, null, 8, [\"onClick\"])\n ]),\n _createVNode(_component_PoolsTable, {\n isLoading: _ctx.isLoadingPools,\n data: _ctx.communityPools,\n noPoolsLabel: _ctx.$t('noPoolsFound'),\n isPaginated: _ctx.poolsHasNextPage,\n isLoadingMore: _ctx.poolsIsFetchingNextPage,\n onLoadMore: _ctx.loadMorePools,\n class: \"mb-8\"\n }, null, 8, [\"isLoading\", \"data\", \"noPoolsLabel\", \"isPaginated\", \"isLoadingMore\", \"onLoadMore\"]),\n (!_ctx.hideV1Links)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_11, [\n _createVNode(\"div\", _hoisted_12, _toDisplayString(_ctx.$t('tableShowsBalancerV2Pools')), 1),\n _createVNode(_component_BalLink, {\n href: _ctx.EXTERNAL_LINKS.Balancer.PoolsV1Explore,\n external: \"\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('exploreBalancerV1Pools')), 1)\n ]),\n _: 1\n }, 8, [\"href\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","import { resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Teleport as _Teleport } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center flex-wrap\" }\nconst _hoisted_2 = { class: \"flex items-center flex-wrap\" }\nconst _hoisted_3 = { class: \"ml-2\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"text-gray-400 overflow-x-auto\"\n}\nconst _hoisted_5 = { class: \"mr-2\" }\nconst _hoisted_6 = {\n key: 1,\n class: \"text-gray-400 flex flex-wrap py-3\"\n}\nconst _hoisted_7 = { class: \"mr-2\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_BalChip = _resolveComponent(\"BalChip\")\n const _component_SelectTokenModal = _resolveComponent(\"SelectTokenModal\")\n\n return (_openBlock(), _createBlock(\"div\", null, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(_component_BalBtn, {\n color: \"white\",\n size: \"sm\",\n onClick: _ctx.onClick,\n class: \"mr-4\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"search\",\n size: \"sm\",\n class: \"mr-2\"\n }),\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t('filterByToken')), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"]),\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.modelValue, (token) => {\n return (_openBlock(), _createBlock(_component_BalChip, {\n class: \"mr-2\",\n key: token,\n color: \"white\",\n iconSize: \"sm\",\n closeable: true,\n onClosed: ($event: any) => (_ctx.$emit('remove', token))\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalAsset, {\n address: token,\n size: 20,\n class: \"flex-auto\"\n }, null, 8, [\"address\"]),\n _createVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.tokens[token]?.symbol), 1)\n ]),\n _: 2\n }, 1032, [\"onClosed\"]))\n }), 128))\n ]),\n (_ctx.account && !_ctx.dynamicDataLoading && !_ctx.hasNoBalances)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_4, [\n _createVNode(\"span\", _hoisted_5, _toDisplayString(_ctx.$t('inYourWallet')), 1),\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.sortedBalances, (token) => {\n return (_openBlock(), _createBlock(\"span\", {\n key: `wallet-${token.symbol}`,\n class: \"mr-6 cursor-pointer hover:text-green-500\",\n onClick: ($event: any) => (_ctx.addToken(token.address))\n }, _toDisplayString(token?.symbol), 9, [\"onClick\"]))\n }), 128))\n ]))\n : (_ctx.whiteListedTokens.length > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_6, [\n _createVNode(\"span\", _hoisted_7, _toDisplayString(_ctx.$t('popularBases')), 1),\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.whiteListedTokens, (token) => {\n return (_openBlock(), _createBlock(\"span\", {\n key: `popular-${token.symbol}`,\n class: \"mr-3 md:mr-4 cursor-pointer hover:text-gray-700 dark:hover:text-white transition-colors\",\n onClick: ($event: any) => (_ctx.addToken(token.address))\n }, _toDisplayString(token?.symbol), 9, [\"onClick\"]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (_openBlock(), _createBlock(_Teleport, { to: \"#modal\" }, [\n (_ctx.selectTokenModal)\n ? (_openBlock(), _createBlock(_component_SelectTokenModal, {\n key: 0,\n \"excluded-tokens\": _ctx.modelValue,\n onClose: _cache[1] || (_cache[1] = ($event: any) => (_ctx.selectTokenModal = false)),\n onSelect: _ctx.addToken\n }, null, 8, [\"excluded-tokens\", \"onSelect\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ]))\n}","\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport SelectTokenModal from '@/components/modals/SelectTokenModal/SelectTokenModal.vue';\nimport { pick, take } from 'lodash';\nimport { NATIVE_ASSET_ADDRESS, TOKENS } from '@/constants/tokens';\nimport { getAddress } from '@ethersproject/address';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport { TokenInfo } from '@/types/TokenList';\n\nexport default defineComponent({\n name: 'TokenSearchInput',\n\n components: {\n SelectTokenModal\n },\n\n emits: ['add', 'remove'],\n\n props: {\n modelValue: { type: Array as PropType, default: () => [] },\n loading: { type: Boolean, default: true }\n },\n\n setup(props, { emit }) {\n /**\n * STATE\n */\n const selectTokenModal = ref(false);\n\n /**\n * COMPOSABLES\n */\n const { tokens, balances, dynamicDataLoading } = useTokens();\n const { account, appNetworkConfig } = useWeb3();\n\n /**\n * COMPUTED\n */\n // sorted by biggest bag balance, limited to biggest 5\n const sortedBalances = computed(() => {\n const addressesWithBalance = Object.entries(balances.value)\n .filter(balance => balance[1] !== '0.0' && balance[1] !== '0')\n .map(balance => balance[0]);\n const tokensWithBalance = Object.values(\n pick(tokens.value, addressesWithBalance)\n ).filter(token => !isTokenSelected(token.address));\n\n return take(tokensWithBalance, 6);\n });\n\n const hasNoBalances = computed(() => !sortedBalances.value.length);\n\n const whiteListedTokens = computed(() =>\n Object.values(tokens.value)\n .filter(token => TOKENS.Popular.Symbols.includes(token.symbol))\n .filter(token => !isTokenSelected(token.address))\n );\n\n function isTokenSelected(token: string) {\n const eth = TOKENS.AddressMap[appNetworkConfig.key].ETH;\n const weth = TOKENS.AddressMap[appNetworkConfig.key].WETH;\n\n if (token === eth && props.modelValue.includes(weth)) {\n return true;\n }\n\n return props.modelValue.includes(token);\n }\n\n /**\n * METHODS\n */\n function addToken(token: string) {\n let _token = token;\n // special case for ETH where we want it to filter as WETH regardless\n // as ETH is the native asset\n if (getAddress(token) === NATIVE_ASSET_ADDRESS) {\n _token = TOKENS.AddressMap[appNetworkConfig.key].WETH;\n }\n // const newSelected = [...props.modelValue, _token];\n emit('add', _token);\n }\n\n function onClick() {\n if (!props.loading) selectTokenModal.value = true;\n }\n\n return {\n // state\n selectTokenModal,\n // computed\n tokens,\n dynamicDataLoading,\n balances,\n sortedBalances,\n account,\n hasNoBalances,\n whiteListedTokens,\n // methods\n addToken,\n onClick\n };\n }\n});\n","import { render } from \"./TokenSearchInput.vue?vue&type=template&id=27a006ee&ts=true\"\nimport script from \"./TokenSearchInput.vue?vue&type=script&lang=ts\"\nexport * from \"./TokenSearchInput.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center\" }\nconst _hoisted_2 = { class: \"relative\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"rounded-br-xl h-4 w-4 flex bg-yellow-500 absolute top-0 left-0 bg-opacity-80\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"px-6 py-4 relative\"\n}\nconst _hoisted_5 = {\n key: 0,\n class: \"px-6 py-4\"\n}\nconst _hoisted_6 = { class: \"mb-2 text-left\" }\nconst _hoisted_7 = { class: \"px-6 py-4 -mt-1 flex justify-end\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAssetSet = _resolveComponent(\"BalAssetSet\")\n const _component_TokenPills = _resolveComponent(\"TokenPills\")\n const _component_LiquidityMiningTooltip = _resolveComponent(\"LiquidityMiningTooltip\")\n const _component_BalTable = _resolveComponent(\"BalTable\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n\n return (_openBlock(), _createBlock(_component_BalCard, {\n shadow: \"lg\",\n class: \"mt-4\",\n square: _ctx.upToLargeBreakpoint,\n noBorder: _ctx.upToLargeBreakpoint,\n noPad: \"\"\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalTable, {\n columns: _ctx.columns,\n data: _ctx.data,\n \"is-loading\": _ctx.isLoading,\n \"is-loading-more\": _ctx.isLoadingMore,\n \"skeleton-class\": \"h-64\",\n sticky: \"both\",\n square: _ctx.upToLargeBreakpoint,\n link: {\n to: 'pool',\n getParams: pool => ({ id: pool.id })\n },\n \"on-row-click\": _ctx.handleRowClick,\n \"is-paginated\": _ctx.isPaginated,\n onLoadMore: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('loadMore'))),\n \"initial-state\": {\n sortColumn: 'poolValue',\n sortDirection: 'desc'\n }\n }, {\n iconColumnHeader: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n (_ctx.darkMode)\n ? (_openBlock(), _createBlock(\"img\", {\n key: 0,\n src: require('@/assets/images/icons/tokens_white.svg')\n }, null, 8, [\"src\"]))\n : (_openBlock(), _createBlock(\"img\", {\n key: 1,\n src: require('@/assets/images/icons/tokens_black.svg')\n }, null, 8, [\"src\"]))\n ])\n ]),\n iconColumnCell: _withCtx((pool) => [\n _createVNode(\"div\", _hoisted_2, [\n (pool.farm && parseFloat(pool.shares) > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_3))\n : _createCommentVNode(\"\", true),\n (!_ctx.isLoading)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_4, [\n _createVNode(_component_BalAssetSet, {\n addresses: _ctx.orderedTokenAddressesFor(pool),\n width: 100\n }, null, 8, [\"addresses\"])\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n poolNameCell: _withCtx((pool) => [\n (!_ctx.isLoading)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_5, [\n _createVNode(\"h5\", _hoisted_6, _toDisplayString(pool.name), 1),\n _createVNode(_component_TokenPills, {\n tokens: _ctx.orderedPoolTokens(pool),\n isStablePool: _ctx.isStableLike(pool)\n }, null, 8, [\"tokens\", \"isStablePool\"])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n aprCell: _withCtx((pool) => [\n _createVNode(\"div\", _hoisted_7, [\n _createTextVNode(_toDisplayString(Number(pool.dynamic.apr.pool) > 10000\n ? '-'\n : _ctx.fNum(pool.dynamic.apr.total, 'percent')) + \" \", 1),\n _createVNode(_component_LiquidityMiningTooltip, { pool: pool }, null, 8, [\"pool\"])\n ])\n ]),\n _: 1\n }, 8, [\"columns\", \"data\", \"is-loading\", \"is-loading-more\", \"square\", \"link\", \"on-row-click\", \"is-paginated\"])\n ]),\n _: 1\n }, 8, [\"square\", \"noBorder\"]))\n}","\nimport { defineComponent, ref } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\n\nimport {\n DecoratedPoolWithShares,\n PoolToken\n} from '@/services/balancer/subgraph/types';\n\nimport { getAddress } from '@ethersproject/address';\n\nimport useNumbers from '@/composables/useNumbers';\nimport useFathom from '@/composables/useFathom';\n\nimport LiquidityMiningTooltip from '@/components/tooltips/LiquidityMiningTooltip.vue';\nimport TokenPills from './TokenPills/TokenPills.vue';\n\nimport { ColumnDefinition } from '@/components/_global/BalTable/BalTable.vue';\nimport useDarkMode from '@/composables/useDarkMode';\nimport useBreakpoints from '@/composables/useBreakpoints';\nimport { isStableLike } from '@/composables/usePool';\n\nexport default defineComponent({\n components: {\n LiquidityMiningTooltip,\n TokenPills\n },\n\n emits: ['loadMore'],\n\n props: {\n data: {\n type: Array\n },\n isLoading: {\n type: Boolean\n },\n isLoadingMore: {\n type: Boolean,\n default: false\n },\n showPoolShares: {\n type: Boolean,\n default: false\n },\n noPoolsLabel: {\n type: String,\n default: 'No pools'\n },\n isPaginated: {\n type: Boolean,\n default: false\n }\n },\n\n setup(props) {\n // COMPOSABLES\n const { fNum } = useNumbers();\n const router = useRouter();\n const { t } = useI18n();\n const { trackGoal, Goals } = useFathom();\n const { darkMode } = useDarkMode();\n const { upToLargeBreakpoint } = useBreakpoints();\n\n // DATA\n const columns = ref[]>([\n {\n name: 'Icons',\n id: 'icons',\n accessor: 'uri',\n Header: 'iconColumnHeader',\n Cell: 'iconColumnCell',\n width: 125,\n noGrow: true\n },\n {\n name: 'Pool',\n id: 'poolName',\n accessor: 'name',\n //Cell: 'poolNameCell',\n width: 350\n },\n {\n name: t('myBalance'),\n accessor: pool =>\n fNum(\n parseFloat(pool.shares || '0') + (pool.farm?.stake || 0),\n 'usd',\n { forcePreset: true }\n ),\n align: 'right',\n id: 'myBalance',\n hidden: !props.showPoolShares,\n sortKey: pool => Number(pool.shares || 0) + (pool.farm?.stake || 0),\n width: 150\n },\n {\n name: t('poolValue'),\n accessor: pool => fNum(pool.totalLiquidity, 'usd'),\n align: 'right',\n id: 'poolValue',\n sortKey: pool => {\n const apr = Number(pool.totalLiquidity);\n if (apr === Infinity || isNaN(apr)) return 0;\n return apr;\n },\n width: 150\n },\n {\n name: t('volume24h', [t('hourAbbrev')]),\n accessor: pool => fNum(pool.dynamic.volume, 'usd'),\n align: 'right',\n id: 'poolVolume',\n sortKey: pool => {\n const apr = Number(pool.dynamic.volume);\n if (apr === Infinity || isNaN(apr)) return 0;\n return apr;\n },\n width: 175\n },\n {\n name: t('apr'),\n Cell: 'aprCell',\n accessor: pool => pool.dynamic.apr.total,\n align: 'right',\n id: 'poolApr',\n sortKey: pool => {\n const apr = Number(pool.dynamic.apr.total);\n if (apr === Infinity || isNaN(apr)) return 0;\n return apr;\n },\n width: 150\n }\n ]);\n\n // METHODS\n function orderedTokenAddressesFor(pool: DecoratedPoolWithShares) {\n const sortedTokens = orderedPoolTokens(pool);\n return sortedTokens.map(token => getAddress(token.address));\n }\n\n function orderedPoolTokens(pool: DecoratedPoolWithShares): PoolToken[] {\n if (isStableLike(pool)) return pool.tokens;\n\n const sortedTokens = pool.tokens.slice();\n sortedTokens.sort((a, b) => parseFloat(b.weight) - parseFloat(a.weight));\n return sortedTokens;\n }\n\n function handleRowClick(pool: DecoratedPoolWithShares) {\n trackGoal(Goals.ClickPoolsTableRow);\n router.push({ name: 'pool', params: { id: pool.id } });\n }\n\n return {\n // data\n columns,\n\n // computed\n darkMode,\n upToLargeBreakpoint,\n\n // methods\n handleRowClick,\n getAddress,\n fNum,\n orderedTokenAddressesFor,\n orderedPoolTokens,\n isStableLike\n };\n }\n});\n","import { render } from \"./PoolsTable.vue?vue&type=template&id=87cd96f6&ts=true\"\nimport script from \"./PoolsTable.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolsTable.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { reactive } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { UseQueryOptions } from 'react-query/types';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { FETCH_ONCE_OPTIONS } from '@/constants/vue-query';\nimport {\n BeethovenxConfig,\n beethovenxService\n} from '@/services/beethovenx/beethovenx.service';\n\n/**\n * Fetch all token lists, should only happen once.\n */\nexport default function useBeethovenxConfigQuery(\n options: UseQueryOptions = {}\n) {\n const queryKey = reactive(QUERY_KEYS.Config.All);\n\n const queryFn = async () => {\n console.log('Fetching beethovenx config');\n return beethovenxService.getBeethovenxConfig();\n };\n\n const queryOptions = reactive({\n enabled: true,\n ...FETCH_ONCE_OPTIONS,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","import { computed } from 'vue';\nimport useBeethovenxConfigQuery from '@/composables/queries/useBeethovenxConfigQuery';\nimport { BeethovenxConfig } from '@/services/beethovenx/beethovenx.service';\n\nexport default function useBeethovenxConfig() {\n const beethovenxConfigQuery = useBeethovenxConfigQuery();\n\n const beethovenxConfigLoading = computed(\n () =>\n beethovenxConfigQuery.isLoading.value ||\n beethovenxConfigQuery.isIdle.value\n );\n\n const beethovenxConfig = computed(\n (): BeethovenxConfig =>\n beethovenxConfigQuery.data.value\n ? beethovenxConfigQuery.data.value\n : { incentivizedPools: [], blacklistedPools: [], pausedPools: [] }\n );\n\n return {\n beethovenxConfigLoading,\n beethovenxConfig\n };\n}\n","\nimport { computed, defineComponent } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { EXTERNAL_LINKS } from '@/constants/links';\nimport TokenSearchInput from '@/components/inputs/TokenSearchInput.vue';\nimport PoolsTable from '@/components/tables/PoolsTable/PoolsTable.vue';\nimport usePools from '@/composables/pools/usePools';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport usePoolFilters from '@/composables/pools/usePoolFilters';\nimport { masterChefContractsService } from '@/services/farm/master-chef-contracts.service';\nimport BalBtn from '@/components/_global/BalBtn/BalBtn.vue';\nimport BalAlert from '@/components/_global/BalAlert/BalAlert.vue';\nimport useBeethovenxConfig from '@/composables/useBeethovenxConfig';\n\nexport default defineComponent({\n components: {\n BalAlert,\n BalBtn,\n TokenSearchInput,\n PoolsTable\n },\n\n setup() {\n // COMPOSABLES\n const router = useRouter();\n const { isWalletReady, isV1Supported } = useWeb3();\n const { beethovenxConfig } = useBeethovenxConfig();\n const {\n selectedTokens,\n addSelectedToken,\n removeSelectedToken\n } = usePoolFilters();\n\n const {\n poolsWithFarms,\n onlyPoolsWithFarms,\n userPools,\n isLoadingPools,\n isLoadingUserPools,\n isLoadingFarms,\n loadMorePools,\n poolsHasNextPage,\n poolsIsFetchingNextPage\n } = usePools();\n\n //TODO: this will break down once pagination starts happening\n const communityPools = computed(() => {\n return poolsWithFarms.value?.filter(\n pool => !beethovenxConfig.value.incentivizedPools.includes(pool.id)\n );\n });\n\n // COMPUTED\n const filteredPools = computed(() => {\n return selectedTokens.value.length > 0\n ? poolsWithFarms.value?.filter(pool => {\n return (\n selectedTokens.value.every((selectedToken: string) =>\n pool.tokenAddresses.includes(selectedToken)\n ) && beethovenxConfig.value.incentivizedPools.includes(pool.id)\n );\n })\n : poolsWithFarms?.value.filter(pool =>\n beethovenxConfig.value.incentivizedPools.includes(pool.id)\n );\n });\n\n const hideV1Links = computed(() => !isV1Supported);\n\n const poolsWithUserInFarm = computed(() => {\n return onlyPoolsWithFarms.value.filter(pool => pool.farm.stake > 0);\n });\n\n const hasUnstakedBpt = computed(() =>\n userPools.value.find(pool => pool.farm && parseFloat(pool.shares) > 0)\n );\n\n masterChefContractsService.beethovenxToken.getCirculatingSupply();\n\n function goToPoolCreate() {\n router.push({ name: 'pool-create' });\n }\n\n return {\n // data\n filteredPools,\n poolsWithUserInFarm,\n userPools,\n isLoadingPools,\n isLoadingUserPools,\n isLoadingFarms,\n\n // computed\n isWalletReady,\n hideV1Links,\n poolsHasNextPage,\n poolsIsFetchingNextPage,\n selectedTokens,\n hasUnstakedBpt,\n\n //methods\n router,\n loadMorePools,\n addSelectedToken,\n removeSelectedToken,\n communityPools,\n goToPoolCreate,\n\n // constants\n EXTERNAL_LINKS\n };\n }\n});\n","import { render } from \"./Invest.vue?vue&type=template&id=72ec9976&ts=true\"\nimport script from \"./Invest.vue?vue&type=script&lang=ts\"\nexport * from \"./Invest.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createVNode as _createVNode, resolveComponent as _resolveComponent, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nimport _imports_0 from '@/assets/images/pool-composer.svg'\n\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-a92be1ae\")\n\n_pushScopeId(\"data-v-a92be1ae\")\nconst _hoisted_1 = { class: \"mt-6\" }\nconst _hoisted_2 = /*#__PURE__*/_createVNode(\"div\", { class: \"mb-8\" }, [\n /*#__PURE__*/_createVNode(\"img\", {\n src: _imports_0,\n class: \"-ml-4\"\n }),\n /*#__PURE__*/_createVNode(\"ul\", { class: \"list-disc list-inside ml-2\" }, [\n /*#__PURE__*/_createVNode(\"li\", null, \"An investment pool can be created with 2-8 tokens.\"),\n /*#__PURE__*/_createVNode(\"li\", null, \"The weights should add up to 100%.\"),\n /*#__PURE__*/_createVNode(\"li\", null, \" Initial balances should be in line with your weights or the pool will get drained. \")\n ])\n], -1)\nconst _hoisted_3 = /*#__PURE__*/_createVNode(\"div\", { class: \"font-medium mb-1\" }, \"Tokens\", -1)\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = { class: \"grid grid-cols-3 mt-4 items-center\" }\nconst _hoisted_6 = /*#__PURE__*/_createVNode(\"div\", null, null, -1)\nconst _hoisted_7 = { class: \"flex-1 flex justify-center\" }\nconst _hoisted_8 = { class: \"flex justify-end pt-1 pb-2\" }\nconst _hoisted_9 = {\n key: 1,\n class: \"w-full h-full absolute top-0 left-0\"\n}\nconst _hoisted_10 = /*#__PURE__*/_createVNode(\"div\", { class: \"bg-gray-850 w-full h-full absolute top-0 left-0 rounded-lg opacity-25\" }, null, -1)\nconst _hoisted_11 = /*#__PURE__*/_createVNode(\"div\", { class: \"text-white absolute left-4 bottom-4 text-yellow-500\" }, \" Editing is disabled during pool creation \", -1)\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_PoolCreateDefinitionFields = _resolveComponent(\"PoolCreateDefinitionFields\")\n const _component_PoolCreateTokenRow = _resolveComponent(\"PoolCreateTokenRow\")\n const _component_BalAlert = _resolveComponent(\"BalAlert\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_PoolCreateSuccessOverlay = _resolveComponent(\"PoolCreateSuccessOverlay\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n const _component_PoolCreateActions = _resolveComponent(\"PoolCreateActions\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _hoisted_2,\n _createVNode(_component_BalCard, { class: \"pt-2 relative\" }, {\n default: _withId(() => [\n _createVNode(_component_PoolCreateDefinitionFields, {\n \"pool-name\": _ctx.poolName,\n \"pool-symbol\": _ctx.poolSymbol,\n \"pool-owner\": _ctx.poolOwner,\n \"swap-fee-percentage\": _ctx.swapFeePercentage,\n onPoolNameChange: _ctx.handlePoolNameChange,\n onPoolSymbolChange: _ctx.handlePoolSymbolChange,\n onPoolOwnerChange: _ctx.handlePoolOwnerChange,\n onPoolSwapFeePercentageChange: _ctx.handleSwapFeePercentageChange,\n onIsInputValid: _ctx.handleIsInputValid\n }, null, 8, [\"pool-name\", \"pool-symbol\", \"pool-owner\", \"swap-fee-percentage\", \"onPoolNameChange\", \"onPoolSymbolChange\", \"onPoolOwnerChange\", \"onPoolSwapFeePercentageChange\", \"onIsInputValid\"]),\n _hoisted_3,\n (_ctx.tokenListsLoaded)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_4, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.poolTokens, (token, idx) => {\n return (_openBlock(), _createBlock(\"div\", {\n class: \"mb-3\",\n key: idx\n }, [\n _createVNode(_component_PoolCreateTokenRow, {\n \"token-address-input\": token.address,\n \"token-amount-input\": token.amount,\n \"token-weight-input\": token.weight,\n \"can-delete\": _ctx.poolTokens.length > 2,\n onTokenDelete: () => _ctx.deleteToken(idx),\n onTokenAddressChange: value => _ctx.tokenAddressChange(value, idx),\n onTokenAmountChange: value => _ctx.tokenAmountChange(value, idx),\n onTokenWeightChange: value => _ctx.tokenWeightChange(value, idx),\n onTokenApproved: _cache[1] || (_cache[1] = address => _ctx.handleTokenApproved(address))\n }, null, 8, [\"token-address-input\", \"token-amount-input\", \"token-weight-input\", \"can-delete\", \"onTokenDelete\", \"onTokenAddressChange\", \"onTokenAmountChange\", \"onTokenWeightChange\"])\n ]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(\"div\", null, [\n (_ctx.tokensError)\n ? (_openBlock(), _createBlock(_component_BalAlert, {\n key: 0,\n type: \"error\",\n class: \"pl-4 pr-6 py-1\",\n size: \"sm\",\n title: _ctx.tokensError.header,\n description: _ctx.tokensError.body,\n block: \"\"\n }, null, 8, [\"title\", \"description\"]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createVNode(\"div\", _hoisted_8, [\n _createVNode(_component_BalBtn, {\n color: \"green\",\n disabled: _ctx.poolTokens.length === 8,\n onClick: _ctx.addToken\n }, {\n default: _withId(() => [\n _createVNode(_component_BalIcon, { name: \"plus\" })\n ]),\n _: 1\n }, 8, [\"disabled\", \"onClick\"])\n ])\n ]),\n (_ctx.editingDisabled && !_ctx.poolCreateComplete)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_9, [\n _hoisted_10,\n _hoisted_11\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.poolCreateComplete)\n ? (_openBlock(), _createBlock(_component_PoolCreateSuccessOverlay, {\n key: 2,\n \"pool-id\": _ctx.poolId\n }, null, 8, [\"pool-id\"]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 1\n }),\n _createVNode(_component_PoolCreateActions, {\n \"pool-name\": _ctx.poolName,\n \"pool-symbol\": _ctx.poolSymbol,\n \"pool-owner\": _ctx.poolOwner,\n \"swap-fee-percentage\": _ctx.swapFeePercentage,\n \"can-create-pool\": _ctx.canCreatePool,\n \"pool-tokens\": _ctx.poolTokens,\n onCreatePoolTriggered: _ctx.handlePoolCreateTriggered,\n onCreatePoolError: _ctx.handlePoolCreateError,\n onCreatedPool: _ctx.handlePoolCreated,\n onVerifiedPool: _ctx.handlePoolVerified\n }, null, 8, [\"pool-name\", \"pool-symbol\", \"pool-owner\", \"swap-fee-percentage\", \"can-create-pool\", \"pool-tokens\", \"onCreatePoolTriggered\", \"onCreatePoolError\", \"onCreatedPool\", \"onVerifiedPool\"])\n ]))\n})","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, Teleport as _Teleport, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"border border-gray-700 rounded-lg\" }\nconst _hoisted_2 = { class: \"flex items-center h-full\" }\nconst _hoisted_3 = { class: \"flex flex-col ml-3 w-24 leading-none truncate\" }\nconst _hoisted_4 = { class: \"font-bold\" }\nconst _hoisted_5 = {\n key: 1,\n class: \"font-bold\"\n}\nconst _hoisted_6 = { class: \"w-24 border-l dark:border-gray-850 ml-4\" }\nconst _hoisted_7 = /*#__PURE__*/_createTextVNode(\"Weight (%)\")\nconst _hoisted_8 = { class: \"p-2 h-full flex items-center\" }\nconst _hoisted_9 = /*#__PURE__*/_createVNode(\"span\", null, \"Approve\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalTextInput = _resolveComponent(\"BalTextInput\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_SelectTokenModal = _resolveComponent(\"SelectTokenModal\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(_component_BalTextInput, {\n name: \"pool-token-amount\",\n \"model-value\": _ctx.tokenAmountInput,\n onInput: _cache[4] || (_cache[4] = value => _ctx.handleAmountChange(value)),\n type: \"number\",\n \"decimal-limit\": _ctx.tokenDecimals,\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"no-margin\": true\n }, {\n prepend: _withCtx(() => [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", {\n class: \"flex items-center w-32 h-full cursor-pointer group\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.openModalSelectToken('input')))\n }, [\n (_ctx.tokenAddressInput)\n ? (_openBlock(), _createBlock(_component_BalAsset, {\n key: 0,\n address: _ctx.tokenAddressInput,\n size: 28\n }, null, 8, [\"address\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_3, [\n (_ctx.tokenSymbol.length > 5)\n ? (_openBlock(), _createBlock(_component_BalTooltip, { key: 0 }, {\n activator: _withCtx(() => [\n _createVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.tokenSymbol), 1)\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", null, _toDisplayString(_ctx.tokenSymbol), 1)\n ]),\n _: 1\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_5, _toDisplayString(_ctx.tokenSymbol), 1))\n ]),\n _createVNode(_component_BalIcon, {\n name: 'chevron-down',\n size: 'sm',\n class: \"text-green-500\"\n })\n ]),\n _createVNode(\"div\", _hoisted_6, [\n _createVNode(_component_BalTextInput, {\n name: \"pool-token-weight\",\n \"model-value\": _ctx.tokenWeightInput,\n onInput: _cache[2] || (_cache[2] = value => _ctx.handleWeightChange(value)),\n type: \"number\",\n \"decimal-limit\": 4,\n min: \"0\",\n step: \"any\",\n placeholder: \"0\",\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"no-margin\": true\n }, {\n info: _withCtx(() => [\n _hoisted_7\n ]),\n _: 1\n }, 8, [\"model-value\"])\n ])\n ])\n ]),\n info: _withCtx(() => [\n _createVNode(\"div\", {\n class: \"cursor-pointer\",\n onClick: _cache[3] || (_cache[3] = \n//@ts-ignore\n(...args) => (_ctx.handleMax && _ctx.handleMax(...args)))\n }, _toDisplayString(_ctx.$t('balance')) + \": \" + _toDisplayString(_ctx.fNum(_ctx.balanceLabel, 'token')), 1)\n ]),\n append: _withCtx(() => [\n _createVNode(\"div\", _hoisted_8, [\n (!_ctx.isUnlockedV2)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 0,\n size: \"xs\",\n color: \"white\",\n class: \"mr-4 h-full\",\n onClick: _ctx.approveV2,\n loading: _ctx.approving,\n \"loading-label\": \"Approving...\"\n }, {\n default: _withCtx(() => [\n _hoisted_9\n ]),\n _: 1\n }, 8, [\"onClick\", \"loading\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_BalBtn, {\n size: \"xs\",\n color: \"white\",\n onClick: _ctx.handleTokenDelete,\n class: \"h-full\",\n disabled: !_ctx.canDelete\n }, {\n default: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"trash\",\n class: [_ctx.canDelete ? 'text-red-500' : 'text-gray-500']\n }, null, 8, [\"class\"])\n ]),\n _: 1\n }, 8, [\"onClick\", \"disabled\"])\n ])\n ]),\n _: 1\n }, 8, [\"model-value\", \"decimal-limit\"])\n ]),\n (_openBlock(), _createBlock(_Teleport, { to: \"#modal\" }, [\n (_ctx.modalSelectTokenIsOpen)\n ? (_openBlock(), _createBlock(_component_SelectTokenModal, {\n key: 0,\n excludedTokens: [_ctx.tokenAddressInput, _ctx.nativeAssetAddress],\n onClose: _cache[5] || (_cache[5] = ($event: any) => (_ctx.modalSelectTokenIsOpen = false)),\n onSelect: _ctx.handleSelectToken,\n \"include-ether\": \"\"\n }, null, 8, [\"excludedTokens\", \"onSelect\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ], 64))\n}","\nimport { computed, defineComponent, ref, toRefs, watch } from 'vue';\nimport { NATIVE_ASSET_ADDRESS } from '@/constants/tokens';\nimport useTokens from '@/composables/useTokens';\nimport useNumbers from '@/composables/useNumbers';\nimport SelectTokenModal from '@/components/modals/SelectTokenModal/SelectTokenModal.vue';\nimport BalIcon from '@/components/_global/BalIcon/BalIcon.vue';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokenApproval from '@/composables/trade/useTokenApproval';\n\nconst ETH_BUFFER = 0.1;\n\nexport default defineComponent({\n components: { BalIcon, SelectTokenModal },\n props: {\n tokenAmountInput: {\n type: String,\n required: true\n },\n tokenWeightInput: {\n type: String,\n required: true\n },\n tokenAddressInput: {\n type: String,\n required: true\n },\n canDelete: {\n type: Boolean,\n required: true\n }\n },\n emits: [\n 'tokenAddressChange',\n 'tokenAmountChange',\n 'tokenWeightChange',\n 'tokenDelete',\n 'tokenApproved'\n ],\n\n setup(props, { emit }) {\n const { tokens, balances, injectTokens } = useTokens();\n const { fNum, toFiat } = useNumbers();\n const { appNetworkConfig } = useWeb3();\n const { tokenAmountInput, tokenAddressInput } = toRefs(props);\n const {\n approving,\n approved,\n isUnlockedV2,\n approveV2,\n isLoading: isLoadingApprovals\n } = useTokenApproval(tokenAddressInput, tokenAmountInput, tokens);\n\n const tokenValue = computed(() =>\n toFiat(tokenAmountInput.value, tokenAddressInput.value)\n );\n\n const tokenSymbol = computed(() => {\n const token = tokens.value[tokenAddressInput.value];\n const symbol = token ? token.symbol : '';\n return symbol;\n });\n\n const tokenDecimals = computed(() => {\n const decimals = tokens.value[tokenAddressInput.value]\n ? tokens.value[tokenAddressInput.value].decimals\n : 18;\n return decimals;\n });\n\n const isInRate = ref(true);\n const modalSelectTokenType = ref('input');\n const modalSelectTokenIsOpen = ref(false);\n\n function handleMax(): void {\n const balance = balances.value[tokenAddressInput.value] || '0';\n const balanceNumber = parseFloat(balance);\n const maxAmount =\n tokenAddressInput.value !== NATIVE_ASSET_ADDRESS\n ? balance\n : balanceNumber > ETH_BUFFER\n ? (balanceNumber - ETH_BUFFER).toString()\n : '0';\n handleAmountChange(maxAmount);\n }\n\n function handleAmountChange(value: string): void {\n emit('tokenAmountChange', value);\n }\n\n function handleWeightChange(value: string): void {\n emit('tokenWeightChange', value);\n }\n\n function handleSelectToken(address: string): void {\n emit('tokenAddressChange', address);\n injectTokens([address]);\n }\n\n function handleTokenDelete(): void {\n emit('tokenDelete');\n }\n\n function toggleRate(): void {\n isInRate.value = !isInRate.value;\n }\n\n function openModalSelectToken(type: string): void {\n modalSelectTokenIsOpen.value = true;\n modalSelectTokenType.value = type;\n }\n\n const balanceLabel = computed(\n () => balances.value[tokenAddressInput.value]\n );\n\n watch(isUnlockedV2, newVal => {\n if (newVal) {\n emit('tokenApproved', props.tokenAddressInput);\n }\n });\n\n return {\n fNum,\n handleMax,\n balanceLabel,\n handleAmountChange,\n toggleRate,\n tokenValue,\n tokenSymbol,\n modalSelectTokenIsOpen,\n openModalSelectToken,\n handleSelectToken,\n handleWeightChange,\n handleTokenDelete,\n tokenDecimals,\n nativeAssetAddress: appNetworkConfig.nativeAsset.address,\n approved,\n approving,\n isLoadingApprovals,\n isUnlockedV2,\n approveV2\n };\n }\n});\n","import { render } from \"./PoolCreateTokenRow.vue?vue&type=template&id=34315cf2&ts=true\"\nimport script from \"./PoolCreateTokenRow.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolCreateTokenRow.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"grid grid-cols-1 md:grid-cols-2 gap-y-8 gap-x-4 mb-8\" }\nconst _hoisted_2 = { class: \"col\" }\nconst _hoisted_3 = /*#__PURE__*/_createVNode(\"div\", { class: \"font-medium mb-1\" }, \"Pool Name\", -1)\nconst _hoisted_4 = { class: \"border border-gray-700 rounded-lg\" }\nconst _hoisted_5 = { class: \"font-medium mb-1\" }\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\" Pool Symbol \")\nconst _hoisted_7 = { class: \"border border-gray-700 rounded-lg\" }\nconst _hoisted_8 = /*#__PURE__*/_createVNode(\"div\", { class: \"flex items-center h-full ml-2\" }, \" BPT- \", -1)\nconst _hoisted_9 = { class: \"grid grid-cols-1 md:grid-cols-2 gap-y-8 gap-x-4 mb-8\" }\nconst _hoisted_10 = { class: \"col\" }\nconst _hoisted_11 = { class: \"font-medium mb-1\" }\nconst _hoisted_12 = /*#__PURE__*/_createTextVNode(\" Pool Owner\")\nconst _hoisted_13 = { class: \"border border-gray-700 rounded-lg opacity-60\" }\nconst _hoisted_14 = { class: \"font-medium mb-1\" }\nconst _hoisted_15 = /*#__PURE__*/_createTextVNode(\" Swap Fee Percentage \")\nconst _hoisted_16 = { class: \"border border-gray-700 rounded-lg\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalTextInput = _resolveComponent(\"BalTextInput\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalTooltip = _resolveComponent(\"BalTooltip\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(_component_BalTextInput, {\n name: \"poo-name\",\n \"model-value\": _ctx.poolName,\n onInput: _cache[1] || (_cache[1] = value => _ctx.emit('poolNameChange', value)),\n type: \"text\",\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"no-margin\": true\n }, null, 8, [\"model-value\"])\n ])\n ]),\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createVNode(_component_BalTooltip, null, {\n activator: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"info\",\n size: \"sm\",\n class: \"ml-1 text-gray-400 -mb-px\"\n })\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", {\n innerHTML: _ctx.poolSymbolInfoText,\n class: \"w-52\"\n }, null, 8, [\"innerHTML\"])\n ]),\n _: 1\n })\n ]),\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(_component_BalTextInput, {\n name: \"pool-symbol\",\n \"model-value\": _ctx.poolSymbol,\n isValid: _ctx.poolSymbolValid,\n \"onUpdate:isValid\": _cache[2] || (_cache[2] = ($event: any) => (_ctx.poolSymbolValid = $event)),\n onInput: _cache[3] || (_cache[3] = value => _ctx.emit('poolSymbolChange', value)),\n type: \"text\",\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"no-margin\": true,\n rules: [_ctx.maxChar(7), _ctx.isSymbol()]\n }, {\n prepend: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }, 8, [\"model-value\", \"isValid\", \"rules\"])\n ])\n ])\n ]),\n _createVNode(\"div\", _hoisted_9, [\n _createVNode(\"div\", _hoisted_10, [\n _createVNode(\"div\", _hoisted_11, [\n _hoisted_12,\n _createVNode(_component_BalTooltip, null, {\n activator: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"info\",\n size: \"sm\",\n class: \"ml-1 text-gray-400 -mb-px\"\n })\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", {\n innerHTML: _ctx.poolOwnerInfoText,\n class: \"w-52\"\n }, null, 8, [\"innerHTML\"])\n ]),\n _: 1\n })\n ]),\n _createVNode(\"div\", _hoisted_13, [\n _createVNode(_component_BalTextInput, {\n name: \"pool-owner\",\n \"model-value\": _ctx.poolOwner,\n onInput: _cache[4] || (_cache[4] = value => _ctx.emit('poolOwnerChange', value)),\n type: \"text\",\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"no-margin\": true,\n rules: [_ctx.isValidAddress()],\n isValid: _ctx.poolOwnerValid,\n \"onUpdate:isValid\": _cache[5] || (_cache[5] = ($event: any) => (_ctx.poolOwnerValid = $event)),\n disabled: true\n }, null, 8, [\"model-value\", \"rules\", \"isValid\"])\n ])\n ]),\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_14, [\n _hoisted_15,\n _createVNode(_component_BalTooltip, null, {\n activator: _withCtx(() => [\n _createVNode(_component_BalIcon, {\n name: \"info\",\n size: \"sm\",\n class: \"ml-1 text-gray-400 -mb-px\"\n })\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", {\n innerHTML: _ctx.swapFeePercentageInfoText,\n class: \"w-52\"\n }, null, 8, [\"innerHTML\"])\n ]),\n _: 1\n })\n ]),\n _createVNode(\"div\", _hoisted_16, [\n _createVNode(_component_BalTextInput, {\n name: \"swap-fee-percentage\",\n \"model-value\": _ctx.swapFeePercentage,\n onInput: _cache[6] || (_cache[6] = value => _ctx.emit('poolSwapFeePercentageChange', value)),\n type: \"number\",\n \"validate-on\": \"input\",\n \"prepend-border\": \"\",\n \"no-margin\": true,\n rules: [_ctx.isGreaterThanOrEqualTo(0.0001), _ctx.isLessThanOrEqualTo(10)],\n isValid: _ctx.swapFeePercentageValid,\n \"onUpdate:isValid\": _cache[7] || (_cache[7] = ($event: any) => (_ctx.swapFeePercentageValid = $event))\n }, null, 8, [\"model-value\", \"rules\", \"isValid\"])\n ])\n ])\n ])\n ], 64))\n}","\nimport { defineComponent, ref, toRefs, watch } from 'vue';\nimport BalTextInput from '@/components/_global/BalTextInput/BalTextInput.vue';\nimport {\n isGreaterThanOrEqualTo,\n isLessThanOrEqualTo,\n isSymbol,\n isValidAddress,\n maxChar,\n minChar\n} from '@/lib/utils/validations';\n\nexport default defineComponent({\n components: {\n BalTextInput\n },\n props: {\n swapFeePercentage: {\n type: String,\n required: true\n },\n poolOwner: {\n type: String,\n required: true\n },\n poolSymbol: {\n type: String,\n required: true\n },\n poolName: {\n type: String,\n required: true\n }\n },\n emits: [\n 'poolNameChange',\n 'poolSymbolChange',\n 'poolOwnerChange',\n 'poolSwapFeePercentageChange',\n 'isInputValid'\n ],\n\n setup(props, { emit }) {\n const poolSymbolValid = ref(true);\n const poolOwnerValid = ref(true);\n const swapFeePercentageValid = ref(true);\n\n const { poolName, poolSymbol, swapFeePercentage } = toRefs(props);\n\n function handleIsValid() {\n const hasInput =\n props.swapFeePercentage !== '' &&\n props.poolOwner !== '' &&\n props.poolSymbol !== '' &&\n props.poolName !== '';\n\n const isValid =\n poolOwnerValid.value &&\n poolOwnerValid.value &&\n swapFeePercentageValid.value;\n\n emit('isInputValid', hasInput && isValid);\n }\n\n watch(poolSymbolValid, () => {\n handleIsValid();\n });\n\n watch(poolSymbol, () => {\n handleIsValid();\n });\n\n watch(poolOwnerValid, () => {\n handleIsValid();\n });\n\n watch(swapFeePercentageValid, () => {\n handleIsValid();\n });\n\n watch(poolName, () => {\n handleIsValid();\n });\n\n watch(swapFeePercentage, () => {\n handleIsValid();\n });\n\n return {\n emit,\n maxChar,\n minChar,\n isGreaterThanOrEqualTo,\n isLessThanOrEqualTo,\n isValidAddress,\n isSymbol,\n poolSymbolValid,\n poolOwnerValid,\n swapFeePercentageValid,\n poolSymbolInfoText:\n 'All LP tokens start with the BPT- prefix and Metamask limits token symbols to 11 characters. So, your symbol can be no longer than 7 characters.',\n swapFeePercentageInfoText:\n 'Ex: 0.25 = 0.25%. The swap fee percentage must be between 0.0001% and 10%',\n poolOwnerInfoText:\n 'The pool owner is a multisig controlled by Beethoven X. The only power the pool owner has is to change the swap fee percentage.'\n };\n }\n});\n","import { render } from \"./PoolCreateDefinitionFields.vue?vue&type=template&id=8fa4a128&ts=true\"\nimport script from \"./PoolCreateDefinitionFields.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolCreateDefinitionFields.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { PoolTokenInput } from '@/services/pool/creator/pool-creator.service';\nimport { sumBy, uniqBy } from 'lodash';\nimport { BalanceMap } from '@/services/token/concerns/balances.concern';\nimport { TokenInfoMap } from '@/types/TokenList';\nimport { parseUnits } from '@ethersproject/units';\n\nexport function getTokensErrorFromInputs(\n poolTokens: PoolTokenInput[],\n tokens: TokenInfoMap,\n balances: BalanceMap,\n approvedTokens: string[],\n approvalRequired: (tokenAddress: string, amount: string) => boolean\n) {\n const totalWeight = sumBy(poolTokens, token => parseFloat(token.weight));\n\n if (totalWeight < 99.99 || totalWeight > 100.01) {\n return {\n header: 'Weights must add up to approx 100%',\n body: 'Your token weights do no add up to 100%'\n };\n }\n\n for (const poolToken of poolTokens) {\n if (!poolToken.weight || parseFloat(poolToken.weight) === 0) {\n return {\n header: 'All tokens must have a weight',\n body: 'One or more of your tokens does not have a valid weight'\n };\n }\n\n if (!poolToken.amount || parseFloat(poolToken.amount) === 0) {\n return {\n header: 'All tokens must have an initial amount',\n body: 'One or more of your tokens does not have a valid initial amount'\n };\n }\n\n if (\n parseFloat(poolToken.amount) > parseFloat(balances[poolToken.address])\n ) {\n return {\n header: 'An initial amount exceeds your balance',\n body: 'One or more of your input amounts exceeds your token balance'\n };\n }\n\n if (tokens[poolToken.address]) {\n const requiresApproval = approvalRequired(\n poolToken.address,\n poolToken.amount\n );\n\n if (requiresApproval && !approvedTokens.includes(poolToken.address)) {\n return {\n header: 'A token requires approval',\n body: 'One or more of your tokens requires an approval'\n };\n }\n }\n }\n\n if (uniqBy(poolTokens, token => token.address).length !== poolTokens.length) {\n return {\n header: 'You have duplicate tokens',\n body: 'Each token can only appear once in your pool.'\n };\n }\n\n return undefined;\n}\n","import { createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, Teleport as _Teleport, Fragment as _Fragment, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-9a299934\")\n\n_pushScopeId(\"data-v-9a299934\")\nconst _hoisted_1 = /*#__PURE__*/_createVNode(\"div\", { class: \"mt-2 mb-3\" }, \" Pool creation requires 2 transactions: \", -1)\nconst _hoisted_2 = { class: \"card-container\" }\nconst _hoisted_3 = { class: \"card-step text-green-500\" }\nconst _hoisted_4 = {\n key: 1,\n class: \"text-gray-500 dark:text-gray-400\"\n}\nconst _hoisted_5 = /*#__PURE__*/_createVNode(\"div\", { class: \"ml-3 flex-1\" }, [\n /*#__PURE__*/_createVNode(\"span\", null, \"Create Pool\")\n], -1)\nconst _hoisted_6 = /*#__PURE__*/_createTextVNode(\" Create Pool \")\nconst _hoisted_7 = {\n key: 1,\n class: \"ml-4 text-sm\"\n}\nconst _hoisted_8 = /*#__PURE__*/_createVNode(\"br\", null, null, -1)\nconst _hoisted_9 = { class: \"card-container mt-3\" }\nconst _hoisted_10 = { class: \"card-step text-green-500\" }\nconst _hoisted_11 = {\n key: 1,\n class: \"text-gray-500 dark:text-gray-400\"\n}\nconst _hoisted_12 = /*#__PURE__*/_createVNode(\"div\", { class: \"ml-3 flex-1\" }, [\n /*#__PURE__*/_createVNode(\"span\", null, \"Join Pool\")\n], -1)\nconst _hoisted_13 = /*#__PURE__*/_createTextVNode(\" Join Pool \")\nconst _hoisted_14 = {\n key: 1,\n class: \"ml-4 text-sm\"\n}\nconst _hoisted_15 = {\n key: 0,\n class: \"mt-6 mb-2\"\n}\nconst _hoisted_16 = /*#__PURE__*/_createVNode(\"p\", { class: \"text-yellow-500\" }, \" We're still looking for the magic recipe that allows us to verify factory created contracts through the ftmscan API. Until then, please reach out to us on discord and someone from the team will manually verify your contract. \", -1)\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n const _component_PoolCreateConfirmModal = _resolveComponent(\"PoolCreateConfirmModal\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(_component_BalCard, { class: \"mt-4 mb-3\" }, {\n default: _withId(() => [\n _hoisted_1,\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(\"div\", _hoisted_3, [\n (_ctx.poolAddress !== '')\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 0,\n name: \"check\",\n class: \"text-green-500\"\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_4, \"1\"))\n ]),\n _hoisted_5,\n (_ctx.poolAddress === '')\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 0,\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.createModalVisible = true)),\n disabled: !_ctx.canCreatePool,\n size: \"sm\",\n loading: _ctx.creating,\n \"loading-label\": \"Creating...\"\n }, {\n default: _withId(() => [\n _hoisted_6\n ]),\n _: 1\n }, 8, [\"disabled\", \"loading\"]))\n : (_openBlock(), _createBlock(\"div\", _hoisted_7, [\n _createTextVNode(\" Pool address: \" + _toDisplayString(_ctx.poolAddress), 1),\n _hoisted_8,\n _createTextVNode(\"Pool id: \" + _toDisplayString(_ctx.poolId), 1)\n ]))\n ]),\n _createVNode(\"div\", _hoisted_9, [\n _createVNode(\"div\", _hoisted_10, [\n (_ctx.joined)\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 0,\n name: \"check\",\n class: \"text-green-500\"\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_11, \"2\"))\n ]),\n _hoisted_12,\n (!_ctx.joined)\n ? (_openBlock(), _createBlock(_component_BalBtn, {\n key: 0,\n onClick: _ctx.joinPool,\n disabled: _ctx.poolAddress === '',\n size: \"sm\",\n loading: _ctx.joining,\n \"loading-label\": \"Joining...\"\n }, {\n default: _withId(() => [\n _hoisted_13\n ]),\n _: 1\n }, 8, [\"onClick\", \"disabled\", \"loading\"]))\n : (_openBlock(), _createBlock(\"div\", _hoisted_14, \" Joined \"))\n ]),\n (_ctx.joined)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_15, [\n _hoisted_16\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _: 1\n }),\n (_openBlock(), _createBlock(_Teleport, { to: \"#modal\" }, [\n (_ctx.createModalVisible)\n ? (_openBlock(), _createBlock(_component_PoolCreateConfirmModal, {\n key: 0,\n onCreate: _ctx.createPool,\n onClose: _cache[2] || (_cache[2] = ($event: any) => (_ctx.createModalVisible = false))\n }, null, 8, [\"onCreate\"]))\n : _createCommentVNode(\"\", true)\n ]))\n ], 64))\n})","import { Decimal } from 'decimal.js';\nimport { BigNumber } from 'ethers';\nimport { WeiPerEther as ONE } from '@ethersproject/constants/lib/bignumbers';\nimport { Zero } from '@ethersproject/constants';\n\nconst SCALING_FACTOR = 1e18;\n\nexport type BigNumberish = string | number | BigNumber;\n\nexport const decimal = (x: BigNumberish | Decimal): Decimal =>\n new Decimal(x.toString());\n\nexport const fp = (x: number | Decimal): BigNumber => bn(toFp(x));\n\nexport const toFp = (x: BigNumberish | Decimal): Decimal =>\n decimal(x).mul(SCALING_FACTOR);\n\nexport const fromFp = (x: BigNumberish | Decimal): Decimal =>\n decimal(x).div(SCALING_FACTOR);\n\nexport const bn = (x: BigNumberish | Decimal): BigNumber => {\n if (BigNumber.isBigNumber(x)) return x;\n const stringified = parseScientific(x.toString());\n const integer = stringified.split('.')[0];\n return BigNumber.from(integer);\n};\n\nexport const maxUint = (e: number): BigNumber =>\n bn(2)\n .pow(e)\n .sub(1);\n\nexport const maxInt = (e: number): BigNumber =>\n bn(2)\n .pow(bn(e).sub(1))\n .sub(1);\n\nexport const minInt = (e: number): BigNumber =>\n bn(2)\n .pow(bn(e).sub(1))\n .mul(-1);\n\nexport const pct = (x: BigNumberish, pct: BigNumberish): BigNumber =>\n bn(decimal(x).mul(decimal(pct)));\n\nexport const max = (a: BigNumberish, b: BigNumberish): BigNumber => {\n a = bn(a);\n b = bn(b);\n\n return a.gt(b) ? a : b;\n};\n\nexport const min = (a: BigNumberish, b: BigNumberish): BigNumber => {\n a = bn(a);\n b = bn(b);\n\n return a.lt(b) ? a : b;\n};\n\nexport const arrayAdd = (\n arrA: BigNumberish[],\n arrB: BigNumberish[]\n): BigNumber[] => arrA.map((a, i) => bn(a).add(bn(arrB[i])));\n\nexport const arraySub = (\n arrA: BigNumberish[],\n arrB: BigNumberish[]\n): BigNumber[] => arrA.map((a, i) => bn(a).sub(bn(arrB[i])));\n\nexport const divCeil = (x: BigNumber, y: BigNumber): BigNumber =>\n // ceil(x/y) == (x + y - 1) / y\n x\n .add(y)\n .sub(1)\n .div(y);\n\nexport const FP_SCALING_FACTOR = bn(SCALING_FACTOR);\n\nconst MaxWeightedTokens = 100;\n\nexport function bnToNormalizedWeights(weights: BigNumber[]): BigNumber[] {\n // When the number is exactly equal to the max, normalizing with common inputs\n // leads to a value < 0.01, which reverts. In this case fill in the weights exactly.\n if (weights.length == MaxWeightedTokens) {\n return Array(MaxWeightedTokens).fill(ONE.div(MaxWeightedTokens));\n }\n\n const sum = weights.reduce((total, weight) => total.add(weight), Zero);\n if (sum.eq(ONE)) return weights;\n\n const normalizedWeights: BigNumber[] = [];\n let normalizedSum = Zero;\n for (let index = 0; index < weights.length; index++) {\n if (index < weights.length - 1) {\n normalizedWeights[index] = weights[index].mul(ONE).div(sum);\n normalizedSum = normalizedSum.add(normalizedWeights[index]);\n } else {\n normalizedWeights[index] = ONE.sub(normalizedSum);\n }\n }\n\n return normalizedWeights;\n}\n\nfunction parseScientific(num: string): string {\n // If the number is not in scientific notation return it as it is\n if (!/\\d+\\.?\\d*e[+-]*\\d+/i.test(num)) return num;\n\n // Remove the sign\n const numberSign = Math.sign(Number(num));\n num = Math.abs(Number(num)).toString();\n\n // Parse into coefficient and exponent\n const [coefficient, exponent] = num.toLowerCase().split('e');\n let zeros = Math.abs(Number(exponent));\n const exponentSign = Math.sign(Number(exponent));\n const [integer, decimals] = (coefficient.indexOf('.') != -1\n ? coefficient\n : `${coefficient}.`\n ).split('.');\n\n if (exponentSign === -1) {\n zeros -= integer.length;\n num =\n zeros < 0\n ? integer.slice(0, zeros) + '.' + integer.slice(zeros) + decimals\n : '0.' + '0'.repeat(zeros) + integer + decimals;\n } else {\n if (decimals) zeros -= decimals.length;\n num =\n zeros < 0\n ? integer + decimals.slice(0, zeros) + '.' + decimals.slice(zeros)\n : integer + decimals + '0'.repeat(zeros);\n }\n\n return numberSign < 0 ? '-' + num : num;\n}\n","import configs from '@/lib/config';\nimport { defaultAbiCoder } from '@ethersproject/abi';\nimport { default as WeightedPoolContractSource } from '@/lib/contracts/weightedPool.json';\nimport { default as WeightedPoolAbi } from '@/lib/abi/WeightedPool.json';\nimport { sleep } from '@/lib/utils';\nimport { callStatic } from '@/lib/utils/balancer/web3';\nimport { JsonRpcProvider, Web3Provider } from '@ethersproject/providers';\nimport { BigNumber } from '@ethersproject/bignumber';\n\ninterface EtherscanVerifyRequest {\n apikey: string;\n module: 'contract';\n action: 'verifysourcecode';\n contractaddress: string;\n sourceCode: string;\n codeformat: 'solidity-standard-json-input';\n contractname: string;\n compilerversion: string;\n // This is misspelt in Etherscan's actual API parameters.\n // See: https://etherscan.io/apis#contracts\n constructorArguements: string;\n}\n\nexport const BUFFER_PERIOD_DURATION = 60 * 60 * 24 * 30;\n\ninterface EtherscanCheckStatusRequest {\n apikey: string;\n module: 'contract';\n action: 'checkverifystatus';\n guid: string;\n}\n\nexport class PoolVerifierService {\n network: string;\n vaultAddress: string;\n weightedPoolFactoryAddress: string;\n etherscanApiKey: string;\n etherscanApiUrl: string;\n\n constructor(network: string) {\n this.network = network;\n this.vaultAddress = configs[network].addresses.vault;\n this.weightedPoolFactoryAddress =\n configs[network].addresses.weightedPoolFactory;\n\n this.etherscanApiKey = configs[network].etherscan.apiKey;\n this.etherscanApiUrl = configs[network].etherscan.apiUrl;\n }\n\n public async verifyPool(\n provider: Web3Provider | JsonRpcProvider,\n name: string,\n symbol: string,\n owner: string,\n tokens: string[],\n weights: BigNumber[],\n swapFeePercentage: BigNumber,\n poolAddress: string,\n blockHash: string\n ) {\n const argTypes =\n (WeightedPoolAbi[0].inputs as { type: string }[]).map(\n input => input.type\n ) || [];\n\n const pauseWindowDuration = await this.getPauseWindowDuration(\n provider,\n poolAddress,\n blockHash\n );\n\n const constructorArguements = defaultAbiCoder\n .encode(argTypes, [\n this.vaultAddress,\n name,\n symbol,\n tokens,\n weights,\n swapFeePercentage,\n pauseWindowDuration,\n BUFFER_PERIOD_DURATION,\n owner\n ])\n .replace('0x', '');\n\n const request: EtherscanVerifyRequest = {\n apikey: this.etherscanApiKey,\n module: 'contract',\n action: 'verifysourcecode',\n contractaddress: poolAddress,\n sourceCode: JSON.stringify(WeightedPoolContractSource),\n codeformat: 'solidity-standard-json-input',\n contractname: `contracts/pools/weighted/WeightedPool.sol:WeightedPool`,\n compilerversion: 'v0.7.1+commit.f4a555be',\n constructorArguements\n };\n\n const response = await this.verifyContract(this.etherscanApiUrl, request);\n\n console.log('response json', response);\n\n const pollRequest = this.toCheckStatusRequest({\n apiKey: this.etherscanApiKey,\n guid: response.result\n });\n\n await sleep(700);\n\n const verificationStatus = await this.getVerificationStatus(\n this.etherscanApiUrl,\n pollRequest\n );\n\n console.log('verification status', verificationStatus);\n }\n\n private async getPauseWindowDuration(\n provider: Web3Provider | JsonRpcProvider,\n poolAddress: string,\n blockHash: string\n ) {\n const pausedState = await callStatic(\n provider,\n poolAddress,\n WeightedPoolAbi,\n 'getPausedState',\n []\n );\n\n const pauseWindowEndTime = (pausedState.pauseWindowEndTime as BigNumber).toNumber();\n console.log('block hash', blockHash);\n const block = await provider.send('eth_getBlockByHash', [blockHash, true]);\n console.log('block', block);\n const blockTimestamp = BigNumber.from(block.timestamp).toNumber();\n\n const pauseWindowDuration = pauseWindowEndTime - blockTimestamp;\n\n return pauseWindowDuration < 0 ? 0 : pauseWindowDuration;\n }\n\n private async verifyContract(\n url: string,\n req: EtherscanVerifyRequest\n ): Promise {\n const parameters = new URLSearchParams({ ...req });\n const requestDetails = { method: 'post', body: parameters };\n\n let response: Response;\n try {\n response = await fetch(url, requestDetails);\n console.log('response', response);\n } catch (error) {\n throw Error(\n `Failed to send verification request. Reason: ${error.message}`\n );\n }\n\n if (!response.ok) {\n const responseText = await response.text();\n throw Error(\n `Failed to send verification request.\\nHTTP code: ${response.status}.\\nResponse: ${responseText}`\n );\n }\n\n return response.json();\n }\n\n private toCheckStatusRequest(params: {\n apiKey: string;\n guid: string;\n }): EtherscanCheckStatusRequest {\n return {\n apikey: params.apiKey,\n module: 'contract',\n action: 'checkverifystatus',\n guid: params.guid\n };\n }\n\n private async getVerificationStatus(\n url: string,\n req: EtherscanCheckStatusRequest\n ): Promise {\n const parameters = new URLSearchParams({ ...req });\n const urlWithQuery = new URL(url);\n urlWithQuery.search = parameters.toString();\n\n const response = await fetch(urlWithQuery.toString());\n\n if (!response.ok) {\n // This could be always interpreted as JSON if there were any such guarantee in the Etherscan API.\n const responseText = await response.text();\n throw new Error(\n `The HTTP server response is not ok. Status code: ${response.status} Response text: ${responseText}`\n );\n }\n\n return response.json();\n }\n}\n","import { TransactionResponse } from '@ethersproject/abstract-provider';\nimport configs from '@/lib/config';\nimport { callStatic, sendTransaction } from '@/lib/utils/balancer/web3';\nimport { default as weightedPoolFactoryAbi } from '@/lib/abi/WeightedPoolFactory.json';\nimport { default as weightedPoolAbi } from '@/lib/abi/WeightedPool.json';\nimport { default as vaultAbi } from '@/lib/abi/Vault.json';\nimport { JsonRpcProvider, Web3Provider } from '@ethersproject/providers';\nimport { TokenInfoMap } from '@/types/TokenList';\nimport { orderBy } from 'lodash';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { bnToNormalizedWeights } from '@/lib/utils/numbers';\nimport { parseUnits } from '@ethersproject/units';\nimport { encodeJoinWeightedPool } from '@/lib/utils/balancer/weightedPoolEncoding';\nimport { PoolVerifierService } from '@/services/pool/creator/pool-verifier.service';\nimport { sleep } from '@/lib/utils';\n\nexport interface PoolTokenInput {\n address: string;\n weight: string;\n amount: string;\n}\n\nexport class PoolCreatorService {\n network: string;\n vaultAddress: string;\n weightedPoolFactoryAddress: string;\n helpersAddress: string;\n poolVerifier: PoolVerifierService;\n\n constructor(network: string) {\n this.network = network;\n this.vaultAddress = configs[network].addresses.vault;\n this.weightedPoolFactoryAddress =\n configs[network].addresses.weightedPoolFactory;\n this.helpersAddress = configs[network].addresses.balancerHelpers;\n this.poolVerifier = new PoolVerifierService(network);\n }\n\n public async createWeightedPool(\n provider: Web3Provider | JsonRpcProvider,\n name: string,\n symbol: string,\n owner: string,\n swapFeePercentage: string,\n tokens: PoolTokenInput[]\n ): Promise {\n const sorted = this.sortTokens(tokens);\n\n return await sendTransaction(\n provider,\n this.weightedPoolFactoryAddress,\n weightedPoolFactoryAbi,\n 'create',\n [\n name,\n symbol,\n sorted.map(token => token.address),\n //weights and swap fee come in as 1 = 1%, so its base 16\n bnToNormalizedWeights(\n sorted.map(token => parseUnits(token.weight, 16))\n ),\n parseUnits(swapFeePercentage, 16),\n owner\n ]\n );\n }\n\n public async joinPool(\n provider: Web3Provider | JsonRpcProvider,\n tokens: PoolTokenInput[],\n poolId: string,\n address: string,\n tokenInfoMap: TokenInfoMap\n ): Promise {\n const sorted = this.sortTokens(tokens);\n const amountsIn = sorted.map(token =>\n parseUnits(token.amount, tokenInfoMap[token.address].decimals)\n );\n\n const joinPoolRequest = {\n assets: sorted.map(token => token.address),\n maxAmountsIn: amountsIn,\n userData: encodeJoinWeightedPool({ kind: 'Init', amountsIn }),\n fromInternalBalance: false\n };\n\n return await sendTransaction(\n provider,\n this.vaultAddress,\n vaultAbi,\n 'joinPool',\n [poolId, address, address, joinPoolRequest]\n );\n }\n\n public async getPoolDataFromTransaction(\n provider: Web3Provider | JsonRpcProvider,\n tx: TransactionResponse\n ): Promise<{ poolAddress: string; blockHash: string; poolId: string }> {\n const receipt = (await tx.wait()) as any;\n const poolCreatedEvent = receipt.events.find(\n (e: { event: string }) => e.event === 'PoolCreated'\n );\n let poolId = '';\n\n //generous amount of retries, to give the rpc time to catch up.\n for (let i = 0; i < 20; i++) {\n try {\n await sleep(1000);\n poolId = await callStatic(\n provider,\n poolCreatedEvent.args.pool,\n weightedPoolAbi,\n 'getPoolId',\n []\n );\n } catch {\n //\n }\n }\n\n if (poolId === '') {\n throw new Error('Failed to retrieve the pool id');\n }\n\n return {\n poolAddress: poolCreatedEvent.args.pool,\n blockHash: receipt.blockHash,\n poolId\n };\n }\n\n public async verifyPool(\n provider: Web3Provider | JsonRpcProvider,\n name: string,\n symbol: string,\n owner: string,\n swapFeePercentage: string,\n tokens: PoolTokenInput[],\n poolAddress: string,\n blockHash: string\n ) {\n const sorted = this.sortTokens(tokens);\n\n await this.poolVerifier.verifyPool(\n provider,\n name,\n symbol,\n owner,\n sorted.map(token => token.address),\n //weights and swap fee come in as 1 = 1%, so its base 16\n bnToNormalizedWeights(sorted.map(token => parseUnits(token.weight, 16))),\n parseUnits(swapFeePercentage, 16),\n poolAddress,\n blockHash\n );\n }\n\n private sortTokens(tokens: PoolTokenInput[]): PoolTokenInput[] {\n return orderBy(tokens, token => token.address.toLowerCase(), 'asc');\n }\n}\n","import { createVNode as _createVNode, resolveComponent as _resolveComponent, withModifiers as _withModifiers, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\nimport _imports_0 from '@/assets/images/ludwig-says-2.svg'\n\n\nconst _hoisted_1 = { class: \"-mx-4 p-4 items-center\" }\nconst _hoisted_2 = /*#__PURE__*/_createVNode(\"div\", { class: \"mx-2\" }, [\n /*#__PURE__*/_createVNode(\"img\", { src: _imports_0 })\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalModal = _resolveComponent(\"BalModal\")\n\n return (_openBlock(), _createBlock(_component_BalModal, {\n show: \"\",\n onClose: _ctx.onClose\n }, {\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _hoisted_2,\n _createVNode(_component_BalBtn, {\n class: \"mt-8\",\n label: \"Compose my pool\",\n block: \"\",\n onClick: _withModifiers(_ctx.create, [\"prevent\"])\n }, null, 8, [\"onClick\"])\n ])\n ]),\n _: 1\n }, 8, [\"onClose\"]))\n}","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n emits: ['create', 'close'],\n props: {},\n setup(props, { emit }) {\n function create() {\n emit('create');\n }\n\n function onClose() {\n emit('close');\n }\n\n return {\n onClose,\n create\n };\n }\n});\n","import { render } from \"./PoolCreateConfirmModal.vue?vue&type=template&id=c6dd1f68&ts=true\"\nimport script from \"./PoolCreateConfirmModal.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolCreateConfirmModal.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport { useStore } from 'vuex';\nimport useTokenLists from '@/composables/useTokenLists';\nimport BalCard from '@/components/_global/BalCard/BalCard.vue';\nimport BalBtn from '@/components/_global/BalBtn/BalBtn.vue';\nimport BalIcon from '@/components/_global/BalIcon/BalIcon.vue';\nimport {\n PoolCreatorService,\n PoolTokenInput\n} from '@/services/pool/creator/pool-creator.service';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport { TransactionResponse } from '@ethersproject/abstract-provider';\nimport useEthers from '@/composables/useEthers';\nimport useTransactions from '@/composables/useTransactions';\nimport PoolCreateConfirmModal from '@/components/pages/pool-create/PoolCreateConfirmModal.vue';\n\nexport default defineComponent({\n components: {\n PoolCreateConfirmModal,\n BalIcon,\n BalBtn,\n BalCard\n },\n props: {\n swapFeePercentage: {\n type: String,\n required: true\n },\n poolOwner: {\n type: String,\n required: true\n },\n poolSymbol: {\n type: String,\n required: true\n },\n poolName: {\n type: String,\n required: true\n },\n poolTokens: {\n type: Array as PropType,\n required: true\n },\n canCreatePool: {\n type: Boolean,\n required: true\n }\n },\n emits: [\n 'poolNameChange',\n 'poolSymbolChange',\n 'poolOwnerChange',\n 'poolSwapFeePercentageChange',\n 'isInputValid',\n 'createPoolTriggered',\n 'createPoolError',\n 'createdPool',\n 'verifiedPool'\n ],\n\n setup(props, { emit }) {\n const store = useStore();\n const { loadingTokenLists, tokenListsLoaded } = useTokenLists();\n const { appNetworkConfig, getProvider, account } = useWeb3();\n const { tokens } = useTokens();\n const { txListener } = useEthers();\n const { addTransaction } = useTransactions();\n const appLoading = computed(() => store.state.app.loading);\n const poolCreatorService = computed(\n () => new PoolCreatorService(appNetworkConfig.key)\n );\n\n const verifying = ref(false);\n const verified = ref(false);\n const creating = ref(false);\n const joining = ref(false);\n const joined = ref(false);\n const createModalVisible = ref(false);\n const blockHash = ref('');\n const poolAddress = ref('');\n const poolId = ref('');\n\n async function createPool(): Promise {\n createModalVisible.value = false;\n\n const {\n poolName,\n poolSymbol,\n poolOwner,\n swapFeePercentage,\n poolTokens\n } = props;\n\n try {\n emit('createPoolTriggered');\n creating.value = true;\n const tx = await poolCreatorService.value.createWeightedPool(\n getProvider(),\n props.poolName,\n `BPT-${poolSymbol}`,\n poolOwner,\n swapFeePercentage,\n poolTokens\n );\n\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: 'create',\n summary: `Creating your pool with name: ${poolName}`,\n details: { name: poolName, symbol: poolSymbol }\n });\n\n txListener(tx, {\n onTxConfirmed: async (tx: TransactionResponse) => {\n const data = await poolCreatorService.value.getPoolDataFromTransaction(\n getProvider(),\n tx\n );\n poolAddress.value = data.poolAddress;\n blockHash.value = data.blockHash;\n poolId.value = data.poolId;\n\n emit('createdPool', data.poolId);\n creating.value = false;\n },\n onTxFailed: () => {\n creating.value = false;\n emit('createPoolError');\n }\n });\n } catch (error) {\n console.error(error);\n creating.value = false;\n emit('createPoolError');\n }\n }\n\n async function joinPool(): Promise {\n try {\n joining.value = true;\n const tx = await poolCreatorService.value.joinPool(\n getProvider(),\n props.poolTokens,\n poolId.value,\n account.value,\n tokens.value\n );\n\n addTransaction({\n id: tx.hash,\n type: 'tx',\n action: 'invest',\n summary: `Joining your pool with name: ${props.poolName}`,\n details: {}\n });\n\n txListener(tx, {\n onTxConfirmed: async (tx: TransactionResponse) => {\n joining.value = false;\n joined.value = true;\n emit('verifiedPool');\n },\n onTxFailed: () => {\n joining.value = false;\n }\n });\n } catch (error) {\n console.error(error);\n joining.value = false;\n }\n }\n\n async function verifyPool() {\n const {\n poolName,\n poolSymbol,\n poolOwner,\n swapFeePercentage,\n poolTokens\n } = props;\n\n try {\n verifying.value = true;\n await poolCreatorService.value.verifyPool(\n getProvider(),\n poolName,\n `BPT-${poolSymbol}`,\n poolOwner,\n swapFeePercentage,\n poolTokens,\n poolAddress.value,\n blockHash.value\n );\n\n verifying.value = false;\n verified.value = true;\n //emit('verifiedPool');\n } catch {\n verifying.value = false;\n }\n }\n\n return {\n appLoading,\n loadingTokenLists,\n tokenListsLoaded,\n createPool,\n joinPool,\n poolAddress,\n poolId,\n blockHash,\n creating,\n joining,\n joined,\n verifyPool,\n verifying,\n verified,\n createModalVisible\n };\n }\n});\n","import { render } from \"./PoolCreateActions.vue?vue&type=template&id=9a299934&scoped=true&ts=true\"\nimport script from \"./PoolCreateActions.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolCreateActions.vue?vue&type=script&lang=ts\"\n\nimport \"./PoolCreateActions.vue?vue&type=style&index=0&id=9a299934&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-9a299934\"]])\n\nexport default __exports__","import { createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"absolute top-0 left-0 w-full h-full bg-white dark:bg-gray-850 rounded-lg z-10 text-center\" }\nconst _hoisted_2 = { class: \"flex flex-col justify-between items-center h-full p-4\" }\nconst _hoisted_3 = /*#__PURE__*/_createVNode(\"h3\", null, \"Your investment pool has been created\", -1)\nconst _hoisted_4 = { class: \"flex flex-col items-center\" }\nconst _hoisted_5 = { class: \"w-20 h-20 rounded-full flex items-center justify-center bg-green-100 dark:bg-green-500 text-green-500 dark:text-gray-850 mb-8\" }\nconst _hoisted_6 = /*#__PURE__*/_createVNode(\"p\", { class: \"text-gray-300\" }, \" Your investment pool has been successfully created and joined. You're good to go! \", -1)\nconst _hoisted_7 = { class: \"grid grid-cols-1 gap-4 mt-4 w-full\" }\nconst _hoisted_8 = /*#__PURE__*/_createVNode(\"span\", null, \"Take me to my pool\", -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(\"div\", _hoisted_5, [\n _createVNode(_component_BalIcon, {\n name: \"check-circle\",\n size: \"xl\"\n })\n ]),\n _hoisted_6\n ]),\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(_component_BalBtn, { onClick: _ctx.navigateToPool }, {\n default: _withCtx(() => [\n _hoisted_8\n ]),\n _: 1\n }, 8, [\"onClick\"])\n ])\n ])\n ]))\n}","\nimport { defineComponent } from 'vue';\nimport { useRouter } from 'vue-router';\n\nexport default defineComponent({\n name: 'PoolCreateSuccessOverlay',\n\n props: {\n poolId: { type: String, required: true }\n },\n\n setup(props) {\n const router = useRouter();\n\n function navigateToPool() {\n router.push({\n name: 'pool',\n params: {\n id: props.poolId\n }\n });\n }\n\n return {\n navigateToPool\n };\n }\n});\n","import { render } from \"./PoolCreateSuccessOverlay.vue?vue&type=template&id=04cf3be6&ts=true\"\nimport script from \"./PoolCreateSuccessOverlay.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolCreateSuccessOverlay.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, ref } from 'vue';\nimport { useStore } from 'vuex';\nimport useTokenLists from '@/composables/useTokenLists';\nimport PoolCreateTokenRow from '@/components/pages/pool-create/PoolCreateTokenRow.vue';\nimport { getAddress } from '@ethersproject/address';\nimport BalCard from '@/components/_global/BalCard/BalCard.vue';\nimport BalBtn from '@/components/_global/BalBtn/BalBtn.vue';\nimport BalIcon from '@/components/_global/BalIcon/BalIcon.vue';\nimport { remove } from 'lodash';\nimport { PoolTokenInput } from '@/services/pool/creator/pool-creator.service';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokens from '@/composables/useTokens';\nimport PoolCreateDefinitionFields from '@/components/pages/pool-create/PoolCreateDefinitionFields.vue';\nimport BalAlert from '@/components/_global/BalAlert/BalAlert.vue';\nimport { getTokensErrorFromInputs } from '@/lib/utils/poolCreateHelper';\nimport PoolCreateActions from '@/components/pages/pool-create/PoolCreateActions.vue';\nimport PoolCreateSuccessOverlay from '@/components/pages/pool-create/PoolCreateSuccessOverlay.vue';\n\nexport default defineComponent({\n components: {\n PoolCreateActions,\n PoolCreateDefinitionFields,\n BalIcon,\n BalBtn,\n BalCard,\n PoolCreateTokenRow,\n BalAlert,\n PoolCreateSuccessOverlay\n },\n\n setup() {\n const store = useStore();\n const { loadingTokenLists, tokenListsLoaded } = useTokenLists();\n const { appNetworkConfig } = useWeb3();\n const { tokens, balances, approvalRequired } = useTokens();\n const appLoading = computed(() => store.state.app.loading);\n const poolName = ref('');\n const poolSymbol = ref('');\n const swapFeePercentage = ref('0.25');\n const isDefinitionInputValid = ref(false);\n const editingDisabled = ref(false);\n const poolId = ref('');\n const poolCreateComplete = ref(false);\n const poolOwner = ref(appNetworkConfig.addresses.defaultPoolOwner);\n const approvedTokens = ref([]);\n\n const poolTokens = ref([\n {\n address: getAddress(appNetworkConfig.addresses.weth),\n weight: '50',\n amount: ''\n },\n {\n address: getAddress(appNetworkConfig.addresses.usdc),\n weight: '50',\n amount: ''\n }\n ]);\n\n const tokensError = computed(() =>\n getTokensErrorFromInputs(\n poolTokens.value,\n tokens.value,\n balances.value,\n approvedTokens.value,\n approvalRequired\n )\n );\n\n const canCreatePool = computed(() => {\n return !tokensError.value && isDefinitionInputValid.value;\n });\n\n function addToken() {\n poolTokens.value.push({\n address: getAddress(appNetworkConfig.addresses.weth),\n weight: '50',\n amount: ''\n });\n }\n\n function deleteToken(idx: number) {\n remove(poolTokens.value, (token, index) => idx === index);\n }\n\n function tokenAddressChange(value: string, idx: number) {\n poolTokens.value[idx].address = value;\n }\n\n function tokenAmountChange(value: string, idx: number) {\n poolTokens.value[idx].amount = value;\n }\n\n function tokenWeightChange(value: string, idx: number) {\n poolTokens.value[idx].weight = value;\n }\n\n function handlePoolNameChange(value: string) {\n poolName.value = value;\n }\n\n function handlePoolSymbolChange(value: string) {\n poolSymbol.value = value.toUpperCase();\n }\n\n function handlePoolOwnerChange(value: string) {\n poolOwner.value = value;\n }\n\n function handleSwapFeePercentageChange(value: string) {\n swapFeePercentage.value = value;\n }\n\n function handleIsInputValid(valid: boolean) {\n isDefinitionInputValid.value = valid;\n }\n\n function handleTokenApproved(tokenAddress: string) {\n approvedTokens.value.push(tokenAddress);\n }\n\n function handlePoolCreateTriggered() {\n editingDisabled.value = true;\n }\n\n function handlePoolCreated(id: string) {\n editingDisabled.value = true;\n poolId.value = id;\n }\n\n function handlePoolCreateError() {\n editingDisabled.value = false;\n }\n\n function handlePoolVerified() {\n poolCreateComplete.value = true;\n }\n\n return {\n appLoading,\n loadingTokenLists,\n poolTokens,\n addToken,\n deleteToken,\n tokenAddressChange,\n tokenAmountChange,\n tokenWeightChange,\n poolName,\n poolSymbol,\n poolOwner,\n swapFeePercentage,\n handlePoolNameChange,\n handlePoolSymbolChange,\n handlePoolOwnerChange,\n tokenListsLoaded,\n handleSwapFeePercentageChange,\n handleIsInputValid,\n tokensError,\n canCreatePool,\n handleTokenApproved,\n handlePoolCreateTriggered,\n handlePoolCreated,\n handlePoolCreateError,\n handlePoolVerified,\n poolCreateComplete,\n editingDisabled,\n poolId\n };\n }\n});\n","import { render } from \"./PoolCreate.vue?vue&type=template&id=a92be1ae&scoped=true&ts=true\"\nimport script from \"./PoolCreate.vue?vue&type=script&lang=ts\"\nexport * from \"./PoolCreate.vue?vue&type=script&lang=ts\"\n\nimport \"./PoolCreate.vue?vue&type=style&index=0&id=a92be1ae&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-a92be1ae\"]])\n\nexport default __exports__","import { createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-028bf765\")\n\n_pushScopeId(\"data-v-028bf765\")\nconst _hoisted_1 = { class: \"lg:container lg:mx-auto pt-8\" }\nconst _hoisted_2 = { class: \"grid grid-cols-1 lg:grid-cols-3 gap-y-8 gap-x-0 lg:gap-x-8\" }\nconst _hoisted_3 = /*#__PURE__*/_createVNode(\"div\", { class: \"hidden lg:block\" }, null, -1)\nconst _hoisted_4 = { class: \"col-span-2 order-2 lg:order-1\" }\nconst _hoisted_5 = { class: \"grid grid-cols-1 gap-y-8\" }\nconst _hoisted_6 = { class: \"px-1 lg:px-0\" }\nconst _hoisted_7 = { style: {\"background-color\":\"#ff4a8d\",\"padding\":\"20px\"} }\nconst _hoisted_8 = /*#__PURE__*/_createVNode(\"b\", null, \"Save me Jebus!\", -1)\nconst _hoisted_9 = /*#__PURE__*/_createVNode(\"br\", null, null, -1)\nconst _hoisted_10 = /*#__PURE__*/_createVNode(\"br\", null, null, -1)\nconst _hoisted_11 = /*#__PURE__*/_createVNode(\"br\", null, null, -1)\nconst _hoisted_12 = /*#__PURE__*/_createVNode(\"br\", null, null, -1)\nconst _hoisted_13 = /*#__PURE__*/_createVNode(\"br\", null, null, -1)\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(\"div\", _hoisted_5, [\n _createVNode(\"div\", _hoisted_6, [\n _createVNode(\"div\", null, [\n _createVNode(\"div\", _hoisted_7, [\n _hoisted_8,\n _hoisted_9,\n _hoisted_10,\n _createVNode(\"div\", null, [\n _createVNode(\"button\", {\n style: {\"border\":\"1px solid black\",\"margin-bottom\":\"20px\"},\n onclick: _ctx.approve100\n }, \" approve 100 \", 8, [\"onclick\"])\n ]),\n _createVNode(\"div\", null, [\n _createVNode(\"button\", {\n style: {\"border\":\"1px solid black\",\"margin-bottom\":\"20px\"},\n onclick: _ctx.enterFbeets\n }, \" enter with 100 \", 8, [\"onclick\"])\n ]),\n _createVNode(\"div\", null, [\n _createVNode(\"button\", {\n style: {\"border\":\"1px solid black\"},\n onclick: _ctx.leaveFbeets\n }, \" leave with 100 \", 8, [\"onclick\"])\n ]),\n _hoisted_11,\n _createTextVNode(\" Exchange rate: \" + _toDisplayString(_ctx.currentExchangeRate) + \" \", 1),\n _hoisted_12,\n _createTextVNode(\" Exchange amount: \" + _toDisplayString(_ctx.currentExchangeAmount) + \" \", 1),\n _hoisted_13,\n _createTextVNode(\" My fBeets balance: \" + _toDisplayString(_ctx.currentFBeetsBalance), 1)\n ])\n ])\n ])\n ])\n ])\n ])\n ]))\n})","import Service from '@/services/balancer/contracts/balancer-contracts.service';\nimport ConfigService from '@/services/config/config.service';\nimport { call } from '@/lib/utils/balancer/contract';\nimport { default as FreshBeetsAbi } from '@/lib/abi/FreshBeets.json';\nimport { BigNumber } from 'ethers';\nimport { sendTransaction } from '@/lib/utils/balancer/web3';\nimport { Web3Provider } from '@ethersproject/providers';\n\nexport default class FreshBeets {\n service: Service;\n\n constructor(service, private readonly configService = new ConfigService()) {\n this.service = service;\n }\n\n public async getTotalFreshBeetsSupply(): Promise {\n return await call(this.service.provider, FreshBeetsAbi, [\n this.fbeetsAddress,\n 'totalSupply'\n ]);\n }\n\n public async getTotalVestedTokenAmount(): Promise {\n console.log('calling');\n return await call(this.service.provider, FreshBeetsAbi, [\n this.vestingTokenAddress,\n 'balanceOf',\n [this.fbeetsAddress]\n ]);\n }\n\n public async fBeetsBalanceOf(account: string): Promise {\n return await call(this.service.provider, FreshBeetsAbi, [\n this.fbeetsAddress,\n 'balanceOf',\n [account]\n ]);\n }\n\n public async enter(provider: Web3Provider, amount: BigNumber): Promise {\n await sendTransaction(\n provider,\n this.fbeetsAddress,\n FreshBeetsAbi,\n 'enter',\n [amount]\n );\n }\n\n public async leave(provider: Web3Provider, amount: BigNumber): Promise {\n await sendTransaction(\n provider,\n this.fbeetsAddress,\n FreshBeetsAbi,\n 'leave',\n [amount]\n );\n }\n\n public get fbeetsAddress(): string {\n return this.service.config.addresses.fbeetsToken || '';\n }\n public get vestingTokenAddress(): string {\n return this.service.config.addresses.fbeetsVestingToken || '';\n }\n}\n","import { Config } from '@/lib/config';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { configService as _configService } from '@/services/config/config.service';\nimport { rpcProviderService as _rpcProviderService } from '@/services/rpc-provider/rpc-provider.service';\nimport { default as FreshBeetsAbi } from '@/lib/abi/FreshBeets.json';\nimport FreshBeets from '@/services/governance/contracts/fbeets';\n\nexport default class GovernanceContractsService {\n config: Config;\n provider: JsonRpcProvider;\n fbeets: FreshBeets;\n\n constructor(\n readonly configService = _configService,\n readonly rpcProviderService = _rpcProviderService\n ) {\n this.provider = this.rpcProviderService.jsonProvider;\n this.config = this.configService.network;\n\n // Init contracts\n this.fbeets = new FreshBeets(this);\n }\n\n // Combine all the ABIs and remove duplicates\n public get allABIs() {\n return Object.values(\n Object.fromEntries([...FreshBeetsAbi].map(row => [row.name, row]))\n );\n }\n}\n\nexport const governanceContractsService = new GovernanceContractsService();\n","import useWeb3 from '@/services/web3/useWeb3';\nimport { governanceContractsService } from '@/services/governance/governance-contracts.service';\nimport { erc20ContractService } from '@/services/erc20/erc20-contracts.service';\nimport { BigNumber, utils } from 'ethers';\nimport { bn } from '@/lib/utils/numbers';\nimport { sendTransaction } from '@/lib/utils/balancer/web3';\nimport { default as FreshBeetsAbi } from '@/lib/abi/FreshBeets.json';\nimport { MaxUint256 } from '@ethersproject/constants';\n\nexport function useGovernance() {\n const { account, getProvider } = useWeb3();\n\n async function fBeetsTotalSupply() {\n return utils.formatUnits(\n await governanceContractsService.fbeets.getTotalFreshBeetsSupply()\n );\n }\n\n async function fBeetsBalance() {\n return utils.formatUnits(\n await governanceContractsService.fbeets.fBeetsBalanceOf(account.value)\n );\n }\n\n async function totalVestedTokenAmount() {\n console.log('fetching total vested amount');\n return utils.formatUnits(\n await governanceContractsService.fbeets.getTotalVestedTokenAmount()\n );\n }\n\n async function approveVestingToken(amount?: BigNumber) {\n await erc20ContractService.erc20.approveToken(\n getProvider(),\n governanceContractsService.fbeets.fbeetsAddress,\n governanceContractsService.fbeets.vestingTokenAddress,\n amount?.toString()\n );\n }\n\n async function enter(amount: BigNumber) {\n return governanceContractsService.fbeets.enter(getProvider(), amount);\n }\n\n async function leave(amount: BigNumber) {\n return governanceContractsService.fbeets.leave(getProvider(), amount);\n }\n\n async function exchangeRate() {\n const totalFBeetsSupply = await governanceContractsService.fbeets.getTotalFreshBeetsSupply();\n const totalVestedTokens = await governanceContractsService.fbeets.getTotalVestedTokenAmount();\n\n if (totalFBeetsSupply.eq(bn(0))) {\n return '0';\n }\n\n return totalVestedTokens.div(totalFBeetsSupply).toString();\n }\n\n // returns the amount you would get if you traded back fBeets => vesting token\n async function exchangeAmount() {\n const totalFBeetsSupply = await governanceContractsService.fbeets.getTotalFreshBeetsSupply();\n const totalVestedTokens = await governanceContractsService.fbeets.getTotalVestedTokenAmount();\n const fBeetsBalance = await governanceContractsService.fbeets.fBeetsBalanceOf(\n account.value\n );\n\n if (totalFBeetsSupply.eq(bn(0))) {\n return '0';\n }\n\n return utils.formatUnits(\n fBeetsBalance.mul(totalVestedTokens).div(totalFBeetsSupply)\n );\n }\n\n return {\n approveVestingToken,\n fBeetsTotalSupply,\n fBeetsBalance,\n totalVestedTokenAmount,\n enter,\n leave,\n exchangeAmount,\n exchangeRate\n };\n}\n","\nimport { computed, defineComponent, ref } from 'vue';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { fNum } from '@/composables/useNumbers';\nimport { useGovernance } from '@/composables/useGovernance';\nimport { bn, fp } from '@/lib/utils/numbers';\n\nexport default defineComponent({\n components: {},\n\n setup() {\n const { isWalletReady } = useWeb3();\n const {\n totalVestedTokenAmount,\n fBeetsTotalSupply,\n fBeetsBalance,\n enter,\n leave,\n exchangeAmount,\n exchangeRate,\n approveVestingToken\n } = useGovernance();\n\n const currentExchangeRate = ref();\n const currentExchangeAmount = ref();\n const currentFBeetsBalance = ref();\n\n totalVestedTokenAmount().then(result => {\n console.log('total vested amount: ', result.toString());\n });\n\n fBeetsTotalSupply().then(result => {\n console.log('total fbeets supply', result);\n });\n\n exchangeAmount().then(amount => {\n currentExchangeAmount.value = amount;\n console.log('exchange amount: ', amount);\n });\n\n exchangeRate().then(rate => {\n currentExchangeRate.value = rate;\n console.log('exchange rate: ', rate);\n });\n\n fBeetsBalance().then(balance => {\n currentFBeetsBalance.value = balance;\n console.log('my fBeets balance', balance);\n });\n\n async function approve100() {\n await approveVestingToken(fp(100));\n console.log('approved 100');\n }\n\n async function enterFbeets() {\n await enter(fp(100));\n console.log('entered with 100 bpt');\n }\n\n async function leaveFbeets() {\n await leave(fp(100));\n console.log('left with 100 bpt');\n }\n\n return {\n fNum,\n enterFbeets,\n leaveFbeets,\n approve100,\n currentExchangeRate,\n currentExchangeAmount,\n currentFBeetsBalance\n };\n }\n});\n","import { render } from \"./FreshBeets.vue?vue&type=template&id=028bf765&scoped=true&ts=true\"\nimport script from \"./FreshBeets.vue?vue&type=script&lang=ts\"\nexport * from \"./FreshBeets.vue?vue&type=script&lang=ts\"\n\nimport \"./FreshBeets.vue?vue&type=style&index=0&id=028bf765&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-028bf765\"]])\n\nexport default __exports__","import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';\n// import Portfolio from '@/pages/Portfolio.vue';\nimport Pool from '@/pages/Pool.vue';\nimport LiquidityMining from '@/pages/LiquidityMining.vue';\nimport Trade from '@/pages/Trade.vue';\n// import Farm from '@/pages/FarmList.vue';\nimport FarmDetail from '@/pages/FarmDetail.vue';\nimport BeetsLBP from '@/pages/BeetsLBP.vue';\nimport Invest from '@/pages/Invest.vue';\nimport PoolCreate from '@/pages/PoolCreate.vue';\nimport FreshBeets from '@/pages/FreshBeets.vue';\n\nconst routes: RouteRecordRaw[] = [\n { path: '/', name: 'home', redirect: '/trade' },\n { path: '/invest', name: 'invest', component: Invest },\n // { path: '/my-portfolio', name: 'my-portfolio', component: Portfolio },\n { path: '/fbeets', name: 'fbeets', component: FreshBeets },\n { path: '/trade/:assetIn?/:assetOut?', name: 'trade', component: Trade },\n {\n path: '/swap/:assetIn?/:assetOut?',\n redirect: to => {\n return `/trade${to.path.split('/swap')[1]}`;\n }\n },\n { path: '/pool/:id', name: 'pool', component: Pool },\n //{ path: '/farm', name: 'farm', component: Farm },\n { path: '/farm/:id/:poolId?', name: 'farm-detail', component: FarmDetail },\n {\n path: '/liquidity-mining',\n name: 'liquidity-mining',\n component: LiquidityMining\n },\n { path: '/beets', name: 'beets', component: BeetsLBP },\n\n { path: '/pool-create', name: 'pool-create', component: PoolCreate },\n { path: '/:pathMatch(.*)*', name: 'not-found', redirect: '/' }\n];\n\nconst router = createRouter({\n history: createWebHashHistory(),\n routes,\n scrollBehavior() {\n return { top: 0 };\n }\n});\n\nexport default router;\n","import { shorten } from '@/lib/utils';\n\nexport default {\n methods: {\n _shorten(str: string, key: string): string {\n if (!str) return str;\n let limit;\n if (key === 'symbol') limit = 6;\n if (key === 'name') limit = 18;\n if (key === 'choice') limit = 12;\n if (limit)\n return str.length > limit ? `${str.slice(0, limit).trim()}...` : str;\n return shorten(str);\n },\n _ipfsUrl(ipfsHash: string): string {\n return `https://${process.env.VUE_APP_IPFS_NODE}/ipfs/${ipfsHash}`;\n },\n _url(url) {\n if (!url) return '';\n return url\n .replace('ipfs://', `https://${process.env.VUE_APP_IPFS_NODE}/ipfs/`)\n .replace('ipns://', `https://${process.env.VUE_APP_IPFS_NODE}/ipns/`);\n }\n }\n};\n","import { QueryClient, VUE_QUERY_CLIENT } from 'vue-query';\n\nexport default {\n install: app => {\n const queryClient = new QueryClient();\n\n queryClient.mount();\n\n // Make plugin available in options API\n app.config.globalProperties.$queryClient = queryClient || {};\n\n // Make plugin available in composition API\n app.provide(VUE_QUERY_CLIENT, queryClient);\n }\n};\n","import { App } from 'vue';\nimport { captureException, init, setTag } from '@sentry/browser';\nimport { Integrations } from '@sentry/tracing';\nimport { version } from '../../package.json';\n\n// Using Sentry's vanila JS package (@sentry/browser) here instead of\n// the official vue package (@sentry/vue) because it doesn't support vue 3 yet.\n// https://github.com/getsentry/sentry-javascript/issues/2925\n\nconst ENV = process.env.VUE_APP_ENV || 'development';\nconst NETWORK = process.env.VUE_APP_NETWORK || '42';\nconst networkMap = {\n '1': 'mainnet',\n '42': 'kovan',\n '137': 'polygon'\n};\nconst environment = `${ENV}-${networkMap[NETWORK]}`;\nconst release = `frontend-v2@${version}`;\n\nexport default function initSentry(app: App) {\n if (['production', 'staging'].includes(ENV)) {\n app.config.errorHandler = (error, _, info) => {\n try {\n setTag('info', info);\n captureException(error, {\n extra: {\n error: error\n }\n });\n } catch (error) {\n console.error('Failed to send error to Sentry', error);\n }\n };\n\n init({\n dsn:\n 'https://d292b6ec7b6e4aa2801d972e06cb232c@o574636.ingest.sentry.io/5725878',\n integrations: [new Integrations.BrowserTracing()],\n tracesSampleRate: 1.0,\n environment,\n release\n });\n }\n}\n","import { App } from 'vue';\n\nexport default function registerDirectives(app: App) {\n app.directive('click-outside', {\n beforeMount(el, binding) {\n el.__vueOnClickOutside = function(event) {\n const callback = binding.value;\n const path = event.path || (event.composedPath && event.composedPath());\n\n const isClickOutside = path\n ? path.indexOf(el) < 0\n : !el.contains(event.target);\n\n if (typeof callback === 'function' && isClickOutside) {\n callback(event);\n }\n };\n document.body.addEventListener('click', el.__vueOnClickOutside);\n },\n unmounted(el) {\n document.body.removeEventListener('click', el.__vueOnClickOutside);\n }\n });\n}\n","import { App } from 'vue';\nimport parsePath from 'parse-filepath';\n\nexport function registerGlobalComponents(app: App): void {\n // Load global components from @/components/_global\n const req = require.context(\n '@/components/_global',\n true,\n /^((?!stories).)*\\.(js|ts|vue)$/i\n );\n for (const filePath of req.keys()) {\n const componentName = parsePath(filePath).name;\n if (!componentName) continue;\n const componentConfig = req(filePath);\n app.component(componentName, componentConfig.default || componentConfig);\n }\n}\n","import { createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment } from \"vue\"\nimport _imports_0 from '@/assets/images/community-image.png'\nimport _imports_1 from '@/assets/images/twitter-icon.png'\nimport _imports_2 from '@/assets/images/medium-icon.png'\nimport _imports_3 from '@/assets/images/discord-icon.png'\nimport _imports_4 from '@/assets/images/gitbook-logo.png'\nimport _imports_5 from '@/assets/images/github-logo.png'\n\n\nconst _hoisted_1 = /*#__PURE__*/_createVNode(\"div\", { id: \"modal\" }, null, -1)\nconst _hoisted_2 = {\n id: \"app\",\n class: \"flex flex-col\"\n}\nconst _hoisted_3 = { class: \"relative\" }\nconst _hoisted_4 = { class: \"relative px-4 pb-12 lg:px-12\" }\nconst _hoisted_5 = /*#__PURE__*/_createVNode(\"div\", { class: \"relative flex items-end flex-1\" }, [\n /*#__PURE__*/_createVNode(\"img\", { src: _imports_0 }),\n /*#__PURE__*/_createVNode(\"div\", { class: \"absolute bottom-0 flex justify-center pb-6 ml-8 transform -translate-x-1/2 left-1/2\" }, [\n /*#__PURE__*/_createVNode(\"a\", {\n href: \"https://twitter.com/beethoven_x\",\n class: \"mr-12\"\n }, [\n /*#__PURE__*/_createVNode(\"img\", {\n src: _imports_1,\n width: \"40\",\n class: \"mx-auto\"\n })\n ]),\n /*#__PURE__*/_createVNode(\"a\", {\n href: \"https://beethovenxio.medium.com/\",\n class: \"mr-12\"\n }, [\n /*#__PURE__*/_createVNode(\"img\", {\n src: _imports_2,\n width: \"40\",\n class: \"mx-auto\"\n })\n ]),\n /*#__PURE__*/_createVNode(\"a\", {\n href: \"https://discord.gg/jedS4zGk28\",\n class: \"mr-12\"\n }, [\n /*#__PURE__*/_createVNode(\"img\", {\n src: _imports_3,\n width: \"40\",\n class: \"mx-auto\"\n })\n ]),\n /*#__PURE__*/_createVNode(\"a\", {\n href: \"https://docs.beethovenx.io/\",\n class: \"mr-12\"\n }, [\n /*#__PURE__*/_createVNode(\"img\", {\n src: _imports_4,\n width: \"40\",\n class: \"mx-auto\"\n })\n ]),\n /*#__PURE__*/_createVNode(\"a\", { href: \"https://github.com/beethovenxfi\" }, [\n /*#__PURE__*/_createVNode(\"img\", {\n src: _imports_5,\n width: \"40\",\n class: \"mx-auto\"\n })\n ])\n ])\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_AppNav = _resolveComponent(\"AppNav\")\n const _component_AppHeaderBg = _resolveComponent(\"AppHeaderBg\")\n const _component_AppHero = _resolveComponent(\"AppHero\")\n const _component_GlobalStats = _resolveComponent(\"GlobalStats\")\n const _component_router_view = _resolveComponent(\"router-view\")\n const _component_AppFooterNav = _resolveComponent(\"AppFooterNav\")\n const _component_VueQueryDevTools = _resolveComponent(\"VueQueryDevTools\")\n const _component_WalletSelectModal = _resolveComponent(\"WalletSelectModal\")\n const _component_Notifications = _resolveComponent(\"Notifications\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _hoisted_1,\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(_component_AppNav),\n _createVNode(_component_AppHeaderBg),\n _createVNode(\"div\", _hoisted_3, [\n (_ctx.isInvestPage)\n ? (_openBlock(), _createBlock(_component_AppHero, { key: 0 }))\n : _createCommentVNode(\"\", true),\n (_ctx.showGlobalStats)\n ? (_openBlock(), _createBlock(_component_GlobalStats, { key: 1 }))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(_component_router_view, {\n key: _ctx.$route.path,\n class: \"flex-auto\"\n })\n ]),\n (_ctx.upToLargeBreakpoint)\n ? (_openBlock(), _createBlock(_component_AppFooterNav, { key: 0 }))\n : _createCommentVNode(\"\", true),\n _hoisted_5,\n _createVNode(_component_VueQueryDevTools),\n _createVNode(_component_WalletSelectModal, {\n isVisible: _ctx.isWalletSelectVisible,\n onClose: _ctx.toggleWalletSelectModal\n }, null, 8, [\"isVisible\", \"onClose\"]),\n _createVNode(_component_Notifications)\n ])\n ], 64))\n}","import useWeb3 from '@/services/web3/useWeb3';\nimport { EthereumTransactionData } from 'bnc-sdk/dist/types/src/interfaces';\nimport { watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport { useStore } from 'vuex';\n\nimport useBlocknative from './useBlocknative';\nimport useTokens from './useTokens';\nimport useTransactions, { ReplacementReason } from './useTransactions';\n\nexport default function useWeb3Watchers() {\n // COMPOSABLES\n const store = useStore();\n const { t } = useI18n();\n const { blocknative, supportsBlocknative } = useBlocknative();\n const {\n appNetworkConfig,\n userNetworkConfig,\n account,\n isMismatchedNetwork,\n isUnsupportedNetwork,\n blockNumber,\n chainId\n } = useWeb3();\n const { refetchBalances, refetchAllowances } = useTokens();\n const { handlePendingTransactions, updateTransaction } = useTransactions();\n\n function handleTransactionReplacement(\n tx: EthereumTransactionData,\n replacementReason: ReplacementReason\n ) {\n const originalHash = tx.replaceHash;\n\n if (originalHash != null) {\n updateTransaction(originalHash, 'tx', {\n // new id\n id: tx.hash,\n replacementReason\n });\n }\n }\n\n // Watch for user account change:\n // -> Unsubscribe Blocknative from old account if exits\n // -> Listen to new account for transactions and update balances\n watch(\n () => account.value,\n (newAccount, oldAccount) => {\n if (supportsBlocknative.value) {\n if (oldAccount) blocknative.unsubscribe(oldAccount);\n if (!newAccount) return;\n\n const { emitter } = blocknative.account(newAccount);\n emitter.on('txConfirmed', () => {\n refetchBalances.value();\n refetchAllowances.value();\n });\n\n emitter.on('txSpeedUp', tx =>\n handleTransactionReplacement(\n tx as EthereumTransactionData,\n 'txSpeedUp'\n )\n );\n\n emitter.on('txCancel', tx =>\n handleTransactionReplacement(\n tx as EthereumTransactionData,\n 'txCancel'\n )\n );\n }\n }\n );\n\n // Watch for user network switch\n // -> Display alert message if unsupported or not the same as app network.\n watch(\n () => chainId.value,\n () => {\n if (isUnsupportedNetwork.value) {\n const localeKey = userNetworkConfig.value?.name\n ? 'unavailableOnNetworkWithName'\n : 'unavailableOnNetwork';\n store.commit('alerts/setCurrent', {\n label: t(localeKey, [\n userNetworkConfig.value?.name,\n appNetworkConfig.name\n ]),\n type: 'error',\n persistant: true\n });\n } else if (isMismatchedNetwork.value) {\n store.commit('alerts/setCurrent', {\n label: t('networkMismatch', [appNetworkConfig.name]),\n type: 'error',\n persistant: true\n });\n } else {\n store.commit('alerts/setCurrent', null);\n }\n }\n );\n\n watch(blockNumber, async () => {\n handlePendingTransactions();\n });\n}\n","\n\n\n\n\n","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_AppIcon = _resolveComponent(\"AppIcon\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(_component_AppIcon)\n ]))\n}","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\nimport _imports_0 from '@/assets/images/logo.svg'\n\n\nconst _hoisted_1 = {\n key: 0,\n src: _imports_0,\n width: \"200\",\n class: \"mr-2 -ml-2\"\n}\nconst _hoisted_2 = {\n key: 1,\n src: _imports_0,\n width: \"200\",\n class: \"mr-2 -ml-2\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.darkMode)\n ? (_openBlock(), _createBlock(\"img\", _hoisted_1))\n : (_openBlock(), _createBlock(\"img\", _hoisted_2))\n}","\nimport { defineComponent } from 'vue';\nimport useDarkMode from '@/composables/useDarkMode';\n\nexport default defineComponent({\n name: 'AppIcon',\n\n setup() {\n const { darkMode } = useDarkMode();\n\n return {\n darkMode\n };\n }\n});\n","import { render } from \"./AppIcon.vue?vue&type=template&id=1227ee24&ts=true\"\nimport script from \"./AppIcon.vue?vue&type=script&lang=ts\"\nexport * from \"./AppIcon.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent } from 'vue';\nimport AppIcon from './AppIcon.vue';\n\nexport default defineComponent({\n name: 'AppLogo',\n\n components: {\n AppIcon\n }\n});\n","import { render } from \"./AppLogo.vue?vue&type=template&id=20d16526&ts=true\"\nimport script from \"./AppLogo.vue?vue&type=script&lang=ts\"\nexport * from \"./AppLogo.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createVNode as _createVNode, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createVNode(\"div\", { class: \"w-8\" }, null, -1)\nconst _hoisted_2 = { class: \"flex-1 text-center flex items-center justify-center\" }\nconst _hoisted_3 = {\n key: 0,\n class: \"w-8\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n\n return (_openBlock(), _createBlock(\"div\", {\n class: ['app-nav-alert', _ctx.classes]\n }, [\n _hoisted_1,\n _createVNode(\"div\", _hoisted_2, [\n _createVNode(_component_BalIcon, {\n name: _ctx.iconName,\n class: \"mr-4\"\n }, null, 8, [\"name\"]),\n _createVNode(\"span\", null, _toDisplayString(_ctx.alert.label), 1)\n ]),\n (!_ctx.alert.persistant)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_3, [\n _createVNode(_component_BalIcon, {\n name: \"x\",\n class: \"cursor-pointer\",\n onClick: _ctx.handleClose\n }, null, 8, [\"onClick\"])\n ]))\n : _createCommentVNode(\"\", true)\n ], 2))\n}","\nimport { computed, defineComponent, PropType } from 'vue';\nimport { Alert } from '@/store/modules/alerts';\nimport { useStore } from 'vuex';\n\nexport default defineComponent({\n name: 'NavAlert',\n\n props: {\n alert: { type: Object as PropType, required: true }\n },\n\n setup(props) {\n const store = useStore();\n\n const colorClass = computed(() => {\n switch (props.alert.type) {\n case 'error':\n return 'bg-red-500 text-white';\n default:\n return 'bg-black text-white';\n }\n });\n\n const iconName = computed(() => {\n switch (props.alert.type) {\n case 'error':\n return 'alert-triangle';\n default:\n return 'info';\n }\n });\n\n const classes = computed(() => {\n return {\n [colorClass.value]: true\n };\n });\n\n function handleClose() {\n store.commit('alerts/setCurrent', null);\n }\n\n return { classes, iconName, handleClose };\n }\n});\n","import { render } from \"./AppNavAlert.vue?vue&type=template&id=69d1ff81&ts=true\"\nimport script from \"./AppNavAlert.vue?vue&type=script&lang=ts\"\nexport * from \"./AppNavAlert.vue?vue&type=script&lang=ts\"\n\nimport \"./AppNavAlert.vue?vue&type=style&index=0&id=69d1ff81&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-7496dd6d\")\n\n_pushScopeId(\"data-v-7496dd6d\")\nconst _hoisted_1 = /*#__PURE__*/_createTextVNode(\" Invest\")\nconst _hoisted_2 = /*#__PURE__*/_createVNode(\"span\", { class: \"hidden lg:inline\" }, \" / Farm\", -1)\nconst _hoisted_3 = /*#__PURE__*/_createTextVNode(\" Portfolio \")\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\" fBeets \")\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_router_link = _resolveComponent(\"router-link\")\n\n return (_openBlock(), _createBlock(\"div\", {\n class: `app-nav-toggle bg-gray-50 dark:bg-gray-${_ctx.darkModeBg}`\n }, [\n _createVNode(_component_router_link, {\n to: { name: 'trade' },\n class: [\n 'toggle-link px-6 rounded-r-lg',\n { [_ctx.activeClasses]: _ctx.isTradePage }\n ],\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.trackGoal(_ctx.Goals.ClickNavTrade)))\n }, {\n default: _withId(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('trade')), 1)\n ]),\n _: 1\n }, 8, [\"class\"]),\n _createVNode(_component_router_link, {\n to: { name: 'invest' },\n class: [\n 'toggle-link px-6 rounded-l-lg',\n { [_ctx.activeClasses]: _ctx.isInvestPage }\n ],\n onClick: _cache[2] || (_cache[2] = ($event: any) => (_ctx.trackGoal(_ctx.Goals.ClickNavInvest)))\n }, {\n default: _withId(() => [\n _hoisted_1,\n _hoisted_2\n ]),\n _: 1\n }, 8, [\"class\"]),\n (_ctx.isLoggedIn)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 0,\n to: { name: 'my-portfolio' },\n class: [\n 'toggle-link px-4 rounded-l-lg',\n { [_ctx.activeClasses]: _ctx.isPortfolioPage }\n ],\n onClick: _cache[3] || (_cache[3] = ($event: any) => (_ctx.trackGoal(_ctx.Goals.ClickNavHome)))\n }, {\n default: _withId(() => [\n _hoisted_3\n ]),\n _: 1\n }, 8, [\"class\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.isLoggedIn)\n ? (_openBlock(), _createBlock(_component_router_link, {\n key: 1,\n to: { name: 'fbeets' },\n class: [\n 'toggle-link px-4 rounded-l-lg',\n { [_ctx.activeClasses]: _ctx.isFreshBeetsPage }\n ],\n onClick: _cache[4] || (_cache[4] = ($event: any) => (_ctx.trackGoal(_ctx.Goals.ClickNavFreshBeets)))\n }, {\n default: _withId(() => [\n _hoisted_4\n ]),\n _: 1\n }, 8, [\"class\"]))\n : _createCommentVNode(\"\", true)\n ], 2))\n})","\nimport useFathom from '@/composables/useFathom';\nimport { computed, defineComponent } from 'vue';\nimport { useRoute } from 'vue-router';\nimport { EXTERNAL_LINKS } from '@/constants/links';\nimport useApp from '@/composables/useApp';\nimport useWeb3 from '@/services/web3/useWeb3';\n\nexport default defineComponent({\n name: 'AppNavToggle',\n components: {},\n props: {\n darkModeBg: { type: String, default: '800' }\n },\n\n setup() {\n const route = useRoute();\n const activeClasses =\n 'bg-black text-white rounded-lg dark:text-black dark:bg-white';\n const isTradePage = computed(() => route.name === 'trade');\n const isFarmPage = computed(() => String(route.name).startsWith('farm'));\n const isBeetsPage = computed(() => route.name === 'beets');\n const isPortfolioPage = computed(() => route.name === 'my-portfolio');\n const isInvestPage = computed(\n () => route.name === 'invest' || String(route.name).startsWith('pool')\n );\n const isFreshBeetsPage = computed(() => route.name === 'fbeets');\n const isHomePage = computed(\n () =>\n !isTradePage.value &&\n !isFarmPage.value &&\n !isBeetsPage.value &&\n !isInvestPage.value\n );\n const { trackGoal, Goals } = useFathom();\n\n const { appLoading } = useApp();\n const { account, isLoadingProfile } = useWeb3();\n\n const isLoggedIn = computed(\n () => !appLoading.value && !isLoadingProfile.value && !!account.value\n );\n\n return {\n isTradePage,\n isFarmPage,\n activeClasses,\n trackGoal,\n isBeetsPage,\n isInvestPage,\n isHomePage,\n Goals,\n EXTERNAL_LINKS,\n isLoggedIn,\n isPortfolioPage,\n isFreshBeetsPage\n };\n }\n});\n","import { render } from \"./AppNavToggle.vue?vue&type=template&id=7496dd6d&scoped=true&ts=true\"\nimport script from \"./AppNavToggle.vue?vue&type=script&lang=ts\"\nexport * from \"./AppNavToggle.vue?vue&type=script&lang=ts\"\n\nimport \"./AppNavToggle.vue?vue&type=style&index=0&id=7496dd6d&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7496dd6d\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"flex items-center\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_AppNavActivityBtn = _resolveComponent(\"AppNavActivityBtn\")\n const _component_AppNavClaimBtn = _resolveComponent(\"AppNavClaimBtn\")\n const _component_AppNavAccountBtn = _resolveComponent(\"AppNavAccountBtn\")\n const _component_WalletIcon = _resolveComponent(\"WalletIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n\n return (_openBlock(), _createBlock(\"div\", null, [\n (_ctx.account)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(_component_AppNavActivityBtn),\n _createVNode(_component_AppNavClaimBtn),\n _createVNode(_component_AppNavAccountBtn)\n ]))\n : (_openBlock(), _createBlock(_component_BalBtn, {\n key: 1,\n color: \"white\",\n size: _ctx.upToLargeBreakpoint ? 'md' : 'sm',\n onClick: _ctx.toggleWalletSelectModal\n }, {\n default: _withCtx(() => [\n _createVNode(_component_WalletIcon, { class: \"mr-2\" }),\n _createVNode(\"span\", {\n class: \"hidden lg:inline-block\",\n textContent: _toDisplayString(_ctx.$t('connectWallet'))\n }, null, 8, [\"textContent\"]),\n _createVNode(\"span\", {\n class: \"lg:hidden\",\n textContent: _toDisplayString(_ctx.$t('connect'))\n }, null, 8, [\"textContent\"])\n ]),\n _: 1\n }, 8, [\"size\", \"onClick\"]))\n ]))\n}","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Avatar = _resolveComponent(\"Avatar\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_AppNavSettings = _resolveComponent(\"AppNavSettings\")\n const _component_BalPopover = _resolveComponent(\"BalPopover\")\n\n return (_openBlock(), _createBlock(_component_BalPopover, { \"no-pad\": \"\" }, {\n activator: _withCtx(() => [\n _createVNode(_component_BalBtn, {\n class: [\"text-base\", { btn: _ctx.upToLargeBreakpoint }],\n loading: _ctx.isLoadingProfile,\n \"loading-label\": _ctx.upToLargeBreakpoint ? '' : _ctx.$t('connecting'),\n color: \"white\",\n size: _ctx.upToLargeBreakpoint ? 'md' : 'sm',\n circle: _ctx.upToLargeBreakpoint\n }, {\n default: _withCtx(() => [\n (_ctx.nftImage !== null)\n ? (_openBlock(), _createBlock(\"img\", {\n key: 0,\n src: _ctx.nftImage,\n width: \"22\",\n class: \"rounded-full h-22 w-22\"\n }, null, 8, [\"src\"]))\n : (_openBlock(), _createBlock(_component_Avatar, {\n key: 1,\n address: _ctx.account,\n profile: _ctx.profile,\n size: _ctx.avatarSize\n }, null, 8, [\"address\", \"profile\", \"size\"])),\n (_ctx.profile.ens)\n ? (_openBlock(), _createBlock(\"span\", {\n key: 2,\n textContent: _toDisplayString(_ctx.profile.ens),\n class: \"pl-2 hidden lg:inline-block\"\n }, null, 8, [\"textContent\"]))\n : (_openBlock(), _createBlock(\"span\", {\n key: 3,\n textContent: _toDisplayString(_ctx._shorten(_ctx.account)),\n class: \"pl-2 hidden lg:inline-block eth-address\"\n }, null, 8, [\"textContent\"]))\n ]),\n _: 1\n }, 8, [\"class\", \"loading\", \"loading-label\", \"size\", \"circle\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_AppNavSettings)\n ]),\n _: 1\n }))\n}","\n\n\n\n\n","export const APP = {\n Network: process.env.VUE_APP_NETWORK || '1'\n};\n","import Service from '@/services/balancer/contracts/balancer-contracts.service';\nimport ConfigService from '@/services/config/config.service';\nimport { Multicaller } from '@/lib/utils/balancer/contract';\nimport { default as beethovenxNftAbi } from '@/lib/abi/BeethovenxNft.json';\n\nexport default class EarlyLudwigNft {\n service: Service;\n\n constructor(service, private readonly configService = new ConfigService()) {\n this.service = service;\n }\n\n async balanceOf(user: string): Promise {\n const multicaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n beethovenxNftAbi\n );\n\n const result = await multicaller\n .call('balanceOf', this.address, 'balanceOf', [user])\n .execute();\n\n return result.balanceOf.toString();\n }\n\n async tokenOfOwnerByIndex(user: string, index: number) {\n const multicaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n beethovenxNftAbi\n );\n\n const result = await multicaller\n .call('tokenOfOwnerByIndex', this.address, 'tokenOfOwnerByIndex', [\n user,\n index\n ])\n .execute();\n\n return result.tokenOfOwnerByIndex.toString();\n }\n\n async tokenURI(tokenId: number) {\n const multicaller = new Multicaller(\n this.configService.network.key,\n this.service.provider,\n beethovenxNftAbi\n );\n\n const result = await multicaller\n .call('tokenURI', this.address, 'tokenURI', [tokenId])\n .execute();\n\n return result.tokenURI.toString();\n }\n\n public get address(): string {\n return this.service.config.addresses.earlyLudwigNft || '';\n }\n}\n","import { Config } from '@/lib/config';\nimport { default as erc20Abi } from '@/lib/abi/ERC20.json';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { rpcProviderService as _rpcProviderService } from '@/services/rpc-provider/rpc-provider.service';\nimport { configService as _configService } from '@/services/config/config.service';\nimport EarlyLudwigNft from './contracts/early-ludwig-nft';\n\nexport default class NftContractService {\n earlyLudwigNft: EarlyLudwigNft;\n config: Config;\n provider: JsonRpcProvider;\n\n constructor(\n readonly configService = _configService,\n readonly rpcProviderService = _rpcProviderService\n ) {\n this.provider = this.rpcProviderService.jsonProvider;\n this.config = this.configService.network;\n\n // Init contracts\n this.earlyLudwigNft = new EarlyLudwigNft(this);\n }\n\n // Combine all the ABIs and remove duplicates\n public get allABIs() {\n return Object.values(\n Object.fromEntries([...erc20Abi].map(row => [row.name, row]))\n );\n }\n}\n\nexport const nftContractService = new NftContractService();\n","import { computed, reactive } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { QueryObserverOptions } from 'react-query/core';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport useApp from '../useApp';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { nftContractService } from '@/services/nft/nft-contracts.service';\nimport axios from 'axios';\n\nexport default function useNftQuery(\n options: QueryObserverOptions = {}\n) {\n /**\n * COMPOSABLES\n */\n const { appLoading } = useApp();\n const { account } = useWeb3();\n\n const enabled = computed(() => !appLoading.value);\n const queryKey = QUERY_KEYS.Account.Nft(account);\n\n const queryFn = async () => {\n if (!account.value) {\n return null;\n }\n const balance = await nftContractService.earlyLudwigNft.balanceOf(\n account.value\n );\n if (parseInt(balance) === 0) {\n return null;\n }\n\n // we just take the first nft\n const tokenId = await nftContractService.earlyLudwigNft.tokenOfOwnerByIndex(\n account.value,\n 0\n );\n\n const ipfsMetadataUri = await nftContractService.earlyLudwigNft.tokenURI(\n tokenId\n );\n const metadataCid = ipfsMetadataUri.replace('ipfs://', '');\n const metadataResponse = await axios.get(\n `https://ipfs.io/ipfs/${metadataCid}`\n );\n const ipfsImageUri = metadataResponse.data.image;\n const imageCid = ipfsImageUri.replace('ipfs://', '');\n\n return `https://ipfs.io/ipfs/${imageCid}`;\n };\n\n const queryOptions = reactive({\n enabled,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","import { render } from \"./AppNavSettings.vue?vue&type=template&id=5cc86466&scoped=true\"\nimport script from \"./AppNavSettings.vue?vue&type=script&lang=js\"\nexport * from \"./AppNavSettings.vue?vue&type=script&lang=js\"\n\nimport \"./AppNavSettings.vue?vue&type=style&index=0&id=5cc86466&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5cc86466\"]])\n\nexport default __exports__","\nimport { computed, defineComponent } from 'vue';\nimport useBreakpoints from '@/composables/useBreakpoints';\nimport AppNavSettings from './AppNavSettings.vue';\nimport Avatar from '@/components/images/Avatar.vue';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useNftQuery from '@/composables/nft/useNftQuery';\n\nexport default defineComponent({\n name: 'AppNavAccountBtn',\n\n components: {\n AppNavSettings,\n Avatar\n },\n\n setup() {\n const { bp, upToLargeBreakpoint } = useBreakpoints();\n const { isLoadingProfile, profile, account } = useWeb3();\n const nftQuery = useNftQuery();\n\n const nftImage = computed(() => {\n return nftQuery.data.value || null;\n });\n\n const avatarSize = computed(() => {\n if (bp.value === 'sm') {\n return 35;\n } else if (['md', 'lg'].includes(bp.value)) {\n return 40;\n } else {\n return 20;\n }\n });\n\n return {\n // computed\n bp,\n account,\n profile,\n avatarSize,\n upToLargeBreakpoint,\n isLoadingProfile,\n nftImage\n };\n }\n});\n","import { render } from \"./AppNavAccountBtn.vue?vue&type=template&id=5aa0c80c&ts=true\"\nimport script from \"./AppNavAccountBtn.vue?vue&type=script&lang=ts\"\nexport * from \"./AppNavAccountBtn.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, Fragment as _Fragment, createTextVNode as _createTextVNode, createSlots as _createSlots } from \"vue\"\n\nconst _hoisted_1 = { class: \"p-3 w-full flex items-center justify-between border-b dark:border-gray-900\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"bg-gray-100 dark:bg-gray-700 my-3 h-px\"\n}\nconst _hoisted_3 = { class: \"w-full p-3 rounded-b-lg bg-white dark:bg-gray-800 text-sm\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ActivityIcon = _resolveComponent(\"ActivityIcon\")\n const _component_ActivityCounter = _resolveComponent(\"ActivityCounter\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_ActivityRows = _resolveComponent(\"ActivityRows\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n const _component_BalPopover = _resolveComponent(\"BalPopover\")\n\n return (_openBlock(), _createBlock(_component_BalPopover, { \"no-pad\": \"\" }, {\n activator: _withCtx(() => [\n _createVNode(_component_BalBtn, {\n color: \"white\",\n size: _ctx.upToLargeBreakpoint ? 'md' : 'sm',\n class: \"mr-2 p-1 relative\",\n circle: _ctx.upToLargeBreakpoint\n }, {\n default: _withCtx(() => [\n (_ctx.pendingTransactions.length === 0)\n ? (_openBlock(), _createBlock(_component_ActivityIcon, { key: 0 }))\n : (_openBlock(), _createBlock(_component_ActivityCounter, {\n key: 1,\n count: _ctx.pendingTransactions.length\n }, null, 8, [\"count\"]))\n ]),\n _: 1\n }, 8, [\"size\", \"circle\"])\n ]),\n default: _withCtx(() => [\n _createVNode(_component_BalCard, {\n class: \"w-72\",\n noPad: \"\",\n noBorder: \"\"\n }, _createSlots({\n header: _withCtx(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"h5\", null, _toDisplayString(_ctx.$t('recentActivityTitle')), 1)\n ])\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", {\n class: ['p-3', { 'h-72 overflow-auto': _ctx.transactions.length > 5 }]\n }, [\n (_ctx.transactions.length > 0)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createVNode(_component_ActivityRows, {\n transactions: _ctx.unconfirmedTransactions,\n \"get-explorer-link\": _ctx.getExplorerLink,\n \"is-successful-transaction\": _ctx.isSuccessfulTransaction\n }, null, 8, [\"transactions\", \"get-explorer-link\", \"is-successful-transaction\"]),\n (\n _ctx.unconfirmedTransactions.length > 0 &&\n _ctx.confirmedTransactions.length > 0\n )\n ? (_openBlock(), _createBlock(\"div\", _hoisted_2))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_ActivityRows, {\n transactions: _ctx.confirmedTransactions,\n \"get-explorer-link\": _ctx.getExplorerLink,\n \"is-successful-transaction\": _ctx.isSuccessfulTransaction\n }, null, 8, [\"transactions\", \"get-explorer-link\", \"is-successful-transaction\"])\n ], 64))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _createTextVNode(_toDisplayString(_ctx.$t('noRecentActivity')), 1)\n ], 64))\n ], 2)\n ]),\n _: 2\n }, [\n (_ctx.transactions.length > 0)\n ? {\n name: \"footer\",\n fn: _withCtx(() => [\n _createVNode(\"div\", _hoisted_3, [\n _createVNode(\"a\", {\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.clearAllTransactions())),\n class: \"text-green-500\"\n }, _toDisplayString(_ctx.$t('clearTransactions')), 1)\n ])\n ])\n }\n : undefined\n ]), 1024)\n ]),\n _: 1\n }))\n}","import { toDisplayString as _toDisplayString, createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-yellow-500 relative\" }\nconst _hoisted_2 = { class: \"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-sm\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SpinnerIcon = _resolveComponent(\"SpinnerIcon\")\n\n return (_openBlock(), _createBlock(\"span\", _hoisted_1, [\n _createVNode(\"span\", _hoisted_2, _toDisplayString(_ctx.count), 1),\n _createVNode(_component_SpinnerIcon, { class: \"h-6 w-6 animate-spin\" })\n ]))\n}","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'ActivityCounter',\n\n props: {\n count: {\n type: Number,\n required: true\n }\n }\n});\n","import { render } from \"./ActivityCounter.vue?vue&type=template&id=0bcffb57&ts=true\"\nimport script from \"./ActivityCounter.vue?vue&type=script&lang=ts\"\nexport * from \"./ActivityCounter.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createVNode as _createVNode, withCtx as _withCtx, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-16c0fde3\")\n\n_pushScopeId(\"data-v-16c0fde3\")\nconst _hoisted_1 = { class: \"font-semibold flex items-center\" }\nconst _hoisted_2 = { class: \"text-sm text-gray-500 dark:text-gray-400 group-hover:text-gray-900 dark:group-hover:text-white transition-colors summary\" }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalLink = _resolveComponent(\"BalLink\")\n const _component_CheckIcon = _resolveComponent(\"CheckIcon\")\n const _component_SpinnerIcon = _resolveComponent(\"SpinnerIcon\")\n\n return (_openBlock(), _createBlock(\"div\", null, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.transactions, (transaction) => {\n return (_openBlock(), _createBlock(\"div\", {\n key: transaction.id,\n class: \"row\"\n }, [\n _createVNode(_component_BalLink, {\n href: _ctx.getExplorerLink(transaction.id, transaction.type),\n disabled: _ctx.disablePending && transaction.status === 'pending',\n external: \"\",\n noStyle: \"\",\n class: \"group\"\n }, {\n default: _withId(() => [\n _createVNode(\"div\", _hoisted_1, [\n _createTextVNode(_toDisplayString(_ctx.$t(`transactionAction.${transaction.action}`)) + \" \", 1),\n (!(_ctx.disablePending && transaction.status === 'pending'))\n ? (_openBlock(), _createBlock(_component_BalIcon, {\n key: 0,\n name: \"arrow-up-right\",\n size: \"sm\",\n class: \"ml-1 text-gray-400 dark:text-gray-600 group-hover:text-red-500 transition-colors\"\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(\"div\", _hoisted_2, _toDisplayString(transaction.summary), 1)\n ]),\n _: 2\n }, 1032, [\"href\", \"disabled\"]),\n _createVNode(\"div\", null, [\n (transaction.status === 'confirmed')\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n (_ctx.isSuccessfulTransaction(transaction))\n ? (_openBlock(), _createBlock(_component_CheckIcon, {\n key: 0,\n class: \"text-green-500\"\n }))\n : (_openBlock(), _createBlock(_component_BalIcon, {\n key: 1,\n name: \"alert-circle\",\n class: \"text-red-500\"\n }))\n ], 64))\n : (_openBlock(), _createBlock(_component_SpinnerIcon, {\n key: 1,\n class: \"animate-spin text-yellow-500\"\n }))\n ])\n ]))\n }), 128))\n ]))\n})","\nimport { computed, defineComponent, PropType } from 'vue';\n\nimport { Transaction } from '@/composables/useTransactions';\nimport useWeb3 from '@/services/web3/useWeb3';\n\nexport default defineComponent({\n name: 'ActivityRows',\n\n props: {\n transactions: {\n type: Array as PropType,\n required: true\n },\n getExplorerLink: {\n type: Function as PropType<\n (id: string, type: Transaction['type']) => void\n >,\n required: true\n },\n isSuccessfulTransaction: {\n type: Function as PropType<(transaction: Transaction) => boolean>,\n required: true\n }\n },\n\n setup() {\n const { connector } = useWeb3();\n\n const disablePending = computed(() => connector.value?.id === 'gnosis');\n return {\n disablePending\n };\n }\n});\n","import { render } from \"./ActivityRows.vue?vue&type=template&id=16c0fde3&scoped=true&ts=true\"\nimport script from \"./ActivityRows.vue?vue&type=script&lang=ts\"\nexport * from \"./ActivityRows.vue?vue&type=script&lang=ts\"\n\nimport \"./ActivityRows.vue?vue&type=style&index=0&id=16c0fde3&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-16c0fde3\"]])\n\nexport default __exports__","\nimport { computed, defineComponent } from 'vue';\nimport useBreakpoints from '@/composables/useBreakpoints';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTransactions from '@/composables/useTransactions';\n\nimport ActivityCounter from './ActivityCounter.vue';\nimport ActivityRows from './ActivityRows.vue';\n\nexport default defineComponent({\n name: 'AppNavActivityBtn',\n\n components: {\n ActivityCounter,\n ActivityRows\n },\n\n setup() {\n // COMPOSABLES\n const { upToLargeBreakpoint } = useBreakpoints();\n const { isLoadingProfile, profile, account } = useWeb3();\n const {\n transactions,\n pendingTransactions,\n getExplorerLink,\n clearAllTransactions,\n isSuccessfulTransaction\n } = useTransactions();\n\n // COMPUTED\n const unconfirmedTransactions = computed(() =>\n transactions.value.filter(({ status }) => status !== 'confirmed')\n );\n\n const confirmedTransactions = computed(() =>\n transactions.value.filter(({ status }) => status === 'confirmed')\n );\n\n return {\n // methods\n clearAllTransactions,\n getExplorerLink,\n isSuccessfulTransaction,\n\n // computed\n account,\n profile,\n upToLargeBreakpoint,\n isLoadingProfile,\n transactions,\n pendingTransactions,\n unconfirmedTransactions,\n confirmedTransactions\n };\n }\n});\n","import { render } from \"./AppNavActivityBtn.vue?vue&type=template&id=28b404ba&ts=true\"\nimport script from \"./AppNavActivityBtn.vue?vue&type=script&lang=ts\"\nexport * from \"./AppNavActivityBtn.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, withCtx as _withCtx, createVNode as _createVNode, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = {\n key: 2,\n class: \"hidden lg:block\"\n}\nconst _hoisted_2 = { class: \"w-80 sm:w-96\" }\nconst _hoisted_3 = /*#__PURE__*/_createVNode(\"h5\", { class: \"text-lg mb-3 px-3 pt-3\" }, \" Farm Incentives \", -1)\nconst _hoisted_4 = /*#__PURE__*/_createVNode(\"div\", { class: \"text-sm text-gray-500 font-medium mb-2 text-left\" }, \" Pending Rewards \", -1)\nconst _hoisted_5 = { class: \"text-xl font-medium truncate flex items-center\" }\nconst _hoisted_6 = {\n key: 0,\n class: \"text-xl font-medium truncate flex items-center\"\n}\nconst _hoisted_7 = { class: \"text-sm text-gray-500 font-medium mt-1 text-left\" }\nconst _hoisted_8 = { class: \"grid grid-cols-2 gap-x-2 gap-y-2 px-2\" }\nconst _hoisted_9 = /*#__PURE__*/_createVNode(\"div\", { class: \"text-sm text-gray-500 font-medium mb-2 text-left\" }, \" Total Deposit \", -1)\nconst _hoisted_10 = { class: \"text-xl font-medium truncate flex items-center\" }\nconst _hoisted_11 = { class: \"text-sm text-gray-500 font-medium mt-1 text-left\" }\nconst _hoisted_12 = /*#__PURE__*/_createVNode(\"div\", { class: \"text-sm text-gray-500 font-medium mb-2 text-left\" }, \" Average APR \", -1)\nconst _hoisted_13 = { class: \"text-xl font-medium truncate flex items-center\" }\nconst _hoisted_14 = { class: \"text-sm text-gray-500 font-medium mt-1 text-left\" }\nconst _hoisted_15 = { class: \"mx-2 mb-2 mt-2\" }\nconst _hoisted_16 = /*#__PURE__*/_createTextVNode(\" Harvest All Rewards \")\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_StarsIcon = _resolveComponent(\"StarsIcon\")\n const _component_BalLoadingIcon = _resolveComponent(\"BalLoadingIcon\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalCard = _resolveComponent(\"BalCard\")\n const _component_BalPopover = _resolveComponent(\"BalPopover\")\n\n return (_openBlock(), _createBlock(_component_BalPopover, { \"no-pad\": \"\" }, {\n activator: _withCtx(() => [\n _createVNode(_component_BalBtn, {\n color: \"white\",\n class: \"mr-2 text-base\",\n size: _ctx.upToLargeBreakpoint ? 'md' : 'sm',\n circle: _ctx.upToLargeBreakpoint\n }, {\n default: _withCtx(() => [\n (\n _ctx.upToLargeBreakpoint ? !(_ctx.isLoadingPools && _ctx.isLoadingFarms) : true\n )\n ? (_openBlock(), _createBlock(_component_StarsIcon, {\n key: 0,\n class: { 'mr-2': !_ctx.upToLargeBreakpoint }\n }, null, 8, [\"class\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.harvesting || _ctx.isLoadingPools || _ctx.isLoadingFarms)\n ? (_openBlock(), _createBlock(_component_BalLoadingIcon, {\n key: 1,\n size: \"sm\"\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_1, _toDisplayString(_ctx.data.pendingRewardValue), 1))\n ]),\n _: 1\n }, 8, [\"size\", \"circle\"])\n ]),\n default: _withCtx(() => [\n _createVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(_component_BalCard, { class: \"mx-2 mb-2\" }, {\n default: _withCtx(() => [\n _hoisted_4,\n _createVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.data.pendingBeets), 1),\n (_ctx.data.hasPendingRewardToken)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_6, _toDisplayString(_ctx.data.pendingRewardToken), 1))\n : _createCommentVNode(\"\", true),\n _createVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.data.pendingRewardValue), 1)\n ]),\n _: 1\n }),\n _createVNode(\"div\", _hoisted_8, [\n _createVNode(_component_BalCard, { class: \"\" }, {\n default: _withCtx(() => [\n _hoisted_9,\n _createVNode(\"div\", _hoisted_10, _toDisplayString(_ctx.data.totalBalance), 1),\n _createVNode(\"div\", _hoisted_11, _toDisplayString(_ctx.data.numFarms) + \" \" + _toDisplayString(_ctx.data.numFarms === 1 ? 'Farm' : 'Farms'), 1)\n ]),\n _: 1\n }),\n _createVNode(_component_BalCard, null, {\n default: _withCtx(() => [\n _hoisted_12,\n _createVNode(\"div\", _hoisted_13, _toDisplayString(_ctx.data.apr), 1),\n _createVNode(\"div\", _hoisted_14, _toDisplayString(_ctx.data.dailyApr) + \" Daily \", 1)\n ]),\n _: 1\n })\n ]),\n _createVNode(\"div\", _hoisted_15, [\n _createVNode(_component_BalBtn, {\n type: \"submit\",\n \"loading-label\": \"Harvesting\",\n disabled: !_ctx.hasFarmRewards,\n loading: _ctx.harvesting,\n onClick: _ctx.harvestAllRewards,\n class: \"w-full\"\n }, {\n default: _withCtx(() => [\n _hoisted_16\n ]),\n _: 1\n }, 8, [\"disabled\", \"loading\", \"onClick\"])\n ])\n ])\n ]),\n _: 1\n }))\n}","\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport { Alert } from '@/store/modules/alerts';\nimport useNumbers from '@/composables/useNumbers';\nimport { sumBy } from 'lodash';\nimport numeral from 'numeral';\nimport usePools from '@/composables/pools/usePools';\nimport useEthers from '@/composables/useEthers';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useBreakpoints from '@/composables/useBreakpoints';\n\nexport default defineComponent({\n name: 'NavAlert',\n\n props: {\n alert: { type: Object as PropType, required: true }\n },\n\n setup(props) {\n const { isWalletReady } = useWeb3();\n const { txListener } = useEthers();\n const { fNum } = useNumbers();\n const {\n isLoadingPools,\n isLoadingFarms,\n onlyPoolsWithFarms,\n harvestAllFarms,\n refetchFarmsForUser\n } = usePools();\n const harvesting = ref(false);\n const { upToLargeBreakpoint } = useBreakpoints();\n\n const data = computed(() => {\n const farms = onlyPoolsWithFarms.value.map(pool => pool.farm);\n const pendingRewardToken = sumBy(farms, farm => farm.pendingRewardToken);\n const pendingRewardTokenValue = sumBy(\n farms,\n farm => farm.pendingRewardTokenValue\n );\n const pendingBeetsValue = sumBy(farms, farm => farm.pendingBeetsValue);\n\n const averageApr =\n sumBy(farms, farm => farm.apr * (farm.stake || 0)) /\n sumBy(farms, farm => farm.stake || 0);\n\n return {\n numFarms: farms.filter(farm => farm.stake > 0).length,\n totalBalance: fNum(\n sumBy(farms, farm => farm.stake || 0),\n 'usd'\n ),\n pendingBeets:\n numeral(sumBy(farms, farm => farm.pendingBeets)).format(\n '0,0.[0000]'\n ) + ' BEETS',\n hasPendingRewardToken: pendingRewardToken > 0,\n pendingRewardToken:\n numeral(pendingRewardToken).format('0,0.[0000]') + ' HND',\n pendingRewardValue: fNum(\n pendingBeetsValue + pendingRewardTokenValue,\n 'usd'\n ),\n apr: fNum(averageApr, 'percent'),\n dailyApr: fNum(averageApr / 365, 'percent')\n };\n });\n\n const hasFarmRewards = computed(\n () =>\n onlyPoolsWithFarms.value.filter(pool => pool.farm.stake > 0).length > 0\n );\n\n async function harvestAllRewards(): Promise {\n const farmIds = onlyPoolsWithFarms.value\n .filter(pool => pool.farm.stake > 0)\n .map(pool => pool.farm.id);\n\n harvesting.value = true;\n const tx = await harvestAllFarms(farmIds);\n\n if (!tx) {\n harvesting.value = false;\n return;\n }\n\n txListener(tx, {\n onTxConfirmed: async () => {\n await refetchFarmsForUser();\n harvesting.value = false;\n },\n onTxFailed: () => {\n harvesting.value = false;\n }\n });\n }\n\n return {\n data,\n hasFarmRewards,\n fNum,\n harvestAllRewards,\n harvesting,\n upToLargeBreakpoint,\n isLoadingPools,\n isLoadingFarms\n };\n }\n});\n","import { render } from \"./AppNavClaimBtn.vue?vue&type=template&id=c82d7412&ts=true\"\nimport script from \"./AppNavClaimBtn.vue?vue&type=script&lang=ts\"\nexport * from \"./AppNavClaimBtn.vue?vue&type=script&lang=ts\"\n\nimport \"./AppNavClaimBtn.vue?vue&type=style&index=0&id=c82d7412&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent } from 'vue';\n\nimport { EXTERNAL_LINKS } from '@/constants/links';\n\nimport useFathom from '@/composables/useFathom';\nimport useBreakpoints from '@/composables/useBreakpoints';\nimport useNumbers from '@/composables/useNumbers';\n\nimport AppNavAccountBtn from './AppNavAccountBtn.vue';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport AppNavActivityBtn from './AppNavActivityBtn/AppNavActivityBtn.vue';\nimport AppNavClaimBtn from './AppNavClaimBtn.vue';\n\nexport default defineComponent({\n name: 'AppNavActions',\n\n components: {\n AppNavAccountBtn,\n AppNavActivityBtn,\n AppNavClaimBtn\n },\n\n setup() {\n // COMPOSABLES\n const { upToSmallBreakpoint, upToLargeBreakpoint } = useBreakpoints();\n const { fNum } = useNumbers();\n const { trackGoal, Goals } = useFathom();\n const {\n connectWallet,\n account,\n toggleWalletSelectModal,\n isMainnet,\n isPolygon\n } = useWeb3();\n\n // COMPUTED\n const liquidityMiningSupported = computed(\n () => isMainnet.value || isPolygon.value\n );\n\n // METHODS\n function onClickConnect() {\n trackGoal(Goals.ClickNavConnectWallet);\n }\n\n return {\n // computed\n liquidityMiningSupported,\n account,\n upToSmallBreakpoint,\n upToLargeBreakpoint,\n // methods\n fNum,\n onClickConnect,\n connectWallet,\n toggleWalletSelectModal,\n // constants\n EXTERNAL_LINKS\n };\n }\n});\n","import { render } from \"./AppNavActions.vue?vue&type=template&id=8b8ec328&ts=true\"\nimport script from \"./AppNavActions.vue?vue&type=script&lang=ts\"\nexport * from \"./AppNavActions.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./AppNav.vue?vue&type=template&id=0f8e1ae7&scoped=true\"\nimport script from \"./AppNav.vue?vue&type=script&lang=js\"\nexport * from \"./AppNav.vue?vue&type=script&lang=js\"\n\nimport \"./AppNav.vue?vue&type=style&index=0&id=0f8e1ae7&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0f8e1ae7\"]])\n\nexport default __exports__","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, Fragment as _Fragment, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\nimport _imports_0 from '@/assets/images/investments-headline.svg'\nimport _imports_1 from '@/assets/images/headline.svg'\n\n\nconst _hoisted_1 = { class: \"w-full max-w-3xl mx-auto\" }\nconst _hoisted_2 = { class: \"flex justify-center mt-4\" }\nconst _hoisted_3 = {\n key: 0,\n src: _imports_0,\n width: \"400\"\n}\nconst _hoisted_4 = {\n key: 1,\n class: \"text-3xl font-bold text-white\"\n}\nconst _hoisted_5 = { class: \"flex justify-center mt-2\" }\nconst _hoisted_6 = {\n key: 0,\n src: _imports_1,\n width: \"400\"\n}\nconst _hoisted_7 = { class: \"flex justify-center mt-4\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_BalBtn = _resolveComponent(\"BalBtn\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n\n return (_openBlock(), _createBlock(\"div\", {\n class: ['app-hero', _ctx.classes]\n }, [\n _createVNode(\"div\", _hoisted_1, [\n (_ctx.isWalletReady)\n ? (_openBlock(), _createBlock(_Fragment, { key: 0 }, [\n _createVNode(\"div\", _hoisted_2, [\n (_ctx.darkMode)\n ? (_openBlock(), _createBlock(\"img\", _hoisted_3))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.isLoadingUserPools || _ctx.isLoadingDecoratedFarms)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-10 w-40 mx-auto\",\n white: \"\"\n }))\n : (_openBlock(), _createBlock(\"span\", _hoisted_4, _toDisplayString(_ctx.fNum(_ctx.totalInvestedAndFarmAmount, 'usd', { forcePreset: true })), 1))\n ], 64))\n : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\n _createVNode(\"div\", _hoisted_5, [\n (_ctx.darkMode)\n ? (_openBlock(), _createBlock(\"img\", _hoisted_6))\n : _createCommentVNode(\"\", true)\n ]),\n _createVNode(\"div\", _hoisted_7, [\n _createVNode(_component_BalBtn, {\n color: _ctx.darkMode ? 'gray' : 'white',\n class: \"mr-3\",\n onClick: _ctx.onClickConnect\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('connectWallet')), 1)\n ]),\n _: 1\n }, 8, [\"color\", \"onClick\"]),\n _createVNode(_component_BalBtn, {\n tag: \"a\",\n href: \"https://docs.beethovenx.io/\",\n target: \"_blank\",\n rel: \"noreferrer\",\n color: \"white\",\n outline: \"\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.trackGoal(_ctx.Goals.ClickHeroLearnMore)))\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t('learnMore')) + \" \", 1),\n _createVNode(_component_BalIcon, {\n name: \"arrow-up-right\",\n size: \"sm\",\n class: \"ml-1\"\n })\n ]),\n _: 1\n })\n ])\n ], 64))\n ])\n ], 2))\n}","\nimport { computed, defineComponent } from 'vue';\n\nimport useNumbers from '@/composables/useNumbers';\nimport usePools from '@/composables/pools/usePools';\n\nimport { EXTERNAL_LINKS } from '@/constants/links';\nimport useFathom from '@/composables/useFathom';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useDarkMode from '@/composables/useDarkMode';\nimport { sumBy } from 'lodash';\n\nexport default defineComponent({\n name: 'AppHero',\n\n setup() {\n // COMPOSABLES\n const { fNum } = useNumbers();\n const { isWalletReady, toggleWalletSelectModal } = useWeb3();\n const { trackGoal, Goals } = useFathom();\n const {\n totalInvestedAmount,\n isLoadingUserPools,\n onlyPoolsWithFarms\n } = usePools();\n const { darkMode } = useDarkMode();\n //const { decoratedFarms, isLoadingDecoratedFarms } = useDecoratedFarms();\n\n const classes = computed(() => ({\n ['h-72']: !isWalletReady.value,\n //['h-0']: isWalletReady.value\n ['h-40']: isWalletReady.value\n }));\n\n const totalInvestedAndFarmAmount = computed(() => {\n return (\n sumBy(onlyPoolsWithFarms.value, pool => pool.farm.stake || 0) +\n parseFloat(totalInvestedAmount.value || '0')\n );\n });\n\n function onClickConnect() {\n toggleWalletSelectModal(true);\n trackGoal(Goals.ClickHeroConnectWallet);\n }\n\n return {\n // data\n totalInvestedAmount,\n totalInvestedAndFarmAmount,\n isLoadingUserPools,\n isLoadingDecoratedFarms: false,\n Goals,\n\n // computed\n isWalletReady,\n classes,\n darkMode,\n\n // methods\n toggleWalletSelectModal,\n fNum,\n onClickConnect,\n trackGoal,\n // constants\n EXTERNAL_LINKS\n };\n }\n});\n","import { render } from \"./AppHero.vue?vue&type=template&id=29171d76&ts=true\"\nimport script from \"./AppHero.vue?vue&type=script&lang=ts\"\nexport * from \"./AppHero.vue?vue&type=script&lang=ts\"\n\nimport \"./AppHero.vue?vue&type=style&index=0&id=29171d76&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"p-4 rounded-lg bg-gradient-to-b from-gray-50 dark:from-gray-900 to-gray-100 dark:to-gray-850\" }\nconst _hoisted_2 = /*#__PURE__*/_createVNode(\"h6\", null, \"New to Fantom?\", -1)\nconst _hoisted_3 = { class: \"text-sm\" }\nconst _hoisted_4 = /*#__PURE__*/_createTextVNode(\" Beethovenx is a DeFi app on Fantom Opera. To invest and trade here, you'll first need to set up a Fantom compatible wallet. \")\nconst _hoisted_5 = /*#__PURE__*/_createTextVNode(\" Learn More \")\nconst _hoisted_6 = { class: \"align-middle\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_WalletButton = _resolveComponent(\"WalletButton\")\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalLink = _resolveComponent(\"BalLink\")\n const _component_BalModal = _resolveComponent(\"BalModal\")\n\n return (_openBlock(), _createBlock(_component_BalModal, {\n show: _ctx.isVisible,\n onClose: _cache[1] || (_cache[1] = ($event: any) => (_ctx.$emit('close'))),\n title: \"Connect to a wallet\"\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.wallets, (wallet) => {\n return (_openBlock(), _createBlock(_component_WalletButton, {\n wallet: wallet,\n key: wallet\n }, null, 8, [\"wallet\"]))\n }), 128)),\n _createVNode(\"div\", _hoisted_1, [\n _hoisted_2,\n _createVNode(\"p\", _hoisted_3, [\n _hoisted_4,\n _createVNode(_component_BalLink, {\n href: _ctx.EXTERNAL_LINKS.Ethereum.Wallets,\n external: \"\"\n }, {\n default: _withCtx(() => [\n _hoisted_5,\n _createVNode(\"span\", _hoisted_6, [\n _createVNode(_component_BalIcon, {\n name: \"arrow-up-right\",\n size: \"sm\"\n })\n ])\n ]),\n _: 1\n }, 8, [\"href\"])\n ])\n ])\n ]),\n _: 1\n }, 8, [\"show\"]))\n}","import { createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n class: \"flex items-center\",\n style: {\"width\":\"70%\"}\n}\nconst _hoisted_2 = { class: \"text-gray-700 dark:text-white text-base\" }\nconst _hoisted_3 = { class: \"capitalize\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"button\", {\n class: \"wallet-connect-btn\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.connectWallet(_ctx.wallet)))\n }, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"img\", {\n src: require(`@/assets/images/connectors/${_ctx.wallet}.svg`),\n class: \"h-10 w-10 mr-4\"\n }, null, 8, [\"src\"]),\n _createVNode(\"h5\", _hoisted_2, [\n _createVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.WalletNameMap[_ctx.wallet]), 1)\n ])\n ])\n ]))\n}","\nimport { Wallet, WalletNameMap } from '@/services/web3/web3.plugin';\nimport { defineComponent, PropType } from 'vue';\nimport useWeb3 from '@/services/web3/useWeb3';\nexport default defineComponent({\n props: {\n wallet: {\n type: String as PropType,\n required: true\n }\n },\n setup() {\n const { connectWallet } = useWeb3();\n return {\n WalletNameMap,\n connectWallet\n };\n }\n});\n","import { render } from \"./WalletButton.vue?vue&type=template&id=4dafe01e&ts=true\"\nimport script from \"./WalletButton.vue?vue&type=script&lang=ts\"\nexport * from \"./WalletButton.vue?vue&type=script&lang=ts\"\n\nimport \"./WalletButton.vue?vue&type=style&index=0&id=4dafe01e&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { SupportedWallets } from '@/services/web3/web3.plugin';\nimport WalletButton from '@/components/web3/WalletButton.vue';\nimport { EXTERNAL_LINKS } from '@/constants/links';\nimport { defineComponent } from 'vue';\nexport default defineComponent({\n emits: ['close'],\n components: {\n WalletButton\n },\n props: {\n isVisible: {\n type: Boolean,\n default: false\n }\n },\n setup() {\n return {\n wallets: SupportedWallets.filter(id => id !== 'gnosis'),\n EXTERNAL_LINKS\n };\n }\n});\n","import { render } from \"./WalletSelectModal.vue?vue&type=template&id=e5eb6f22&ts=true\"\nimport script from \"./WalletSelectModal.vue?vue&type=script&lang=ts\"\nexport * from \"./WalletSelectModal.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, resolveComponent as _resolveComponent, TransitionGroup as _TransitionGroup, withCtx as _withCtx, createVNode as _createVNode, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-290a52a7\")\n\n_pushScopeId(\"data-v-290a52a7\")\nconst _hoisted_1 = { class: \"fixed bottom-2 left-2 px-4 z-50\" }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_Notification = _resolveComponent(\"Notification\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(_TransitionGroup, { name: \"slide\" }, {\n default: _withId(() => [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.notifications, (notification) => {\n return (_openBlock(), _createBlock(_component_Notification, {\n key: notification.id,\n notification: notification,\n class: \"mt-2\"\n }, null, 8, [\"notification\"]))\n }), 128))\n ]),\n _: 1\n })\n ]))\n})","import { toDisplayString as _toDisplayString, createVNode as _createVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-d5ba1948\")\n\n_pushScopeId(\"data-v-d5ba1948\")\nconst _hoisted_1 = { class: \"relative p-3 border rounded bg-white dark:bg-gray-800 shadow-lg text-sm dark:text-white dark:border-gray-850 w-64\" }\nconst _hoisted_2 = { class: \"justify-between group\" }\nconst _hoisted_3 = { class: \"font-semibold flex items-center mb-1\" }\nconst _hoisted_4 = { class: \"title\" }\nconst _hoisted_5 = { class: \"message\" }\nconst _hoisted_6 = { key: 1 }\nconst _hoisted_7 = { class: \"font-semibold title mb-1\" }\nconst _hoisted_8 = { class: \"message\" }\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n const _component_BalLink = _resolveComponent(\"BalLink\")\n const _component_BalCloseIcon = _resolveComponent(\"BalCloseIcon\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n (_ctx.notification.transactionMetadata)\n ? (_openBlock(), _createBlock(_component_BalLink, {\n key: 0,\n href: _ctx.notification.transactionMetadata.explorerLink,\n external: \"\",\n noStyle: \"\"\n }, {\n default: _withId(() => [\n _createVNode(\"div\", _hoisted_3, [\n _createVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.notification.title), 1),\n _createVNode(_component_BalIcon, {\n name: \"arrow-up-right\",\n size: \"sm\",\n class: \"ml-1 text-gray-400 dark:text-gray-600 group-hover:text-red-500 transition-colors\"\n })\n ]),\n _createVNode(\"div\", _hoisted_5, _toDisplayString(_ctx.notification.message), 1)\n ]),\n _: 1\n }, 8, [\"href\"]))\n : (_openBlock(), _createBlock(\"div\", _hoisted_6, [\n _createVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.notification.title), 1),\n _createVNode(\"div\", _hoisted_8, _toDisplayString(_ctx.notification.message), 1)\n ])),\n _createVNode(_component_BalCloseIcon, {\n class: \"cursor-pointer text-black dark:text-white flex-shrink-0 absolute top-3 right-2\",\n onClick: _cache[1] || (_cache[1] = ($event: any) => (_ctx.closeNotification()))\n })\n ]),\n _createVNode(\"div\", {\n class: _ctx.progressClasses,\n style: { width: `${(_ctx.progress * 100).toFixed(0)}%` }\n }, null, 6)\n ]))\n})","\nimport {\n computed,\n defineComponent,\n onMounted,\n onUnmounted,\n PropType,\n ref\n} from 'vue';\nimport { TransitionPresets, useTransition } from '@vueuse/core';\n\nimport useNotifications, { Notification } from '@/composables/useNotifications';\n\nexport default defineComponent({\n name: 'Notification',\n\n props: {\n notification: {\n type: Object as PropType,\n required: true\n }\n },\n\n setup(props) {\n // COMPOSABLES\n const totalProgress = ref(1);\n\n const progress = useTransition(totalProgress, {\n duration: props.notification.autoCloseAfterMs,\n transition: TransitionPresets.linear\n });\n\n let notificationTimeout: NodeJS.Timeout;\n\n const { notifications, removeNotification } = useNotifications();\n\n // METHODS\n function closeNotification() {\n removeNotification(props.notification.id);\n }\n\n onMounted(() => {\n totalProgress.value = 0;\n\n if (props.notification.autoCloseAfterMs) {\n notificationTimeout = setTimeout(() => {\n closeNotification();\n }, props.notification.autoCloseAfterMs);\n }\n });\n\n onUnmounted(() => {\n if (notificationTimeout != null) {\n clearTimeout(notificationTimeout);\n }\n });\n\n // COMPUTED\n const progressClasses = computed(() => {\n let bgClasses = 'bg-yellow-600 dark:bg-yellow-500';\n if (props.notification.transactionMetadata?.status === 'confirmed') {\n bgClasses = props.notification.transactionMetadata.isSuccess\n ? 'bg-green-500 dark:bg-green-500'\n : 'bg-red-500 dark:bg-red-500';\n }\n\n return `\n absolute bottom-0 left-0 opacity-80 w-0 transition duration-300 ease-linear h-1 ${bgClasses}\n `;\n });\n\n return {\n // methods\n closeNotification,\n\n // computed\n notifications,\n progressClasses,\n progress\n };\n }\n});\n","import { render } from \"./Notification.vue?vue&type=template&id=d5ba1948&scoped=true&ts=true\"\nimport script from \"./Notification.vue?vue&type=script&lang=ts\"\nexport * from \"./Notification.vue?vue&type=script&lang=ts\"\n\nimport \"./Notification.vue?vue&type=style&index=0&id=d5ba1948&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d5ba1948\"]])\n\nexport default __exports__","\nimport { defineComponent } from 'vue';\n\nimport useNotifications from '@/composables/useNotifications';\n\nimport Notification from './Notification.vue';\n\nexport default defineComponent({\n name: 'Notifications',\n\n components: {\n Notification\n },\n\n setup() {\n // COMPOSABLES\n const { notifications } = useNotifications();\n\n return {\n // computed\n notifications\n };\n }\n});\n","import { render } from \"./Notifications.vue?vue&type=template&id=290a52a7&scoped=true&ts=true\"\nimport script from \"./Notifications.vue?vue&type=script&lang=ts\"\nexport * from \"./Notifications.vue?vue&type=script&lang=ts\"\n\nimport \"./Notifications.vue?vue&type=style&index=0&id=290a52a7&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-290a52a7\"]])\n\nexport default __exports__","import { createVNode as _createVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, withScopeId as _withScopeId, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-66bc14d0\")\n\n_pushScopeId(\"data-v-66bc14d0\")\nconst _hoisted_1 = { class: \"app-nav-footer\" }\nconst _hoisted_2 = { class: \"app-nav-footer-container\" }\nconst _hoisted_3 = /*#__PURE__*/_createVNode(\"div\", { class: \"w-1/3 pl-2\" }, null, -1)\nconst _hoisted_4 = { class: \"w-1/3 flex justify-center\" }\nconst _hoisted_5 = /*#__PURE__*/_createVNode(\"div\", { class: \"w-1/3 flex justify-end pr-2\" }, null, -1)\n_popScopeId()\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_AppNavToggle = _resolveComponent(\"AppNavToggle\")\n\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _createVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createVNode(\"div\", _hoisted_4, [\n _createVNode(_component_AppNavToggle, { darkModeBg: \"700\" })\n ]),\n _hoisted_5\n ])\n ]))\n})","\nimport { defineComponent } from 'vue';\nimport AppNavToggle from '@/components/navs/AppNav/AppNavToggle.vue';\n\nexport default defineComponent({\n name: 'AppFooterNav',\n\n components: {\n AppNavToggle\n //DarkModeToggle\n //IntercomToggle\n }\n});\n","import { render } from \"./AppFooterNav.vue?vue&type=template&id=66bc14d0&scoped=true&ts=true\"\nimport script from \"./AppFooterNav.vue?vue&type=script&lang=ts\"\nexport * from \"./AppFooterNav.vue?vue&type=script&lang=ts\"\n\nimport \"./AppFooterNav.vue?vue&type=style&index=0&id=66bc14d0&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-66bc14d0\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"absolute right-4 top-2 float-right flex flex-col items-end hidden md:block\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"text-green-500 font-semibold text-right\"\n}\nconst _hoisted_3 = {\n key: 1,\n class: \"text-red-500 font-semibold text-right\"\n}\nconst _hoisted_4 = {\n key: 2,\n class: \"font-semibold text-right\"\n}\nconst _hoisted_5 = {\n key: 3,\n class: \"font-semibold text-right\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n (_ctx.tvl > 0 && _ctx.beetsPrice > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_2, \" TVL: $\" + _toDisplayString(_ctx.fNum(_ctx.tvl, 'usd_lg')), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.beetsPrice > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_3, \" BEETS: \" + _toDisplayString(_ctx.fNum(_ctx.beetsPrice, 'usd')), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.beetsPrice > 0 && _ctx.marketCap > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_4, \" Market Cap: $\" + _toDisplayString(_ctx.fNum(_ctx.marketCap, 'usd_lg')), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.beetsPrice > 0 && _ctx.circulatingSupply > 0)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_5, \" Circulating: \" + _toDisplayString(_ctx.fNum(_ctx.circulatingSupply, 'token_lg')), 1))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { computed, defineComponent } from 'vue';\n\nimport useNumbers from '@/composables/useNumbers';\nimport useProtocolDataQuery from '@/composables/queries/useProtocolDataQuery';\n\nexport default defineComponent({\n name: 'GlobalStats',\n\n setup() {\n const protocolDataQuery = useProtocolDataQuery();\n const { fNum } = useNumbers();\n const tvl = computed(\n () => protocolDataQuery.data?.value?.totalLiquidity || 0\n );\n\n const beetsPrice = computed(\n () => protocolDataQuery.data?.value?.beetsPrice || 0\n );\n const circulatingSupply = computed(\n () => protocolDataQuery.data.value?.circulatingSupply || 0\n );\n const marketCap = computed(() => {\n return beetsPrice.value * circulatingSupply.value;\n });\n\n return {\n tvl,\n beetsPrice,\n circulatingSupply,\n marketCap,\n fNum\n };\n }\n});\n","import { render } from \"./GlobalStats.vue?vue&type=template&id=8d6157d2&ts=true\"\nimport script from \"./GlobalStats.vue?vue&type=script&lang=ts\"\nexport * from \"./GlobalStats.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"app-header-bg \" }\nconst _hoisted_2 = /*#__PURE__*/_createVNode(\"div\", { class: \"w-full max-w-3xl\" }, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n _hoisted_2\n ]))\n}","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'AppHeaderBg',\n\n setup() {\n return {};\n }\n});\n","import { render } from \"./AppHeaderBg.vue?vue&type=template&id=5ff4ff9e&ts=true\"\nimport script from \"./AppHeaderBg.vue?vue&type=script&lang=ts\"\nexport * from \"./AppHeaderBg.vue?vue&type=script&lang=ts\"\n\nimport \"./AppHeaderBg.vue?vue&type=style&index=0&id=5ff4ff9e&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { computed, defineComponent, onBeforeMount } from 'vue';\nimport { VueQueryDevTools } from 'vue-query/devtools';\nimport { useStore } from 'vuex';\nimport BigNumber from 'bignumber.js';\nimport { useRoute } from 'vue-router';\nimport SafeAppsSDK from '@gnosis.pm/safe-apps-sdk';\n\nimport useDarkMode from './composables/useDarkMode';\nimport useWeb3Watchers from '@/composables/useWeb3Watchers';\nimport AppNav from '@/components/navs/AppNav/AppNav.vue';\nimport AppHero from '@/components/heros/AppHero.vue';\nimport WalletSelectModal from '@/components/web3/WalletSelectModal.vue';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport { DEFAULT_TOKEN_DECIMALS } from './constants/tokens';\nimport Notifications from '@/components/notifications/Notifications.vue';\nimport useBreakpoints from './composables/useBreakpoints';\nimport { tryPromiseWithTimeout } from './lib/utils/promise';\nimport AppFooterNav from '@/components/navs/AppFooterNav/AppFooterNav.vue';\nimport GlobalStats from '@/components/stats/GlobalStats.vue';\nimport AppHeaderBg from '@/components/heros/AppHeaderBg.vue';\n\nBigNumber.config({ DECIMAL_PLACES: DEFAULT_TOKEN_DECIMALS });\n\nconst isGnosisSafeApp = async (): Promise => {\n // Can't be a Safe app if we're not running in an iframe\n if (window.self === window.top) return false;\n\n // Try to connect to the Gnosis UI by querying Safe info\n // If we get no response then we're not in a Safe app\n try {\n await tryPromiseWithTimeout(new SafeAppsSDK().safe.getInfo(), 1000);\n return true;\n } catch {\n return false;\n }\n};\n\nexport default defineComponent({\n components: {\n AppHeaderBg,\n AppNav,\n AppFooterNav,\n AppHero,\n VueQueryDevTools,\n WalletSelectModal,\n Notifications,\n GlobalStats\n },\n\n setup() {\n // COMPOSABLES\n useWeb3Watchers();\n const {\n isWalletSelectVisible,\n connectWallet,\n toggleWalletSelectModal\n } = useWeb3();\n const store = useStore();\n const route = useRoute();\n const { upToLargeBreakpoint } = useBreakpoints();\n const { darkMode, toggleDarkMode } = useDarkMode();\n\n // COMPUTED\n const isHomePage = computed(() => {\n return route.path === '/invest';\n });\n const isFarmsPage = computed(() => route.path === '/farm');\n // const isPortfolioPage = computed(() => route.path === '/my-portfolio');\n const isInvestPage = computed(() => {\n return route.path === '/invest';\n });\n const isTradePage = computed(() => {\n return route.path === '/trade';\n });\n const showGlobalStats = computed(() => {\n return isInvestPage.value || isFarmsPage.value || isTradePage.value;\n });\n\n // CALLBACKS\n onBeforeMount(async () => {\n // If we're running as a Safe App we want to automatically\n // connect to the provided safe.\n if (await isGnosisSafeApp()) {\n await connectWallet('gnosis');\n // Disable darkmode by default\n if (darkMode) toggleDarkMode();\n }\n\n store.dispatch('app/init');\n });\n\n return {\n // computed\n isWalletSelectVisible,\n isHomePage,\n isFarmsPage,\n upToLargeBreakpoint,\n isInvestPage,\n // isPortfolioPage,\n showGlobalStats,\n // methods\n toggleWalletSelectModal\n };\n }\n});\n","import { render } from \"./App.vue?vue&type=template&id=9e8927f6&ts=true\"\nimport script from \"./App.vue?vue&type=script&lang=ts\"\nexport * from \"./App.vue?vue&type=script&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=9e8927f6&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { defineComponent, h } from 'vue';\nimport App from './App.vue';\nimport * as providerMap from './providers';\n\nconst providers = Object.values(providerMap);\n\nexport default defineComponent({\n components: {\n App,\n ...providerMap\n },\n\n render() {\n function renderProviders(providers) {\n if (!providers.length) return h(App);\n\n const [provider, ...remainingProviders] = providers;\n return h(\n provider,\n {},\n {\n default() {\n return [renderProviders(remainingProviders)];\n }\n }\n );\n }\n\n return renderProviders(providers);\n }\n});\n","import { createApp } from 'vue';\nimport store from '@/store';\nimport router from '@/plugins/router';\nimport mixins from '@/plugins/mixins';\nimport i18n from '@/plugins/i18n';\nimport blocknative from '@/plugins/blocknative';\nimport vueQuery from '@/plugins/vueQuery';\nimport initSentry from '@/plugins/sentry';\nimport registerDirectives from '@/plugins/directives';\nimport { registerGlobalComponents } from '@/plugins/components';\nimport Web3Plugin from '@/services/web3/web3.plugin';\nimport { use } from 'echarts/core';\nimport { LineChart, PieChart, BarChart } from 'echarts/charts';\nimport {\n TitleComponent,\n TooltipComponent,\n GridComponent,\n LegendComponent,\n ToolboxComponent,\n MarkPointComponent,\n MarkLineComponent\n} from 'echarts/components';\nimport VueVirtualScroller from 'vue3-virtual-scroller';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport '@/assets/css/tailwind.css';\nimport '@/assets/css/index.css';\nimport 'vue3-virtual-scroller/dist/vue3-virtual-scroller.css';\nimport { Web3Provider } from '@ethersproject/providers';\nimport Root from './Root';\nimport VueCountdown from '@chenfengyuan/vue-countdown';\n\nuse([\n TitleComponent,\n TooltipComponent,\n CanvasRenderer,\n LineChart,\n PieChart,\n BarChart,\n GridComponent,\n LegendComponent,\n ToolboxComponent,\n MarkPointComponent,\n MarkLineComponent\n]);\n\nconst app = createApp(Root)\n .use(i18n)\n .use(router)\n .use(store)\n .use(blocknative)\n .use(vueQuery)\n .use(Web3Plugin, Web3Provider)\n .mixin(mixins)\n .use(VueVirtualScroller);\n\nregisterDirectives(app);\nregisterGlobalComponents(app);\ninitSentry(app);\n\napp.component(VueCountdown.name || '', VueCountdown);\napp.mount('#app');\n\nexport default app;\n","\n\n\n","import { render } from \"./BalAsset.vue?vue&type=template&id=0c0212ae\"\nimport script from \"./BalAsset.vue?vue&type=script&lang=js\"\nexport * from \"./BalAsset.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export const MAINNET_GOALS = {\n ClickPoolsTableRow: 'NISBIX8B',\n ClickHeroConnectWallet: 'EIWJBKAR',\n ClickHeroLearnMore: 'HCF8QUTE',\n ClickNavConnectWallet: 'ZIFARDWY',\n ClickNavTrade: 'JKBUPMVR',\n ClickNavInvest: 'XDOFAMCI',\n ClickNavLogo: 'OT9IBNCJ',\n ClickInvestSettings: 'ZNU2DISP',\n ClickTradeSettings: '1M2HMAYJ',\n ClickInvest: 'BRT10IGE',\n ClickWithdraw: 'P5GBF31M',\n Invested: 'KN2G0QUT',\n Withdrawal: 'X4NINEBD',\n ConnectedWallet: '2QHQLTRF',\n ClickSwap: 'OGZ8QPE8',\n Swapped: 'VYZUMRKD'\n};\n\nexport const POLYGON_GOALS = {\n ClickPoolsTableRow: '5RT8Q9KZ',\n ClickHeroConnectWallet: 'I8P8QBXP',\n ClickHeroLearnMore: 'ICVACFRJ',\n ClickNavConnectWallet: 'HZQOCQ1G',\n ClickNavTrade: 'CGQREIWO',\n ClickNavInvest: 'ENSNQJPP',\n ClickNavLogo: 'IQPSAOJ5',\n ClickInvestSettings: 'VN3WDRQD',\n ClickTradeSettings: 'E6TS9Z3I',\n ClickInvest: 'GHXZHXM9',\n ClickWithdraw: 'GVMC8LT9',\n Invested: 'LFVDQ2JU',\n Withdrawal: 'AIWFJX9X',\n ConnectedWallet: 'NG87QMMZ',\n ClickSwap: 'MJFXHNG6',\n Swapped: 'I7LE2TCF'\n};\n\nexport const GOALS_MAP = {\n '1': MAINNET_GOALS,\n '137': POLYGON_GOALS\n};\n","import ConfigService from '../config/config.service';\nimport { GOALS_MAP } from '@/constants/fathom';\n\nexport class Goals {\n ClickPoolsTableRow = '';\n ClickHeroConnectWallet = '';\n ClickHeroLearnMore = '';\n ClickNavConnectWallet = '';\n ClickNavTrade = '';\n ClickNavFarm = '';\n ClickNavBeets = '';\n ClickNavFreshBeets = '';\n ClickNavInvest = '';\n ClickNavHome = '';\n ClickNavLogo = '';\n ClickInvestSettings = '';\n ClickTradeSettings = '';\n ClickInvest = '';\n ClickFarmDeposit = '';\n ClickFarmWithdraw = '';\n ClickWithdraw = '';\n Invested = '';\n Withdrawal = '';\n ConnectedWallet = '';\n ClickSwap = '';\n Swapped = '';\n\n constructor(configService = new ConfigService(), goalsMap = GOALS_MAP) {\n const appNetworkGoals = goalsMap[configService.network.key];\n\n if (appNetworkGoals) {\n Object.keys(appNetworkGoals).forEach(key => {\n this[key] = appNetworkGoals[key];\n });\n }\n }\n}\n","import { Goals } from '@/services/fathom/goals';\n\ninterface Fathom {\n trackPageview: (opts?: PageViewOptions) => void;\n trackGoal: (code: string, cents: number) => void;\n}\n\nexport type PageViewOptions = {\n url?: string;\n referrer?: string;\n};\n\ntype FathomCommand =\n | { type: 'trackPageview'; opts: PageViewOptions | undefined }\n | { type: 'trackGoal'; code: string; cents: number };\n\ndeclare global {\n interface Window {\n fathom?: Fathom;\n __fathomClientQueue: FathomCommand[];\n }\n}\n\nconst goals = new Goals();\n\nexport default function useFathom() {\n function trackGoal(goal: string, value = 0) {\n if (!window.fathom) return;\n try {\n window.fathom.trackGoal(goal, value);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { trackGoal, Goals: goals };\n}\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalSelectInput.vue?vue&type=style&index=0&id=474f5c04&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AppNavToggle.vue?vue&type=style&index=0&id=7496dd6d&scoped=true&lang=css\"","var map = {\n\t\"./BalAlert/BalAlert.vue\": \"b093\",\n\t\"./BalAsset/BalAsset.vue\": \"cf73\",\n\t\"./BalAsset/BalAssetSet.vue\": \"f109\",\n\t\"./BalBlankSlate/BalBlankSlate.vue\": \"53f0\",\n\t\"./BalBtn/BalBtn.vue\": \"c9dc\",\n\t\"./BalBtnGroup/BalBtnGroup.vue\": \"1e79\",\n\t\"./BalCard/BalCard.vue\": \"5eef\",\n\t\"./BalCheckbox/BalCheckbox.vue\": \"f635\",\n\t\"./BalChip/BalChip.vue\": \"76d0\",\n\t\"./BalForm/BalForm.vue\": \"a970\",\n\t\"./BalIcon/BalIcon.vue\": \"4da8\",\n\t\"./BalLbpLineChart/BalLbpLineChart.vue\": \"19a3\",\n\t\"./BalLineChart/BalLineChart.vue\": \"de5a\",\n\t\"./BalLink/BalLink.vue\": \"aa4a\",\n\t\"./BalLoadingBlock/BalLoadingBlock.vue\": \"7968\",\n\t\"./BalLoadingIcon/BalLoadingIcon.vue\": \"91f3\",\n\t\"./BalLoadingNumber/BalLoadingNumber.vue\": \"70d4\",\n\t\"./BalModal/BalModal.vue\": \"6087\",\n\t\"./BalPopover/BalPopover.vue\": \"6402\",\n\t\"./BalRadio/BalRadio.vue\": \"bad7\",\n\t\"./BalRangeInput/BalRangeInput.vue\": \"6908\",\n\t\"./BalSelectInput/BalSelectInput.vue\": \"1ed5\",\n\t\"./BalTable/BalTable.vue\": \"a6e4\",\n\t\"./BalTabs/BalTabs.vue\": \"1920\",\n\t\"./BalTextInput/BalTextInput.vue\": \"7dd1\",\n\t\"./BalToggle/BalToggle.vue\": \"091c\",\n\t\"./BalTooltip/BalTooltip.vue\": \"f7ed\",\n\t\"./icons/ActivityIcon.vue\": \"79f0\",\n\t\"./icons/ArrowDownIcon.vue\": \"5531\",\n\t\"./icons/BalCloseIcon.vue\": \"a0999\",\n\t\"./icons/CheckIcon.vue\": \"d583\",\n\t\"./icons/IntercomIcon.vue\": \"07d3\",\n\t\"./icons/LightBulbIcon.vue\": \"f98c\",\n\t\"./icons/MinusSquareIcon.vue\": \"6987\",\n\t\"./icons/MoonIcon.vue\": \"beb4\",\n\t\"./icons/PlusSquareIcon.vue\": \"890e\",\n\t\"./icons/SpinnerIcon.vue\": \"5d91\",\n\t\"./icons/StarsIcon.vue\": \"73ec\",\n\t\"./icons/SunIcon.vue\": \"c8650\",\n\t\"./icons/WalletIcon.vue\": \"7694\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"d238\";","module.exports = __webpack_public_path__ + \"img/portis.f239eb8f.svg\";","const defaultTheme = require('tailwindcss/defaultTheme');\nmodule.exports = {\n purge: {\n content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],\n options: {\n safelist: [\n /^shadow/,\n /^bg/,\n /^text/,\n /^border/,\n /^from/,\n /^to/,\n /^dark:/,\n /^hover:/,\n 'dark',\n /^dark:/\n ]\n }\n },\n darkMode: 'class', // false or 'media' or 'class'\n theme: {\n fontFamily: {\n body: [\n 'Inter-Variable',\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Helvetica',\n 'Arial',\n 'sans-serif',\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"'\n ],\n display: ['\"Gotham Rounded\"', 'Times', '\"Times New Roman\"', 'serif']\n },\n boxShadow: {\n sm: '0 2px 4px 0 rgba(0,0,0,0.05)',\n DEFAULT:\n '0px 4px 6px -1px rgba(0, 0, 0, 0.05), 0px 2px 4px -1px rgba(0, 0, 0, 0.05)',\n lg: '0 2px 4px 0 rgba(0,0,0,0.03), 0 10px 40px 0 rgba(0,0,0,0.05)',\n xl: '0 2px 4px 0 rgba(0,0,0,0.05), 0 0px 40px 0 rgba(0,0,0,0.1)',\n inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.05)',\n none: 'none'\n },\n borderColor: theme => ({\n ...theme('colors'),\n DEFAULT: theme('colors.gray.100', 'currentColor')\n }),\n screens: {\n xs: '440px',\n ...defaultTheme.screens\n },\n extend: {\n colors: {\n gray: {\n 50: '#F8FAFC',\n 100: '#EAF0F6',\n 200: '#E2E8F0',\n 300: '#CBD5E1',\n 400: '#94A3B8',\n 500: '#64748B',\n 600: '#475569',\n 700: '#334155',\n 800: '#1E293B',\n 850: '#162031',\n 900: '#0F172A'\n },\n primary: {\n 50: '#53555e',\n 100: '#494b54',\n 200: '#3f414a',\n 300: '#353740',\n 400: '#2b2d36',\n 500: '#21232c',\n 600: '#171922',\n 700: '#0d0f18',\n 800: '#03050e',\n 900: '#000004'\n },\n 'primary-dark': {\n 50: '#6a7cff',\n 100: '#6072ff',\n 200: '#5668ff',\n 300: '#4c5eff',\n 400: '#4254ff',\n 500: '#384aff',\n 600: '#2e40f5',\n 700: '#2436eb',\n 800: '#1a2ce1',\n 900: '#1022d7'\n },\n blue: {\n 50: '#6a7cff',\n 100: '#6072ff',\n 200: '#5668ff',\n 300: '#4c5eff',\n 400: '#4254ff',\n 500: '#384aff',\n 600: '#2e40f5',\n 700: '#2436eb',\n 800: '#1a2ce1',\n 900: '#1022d7'\n },\n pink: {\n 50: '#ff4dff',\n 100: '#ff43ff',\n 200: '#ff39ff',\n 300: '#ff2fff',\n 400: '#fc25ff',\n 500: '#f21bf6',\n 600: '#e811ec',\n 700: '#de07e2',\n 800: '#d400d8',\n 900: '#ca00ce'\n },\n green: {\n 500: '#00E59D'\n },\n red: {\n 500: '#FF0000'\n }\n }\n }\n },\n variants: {\n extend: {\n margin: ['first'],\n zIndex: ['hover'],\n borderWidth: ['dark', 'last']\n }\n },\n plugins: []\n};\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalAssetSet.vue?vue&type=style&index=0&id=f2d51ae0&scoped=true&lang=css\"","\n","import { render } from \"./CheckIcon.vue?vue&type=template&id=05da454c\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AppNavAlert.vue?vue&type=style&index=0&id=69d1ff81&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BalPopover.vue?vue&type=style&index=0&id=6f12ff38&lang=css\"","import rinkeby from './rinkeby.json';\nimport fantom from './fantom.json';\nimport astar from './astar.json';\n\nexport interface Config {\n key: string;\n chainId: number;\n chainName: string;\n name: string;\n shortName: string;\n network: string;\n unknown: boolean;\n rpc: string;\n publicRpc?: string;\n ws: string;\n loggingRpc: string;\n explorer: string;\n subgraph: string;\n farmSubgraph: string;\n blockSubgraph: string;\n backendUrl: string;\n poolsUrlV1: string;\n poolsUrlV2: string;\n nativeAsset: {\n name: string;\n address: string;\n symbol: string;\n decimals: number;\n deeplinkId: string;\n logoURI: string;\n };\n addresses: {\n exchangeProxy: string;\n merkleRedeem: string;\n multicall: string;\n vault: string;\n masterChef: string;\n beethovenxToken: string;\n fbeetsVestingToken: string;\n fbeetsToken: string;\n weightedPoolFactory: string;\n stablePoolFactory: string;\n weth: string;\n stETH: string;\n wstETH: string;\n usdc: string;\n beets: string;\n lidoRelayer: string;\n balancerHelpers: string;\n beetsUsdcReferencePricePool: string;\n defaultPoolOwner: string;\n earlyLudwigNft: string;\n hnd: string;\n hndRewarder: string;\n };\n strategies: Record<\n string,\n {\n type: string;\n name: string;\n }\n >;\n lbp: {\n poolId: string;\n tokenAddress: string;\n tokenSymbol: string;\n startingAmount: number;\n usdcAddress: string;\n startTime: string;\n endTime: string;\n weightStep: number;\n timeStep: number;\n };\n etherscan: {\n apiKey: string;\n apiUrl: string;\n };\n tokenListSanityUrl: string;\n configSanityUrl: string;\n}\n\nconst config: Record = {\n //'1': homestead,\n //'42': kovan,\n '4': rinkeby,\n '250': fantom,\n '592': astar\n //'137': polygon,\n //'12345': test,\n //'43113': fuji,\n // @ts-ignore\n //'17': docker\n};\n\nexport default config;\n","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { key: 1 }\nconst _hoisted_2 = {\n key: 0,\n id: \"lineChartHeader\",\n class: \"mb-4\"\n}\nconst _hoisted_3 = { class: \"text-gray-800 text-xl tracking-wider\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalLoadingBlock = _resolveComponent(\"BalLoadingBlock\")\n const _component_ECharts = _resolveComponent(\"ECharts\")\n\n return (_ctx.isLoading)\n ? (_openBlock(), _createBlock(_component_BalLoadingBlock, {\n key: 0,\n class: \"h-96 mt-16\"\n }))\n : (_openBlock(), _createBlock(\"div\", _hoisted_1, [\n (_ctx.showHeader)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_2, [\n _createVNode(\"h3\", _hoisted_3, _toDisplayString(_ctx.currentValue), 1),\n _createVNode(\"span\", {\n class: {\n 'text-green-400': _ctx.change >= 0,\n 'text-red-400': _ctx.change < 0,\n 'font-medium': true\n }\n }, _toDisplayString(_ctx.numeral(_ctx.change).format('+0.0%')), 3)\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_ECharts, {\n ref: \"chartInstance\",\n class: [_ctx.height ? `h-${_ctx.height}` : '', 'w-full'],\n option: _ctx.chartConfig,\n autoresize: \"\",\n onUpdateAxisPointer: _ctx.handleAxisMoved,\n \"update-options\": { replaceMerge: 'series' }\n }, null, 8, [\"class\", \"option\", \"onUpdateAxisPointer\"])\n ]))\n}","\nimport { computed, defineComponent, PropType, ref } from 'vue';\nimport numeral from 'numeral';\nimport * as echarts from 'echarts/core';\nimport ECharts from 'vue-echarts';\nimport { last } from 'lodash';\nimport useNumbers, { Preset } from '@/composables/useNumbers';\nimport { format } from 'date-fns';\nimport useTailwind from '@/composables/useTailwind';\nimport useDarkMode from '@/composables/useDarkMode';\n\ntype AxisMoveEvent = {\n seriesIndex: number;\n dataIndex: number;\n};\n\ntype ChartData = {\n name: string;\n values: number[];\n};\n\ninterface AxisLabelFormat {\n xAxis?: 'datetime' | Preset | string;\n yAxis?: Preset | string;\n}\n\ntype PeriodOption = {\n option: string;\n value: string;\n};\n\nexport default defineComponent({\n emits: ['periodSelected'],\n props: {\n data: {\n type: Array as PropType,\n required: true\n },\n onAxisMoved: {\n type: Function\n },\n isLoading: {\n type: Boolean,\n default: () => false\n },\n currentGraphingPeriod: {\n type: Number\n },\n periodOptions: {\n type: Array as PropType\n },\n type: {\n type: String as PropType<'category' | 'time'>,\n default: () => 'category'\n },\n hideYAxis: { type: Boolean, default: false },\n hideXAxis: { type: Boolean, default: false },\n showHeader: {\n type: Boolean\n },\n axisLabelFormatter: {\n type: Object as PropType,\n default: () => ({})\n },\n color: {\n type: Array as PropType\n },\n height: {\n type: String\n },\n showLegend: {\n type: Boolean\n },\n legendState: {\n type: Object\n }\n },\n components: {\n ECharts\n },\n setup(props) {\n const chartInstance = ref();\n const lineChart = ref();\n const currentValue = ref('$0,00');\n const change = ref(0);\n const { fNum } = useNumbers();\n const tailwind = useTailwind();\n const { darkMode } = useDarkMode();\n\n const axisColor = computed(() =>\n darkMode.value\n ? tailwind.theme.colors.gray['600']\n : tailwind.theme.colors.gray['100']\n );\n\n // https://echarts.apache.org/en/option.html\n const chartConfig = computed(() => ({\n // controls the legend you see at the top\n // formatter allows us to show the latest value for each series\n legend: {\n show: props.showLegend,\n left: 0,\n top: 0,\n icon: 'roundRect',\n itemHeight: 5,\n formatter: (legendName: string) => {\n const latestValue = last(\n props.data.find(d => d.name === legendName)?.values as any\n ) as [string | number, string | number];\n return `${legendName}: ${fNum(latestValue[1], null, {\n format: props.axisLabelFormatter.yAxis\n })}`;\n },\n selected: props.legendState,\n textStyle: {\n color: darkMode.value\n ? tailwind.theme.colors.gray['100']\n : tailwind.theme.colors.gray['800']\n },\n inactiveColor: darkMode.value\n ? tailwind.theme.colors.gray['700']\n : tailwind.theme.colors.gray['300']\n },\n // controlling the display of the X-Axis\n xAxis: {\n type: 'time',\n show: !props.hideXAxis,\n axisTick: { show: true, alignWithLabel: true },\n axisLine: {\n onZero: false,\n lineStyle: { color: axisColor.value }\n },\n axisLabel: {\n formatter:\n props.axisLabelFormatter.xAxis === 'datetime'\n ? value => format(value, 'HH:mm')\n : props.axisLabelFormatter.xAxis\n ? value =>\n fNum(value, null, { format: props.axisLabelFormatter.xAxis })\n : undefined,\n color: tailwind.theme.colors.gray[400]\n }\n },\n // controlling the display of the Y-Axis\n yAxis: {\n axisLine: {\n show: false,\n lineStyle: { color: axisColor.value }\n },\n type: 'value',\n show: !props.hideYAxis,\n splitNumber: 4,\n splitLine: {\n show: false\n },\n position: 'left',\n axisLabel: {\n show: true,\n formatter: props.axisLabelFormatter.yAxis\n ? value =>\n fNum(value, null, { format: props.axisLabelFormatter.yAxis })\n : undefined,\n color: tailwind.theme.colors.gray[400]\n },\n nameGap: 25\n },\n color: props.color,\n // Controls the boundaries of the chart from the HTML defined rectangle\n grid: {\n left: '2.5%',\n right: 0,\n top: '10%',\n bottom: '5%',\n containLabel: true\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'shadow',\n label: {\n show: false\n }\n },\n backgroundColor: darkMode.value\n ? tailwind.theme.colors.gray['800']\n : tailwind.theme.colors.white,\n borderColor: darkMode.value\n ? tailwind.theme.colors.gray['900']\n : tailwind.theme.colors.white,\n formatter: params => {\n return `\n
\n ${params[0].value[0]}\n ${params\n .map(\n param => `\n \n ${param.marker} ${\n param.seriesName\n } ${fNum(param.value[1], null, {\n format: props.axisLabelFormatter.yAxis\n })}\n \n \n `\n )\n .join('')}\n
\n `;\n }\n },\n series: props.data.map((d, i) => ({\n data: d.values,\n type: 'line',\n smooth: 0.3,\n showSymbol: false,\n name: d.name,\n silent: true,\n animationEasing: function(k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n lineStyle: {\n width: 2\n },\n // This is a retrofitted option to show the small pill with the\n // latest value of the series at the end of the line on the RHS\n // the line is hidden, but the label is shown with extra styles\n markLine: {\n symbol: 'roundRect',\n symbolSize: 0,\n lineStyle: {\n color: 'rgba(0, 0, 0, 0)'\n },\n precision: 5,\n label: {\n backgroundColor: (props.color || [])[i] || 'black',\n borderRadius: 3,\n padding: 4,\n formatter: (params: any) => {\n return fNum(params.data.yAxis, null, {\n format: props.axisLabelFormatter.yAxis\n });\n },\n color: '#FFF',\n fontSize: 10\n },\n data: [\n {\n name: 'Latest',\n yAxis: (last(props.data[i].values) || [])[1]\n }\n ]\n }\n }))\n }));\n\n // Triggered when hovering mouse over different xAxis points\n const handleAxisMoved = ({ dataIndex, seriesIndex }: AxisMoveEvent) => {\n if (!props.showHeader) return;\n props.onAxisMoved &&\n props.onAxisMoved(props.data[seriesIndex].values[dataIndex]);\n currentValue.value = numeral(props.data[dataIndex]).format('$0,0.00');\n\n // no change if first point in the chart\n if (dataIndex === 0) {\n change.value = 0;\n } else {\n const prev = props.data[seriesIndex].values[dataIndex - 1] as number;\n const current = props.data[seriesIndex].values[dataIndex] as number;\n const _change = (current - prev) / prev;\n\n // 100% increase if coming from a 0!\n if (prev === 0 && current !== 0) {\n change.value = 1;\n return;\n }\n\n // any errors or 0 division, fall back to 0\n if (isNaN(_change)) {\n change.value = 0;\n return;\n }\n change.value = _change;\n }\n };\n\n return {\n //refs\n chartInstance,\n lineChart,\n\n // methods\n handleAxisMoved,\n numeral,\n\n // data\n currentValue,\n change,\n\n // computed\n chartConfig\n };\n }\n});\n","import { render } from \"./BalLineChart.vue?vue&type=template&id=51a79d54&ts=true\"\nimport script from \"./BalLineChart.vue?vue&type=script&lang=ts\"\nexport * from \"./BalLineChart.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=0&id=9e8927f6&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./LBPTradePair.vue?vue&type=style&index=0&id=5662d53e&lang=css\"","import { configService } from '@/services/config/config.service';\n\nfunction resolve(uri: string): string {\n if (!uri) return '';\n return uri\n .replace('ipfs://', `https://${configService.env.IPFS_NODE}/ipfs/`)\n .replace('ipns://', `https://${configService.env.IPFS_NODE}/ipns/`);\n}\n\nexport default function useUrls() {\n return { resolve };\n}\n","module.exports = __webpack_public_path__ + \"img/logo.d74224e1.svg\";","module.exports = \"data:image/png;base64,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\"","import axios from 'axios';\nimport { configService as _configService } from '../config/config.service';\n\nexport default class IpfsService {\n gateway: string;\n\n constructor(private readonly configService = _configService) {\n this.gateway = this.configService.env.IPFS_NODE;\n }\n\n async get(hash: string, protocol = 'ipfs'): Promise {\n const { data } = await axios.get(\n `https://${this.gateway}/${protocol}/${hash}`\n );\n return data;\n }\n}\n\nexport const ipfsService = new IpfsService();\n","import axios from 'axios';\nimport { JsonRpcProvider } from '@ethersproject/providers';\nimport { TokenList, TokenListMap } from '@/types/TokenList';\nimport { rpcProviderService as _rpcProviderService } from '@/services/rpc-provider/rpc-provider.service';\nimport { ipfsService as _ipfsService } from '../ipfs/ipfs.service';\nimport { configService as _configService } from '../config/config.service';\n\nexport default class TokenListService {\n provider: JsonRpcProvider;\n appNetworkKey: string;\n\n constructor(\n private readonly configService = _configService,\n private readonly rpcProviderService = _rpcProviderService,\n private readonly ipfsService = _ipfsService\n ) {\n this.provider = this.rpcProviderService.jsonProvider;\n this.appNetworkKey = this.configService.network.key;\n }\n\n public async getTokenListMap(): Promise {\n const url = this.configService.network.tokenListSanityUrl;\n const { data } = await axios.get<{ result: TokenList }>(\n this.configService.network.tokenListSanityUrl\n );\n\n return { [url]: data.result };\n }\n}\n\nexport const tokenListService = new TokenListService();\n","import { reactive } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { UseQueryOptions } from 'react-query/types';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { TokenListMap } from '@/types/TokenList';\nimport { tokenListService } from '@/services/token-list/token-list.service';\nimport { FETCH_ONCE_OPTIONS } from '@/constants/vue-query';\n\n/**\n * TYPES\n */\ntype QueryResponse = TokenListMap;\n\n/**\n * Fetch all token lists, should only happen once.\n */\nexport default function useTokenListsQuery(\n options: UseQueryOptions = {}\n) {\n const queryKey = reactive(QUERY_KEYS.TokenLists.All);\n\n const queryFn = async () => {\n console.log('Fetching tokenLists');\n return tokenListService.getTokenListMap();\n };\n\n const queryOptions = reactive({\n enabled: true,\n ...FETCH_ONCE_OPTIONS,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","import {\n computed,\n ComputedRef,\n InjectionKey,\n provide,\n reactive,\n Ref,\n toRefs\n} from 'vue';\nimport symbolKeys from '@/constants/symbol.keys';\nimport { TokenList, TokenListMap } from '@/types/TokenList';\nimport useTokenListsQuery from '@/composables/queries/useTokenListsQuery';\nimport useWeb3 from '@/services/web3/useWeb3';\n\n/** TYPES */\nexport interface TokenListsState {\n activeListKeys: string[];\n}\n\nexport interface TokenListsProviderResponse {\n activeListKeys: Ref;\n loadingTokenLists: Ref;\n tokenListsLoaded: ComputedRef;\n allTokenLists: ComputedRef;\n activeTokenLists: ComputedRef;\n defaultTokenList: ComputedRef;\n balancerTokenLists: ComputedRef;\n approvedTokenLists: ComputedRef;\n vettedTokenList: ComputedRef;\n toggleTokenList: Function;\n isActiveList: Function;\n}\n\n/** SETUP */\nexport const TokenListsProviderSymbol: InjectionKey = Symbol(\n symbolKeys.Providers.TokenLists\n);\n\nexport default {\n name: 'TokenListsProvider',\n\n setup(props, { slots }) {\n const { appNetworkConfig } = useWeb3();\n /**\n * STATE\n */\n const state: TokenListsState = reactive({\n activeListKeys: [appNetworkConfig.tokenListSanityUrl]\n });\n\n /**\n * QUERIES\n */\n const tokenListsQuery = useTokenListsQuery();\n\n /**\n * COMPUTED\n */\n\n /**\n * All token lists\n */\n const allTokenLists = computed(\n (): TokenListMap =>\n tokenListsQuery.data.value ? tokenListsQuery.data.value : {}\n );\n\n /**\n * Are token lists loading...\n */\n const loadingTokenLists = computed(\n () => tokenListsQuery.isLoading.value || tokenListsQuery.isIdle.value\n );\n\n /**\n * All available token lists are loaded\n */\n const tokenListsLoaded = computed(() => tokenListsQuery.isSuccess.value);\n\n /**\n * All active (toggled) tokenlists\n */\n const activeTokenLists = computed((): TokenListMap => allTokenLists.value);\n\n /**\n * The default Balancer token list.\n */\n const defaultTokenList = computed(\n (): TokenList => allTokenLists.value[appNetworkConfig.tokenListSanityUrl]\n );\n\n /**\n * The Balancer vetted token list, contains LBP tokens.\n */\n const vettedTokenList = computed(\n (): TokenList => allTokenLists.value[appNetworkConfig.tokenListSanityUrl]\n );\n\n /**\n * All Balancer token lists mapped by URI.\n */\n const balancerTokenLists = computed(\n (): TokenListMap => allTokenLists.value\n );\n\n /**\n * Approved token lists mapped by URI.\n * Approved means tokens are compliant and can be presented in the UI.\n * This excludes lists like the Balancer vetted list.\n */\n const approvedTokenLists = computed(\n (): TokenListMap => allTokenLists.value\n );\n\n /**\n * METHODS\n */\n\n /**\n * Adds a token list to the active lists which\n * makes additonal tokens available in the token search modal.\n */\n function toggleTokenList(uri: string): void {\n /*if (!uris.Approved.includes(uri)) return;\n\n if (state.activeListKeys.includes(uri)) {\n // Deactivate token list\n state.activeListKeys.splice(state.activeListKeys.indexOf(uri), 1);\n } else {\n // Activate token list\n state.activeListKeys.push(uri);\n }\n\n lsSet(localStorageKeys.TokenLists.Toggled, state.activeListKeys);*/\n }\n\n /**\n * Given a token list URI checks if the related token\n * list has been toggled via the token search modal.\n */\n function isActiveList(uri: string): boolean {\n return state.activeListKeys.includes(uri);\n }\n\n provide(TokenListsProviderSymbol, {\n // state\n ...toRefs(state),\n // computed\n allTokenLists,\n loadingTokenLists,\n tokenListsLoaded,\n activeTokenLists,\n defaultTokenList,\n balancerTokenLists,\n approvedTokenLists,\n vettedTokenList,\n // methods\n toggleTokenList,\n isActiveList\n });\n\n return () => slots.default();\n }\n};\n","import { reactive, ref, Ref } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { UseQueryOptions } from 'react-query/types';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport {\n beethovenxService,\n TokenPrices\n} from '@/services/beethovenx/beethovenx.service';\n\n/**\n * Fetches token prices for all provided addresses.\n */\nexport default function useTokenPricesQuery(\n addresses: Ref = ref([]),\n options: UseQueryOptions = {}\n) {\n const queryKey = reactive(QUERY_KEYS.Tokens.Prices(addresses));\n\n const queryFn = async () => {\n return beethovenxService.getTokenPrices();\n };\n\n const queryOptions = reactive({\n enabled: true,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","import TokenService from '../token.service';\nimport {\n TokenInfo,\n TokenInfoMap,\n TokenList,\n TokenListMap\n} from '@/types/TokenList';\nimport { getAddress } from '@ethersproject/address';\nimport { Multicaller } from '@/lib/utils/balancer/contract';\nimport { default as erc20Abi } from '@/lib/abi/ERC20.json';\nimport { set } from 'lodash';\n\nexport default class MetadataConcern {\n constructor(private readonly service: TokenService) {}\n\n /**\n * Tries to find metadata for token addresses via all provided\n * TokenLists. If any token metadata can't be found, resort\n * to an onchain multicall.\n */\n async get(\n addresses: string[],\n tokenLists: TokenListMap\n ): Promise {\n addresses = addresses.map(address => getAddress(address));\n const tokenListTokens = this.tokenListsTokensFrom(tokenLists);\n let metaDict = this.getMetaFromLists(addresses, tokenListTokens);\n\n // If token meta can't be found in TokenLists, fetch onchain\n const unknownAddresses = addresses.filter(\n address => !Object.keys(metaDict).includes(address)\n );\n if (unknownAddresses.length > 0) {\n const onchainMeta = await this.getMetaOnchain(addresses);\n metaDict = { ...metaDict, ...onchainMeta };\n }\n\n return metaDict;\n }\n\n private tokenListsTokensFrom(lists: TokenListMap): TokenInfo[] {\n return Object.values(lists)\n .map(list => list.tokens)\n .flat();\n }\n\n private getMetaFromLists(\n addresses: string[],\n tokens: TokenInfo[]\n ): TokenInfoMap {\n const metaDict = {};\n\n addresses.forEach(async address => {\n const tokenMeta = tokens.find(\n token => getAddress(token.address) === address\n );\n if (tokenMeta)\n metaDict[address] = {\n ...tokenMeta,\n address\n };\n });\n\n return metaDict;\n }\n\n private async getMetaOnchain(addresses: string[]): Promise {\n try {\n const network = this.service.configService.network.key;\n const multi = new Multicaller(network, this.service.provider, erc20Abi);\n const metaDict = {};\n\n addresses.forEach(address => {\n set(metaDict, `${address}.address`, address);\n set(metaDict, `${address}.chainId`, parseInt(network));\n set(\n metaDict,\n `${address}.logoURI`,\n `https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/${address}/logo.png`\n );\n multi.call(`${address}.name`, address, 'name');\n multi.call(`${address}.symbol`, address, 'symbol');\n multi.call(`${address}.decimals`, address, 'decimals');\n });\n\n return await multi.execute(metaDict);\n } catch (error) {\n console.error('Failed to fetch onchain meta', addresses, error);\n return {};\n }\n }\n}\n","import TokenService from '../token.service';\nimport { default as erc20Abi } from '@/lib/abi/ERC20.json';\nimport { multicall } from '@/lib/utils/balancer/contract';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { getAddress } from '@ethersproject/address';\nimport { TokenInfoMap } from '@/types/TokenList';\nimport { formatUnits } from '@ethersproject/units';\nimport { chunk } from 'lodash';\nimport { JsonRpcProvider } from '@ethersproject/providers';\n\n// TYPES\nexport type BalanceMap = { [address: string]: string };\n\nexport default class BalancesConcern {\n network: string;\n provider: JsonRpcProvider;\n nativeAssetAddress: string;\n nativeAssetDecimals: number;\n\n constructor(private readonly service: TokenService) {\n this.network = this.service.configService.network.key;\n this.provider = this.service.rpcProviderService.jsonProvider;\n this.nativeAssetAddress = this.service.configService.network.nativeAsset.address;\n this.nativeAssetDecimals = this.service.configService.network.nativeAsset.decimals;\n }\n\n async get(account: string, tokens: TokenInfoMap): Promise {\n const paginatedAddresses = chunk(Object.keys(tokens), 1000);\n const multicalls: Promise[] = [];\n\n paginatedAddresses.forEach(addresses => {\n const request = this.fetchBalances(account, addresses, tokens);\n multicalls.push(request);\n });\n\n const paginatedBalances = await Promise.all(multicalls);\n const validPages = paginatedBalances.filter(\n page => !(page instanceof Error)\n );\n\n return validPages.reduce((result, current) =>\n Object.assign(result, current)\n );\n }\n\n private async fetchBalances(\n account: string,\n addresses: string[],\n tokens: TokenInfoMap\n ): Promise {\n try {\n const balanceMap = {};\n\n // If native asset included in addresses, filter out for\n // multicall, but fetch indpendently and inject.\n if (addresses.includes(this.nativeAssetAddress)) {\n addresses = addresses.filter(\n address => address !== this.nativeAssetAddress\n );\n balanceMap[this.nativeAssetAddress] = await this.fetchNativeBalance(\n account\n );\n }\n\n const balances: [BigNumber][] = await multicall(\n this.network,\n this.provider,\n erc20Abi,\n addresses.map(address => [address, 'balanceOf', [account]])\n );\n\n return {\n ...this.associateBalances(balances, addresses, tokens),\n ...balanceMap\n };\n } catch (error) {\n console.error('Failed to fetch balances for:', addresses);\n throw error;\n }\n }\n\n private async fetchNativeBalance(account: string): Promise {\n const balance = await this.provider.getBalance(account);\n return formatUnits(balance.toString(), this.nativeAssetDecimals);\n }\n\n private associateBalances(\n balances: [BigNumber][],\n addresses: string[],\n tokens: TokenInfoMap\n ): BalanceMap {\n return Object.fromEntries(\n addresses.map((address, i) => [\n getAddress(address),\n formatUnits(balances[i][0].toString(), tokens[address].decimals)\n ])\n );\n }\n}\n","import TokenService from '../token.service';\nimport { default as erc20Abi } from '@/lib/abi/ERC20.json';\nimport { multicall } from '@/lib/utils/balancer/contract';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { getAddress } from '@ethersproject/address';\nimport { formatUnits } from '@ethersproject/units';\nimport { TokenInfoMap } from '@/types/TokenList';\n\n// TYPES\nexport type AllowanceMap = { [address: string]: string };\nexport type ContractAllowancesMap = { [address: string]: AllowanceMap };\n\nexport default class AllowancesConcern {\n nativeAssetAddress: string;\n\n constructor(private readonly service: TokenService) {\n this.nativeAssetAddress = this.service.configService.network.nativeAsset.address;\n }\n\n async get(\n account: string,\n contractAddresses: string[],\n tokens: TokenInfoMap\n ): Promise {\n try {\n // Filter out eth (or native asset) since it's not relevant for allowances.\n const tokenAddresses = Object.keys(tokens).filter(\n address => address !== this.nativeAssetAddress\n );\n\n const allContractAllowances = await Promise.all(\n contractAddresses.map(contractAddress =>\n this.getForContract(account, contractAddress, tokenAddresses, tokens)\n )\n );\n\n const result = Object.fromEntries(\n contractAddresses.map((contract, i) => [\n getAddress(contract),\n allContractAllowances[i]\n ])\n );\n return result;\n } catch (error) {\n console.error('Failed to fetch allowances for:', account, error);\n return {};\n }\n }\n\n async getForContract(\n account: string,\n contractAddress: string,\n tokenAddresses: string[],\n tokens: TokenInfoMap\n ): Promise {\n const network = this.service.configService.network.key;\n const provider = this.service.rpcProviderService.jsonProvider;\n\n const allowances: [BigNumber][] = await multicall(\n network,\n provider,\n erc20Abi,\n tokenAddresses.map(token => [\n token,\n 'allowance',\n [account, contractAddress]\n ])\n );\n\n return Object.fromEntries(\n tokenAddresses.map((token, i) => [\n getAddress(token),\n formatUnits(allowances[i][0].toString(), tokens[token].decimals)\n ])\n );\n }\n}\n","import { JsonRpcProvider } from '@ethersproject/providers';\nimport { rpcProviderService as _rpcProviderService } from '../rpc-provider/rpc-provider.service';\nimport { configService as _configService } from '../config/config.service';\nimport MetadataConcern from './concerns/metadata.concern';\nimport BalancesConcern from './concerns/balances.concern';\nimport AllowancesConcern from './concerns/allowances.concern';\n\nexport default class TokenService {\n provider: JsonRpcProvider;\n metadata: MetadataConcern;\n balances: BalancesConcern;\n allowances: AllowancesConcern;\n\n constructor(\n readonly metadataConcernClass = MetadataConcern,\n readonly balancesConcernClass = BalancesConcern,\n readonly allowancesConcernClass = AllowancesConcern,\n readonly rpcProviderService = _rpcProviderService,\n readonly configService = _configService\n ) {\n this.provider = this.rpcProviderService.jsonProvider;\n this.metadata = new metadataConcernClass(this);\n this.balances = new balancesConcernClass(this);\n this.allowances = new allowancesConcernClass(this);\n }\n}\n\nexport const tokenService = new TokenService();\n","import { reactive, ref, computed, Ref } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { UseQueryOptions } from 'react-query/types';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { tokenService } from '@/services/token/token.service';\nimport { BalanceMap } from '@/services/token/concerns/balances.concern';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokenLists from '../useTokenLists';\nimport { TokenInfoMap } from '@/types/TokenList';\n\n/**\n * TYPES\n */\ntype QueryResponse = BalanceMap;\n\n/**\n * Fetches all balances for provided tokens.\n */\nexport default function useBalancesQuery(\n tokens: Ref = ref({}),\n options: UseQueryOptions = {}\n) {\n /**\n * COMPOSABLES\n */\n const { account, isWalletReady } = useWeb3();\n const { tokenListsLoaded } = useTokenLists();\n\n /**\n * COMPUTED\n */\n const enabled = computed(() => isWalletReady.value && tokenListsLoaded.value);\n const tokenAddresses = computed(() => Object.keys(tokens.value));\n\n /**\n * QUERY INPUTS\n */\n const queryKey = reactive(\n QUERY_KEYS.Account.Balances(account, tokenAddresses)\n );\n\n const queryFn = async () => {\n console.log('Fetching', tokenAddresses.value.length, 'balances');\n return await tokenService.balances.get(account.value, tokens.value);\n };\n\n const queryOptions = reactive({\n enabled,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","import { reactive, ref, Ref, computed } from 'vue';\nimport { useQuery } from 'vue-query';\nimport { UseQueryOptions } from 'react-query/types';\nimport QUERY_KEYS from '@/constants/queryKeys';\nimport { tokenService } from '@/services/token/token.service';\nimport { ContractAllowancesMap } from '@/services/token/concerns/allowances.concern';\nimport useWeb3 from '@/services/web3/useWeb3';\nimport useTokenLists from '../useTokenLists';\nimport { TokenInfoMap } from '@/types/TokenList';\n\n/**\n * TYPES\n */\ntype QueryResponse = ContractAllowancesMap;\n\n/**\n * Fetches all allowances for given tokens for each provided contract address.\n */\nexport default function useAllowancesQuery(\n tokens: Ref = ref({}),\n contractAddresses: Ref = ref([]),\n options: UseQueryOptions = {}\n) {\n /**\n * COMPOSABLES\n */\n const { account, isWalletReady } = useWeb3();\n const { tokenListsLoaded } = useTokenLists();\n\n /**\n * COMPUTED\n */\n const enabled = computed(() => isWalletReady.value && tokenListsLoaded.value);\n const tokenAddresses = computed(() => Object.keys(tokens.value));\n\n /**\n * QUERY INPUTS\n */\n const queryKey = reactive(\n QUERY_KEYS.Account.Allowances(account, contractAddresses, tokenAddresses)\n );\n\n const queryFn = async () => {\n console.log('Fetching', tokenAddresses.value.length, 'allowances');\n return await tokenService.allowances.get(\n account.value,\n contractAddresses.value,\n tokens.value\n );\n };\n\n const queryOptions = reactive({\n enabled,\n ...options\n });\n\n return useQuery(queryKey, queryFn, queryOptions);\n}\n","import {\n toRefs,\n toRef,\n computed,\n reactive,\n provide,\n InjectionKey,\n Ref,\n ComputedRef,\n onBeforeMount\n} from 'vue';\nimport { compact, pick } from 'lodash';\nimport { getAddress, isAddress } from '@ethersproject/address';\n\nimport { bnum, forChange } from '@/lib/utils';\nimport { currentLiquidityMiningRewardTokens } from '@/lib/utils/liquidityMining';\n\nimport { TokenInfo, TokenInfoMap, TokenList } from '@/types/TokenList';\n\nimport symbolKeys from '@/constants/symbol.keys';\n\nimport useTokenLists from '@/composables/useTokenLists';\nimport useConfig from '@/composables/useConfig';\nimport useTokenPricesQuery from '@/composables/queries/useTokenPricesQuery';\nimport useBalancesQuery from '@/composables/queries/useBalancesQuery';\nimport useAllowancesQuery from '@/composables/queries/useAllowancesQuery';\nimport useUserSettings from '@/composables/useUserSettings';\n\nimport { BalanceMap } from '@/services/token/concerns/balances.concern';\nimport { ContractAllowancesMap } from '@/services/token/concerns/allowances.concern';\nimport { tokenService } from '@/services/token/token.service';\nimport { configService } from '@/services/config/config.service';\nimport { TokenPrices } from '@/services/beethovenx/beethovenx.service';\n\n/**\n * TYPES\n */\nexport interface TokensProviderState {\n loading: boolean;\n injectedTokens: TokenInfoMap;\n allowanceContracts: string[];\n}\n\nexport interface TokensProviderResponse {\n loading: Ref;\n tokens: ComputedRef;\n injectedTokens: Ref;\n allowanceContracts: Ref;\n nativeAsset: TokenInfo;\n activeTokenListTokens: ComputedRef;\n prices: ComputedRef;\n balances: ComputedRef;\n allowances: ComputedRef;\n dynamicDataLoaded: ComputedRef;\n dynamicDataLoading: ComputedRef;\n refetchPrices: Ref;\n refetchBalances: Ref;\n refetchAllowances: Ref;\n injectTokens: Function;\n searchTokens: Function;\n hasBalance: Function;\n approvalRequired: (\n tokenAddress: string,\n amount: string,\n contractAddress?: string\n ) => boolean;\n approvalsRequired: (\n tokenAddresses: string[],\n amounts: string[],\n contractAddress?: string\n ) => string[];\n priceFor: Function;\n balanceFor: (address: string) => string;\n getTokens: Function;\n}\n\n/**\n * SETUP\n */\nexport const TokensProviderSymbol: InjectionKey = Symbol(\n symbolKeys.Providers.Tokens\n);\n\n/**\n * TokensProvider\n * Provides an interface to all token static and dynamic metatdata.\n */\nexport default {\n name: 'TokensProvider',\n\n setup(props, { slots }) {\n /**\n * COMPOSABLES\n */\n const { networkConfig } = useConfig();\n const {\n allTokenLists,\n activeTokenLists,\n loadingTokenLists\n } = useTokenLists();\n const { currency } = useUserSettings();\n\n /**\n * STATE\n */\n const nativeAsset: TokenInfo = {\n ...networkConfig.nativeAsset,\n chainId: networkConfig.chainId\n };\n\n const state: TokensProviderState = reactive({\n loading: true,\n injectedTokens: {\n [networkConfig.nativeAsset.address]: nativeAsset\n },\n allowanceContracts: compact([\n networkConfig.addresses.vault,\n networkConfig.addresses.wstETH,\n networkConfig.addresses.exchangeProxy\n ])\n });\n\n /**\n * COMPUTED\n */\n\n /**\n * All tokens from token lists that are toggled on.\n */\n const activeTokenListTokens = computed(\n (): TokenInfoMap =>\n mapTokenListTokens(Object.values(activeTokenLists.value))\n );\n\n /**\n * The main tokens map\n * A combination of activated token list tokens\n * and any injected tokens. Static and dynamic\n * meta data should be available for these tokens.\n */\n const tokens = computed(() => ({\n ...activeTokenListTokens.value,\n ...state.injectedTokens\n }));\n\n const tokenAddresses = computed(() => Object.keys(tokens.value));\n\n /****************************************************************\n * Dynamic metadata\n *\n * The prices, balances and allowances maps provide dynamic\n * metadata for each token in the tokens state array.\n ****************************************************************/\n const {\n data: priceData,\n isSuccess: priceQuerySuccess,\n isLoading: priceQueryLoading,\n refetch: refetchPrices\n } = useTokenPricesQuery(tokenAddresses);\n\n const {\n data: balanceData,\n isSuccess: balanceQuerySuccess,\n isLoading: balanceQueryLoading,\n refetch: refetchBalances\n } = useBalancesQuery(tokens);\n\n const {\n data: allowanceData,\n isSuccess: allowanceQuerySuccess,\n isLoading: allowanceQueryLoading,\n refetch: refetchAllowances\n } = useAllowancesQuery(tokens, toRef(state, 'allowanceContracts'));\n\n const prices = computed(\n (): TokenPrices => (priceData.value ? priceData.value : {})\n );\n const balances = computed(\n (): BalanceMap => (balanceData.value ? balanceData.value : {})\n );\n const allowances = computed(\n (): ContractAllowancesMap =>\n allowanceData.value ? allowanceData.value : {}\n );\n\n const dynamicDataLoaded = computed(\n () =>\n priceQuerySuccess.value &&\n balanceQuerySuccess.value &&\n allowanceQuerySuccess.value\n );\n\n const dynamicDataLoading = computed(\n () =>\n priceQueryLoading.value ||\n balanceQueryLoading.value ||\n allowanceQueryLoading.value\n );\n\n /**\n * METHODS\n */\n /**\n * Create token map from a token list tokens array.\n */\n function mapTokenListTokens(tokenLists: TokenList[]): TokenInfoMap {\n const tokensMap = {};\n const tokens = tokenLists.map(list => list.tokens).flat();\n\n tokens.forEach(token => {\n const address: string = getAddress(token.address);\n // Don't include if already included\n if (Object.keys(tokensMap).includes(address)) return;\n // Don't include if not on app network\n if (token.chainId !== networkConfig.chainId) return;\n\n tokensMap[address] = {\n ...token,\n address\n };\n });\n\n return tokensMap;\n }\n\n /**\n * Fetches static token metadata for given addresses and injects\n * tokens into state tokens map.\n */\n async function injectTokens(addresses: string[]): Promise {\n addresses = addresses.map(address => getAddress(address));\n\n // Only inject tokens that aren't already in tokens\n const injectable = addresses.filter(\n address => !Object.keys(tokens.value).includes(address)\n );\n if (injectable.length === 0) return;\n\n const newTokens = await tokenService.metadata.get(\n injectable,\n allTokenLists.value\n );\n\n state.injectedTokens = { ...state.injectedTokens, ...newTokens };\n }\n\n /**\n * Given query, filters tokens map by name, symbol or address.\n * If address is provided, search for address in tokens or injectToken\n */\n async function searchTokens(\n query: string,\n excluded: string[] = []\n ): Promise {\n if (!query) return removeExcluded(tokens.value, excluded);\n\n if (isAddress(query)) {\n const address = getAddress(query);\n const token = tokens.value[address];\n if (token) {\n return { [address]: token };\n } else {\n await injectTokens([address]);\n return pick(tokens.value, address);\n }\n } else {\n const tokensArray = Object.entries(tokens.value);\n const results = tokensArray.filter(\n ([, token]) =>\n token.name.toLowerCase().includes(query.toLowerCase()) ||\n token.symbol.toLowerCase().includes(query.toLowerCase())\n );\n return removeExcluded(Object.fromEntries(results), excluded);\n }\n }\n\n /**\n * Remove excluded tokens from given token map.\n */\n function removeExcluded(\n tokens: TokenInfoMap,\n excluded: string[]\n ): TokenInfoMap {\n return Object.keys(tokens)\n .filter(address => !excluded.includes(address))\n .reduce((result, address) => {\n result[address] = tokens[address];\n return result;\n }, {});\n }\n\n /**\n * Check if approval is required for given contract address\n * for a token and amount.\n */\n function approvalRequired(\n tokenAddress: string,\n amount: string,\n contractAddress = networkConfig.addresses.vault\n ): boolean {\n if (!amount || bnum(amount).eq(0)) return false;\n\n const allowance = bnum(allowances.value[contractAddress][tokenAddress]);\n return allowance.lt(amount);\n }\n\n /**\n * Check which tokens require approvals for given amounts\n * @returns a subset of the token addresses passed in.\n */\n function approvalsRequired(\n tokenAddresses: string[],\n amounts: string[],\n contractAddress: string = networkConfig.addresses.vault\n ): string[] {\n return tokenAddresses.filter((address, index) => {\n if (!contractAddress) return false;\n\n return approvalRequired(address, amounts[index], contractAddress);\n });\n }\n\n /**\n * Fetch price for a token\n */\n function priceFor(address: string): number {\n try {\n return prices.value[address][currency.value] || 0;\n } catch {\n return 0;\n }\n }\n\n /**\n * Fetch balance for a token\n */\n function balanceFor(address: string): string {\n try {\n return balances.value[address] || '0';\n } catch {\n return '0';\n }\n }\n\n /**\n * Checks if token has a balance\n */\n function hasBalance(address: string): boolean {\n return Number(balances.value[address]) > 0;\n }\n\n /**\n * Get subset of tokens from state\n */\n function getTokens(addresses: string[]): TokenInfoMap {\n return pick(tokens.value, addresses);\n }\n\n /**\n * CALLBACKS\n */\n onBeforeMount(async () => {\n const tokensToInject = compact([\n ...currentLiquidityMiningRewardTokens,\n configService.network.addresses.stETH,\n configService.network.addresses.wstETH\n ]);\n\n await forChange(loadingTokenLists, false);\n await injectTokens(tokensToInject);\n state.loading = false;\n });\n\n provide(TokensProviderSymbol, {\n // state\n ...toRefs(state),\n // computed\n tokens,\n nativeAsset,\n activeTokenListTokens,\n prices,\n balances,\n allowances,\n dynamicDataLoaded,\n dynamicDataLoading,\n // methods\n refetchPrices,\n refetchBalances,\n refetchAllowances,\n injectTokens,\n searchTokens,\n hasBalance,\n approvalRequired,\n approvalsRequired,\n priceFor,\n balanceFor,\n getTokens\n });\n\n return () => slots.default();\n }\n};\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./PoolCreateActions.vue?vue&type=style&index=0&id=9a299934&scoped=true&lang=css\"","module.exports = __webpack_public_path__ + \"img/trustwallet.92243466.svg\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TradeSettingsPopover.vue?vue&type=style&index=0&id=43a7ba0f&lang=css\"","module.exports = __webpack_public_path__ + \"img/ludwig-says-2.75297d62.svg\";","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock, resolveComponent as _resolveComponent, withScopeId as _withScopeId } from \"vue\"\nconst _withId = /*#__PURE__*/_withScopeId(\"data-v-f2d51ae0\")\n\nexport const render = /*#__PURE__*/_withId((_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) => {\n const _component_BalAsset = _resolveComponent(\"BalAsset\")\n\n return (_openBlock(), _createBlock(\"div\", {\n class: \"relative\",\n style: {\n width: `${_ctx.width}px`,\n height: `${_ctx.size}px`\n }\n }, [\n (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.addresses, (address, i) => {\n return (_openBlock(), _createBlock(_component_BalAsset, {\n key: i,\n address: address,\n size: _ctx.size,\n class: \"token-icon\",\n style: {\n left: `${_ctx.leftOffsetFor(i)}px`,\n zIndex: `${20 - i}`,\n width: `${_ctx.size}px`,\n height: `${_ctx.size}px`\n }\n }, null, 8, [\"address\", \"size\", \"style\"]))\n }), 128))\n ], 4))\n})","\nimport { defineComponent, PropType } from 'vue';\nimport BalAsset from './BalAsset.vue';\n\nexport default defineComponent({\n components: {\n BalAsset\n },\n\n props: {\n addresses: {\n type: Array as PropType,\n required: true\n },\n width: {\n type: Number,\n default: 200\n },\n size: {\n type: Number,\n default: 26\n }\n },\n\n setup(props) {\n function leftOffsetFor(i: number): number {\n const maxCount = 8;\n const radius = props.size / 2;\n const spacer = (maxCount / props.addresses.length - 1) * (radius * 2);\n return ((props.width - radius * 2 + spacer) / (maxCount - 1)) * i;\n }\n\n return { leftOffsetFor };\n }\n});\n","import { render } from \"./BalAssetSet.vue?vue&type=template&id=f2d51ae0&scoped=true&ts=true\"\nimport script from \"./BalAssetSet.vue?vue&type=script&lang=ts\"\nexport * from \"./BalAssetSet.vue?vue&type=script&lang=ts\"\n\nimport \"./BalAssetSet.vue?vue&type=style&index=0&id=f2d51ae0&scoped=true&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-f2d51ae0\"]])\n\nexport default __exports__","import { Config } from '@/lib/config';\nimport configs from '@/lib/config';\n\ninterface Env {\n APP_ENV: string;\n NETWORK: string;\n APP_DOMAIN: string;\n IPFS_NODE: string;\n BLOCKNATIVE_DAPP_ID: string;\n ALCHEMY_KEY: string;\n PORTIS_DAPP_ID: string;\n ENABLE_STABLE_POOLS: boolean;\n BACKEND_URL: string;\n}\n\nexport default class ConfigService {\n public get env(): Env {\n return {\n APP_ENV: process.env.VUE_APP_ENV || 'development',\n NETWORK: process.env.VUE_APP_NETWORK || '250',\n APP_DOMAIN: process.env.VUE_APP_DOMAIN || 'app.beethovenx.io',\n IPFS_NODE: process.env.VUE_APP_IPFS_NODE || 'ipfs.io',\n BLOCKNATIVE_DAPP_ID: process.env.VUE_APP_BLOCKNATIVE_DAPP_ID || 'xxx',\n ALCHEMY_KEY: process.env.VUE_APP_ALCHEMY_KEY || '',\n ENABLE_STABLE_POOLS: process.env.VUE_APP_ENABLE_STABLE_POOLS === 'true',\n PORTIS_DAPP_ID: process.env.PORTIS_DAPP_ID || '',\n BACKEND_URL: process.env.BACKEND_URL || ''\n };\n }\n\n public get network(): Config {\n return configs[this.env.NETWORK];\n }\n\n public getNetworkConfig(key: string): Config {\n if (!Object.keys(configs).includes(key))\n throw new Error(`No config for network key: ${key}`);\n return configs[key];\n }\n}\n\nexport const configService = new ConfigService();\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./TradePreviewModalGP.vue?vue&type=style&index=0&id=8a64398e&scoped=true&lang=css\"","import camelCase from 'lodash/camelCase';\n\nconst requireModule = require.context('.', false, /\\.ts$/);\nconst modules = {};\n\nrequireModule.keys().forEach(fileName => {\n if (fileName === './index.ts') return;\n const moduleName = camelCase(fileName.replace(/(\\.\\/|\\.ts)/g, ''));\n modules[moduleName] = requireModule(fileName).default;\n});\n\nexport default modules;\n","import { createVNode as _createVNode, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex\" }\nconst _hoisted_2 = { class: \"relative ml-4 flex-col\" }\nconst _hoisted_3 = {\n key: 1,\n class: \"bal-checkbox-error\"\n}\nconst _hoisted_4 = { class: \"relative\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(\"div\", {\n class: ['bal-checkbox', _ctx.wrapperClasses]\n }, [\n _createVNode(\"div\", _hoisted_1, [\n _createVNode(\"div\", null, [\n _createVNode(\"input\", {\n type: \"checkbox\",\n name: _ctx.name,\n checked: _ctx.modelValue,\n class: ['bal-checkbox-input', _ctx.inputClasses],\n onChange: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.onChange && _ctx.onChange(...args)))\n }, null, 42, [\"name\", \"checked\"])\n ]),\n _createVNode(\"div\", _hoisted_2, [\n (_ctx.$slots.label || _ctx.label)\n ? (_openBlock(), _createBlock(\"label\", {\n key: 0,\n for: _ctx.name,\n class: ['bal-checkbox-label', _ctx.labelClasses]\n }, [\n _renderSlot(_ctx.$slots, \"label\", {}, () => [\n _createTextVNode(_toDisplayString(_ctx.label), 1)\n ])\n ], 10, [\"for\"]))\n : _createCommentVNode(\"\", true),\n (_ctx.hasError)\n ? (_openBlock(), _createBlock(\"div\", _hoisted_3, [\n _createVNode(\"div\", _hoisted_4, _toDisplayString(_ctx.errors[0]), 1)\n ]))\n : _createCommentVNode(\"\", true)\n ])\n ])\n ], 2))\n}","\nimport { defineComponent, computed, PropType, ref } from 'vue';\nimport { Rules, RuleFunction } from '@/types';\n\nexport default defineComponent({\n name: 'BalCheckbox',\n\n emits: ['update:modelValue'],\n\n props: {\n name: { type: String, required: true },\n modelValue: { type: Boolean, default: false },\n label: { type: String, default: '' },\n noMargin: { type: Boolean, default: false },\n rules: {\n type: Array as PropType,\n default: () => []\n },\n size: {\n type: String,\n default: 'md',\n validator: (val: string): boolean => ['sm', 'md', 'lg'].includes(val)\n },\n color: {\n type: String,\n default: 'blue',\n validator: (val: string): boolean => ['blue'].includes(val)\n }\n },\n\n setup(props, { emit }) {\n const errors = ref([] as Array);\n\n const hasError = computed(() => errors.value.length > 0);\n\n function validate(val: string | number): void {\n errors.value = [];\n props.rules.forEach((rule: RuleFunction) => {\n const result = rule(val);\n if (typeof result === 'string') errors.value.push(result);\n });\n }\n\n function onChange(event) {\n emit('update:modelValue', event.target.checked);\n validate(event.target.checked);\n }\n\n const sizeClasses = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'w-4 h-4 -mt-px';\n case 'lg':\n return 'w-6 h-6';\n default:\n return 'w-5 h-5 mt-1';\n }\n });\n\n const textSizeClass = computed(() => {\n switch (props.size) {\n case 'sm':\n return 'text-sm';\n case 'lg':\n return 'text-lg';\n default:\n return 'text-base';\n }\n });\n\n const colorClasses = computed(() => {\n return `text-${props.color}-500`;\n });\n\n const wrapperClasses = computed(() => {\n return {\n 'mb-5': !props.noMargin\n };\n });\n\n const inputClasses = computed(() => {\n return {\n [sizeClasses.value]: true,\n [colorClasses.value]: true\n };\n });\n\n const labelClasses = computed(() => {\n return {\n [textSizeClass.value]: true\n };\n });\n\n return {\n wrapperClasses,\n inputClasses,\n labelClasses,\n validate,\n hasError,\n errors,\n onChange\n };\n }\n});\n","import { render } from \"./BalCheckbox.vue?vue&type=template&id=3ceb9cb8&ts=true\"\nimport script from \"./BalCheckbox.vue?vue&type=script&lang=ts\"\nexport * from \"./BalCheckbox.vue?vue&type=script&lang=ts\"\n\nimport \"./BalCheckbox.vue?vue&type=style&index=0&id=3ceb9cb8&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./AppFooterNav.vue?vue&type=style&index=0&id=66bc14d0&scoped=true&lang=css\"","import resolveConfig from 'tailwindcss/resolveConfig';\nimport tailwindConfig from '../../tailwind.config.js';\n\nexport default function useTailwind() {\n return resolveConfig(tailwindConfig);\n}\n","import BigNumber from 'bignumber.js';\nimport pkg from '@/../package.json';\nimport { Ref } from 'vue';\n\nexport function shorten(str = '') {\n return `${str.slice(0, 6)}...${str.slice(str.length - 4)}`;\n}\n\nexport async function sleep(time) {\n return new Promise(resolve => {\n setTimeout(resolve, time);\n });\n}\n\nexport function clone(item) {\n return JSON.parse(JSON.stringify(item));\n}\n\nfunction lsAddVersion(value: any, version: string) {\n return {\n data: value,\n _version: version\n };\n}\n\nfunction lsGetKey(key: string) {\n return `${pkg.name}.${key}`;\n}\n\nexport function lsSet(key: string, value: any, version?: string) {\n const data = version != null ? lsAddVersion(value, version) : value;\n\n return localStorage.setItem(lsGetKey(key), JSON.stringify(data));\n}\n\nexport function lsGet(\n key: string,\n defaultValue: any = null,\n version?: string\n): T {\n const rawValue = localStorage.getItem(lsGetKey(key));\n\n if (rawValue != null) {\n try {\n const value = JSON.parse(rawValue);\n\n if (version != null) {\n return value._version === version ? value.data : defaultValue;\n }\n return value;\n } catch (e) {\n return defaultValue;\n }\n }\n\n return defaultValue;\n}\n\nexport function lsRemove(key: string) {\n return localStorage.removeItem(lsGetKey(key));\n}\n\nexport function getCurrentTs() {\n return parseInt((new Date().getTime() / 1e3).toString());\n}\n\nexport function tsToBlockNumber(currentBlockNumber, ts) {\n const diffTs = getCurrentTs() - ts;\n return currentBlockNumber - parseInt((diffTs / 13.35).toString());\n}\n\nexport function bnum(val: string | number | BigNumber): BigNumber {\n const number = typeof val === 'string' ? val : val ? val.toString() : '0';\n return new BigNumber(number);\n}\n\nexport const bnumZero = bnum(0);\n\nexport function scale(input: BigNumber, decimalPlaces: number): BigNumber {\n const scalePow = new BigNumber(decimalPlaces.toString());\n const scaleMul = new BigNumber(10).pow(scalePow);\n return input.times(scaleMul);\n}\n\nexport function scaleDown(input: BigNumber, decimalPlaces: number): BigNumber {\n const scalePow = new BigNumber(decimalPlaces.toString());\n const scaleMul = new BigNumber(10).pow(scalePow);\n return input.dividedBy(scaleMul);\n}\n\nexport function shortenLabel(str, segLength = 4) {\n const firstSegment = str.substring(0, segLength + 2);\n const lastSegment = str.substring(str.length, str.length - segLength);\n return `${firstSegment}...${lastSegment}`;\n}\n\n/**\n * Wait for a reactive variable to change to an expected value.\n */\nexport async function forChange(\n reactiveVar: Ref,\n expected: any,\n checkCount = 0,\n checkDelay = 500,\n checkLimit = 20\n): Promise {\n if (reactiveVar.value === expected || checkCount >= checkLimit) return;\n await sleep(checkDelay);\n await forChange(reactiveVar, expected, checkCount++);\n}\n","module.exports = __webpack_public_path__ + \"img/fortmatic.e33911f5.svg\";","import { renderSlot as _renderSlot, resolveComponent as _resolveComponent, createVNode as _createVNode, mergeProps as _mergeProps, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_BalIcon = _resolveComponent(\"BalIcon\")\n\n return (_openBlock(), _createBlock(_Fragment, null, [\n _createVNode(\"button\", {\n ref: \"activator\",\n onMouseenter: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.handleMouseEnter && _ctx.handleMouseEnter(...args))),\n onMouseleave: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.handleMouseLeave && _ctx.handleMouseLeave(...args))),\n class: [{ 'cursor-default': _ctx.disabled }]\n }, [\n _renderSlot(_ctx.$slots, \"activator\", {}, () => [\n _createVNode(_component_BalIcon, {\n name: \"info\",\n size: \"md\",\n class: \"text-gray-400\"\n })\n ])\n ], 34),\n _createVNode(\"div\", _mergeProps({\n ref: \"content\",\n class: [\"tooltip text-sm bg-white dark:bg-gray-800 font-medium shadow rounded-md border dark:border-gray-900 z-50 text-white\", _ctx.tooltipClasses]\n }, _ctx.$attrs), [\n _renderSlot(_ctx.$slots, \"default\")\n ], 16)\n ], 64))\n}","\nimport { computed, defineComponent, onMounted, PropType, ref } from 'vue';\nimport { createPopper, Instance as PopperInstance } from '@popperjs/core';\nimport BalIcon from '../BalIcon/BalIcon.vue';\n\ntype Placement = 'top' | 'left' | 'bottom' | 'right';\n\nexport default defineComponent({\n name: 'Tooltip',\n components: { BalIcon },\n props: {\n placement: { type: String as PropType, default: 'top' },\n onShow: { type: Function },\n onHide: { type: Function },\n noPad: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false }\n },\n setup(props) {\n const activator = ref();\n const content = ref();\n const popper = ref();\n\n const tooltipClasses = computed(() => {\n return {\n 'p-3': !props.noPad\n };\n });\n\n // show the tooltip\n const handleMouseEnter = () => {\n if (!props.disabled && content.value && popper.value) {\n content.value.setAttribute('data-show', '');\n popper.value.update();\n props.onShow && props.onShow();\n }\n };\n\n // hide the tooltip\n const handleMouseLeave = () => {\n if (!props.disabled && content.value) {\n content.value.removeAttribute('data-show');\n props.onHide && props.onHide();\n }\n };\n\n onMounted(() => {\n if (activator.value && content.value) {\n popper.value = createPopper(activator.value, content.value, {\n placement: props.placement,\n modifiers: [{ name: 'offset', options: { offset: [0, 5] } }]\n });\n }\n });\n\n return {\n activator,\n content,\n handleMouseEnter,\n handleMouseLeave,\n tooltipClasses\n };\n }\n});\n","import { render } from \"./BalTooltip.vue?vue&type=template&id=e801fd3c&ts=true\"\nimport script from \"./BalTooltip.vue?vue&type=script&lang=ts\"\nexport * from \"./BalTooltip.vue?vue&type=script&lang=ts\"\n\nimport \"./BalTooltip.vue?vue&type=style&index=0&id=e801fd3c&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n","import { render } from \"./LightBulbIcon.vue?vue&type=template&id=9507f12a\"\nconst script = {}\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--0-1!./WalletButton.vue?vue&type=style&index=0&id=4dafe01e&lang=css\"","import { configService as _configService } from '@/services/config/config.service';\nimport axios from 'axios';\nimport {\n GqlHistoricalTokenPrice,\n GqlTokenPrice,\n GqlUserPortfolioData,\n GqlUserTokenData,\n UserPortfolio,\n UserPortfolioData,\n UserTokenData\n} from '@/services/beethovenx/beethovenx-types';\nimport { getAddress } from '@ethersproject/address';\nimport { keyBy } from 'lodash';\n\nexport type Price = { [fiat: string]: number };\nexport type TokenPrices = { [address: string]: Price };\nexport type HistoricalPrices = { [timestamp: string]: number[] };\n\nexport interface BeethovenxConfig {\n incentivizedPools: string[];\n pausedPools: string[];\n blacklistedPools: string[];\n}\n\nexport default class BeethovenxService {\n private readonly url: string;\n\n constructor(private readonly configService = _configService) {\n this.url =\n configService.env.BACKEND_URL || configService.network.backendUrl;\n }\n\n public async getUserPortfolio(address: string): Promise {\n const query = `\n query {\n portfolio: portfolioGetUserPortfolio {\n ...GqlUserPortfolioData\n }\n history: portfolioGetUserPortfolioHistory {\n ...GqlUserPortfolioData\n }\n }\n \n ${this.userProfileDataFragment}\n `;\n\n const response = await this.get<{\n portfolio: GqlUserPortfolioData;\n history: GqlUserPortfolioData[];\n }>(query, address);\n\n return {\n portfolio: this.mapPortfolioData(response.portfolio),\n history: response.history.map(item => this.mapPortfolioData(item))\n };\n }\n\n public async getTokenPrices(): Promise {\n const query = `\n query {\n tokenPrices: tokenPriceGetCurrentPrices {\n price\n address\n }\n }\n `;\n\n const { tokenPrices } = await this.get<{\n tokenPrices: GqlTokenPrice[];\n }>(query);\n\n const result: TokenPrices = {};\n\n for (const tokenPrice of tokenPrices) {\n result[getAddress(tokenPrice.address)] = { usd: tokenPrice.price };\n }\n\n // const sampleValue = {\n // 0xaeaaf0e2c81af264101b9129c00f4440ccf0f720: { usd: 123.804945 },\n // 0x75364d4f779d0bd0facd9a218c67f87dd9aff3b4: { usd: 322.80494 },\n // 0x6a2d262d56735dba19dd70682b39f6be9a931d98: { usd: 1.80494 },\n // 0x6de33698e9e9b787e09d3bd7771ef63557e148bb: { usd: 1.80494 }\n // };\n // WASTR\n // WSDN\n // USDC\n // DAI\n // console.log(sampleValue);\n return result;\n }\n\n public async getHistoricalTokenPrices(\n addresses: string[]\n ): Promise {\n const lowerCaseAddresses = addresses.map(address => address.toLowerCase());\n\n const query = `\n query {\n tokenPrices: tokenPriceGetHistoricalPrices(addresses: [\"${lowerCaseAddresses.join(\n '\",\"'\n )}\"]) {\n address\n prices {\n timestamp\n price\n }\n }\n }\n `;\n\n const { tokenPrices } = await this.get<{\n tokenPrices: GqlHistoricalTokenPrice[];\n }>(query);\n const timestamps =\n tokenPrices[0]?.prices.map(price => price.timestamp) || [];\n\n const result: HistoricalPrices = {};\n const tokenPricesMap = keyBy(tokenPrices, 'address');\n\n for (const timestamp of timestamps) {\n result[timestamp] = lowerCaseAddresses.map(address => {\n const entry = tokenPricesMap[address].prices.find(\n price => price.timestamp === timestamp\n );\n\n return entry?.price || 0;\n });\n }\n\n return result;\n }\n\n public async getBeethovenxConfig(): Promise {\n const { data } = await axios.get<{ result: BeethovenxConfig }>(\n this.configService.network.configSanityUrl\n );\n\n return data.result;\n }\n\n private async get(query: string, address?: string): Promise {\n try {\n const {\n data: { data }\n } = await axios.post(\n this.url,\n { query },\n {\n headers: {\n 'Content-Type': 'application/json',\n AccountAddress: address\n }\n }\n );\n return data;\n } catch (error) {\n console.error(error);\n throw new Error(error);\n }\n }\n\n private get userProfileDataFragment() {\n return `\n fragment GqlUserPortfolioData on GqlUserPortfolioData {\n timestamp\n totalSwapFees\n totalSwapVolume\n totalValue\n myFees\n pools {\n id\n myFees\n name\n percentOfPortfolio\n percentShare\n poolAddress\n poolId\n priceChange\n priceChangePercent\n pricePerShare\n shares\n swapFees\n swapVolume\n tokens {\n address\n balance\n id\n name\n percentOfPortfolio\n pricePerToken\n symbol\n totalValue\n }\n totalValue\n }\n tokens {\n address\n balance\n id\n name\n percentOfPortfolio\n pricePerToken\n symbol\n totalValue\n }\n }\n `;\n }\n\n public mapPortfolioData(data: GqlUserPortfolioData): UserPortfolioData {\n return {\n ...data,\n totalValue: parseFloat(data.totalValue),\n totalSwapFees: parseFloat(data.totalSwapFees),\n totalSwapVolume: parseFloat(data.totalSwapVolume),\n myFees: parseFloat(data.myFees),\n pools: data.pools.map(pool => ({\n ...pool,\n totalValue: parseFloat(pool.totalValue),\n swapFees: parseFloat(pool.swapFees),\n swapVolume: parseFloat(pool.swapVolume),\n myFees: parseFloat(pool.myFees),\n priceChange: parseFloat(pool.priceChange),\n pricePerShare: parseFloat(pool.pricePerShare),\n shares: parseFloat(pool.shares),\n tokens: pool.tokens.map(token => this.mapUserTokenData(token))\n })),\n tokens: data.tokens.map(token => this.mapUserTokenData(token))\n };\n }\n\n private mapUserTokenData(token: GqlUserTokenData): UserTokenData {\n return {\n ...token,\n balance: parseFloat(token.balance),\n pricePerToken: parseFloat(token.pricePerToken),\n totalValue: parseFloat(token.totalValue)\n };\n }\n}\n\nexport const beethovenxService = new BeethovenxService();\n","const requireFile = require.context('./', true, /[\\w-]+\\.json$/);\n\nexport default Object.fromEntries(\n requireFile\n .keys()\n .map(fileName => [\n fileName.replace('./', '').replace('.json', ''),\n requireFile(fileName)\n ])\n);\n","import { createI18n } from 'vue-i18n';\nimport messages from '@/locales';\n\nmessages['en-US'] = messages.default;\ndelete messages.default;\n\nexport function getBrowserLocale() {\n if (typeof navigator !== 'undefined') {\n return (\n navigator['userLanguage'] ||\n navigator['language'] ||\n (navigator.languages?.[0] ? navigator.languages[0] : undefined)\n );\n }\n return undefined;\n}\n\nconst defaultLocale = 'en-US';\n// const browserLocale = getBrowserLocale();\n// Object.keys(messages).forEach(locale => {\n// if (locale.slice(0, 2) === browserLocale.slice(0, 2)) defaultLocale = locale;\n// });\n\nconst i18n = createI18n({\n locale: defaultLocale,\n messages,\n dateTimeFormats: {\n 'en-US': {\n short: {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric'\n }\n }\n }\n});\n\nexport default i18n;\n","export interface Alert {\n label: string;\n type: 'error' | 'info';\n persistant: boolean;\n}\n\nexport interface AlertState {\n current: Alert | null;\n}\n\nconst state: AlertState = {\n current: null\n};\n\nconst mutations = {\n setCurrent(_state: AlertState, alert: Alert): void {\n _state.current = alert;\n }\n};\n\nexport default {\n namespaced: true,\n state,\n mutations\n};\n","import { WebSocketProvider, JsonRpcProvider } from '@ethersproject/providers';\nimport ConfigService, { configService } from '@/services/config/config.service';\n\ntype NewBlockHandler = (blockNumber: number) => any;\n\nexport default class RpcProviderService {\n readonly network: string;\n jsonProvider: JsonRpcProvider;\n wsProvider: WebSocketProvider;\n //loggingProvider: JsonRpcProvider;\n\n constructor(private readonly config: ConfigService = configService) {\n this.network = this.config.network.shortName;\n this.jsonProvider = new JsonRpcProvider(this.config.network.rpc);\n this.wsProvider = new WebSocketProvider(this.config.network.ws);\n //this.loggingProvider = new JsonRpcProvider(this.config.network.loggingRpc);\n }\n\n public initBlockListener(newBlockHandler: NewBlockHandler): void {\n this.wsProvider.on('block', newBlockNumber =>\n newBlockHandler(newBlockNumber)\n );\n }\n\n public async getBlockNumber(): Promise {\n return await this.jsonProvider.getBlockNumber();\n }\n\n public getJsonProvider(networkKey: string): JsonRpcProvider {\n const rpcUrl = this.config.getNetworkConfig(networkKey).rpc;\n return new JsonRpcProvider(rpcUrl);\n }\n}\n\nexport const rpcProviderService = new RpcProviderService();\n","module.exports = __webpack_public_path__ + \"img/walletconnect.c2d87ea8.svg\";"],"sourceRoot":""}