@berachain/berajs 0.2.11 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{RequestError-DBOIV65x.d.ts → RequestError-DkUbo3ro.d.ts} +1 -0
- package/dist/abi/bend/bundler.d.ts +100 -0
- package/dist/abi/bend/bundler.d.ts.map +1 -0
- package/dist/abi/bend/generalAdapter.d.ts +651 -0
- package/dist/abi/bend/generalAdapter.d.ts.map +1 -0
- package/dist/abi/bend/morphoVault.d.ts +1991 -0
- package/dist/abi/bend/morphoVault.d.ts.map +1 -0
- package/dist/abi/bend/publicAllocator.d.ts +448 -0
- package/dist/abi/bend/publicAllocator.d.ts.map +1 -0
- package/dist/abi/enso/ensoRouterAbi.d.ts +215 -0
- package/dist/abi/enso/ensoRouterAbi.d.ts.map +1 -0
- package/dist/abi/enso/ensoWalletV2Factory.d.ts +16 -0
- package/dist/abi/enso/ensoWalletV2Factory.d.ts.map +1 -0
- package/dist/abi/exports.d.ts +13 -6574
- package/dist/abi/exports.d.ts.map +1 -0
- package/dist/abi/exports.mjs +4 -3
- package/dist/abi/exports.mjs.map +1 -0
- package/dist/abi/pyth/pyth.d.ts +434 -0
- package/dist/abi/pyth/pyth.d.ts.map +1 -0
- package/dist/abi/pyth/pythErrors.d.ts +58 -0
- package/dist/abi/pyth/pythErrors.d.ts.map +1 -0
- package/dist/abi/utils/EIP7702StatelessDelegator.d.ts +799 -0
- package/dist/abi/utils/EIP7702StatelessDelegator.d.ts.map +1 -0
- package/dist/abi/utils/bundler3errors.d.ts +18 -0
- package/dist/abi/utils/bundler3errors.d.ts.map +1 -0
- package/dist/abi/utils/commonAbiErrors.d.ts +302 -0
- package/dist/abi/utils/commonAbiErrors.d.ts.map +1 -0
- package/dist/abi/utils/erc20errors.d.ts +167 -0
- package/dist/abi/utils/erc20errors.d.ts.map +1 -0
- package/dist/abi/utils/merkleDistributor.d.ts +655 -0
- package/dist/abi/utils/merkleDistributor.d.ts.map +1 -0
- package/dist/abi/utils/multicall3.d.ts +337 -0
- package/dist/abi/utils/multicall3.d.ts.map +1 -0
- package/dist/abi/utils/openChainErrors.d.ts +126 -0
- package/dist/abi/utils/openChainErrors.d.ts.map +1 -0
- package/dist/abi/utils/thirdwebMinimalAccount.d.ts +869 -0
- package/dist/abi/utils/thirdwebMinimalAccount.d.ts.map +1 -0
- package/dist/abi/utils/upgradableBeacon.d.ts +97 -0
- package/dist/abi/utils/upgradableBeacon.d.ts.map +1 -0
- package/dist/actions/__test/transports.d.ts +18 -0
- package/dist/actions/__test/transports.d.ts.map +1 -0
- package/dist/actions/bend/getConvertToAssets.d.ts +11 -0
- package/dist/actions/bend/getConvertToAssets.d.ts.map +1 -0
- package/dist/actions/bend/getMaxDeposit.d.ts +26 -0
- package/dist/actions/bend/getMaxDeposit.d.ts.map +1 -0
- package/dist/actions/clients/BeraApolloClient.d.ts +28 -0
- package/dist/actions/clients/BeraApolloClient.d.ts.map +1 -0
- package/dist/actions/clients/exports.d.ts +4 -78
- package/dist/actions/clients/exports.d.ts.map +1 -0
- package/dist/actions/clients/exports.mjs +11 -12
- package/dist/actions/clients/exports.mjs.map +1 -0
- package/dist/actions/clients/fetchBeep.d.ts +12 -0
- package/dist/actions/clients/fetchBeep.d.ts.map +1 -0
- package/dist/actions/clients/fetchOpenApi.d.ts +48 -0
- package/dist/actions/clients/fetchOpenApi.d.ts.map +1 -0
- package/dist/actions/clients/fetchOpenApi.unit.test.d.ts +2 -0
- package/dist/actions/clients/fetchOpenApi.unit.test.d.ts.map +1 -0
- package/dist/actions/clients/getApolloClient.d.ts +11 -0
- package/dist/actions/clients/getApolloClient.d.ts.map +1 -0
- package/dist/actions/clients/getEnsoClient.d.ts +11 -0
- package/dist/actions/clients/getEnsoClient.d.ts.map +1 -0
- package/dist/actions/dex/__tests__/aggregators.unit.test.d.ts +2 -0
- package/dist/actions/dex/__tests__/aggregators.unit.test.d.ts.map +1 -0
- package/dist/actions/dex/__tests__/allPools.integration.test.d.ts +2 -0
- package/dist/actions/dex/__tests__/allPools.integration.test.d.ts.map +1 -0
- package/dist/actions/dex/__tests__/getOnChainPool.unit.test.d.ts +2 -0
- package/dist/actions/dex/__tests__/getOnChainPool.unit.test.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/base.d.ts +89 -0
- package/dist/actions/dex/aggregators/base.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/bex.d.ts +26 -0
- package/dist/actions/dex/aggregators/bex.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/bgt.d.ts +17 -0
- package/dist/actions/dex/aggregators/bgt.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/enso/enso.d.ts +15 -0
- package/dist/actions/dex/aggregators/enso/enso.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/enso/ensoErc4626.d.ts +14 -0
- package/dist/actions/dex/aggregators/enso/ensoErc4626.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/enso/ensoErc4626.debug.test.d.ts +2 -0
- package/dist/actions/dex/aggregators/enso/ensoErc4626.debug.test.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/erc4626.d.ts +32 -0
- package/dist/actions/dex/aggregators/erc4626.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/fly.d.ts +14 -0
- package/dist/actions/dex/aggregators/fly.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/haiku.d.ts +14 -0
- package/dist/actions/dex/aggregators/haiku.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/haiku.integration.test.d.ts +2 -0
- package/dist/actions/dex/aggregators/haiku.integration.test.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/honey.d.ts +32 -0
- package/dist/actions/dex/aggregators/honey.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/kyberswap.d.ts +14 -0
- package/dist/actions/dex/aggregators/kyberswap.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/oogabooga.d.ts +13 -0
- package/dist/actions/dex/aggregators/oogabooga.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/openOcean.d.ts +15 -0
- package/dist/actions/dex/aggregators/openOcean.d.ts.map +1 -0
- package/dist/actions/dex/aggregators/wbera.d.ts +17 -0
- package/dist/actions/dex/aggregators/wbera.d.ts.map +1 -0
- package/dist/actions/dex/b-sdk.d.ts +3 -0
- package/dist/actions/dex/bSdk.d.ts +3 -0
- package/dist/actions/dex/bSdk.d.ts.map +1 -0
- package/dist/actions/dex/getAllPools.d.ts +58 -0
- package/dist/actions/dex/getAllPools.d.ts.map +1 -0
- package/dist/actions/dex/getApiPool.d.ts +390 -0
- package/dist/actions/dex/getApiPool.d.ts.map +1 -0
- package/dist/actions/dex/getGlobalLiquidityAndSwapVolume.d.ts +3 -0
- package/dist/actions/dex/getGlobalLiquidityAndSwapVolume.d.ts.map +1 -0
- package/dist/actions/dex/getOnChainPool.d.ts +42 -0
- package/dist/actions/dex/getOnChainPool.d.ts.map +1 -0
- package/dist/actions/dex/getPoolEvents.d.ts +7 -0
- package/dist/actions/dex/getPoolEvents.d.ts.map +1 -0
- package/dist/actions/dex/getPoolHistoricalData.d.ts +15 -0
- package/dist/actions/dex/getPoolHistoricalData.d.ts.map +1 -0
- package/dist/actions/dex/getPoolPausedState.d.ts +10 -0
- package/dist/actions/dex/getPoolPausedState.d.ts.map +1 -0
- package/dist/actions/dex/getPoolWithState.d.ts +4 -0
- package/dist/actions/dex/getPoolWithState.d.ts.map +1 -0
- package/dist/actions/dex/getVaultPausedState.d.ts +5 -0
- package/dist/actions/dex/getVaultPausedState.d.ts.map +1 -0
- package/dist/actions/enso/__tests__/getBendDemultiplyBundle.action.unit.test.d.ts +2 -0
- package/dist/actions/enso/__tests__/getBendDemultiplyBundle.action.unit.test.d.ts.map +1 -0
- package/dist/actions/enso/__tests__/getBendDemultiplyBundle.unit.test.d.ts +2 -0
- package/dist/actions/enso/__tests__/getBendDemultiplyBundle.unit.test.d.ts.map +1 -0
- package/dist/actions/enso/__tests__/getBendMultiplyBundle.action.unit.test.d.ts +2 -0
- package/dist/actions/enso/__tests__/getBendMultiplyBundle.action.unit.test.d.ts.map +1 -0
- package/dist/actions/enso/__tests__/getBendMultiplyBundle.unit.test.d.ts +2 -0
- package/dist/actions/enso/__tests__/getBendMultiplyBundle.unit.test.d.ts.map +1 -0
- package/dist/actions/enso/__tests__/getEnsoUserTokensWithBalances.debug.test.d.ts +2 -0
- package/dist/actions/enso/__tests__/getEnsoUserTokensWithBalances.debug.test.d.ts.map +1 -0
- package/dist/actions/enso/__tests__/helpers.d.ts +24 -0
- package/dist/actions/enso/__tests__/helpers.d.ts.map +1 -0
- package/dist/actions/enso/__tests__/util.unit.test.d.ts +2 -0
- package/dist/actions/enso/__tests__/util.unit.test.d.ts.map +1 -0
- package/dist/actions/enso/flashloan.d.ts +41 -0
- package/dist/actions/enso/flashloan.d.ts.map +1 -0
- package/dist/actions/enso/getBendDemultiplyBundle.d.ts +55 -0
- package/dist/actions/enso/getBendDemultiplyBundle.d.ts.map +1 -0
- package/dist/actions/enso/getBendMultiplyBundle.d.ts +70 -0
- package/dist/actions/enso/getBendMultiplyBundle.d.ts.map +1 -0
- package/dist/actions/enso/getEnsoSwapBundle.d.ts +3 -0
- package/dist/actions/enso/getEnsoSwapBundle.d.ts.map +1 -0
- package/dist/actions/enso/getEnsoUserTokensWithBalances.d.ts +16 -0
- package/dist/actions/enso/getEnsoUserTokensWithBalances.d.ts.map +1 -0
- package/dist/actions/enso/util.d.ts +40 -0
- package/dist/actions/enso/util.d.ts.map +1 -0
- package/dist/actions/exports.d.ts +100 -1646
- package/dist/actions/exports.d.ts.map +1 -0
- package/dist/actions/exports.mjs +45 -56
- package/dist/actions/exports.mjs.map +1 -0
- package/dist/actions/governance/__tests__/checkProposalField.unit.test.d.ts +2 -0
- package/dist/actions/governance/__tests__/checkProposalField.unit.test.d.ts.map +1 -0
- package/dist/actions/governance/__tests__/getDecodedFunctionData.integration.test.d.ts +2 -0
- package/dist/actions/governance/__tests__/getDecodedFunctionData.integration.test.d.ts.map +1 -0
- package/dist/actions/governance/__tests__/getQuorum.integration.test.d.ts +2 -0
- package/dist/actions/governance/__tests__/getQuorum.integration.test.d.ts.map +1 -0
- package/dist/actions/governance/checkProposalField.d.ts +27 -0
- package/dist/actions/governance/checkProposalField.d.ts.map +1 -0
- package/dist/actions/governance/computeActualStatus.d.ts +14 -0
- package/dist/actions/governance/computeActualStatus.d.ts.map +1 -0
- package/dist/actions/governance/constants.d.ts +7 -0
- package/dist/actions/governance/constants.d.ts.map +1 -0
- package/dist/actions/governance/exports.d.ts +10 -132
- package/dist/actions/governance/exports.d.ts.map +1 -0
- package/dist/actions/governance/exports.mjs +5 -4
- package/dist/actions/governance/exports.mjs.map +1 -0
- package/dist/actions/governance/getAllProposals.d.ts +16 -0
- package/dist/actions/governance/getAllProposals.d.ts.map +1 -0
- package/dist/actions/governance/getBodyErrors.d.ts +10 -0
- package/dist/actions/governance/getBodyErrors.d.ts.map +1 -0
- package/dist/actions/governance/getDecodedFunctionData.d.ts +30 -0
- package/dist/actions/governance/getDecodedFunctionData.d.ts.map +1 -0
- package/dist/actions/governance/getProposalDetails.d.ts +10 -0
- package/dist/actions/governance/getProposalDetails.d.ts.map +1 -0
- package/dist/actions/governance/getProposalFromTx.d.ts +18 -0
- package/dist/actions/governance/getProposalFromTx.d.ts.map +1 -0
- package/dist/actions/governance/getProposalParams.d.ts +15 -0
- package/dist/actions/governance/getProposalParams.d.ts.map +1 -0
- package/dist/actions/governance/getProposalVotes.d.ts +10 -0
- package/dist/actions/governance/getProposalVotes.d.ts.map +1 -0
- package/dist/actions/governance/getQuorum.d.ts +13 -0
- package/dist/actions/governance/getQuorum.d.ts.map +1 -0
- package/dist/actions/governance/parseProposalBody.d.ts +13 -0
- package/dist/actions/governance/parseProposalBody.d.ts.map +1 -0
- package/dist/actions/honey/getChartData.d.ts +13 -0
- package/dist/actions/honey/getChartData.d.ts.map +1 -0
- package/dist/actions/honey/getCollateralWeights.d.ts +19 -0
- package/dist/actions/honey/getCollateralWeights.d.ts.map +1 -0
- package/dist/actions/honey/getGlobalCapLimit.d.ts +24 -0
- package/dist/actions/honey/getGlobalCapLimit.d.ts.map +1 -0
- package/dist/actions/honey/getHoney24hVolume.d.ts +9 -0
- package/dist/actions/honey/getHoney24hVolume.d.ts.map +1 -0
- package/dist/actions/honey/getHoneyCollaterals.d.ts +33 -0
- package/dist/actions/honey/getHoneyCollaterals.d.ts.map +1 -0
- package/dist/actions/honey/getHoneyFees.d.ts +24 -0
- package/dist/actions/honey/getHoneyFees.d.ts.map +1 -0
- package/dist/actions/honey/getHoneyPausedState.d.ts +9 -0
- package/dist/actions/honey/getHoneyPausedState.d.ts.map +1 -0
- package/dist/actions/honey/getHoneyPreview.d.ts +52 -0
- package/dist/actions/honey/getHoneyPreview.d.ts.map +1 -0
- package/dist/actions/honey/getHoneyPythPriceOracle.d.ts +10 -0
- package/dist/actions/honey/getHoneyPythPriceOracle.d.ts.map +1 -0
- package/dist/actions/honey/getHoneyRootPriceOracle.d.ts +9 -0
- package/dist/actions/honey/getHoneyRootPriceOracle.d.ts.map +1 -0
- package/dist/actions/honey/getHoneyTxns.d.ts +21 -0
- package/dist/actions/honey/getHoneyTxns.d.ts.map +1 -0
- package/dist/actions/honey/getHoneyVaultsBalance.d.ts +13 -0
- package/dist/actions/honey/getHoneyVaultsBalance.d.ts.map +1 -0
- package/dist/actions/honey/getPythLatestPrices.d.ts +26 -0
- package/dist/actions/honey/getPythLatestPrices.d.ts.map +1 -0
- package/dist/actions/honey/getRelativeCapLimit.d.ts +23 -0
- package/dist/actions/honey/getRelativeCapLimit.d.ts.map +1 -0
- package/dist/actions/honey/getSharesWithoutFees.d.ts +25 -0
- package/dist/actions/honey/getSharesWithoutFees.d.ts.map +1 -0
- package/dist/actions/honey/getSwapPayload.d.ts +24 -0
- package/dist/actions/honey/getSwapPayload.d.ts.map +1 -0
- package/dist/actions/honey/isBadCollateralAsset.d.ts +24 -0
- package/dist/actions/honey/isBadCollateralAsset.d.ts.map +1 -0
- package/dist/actions/honey/isBasketModeEnabled.d.ts +11 -0
- package/dist/actions/honey/isBasketModeEnabled.d.ts.map +1 -0
- package/dist/actions/honey/tests/pyth.integration.test.d.ts +2 -0
- package/dist/actions/honey/tests/pyth.integration.test.d.ts.map +1 -0
- package/dist/actions/misc/getBlockTimestamp.d.ts +14 -0
- package/dist/actions/misc/getBlockTimestamp.d.ts.map +1 -0
- package/dist/actions/pol/__tests__/getAllValidators.integration.test.d.ts +2 -0
- package/dist/actions/pol/__tests__/getAllValidators.integration.test.d.ts.map +1 -0
- package/dist/actions/pol/__tests__/getValidator.integration.test.d.ts +2 -0
- package/dist/actions/pol/__tests__/getValidator.integration.test.d.ts.map +1 -0
- package/dist/actions/pol/__tests__/rewardVaults.integration.test.d.ts +2 -0
- package/dist/actions/pol/__tests__/rewardVaults.integration.test.d.ts.map +1 -0
- package/dist/actions/pol/getAutoclaimedIncentives.d.ts +14 -0
- package/dist/actions/pol/getAutoclaimedIncentives.d.ts.map +1 -0
- package/dist/actions/pol/getAutoclaimedIncentivesTxHash.d.ts +14 -0
- package/dist/actions/pol/getAutoclaimedIncentivesTxHash.d.ts.map +1 -0
- package/dist/actions/pol/getBGTGlobalInfo.d.ts +10 -0
- package/dist/actions/pol/getBGTGlobalInfo.d.ts.map +1 -0
- package/dist/actions/pol/getBeraTokenTotalSupply.d.ts +7 -0
- package/dist/actions/pol/getBeraTokenTotalSupply.d.ts.map +1 -0
- package/dist/actions/pol/getBgtAprSimulation.d.ts +88 -0
- package/dist/actions/pol/getBgtAprSimulation.d.ts.map +1 -0
- package/dist/actions/pol/getBgtAprSimultaion.unit.test.d.ts +2 -0
- package/dist/actions/pol/getBgtAprSimultaion.unit.test.d.ts.map +1 -0
- package/dist/actions/pol/getBgtIncentiveDistributorPaused.d.ts +10 -0
- package/dist/actions/pol/getBgtIncentiveDistributorPaused.d.ts.map +1 -0
- package/dist/actions/pol/getBgtTokenTotalBoosts.d.ts +6 -0
- package/dist/actions/pol/getBgtTokenTotalBoosts.d.ts.map +1 -0
- package/dist/actions/pol/getBgtTokenTotalSupply.d.ts +6 -0
- package/dist/actions/pol/getBgtTokenTotalSupply.d.ts.map +1 -0
- package/dist/actions/pol/getBlockTime.d.ts +7 -0
- package/dist/actions/pol/getBlockTime.d.ts.map +1 -0
- package/dist/actions/pol/getBlockTime.debug.test.d.ts +2 -0
- package/dist/actions/pol/getBlockTime.debug.test.d.ts.map +1 -0
- package/dist/actions/pol/getEarnedStakedBeraVault.d.ts +42 -0
- package/dist/actions/pol/getEarnedStakedBeraVault.d.ts.map +1 -0
- package/dist/actions/pol/getGlobalData.d.ts +8 -0
- package/dist/actions/pol/getGlobalData.d.ts.map +1 -0
- package/dist/actions/pol/getHeroEarnVaults.d.ts +35 -0
- package/dist/actions/pol/getHeroEarnVaults.d.ts.map +1 -0
- package/dist/actions/pol/getLSTStakeConfig.d.ts +13 -0
- package/dist/actions/pol/getLSTStakeConfig.d.ts.map +1 -0
- package/dist/actions/pol/getMarkets.d.ts +9 -0
- package/dist/actions/pol/getMarkets.d.ts.map +1 -0
- package/dist/actions/pol/getRewardProofsByValidator.d.ts +9 -0
- package/dist/actions/pol/getRewardProofsByValidator.d.ts.map +1 -0
- package/dist/actions/pol/getRewardTokenToBeraRate.d.ts +12 -0
- package/dist/actions/pol/getRewardTokenToBeraRate.d.ts.map +1 -0
- package/dist/actions/pol/getRewardVault.d.ts +13 -0
- package/dist/actions/pol/getRewardVault.d.ts.map +1 -0
- package/dist/actions/pol/getRewardVaultBeaconImplementation.d.ts +8 -0
- package/dist/actions/pol/getRewardVaultBeaconImplementation.d.ts.map +1 -0
- package/dist/actions/pol/getRewardVaultBeaconImplementation.integration.test.d.ts +2 -0
- package/dist/actions/pol/getRewardVaultBeaconImplementation.integration.test.d.ts.map +1 -0
- package/dist/actions/pol/getRewardVaultDurationConstants.d.ts +12 -0
- package/dist/actions/pol/getRewardVaultDurationConstants.d.ts.map +1 -0
- package/dist/actions/pol/getRewardVaultDurationConstants.integration.test.d.ts +2 -0
- package/dist/actions/pol/getRewardVaultDurationConstants.integration.test.d.ts.map +1 -0
- package/dist/actions/pol/getRewardVaultEarnedRewards.d.ts +14 -0
- package/dist/actions/pol/getRewardVaultEarnedRewards.d.ts.map +1 -0
- package/dist/actions/pol/getRewardVaultFromToken.d.ts +7 -0
- package/dist/actions/pol/getRewardVaultFromToken.d.ts.map +1 -0
- package/dist/actions/pol/getRewardVaultIncentives.d.ts +23 -0
- package/dist/actions/pol/getRewardVaultIncentives.d.ts.map +1 -0
- package/dist/actions/pol/getRewardVaultRewards.d.ts +38 -0
- package/dist/actions/pol/getRewardVaultRewards.d.ts.map +1 -0
- package/dist/actions/pol/getRewardVaultStakingToken.d.ts +6 -0
- package/dist/actions/pol/getRewardVaultStakingToken.d.ts.map +1 -0
- package/dist/actions/pol/getRewardVaults.d.ts +14 -0
- package/dist/actions/pol/getRewardVaults.d.ts.map +1 -0
- package/dist/actions/pol/getSWBeraVaultMetadata.d.ts +32 -0
- package/dist/actions/pol/getSWBeraVaultMetadata.d.ts.map +1 -0
- package/dist/actions/pol/getSWBeraWithdrawal.d.ts +30 -0
- package/dist/actions/pol/getSWBeraWithdrawal.d.ts.map +1 -0
- package/dist/actions/pol/getStakeWithdrawalCooldown.d.ts +6 -0
- package/dist/actions/pol/getStakeWithdrawalCooldown.d.ts.map +1 -0
- package/dist/actions/pol/getStakedBeraAPR.d.ts +12 -0
- package/dist/actions/pol/getStakedBeraAPR.d.ts.map +1 -0
- package/dist/actions/pol/getStakedBeraSnapshots.d.ts +12 -0
- package/dist/actions/pol/getStakedBeraSnapshots.d.ts.map +1 -0
- package/dist/actions/pol/getStakingDailyAssets.d.ts +10 -0
- package/dist/actions/pol/getStakingDailyAssets.d.ts.map +1 -0
- package/dist/actions/pol/getStakingTokenInformation.d.ts +9 -0
- package/dist/actions/pol/getStakingTokenInformation.d.ts.map +1 -0
- package/dist/actions/pol/getTotalStakedAmount.d.ts +13 -0
- package/dist/actions/pol/getTotalStakedAmount.d.ts.map +1 -0
- package/dist/actions/pol/getUserClaimableIncentives.d.ts +9 -0
- package/dist/actions/pol/getUserClaimableIncentives.d.ts.map +1 -0
- package/dist/actions/pol/getUserVaultInfo.d.ts +9 -0
- package/dist/actions/pol/getUserVaultInfo.d.ts.map +1 -0
- package/dist/actions/pol/getUserVaults.d.ts +18 -0
- package/dist/actions/pol/getUserVaults.d.ts.map +1 -0
- package/dist/actions/pol/getUserVaultsBalance.d.ts +11 -0
- package/dist/actions/pol/getUserVaultsBalance.d.ts.map +1 -0
- package/dist/actions/pol/getVaultHistory.d.ts +8 -0
- package/dist/actions/pol/getVaultHistory.d.ts.map +1 -0
- package/dist/actions/pol/getVaultValidators.d.ts +7 -0
- package/dist/actions/pol/getVaultValidators.d.ts.map +1 -0
- package/dist/actions/pol/getVaultsSupply.d.ts +7 -0
- package/dist/actions/pol/getVaultsSupply.d.ts.map +1 -0
- package/dist/actions/prices/__tests__/prices.integration.test.d.ts +2 -0
- package/dist/actions/prices/__tests__/prices.integration.test.d.ts.map +1 -0
- package/dist/actions/prices/getTokenCurrentPrices.d.ts +5 -0
- package/dist/actions/prices/getTokenCurrentPrices.d.ts.map +1 -0
- package/dist/actions/pyth/getHoneyPythFeeds.d.ts +12 -0
- package/dist/actions/pyth/getHoneyPythFeeds.d.ts.map +1 -0
- package/dist/actions/pyth/getUpdateFee.d.ts +6 -0
- package/dist/actions/pyth/getUpdateFee.d.ts.map +1 -0
- package/dist/actions/server/exports.d.ts +2 -13
- package/dist/actions/server/exports.d.ts.map +1 -0
- package/dist/actions/server/exports.mjs +28 -17
- package/dist/actions/server/exports.mjs.map +1 -0
- package/dist/actions/server/getDailyValidatorBlockStats.d.ts +14 -0
- package/dist/actions/server/getDailyValidatorBlockStats.d.ts.map +1 -0
- package/dist/actions/tokens/getAllowances.d.ts +10 -0
- package/dist/actions/tokens/getAllowances.d.ts.map +1 -0
- package/dist/actions/tokens/getTokenInformation.d.ts +11 -0
- package/dist/actions/tokens/getTokenInformation.d.ts.map +1 -0
- package/dist/actions/tokens/getTokens.d.ts +5 -0
- package/dist/actions/tokens/getTokens.d.ts.map +1 -0
- package/dist/actions/tokens/getUnderlyingToken.d.ts +12 -0
- package/dist/actions/tokens/getUnderlyingToken.d.ts.map +1 -0
- package/dist/actions/tokens/getWalletBalances.d.ts +499 -0
- package/dist/actions/tokens/getWalletBalances.d.ts.map +1 -0
- package/dist/actions/tokens/getWalletBalances.integration.test.d.ts +2 -0
- package/dist/actions/tokens/getWalletBalances.integration.test.d.ts.map +1 -0
- package/dist/actions/transactions/beraWriteContract.d.ts +19 -0
- package/dist/actions/transactions/beraWriteContract.d.ts.map +1 -0
- package/dist/actions/transactions/beraWriteContract.integration.test.d.ts +2 -0
- package/dist/actions/transactions/beraWriteContract.integration.test.d.ts.map +1 -0
- package/dist/actions/validators/getActiveBoostAndCommissionChangeDelay.d.ts +30 -0
- package/dist/actions/validators/getActiveBoostAndCommissionChangeDelay.d.ts.map +1 -0
- package/dist/actions/validators/getActiveBoostAndCommissionChangeDelay.integration.test.d.ts +2 -0
- package/dist/actions/validators/getActiveBoostAndCommissionChangeDelay.integration.test.d.ts.map +1 -0
- package/dist/actions/validators/getAllValidators.d.ts +5 -0
- package/dist/actions/validators/getAllValidators.d.ts.map +1 -0
- package/dist/actions/validators/getApiEnrichedAllocation.d.ts +6 -0
- package/dist/actions/validators/getApiEnrichedAllocation.d.ts.map +1 -0
- package/dist/actions/validators/getApiValidator.d.ts +9 -0
- package/dist/actions/validators/getApiValidator.d.ts.map +1 -0
- package/dist/actions/validators/getBaselineRewardAllocation.d.ts +5 -0
- package/dist/actions/validators/getBaselineRewardAllocation.d.ts.map +1 -0
- package/dist/actions/validators/getDefaultRewardAllocation.d.ts +7 -0
- package/dist/actions/validators/getDefaultRewardAllocation.d.ts.map +1 -0
- package/dist/actions/validators/getStakingPoolBatch.d.ts +13 -0
- package/dist/actions/validators/getStakingPoolBatch.d.ts.map +1 -0
- package/dist/actions/validators/getUserActiveValidators.d.ts +12 -0
- package/dist/actions/validators/getUserActiveValidators.d.ts.map +1 -0
- package/dist/actions/validators/getUserBoosts.d.ts +7 -0
- package/dist/actions/validators/getUserBoosts.d.ts.map +1 -0
- package/dist/actions/validators/getUserBoostsOnValidator.d.ts +25 -0
- package/dist/actions/validators/getUserBoostsOnValidator.d.ts.map +1 -0
- package/dist/actions/validators/getUserStakingPositions.d.ts +20 -0
- package/dist/actions/validators/getUserStakingPositions.d.ts.map +1 -0
- package/dist/actions/validators/getValidatorAnalytics.d.ts +12 -0
- package/dist/actions/validators/getValidatorAnalytics.d.ts.map +1 -0
- package/dist/actions/validators/getValidatorCommission.d.ts +6 -0
- package/dist/actions/validators/getValidatorCommission.d.ts.map +1 -0
- package/dist/actions/validators/getValidatorEstimatedBgtPerYear.d.ts +3 -0
- package/dist/actions/validators/getValidatorEstimatedBgtPerYear.d.ts.map +1 -0
- package/dist/actions/validators/getValidatorIncentiveDistribution.d.ts +8 -0
- package/dist/actions/validators/getValidatorIncentiveDistribution.d.ts.map +1 -0
- package/dist/actions/validators/getValidatorOperatorAddress.d.ts +6 -0
- package/dist/actions/validators/getValidatorOperatorAddress.d.ts.map +1 -0
- package/dist/actions/validators/getValidatorQueuedCommission.d.ts +10 -0
- package/dist/actions/validators/getValidatorQueuedCommission.d.ts.map +1 -0
- package/dist/actions/validators/getValidatorQueuedOperatorAddress.d.ts +7 -0
- package/dist/actions/validators/getValidatorQueuedOperatorAddress.d.ts.map +1 -0
- package/dist/actions/validators/getValidatorQueuedRewardAllocation.d.ts +7 -0
- package/dist/actions/validators/getValidatorQueuedRewardAllocation.d.ts.map +1 -0
- package/dist/actions/validators/getValidatorRewardAllocation.d.ts +52 -0
- package/dist/actions/validators/getValidatorRewardAllocation.d.ts.map +1 -0
- package/dist/actions/validators/getValidatorRewardAllocatorAddress.d.ts +12 -0
- package/dist/actions/validators/getValidatorRewardAllocatorAddress.d.ts.map +1 -0
- package/dist/actions/validators/utils/__tests__/validatorUtils.integration.test.d.ts +2 -0
- package/dist/actions/validators/utils/__tests__/validatorUtils.integration.test.d.ts.map +1 -0
- package/dist/actions/validators/utils/aggregateValidatorIncentives.d.ts +6 -0
- package/dist/actions/validators/utils/aggregateValidatorIncentives.d.ts.map +1 -0
- package/dist/actions/validators/utils/aggregateValidatorIncentives.unit.test.d.ts +2 -0
- package/dist/actions/validators/utils/aggregateValidatorIncentives.unit.test.d.ts.map +1 -0
- package/dist/actions/validators/utils/getValidatorBoostApy.d.ts +7 -0
- package/dist/actions/validators/utils/getValidatorBoostApy.d.ts.map +1 -0
- package/dist/{chunk-E7YFXBBQ.mjs → chunk-35RACQD4.mjs} +7 -6
- package/dist/chunk-35RACQD4.mjs.map +1 -0
- package/dist/{chunk-BGMRHTBQ.mjs → chunk-7TFV6UKF.mjs} +1 -0
- package/dist/chunk-7TFV6UKF.mjs.map +1 -0
- package/dist/{chunk-QVHEM4BG.mjs → chunk-AEN6IJFU.mjs} +10 -4
- package/dist/chunk-AEN6IJFU.mjs.map +1 -0
- package/dist/{chunk-SZ5C44L5.mjs → chunk-BMNEN4OK.mjs} +1 -0
- package/dist/chunk-BMNEN4OK.mjs.map +1 -0
- package/dist/{chunk-MRQGHXAN.mjs → chunk-BSOWLS3W.mjs} +4 -18
- package/dist/chunk-BSOWLS3W.mjs.map +1 -0
- package/dist/{chunk-VAA2FVPP.mjs → chunk-DOZJB6IJ.mjs} +140 -281
- package/dist/chunk-DOZJB6IJ.mjs.map +1 -0
- package/dist/{chunk-GUURQAME.mjs → chunk-EGAB6NFQ.mjs} +2 -1
- package/dist/chunk-EGAB6NFQ.mjs.map +1 -0
- package/dist/{chunk-AUOPN6NK.mjs → chunk-EJIGERYM.mjs} +2 -1
- package/dist/chunk-EJIGERYM.mjs.map +1 -0
- package/dist/{chunk-SGIJVHZO.mjs → chunk-GLWPRM33.mjs} +1 -0
- package/dist/chunk-GLWPRM33.mjs.map +1 -0
- package/dist/{chunk-CDK4YV3D.mjs → chunk-GWSTVITN.mjs} +1 -0
- package/dist/chunk-GWSTVITN.mjs.map +1 -0
- package/dist/{chunk-O2NQFKJK.mjs → chunk-IFNIPVTZ.mjs} +1 -0
- package/dist/chunk-IFNIPVTZ.mjs.map +1 -0
- package/dist/{chunk-HYDP32P6.mjs → chunk-J3LTASDE.mjs} +6 -6
- package/dist/chunk-J3LTASDE.mjs.map +1 -0
- package/dist/{chunk-NBYLMO2L.mjs → chunk-JA4DHMTG.mjs} +1 -0
- package/dist/chunk-JA4DHMTG.mjs.map +1 -0
- package/dist/{chunk-DKMAIU74.mjs → chunk-KL6YZ5VR.mjs} +1 -0
- package/dist/chunk-KL6YZ5VR.mjs.map +1 -0
- package/dist/{chunk-7YVNSDXG.mjs → chunk-LE4CYW7S.mjs} +3 -2
- package/dist/chunk-LE4CYW7S.mjs.map +1 -0
- package/dist/{chunk-KHXJDYA4.mjs → chunk-NZAH3SGT.mjs} +26 -0
- package/dist/chunk-NZAH3SGT.mjs.map +1 -0
- package/dist/{chunk-ZLTMIFCZ.mjs → chunk-P3YZ7F22.mjs} +12 -5
- package/dist/chunk-P3YZ7F22.mjs.map +1 -0
- package/dist/{chunk-3JJLQ2JX.mjs → chunk-PHYZRH4I.mjs} +10 -10
- package/dist/chunk-PHYZRH4I.mjs.map +1 -0
- package/dist/{chunk-IXIBY5FP.mjs → chunk-PJRLHTGC.mjs} +3 -2
- package/dist/chunk-PJRLHTGC.mjs.map +1 -0
- package/dist/{chunk-GY6B3PD5.mjs → chunk-QQASX4LJ.mjs} +12 -1
- package/dist/chunk-QQASX4LJ.mjs.map +1 -0
- package/dist/{chunk-UD5IUNCW.mjs → chunk-RM227WHI.mjs} +15 -2
- package/dist/chunk-RM227WHI.mjs.map +1 -0
- package/dist/{chunk-DQRH5VE3.mjs → chunk-TGN55GKE.mjs} +2 -1
- package/dist/chunk-TGN55GKE.mjs.map +1 -0
- package/dist/{chunk-SXUNCX5E.mjs → chunk-UA3Z47LT.mjs} +10 -13
- package/dist/chunk-UA3Z47LT.mjs.map +1 -0
- package/dist/{chunk-HQCOU6GY.mjs → chunk-ZCEFC2TK.mjs} +1 -0
- package/dist/chunk-ZCEFC2TK.mjs.map +1 -0
- package/dist/{chunk-Y6THHG77.mjs → chunk-ZWTGVIPJ.mjs} +3 -2
- package/dist/chunk-ZWTGVIPJ.mjs.map +1 -0
- package/dist/contexts/BeraFlags/BeraFlags.d.ts +19 -0
- package/dist/contexts/BeraFlags/BeraFlags.d.ts.map +1 -0
- package/dist/contexts/BeraFlags/defaultFlags.d.ts +9 -0
- package/dist/contexts/BeraFlags/defaultFlags.d.ts.map +1 -0
- package/dist/contexts/BexStatusProvider.d.ts +67 -0
- package/dist/contexts/BexStatusProvider.d.ts.map +1 -0
- package/dist/contexts/BlockTimeProvider.d.ts +10 -0
- package/dist/contexts/BlockTimeProvider.d.ts.map +1 -0
- package/dist/contexts/HoneyConfigProvider.d.ts +50 -0
- package/dist/contexts/HoneyConfigProvider.d.ts.map +1 -0
- package/dist/contexts/SwrFallback.d.ts +6 -0
- package/dist/contexts/SwrFallback.d.ts.map +1 -0
- package/dist/contexts/TokensProvider.d.ts +24 -0
- package/dist/contexts/TokensProvider.d.ts.map +1 -0
- package/dist/contexts/block-time-provider.d.ts +10 -0
- package/dist/contexts/exports.d.ts +7 -66
- package/dist/contexts/exports.d.ts.map +1 -0
- package/dist/contexts/exports.mjs +13 -12
- package/dist/contexts/exports.mjs.map +1 -0
- package/dist/data/contracts.d.ts +345 -0
- package/dist/data/contracts.d.ts.map +1 -0
- package/dist/enum/contracts.d.ts +15 -0
- package/dist/enum/contracts.d.ts.map +1 -0
- package/dist/enum/dex.d.ts +36 -0
- package/dist/enum/dex.d.ts.map +1 -0
- package/dist/enum/exports.d.ts +7 -29
- package/dist/enum/exports.d.ts.map +1 -0
- package/dist/enum/exports.mjs +3 -2
- package/dist/enum/exports.mjs.map +1 -0
- package/dist/enum/governance/exports.d.ts +2 -60
- package/dist/enum/governance/exports.d.ts.map +1 -0
- package/dist/enum/governance/exports.mjs +2 -1
- package/dist/enum/governance/exports.mjs.map +1 -0
- package/dist/enum/governance.d.ts +59 -0
- package/dist/enum/governance.d.ts.map +1 -0
- package/dist/enum/honey.d.ts +13 -0
- package/dist/enum/honey.d.ts.map +1 -0
- package/dist/enum/polling.d.ts +8 -0
- package/dist/enum/polling.d.ts.map +1 -0
- package/dist/enum/slippage.d.ts +17 -0
- package/dist/enum/slippage.d.ts.map +1 -0
- package/dist/enum/txnEnum.d.ts +90 -0
- package/dist/enum/txnEnum.d.ts.map +1 -0
- package/dist/errors/BeraError.d.ts +99 -0
- package/dist/errors/BeraError.d.ts.map +1 -0
- package/dist/errors/BeraError.unit.test.d.ts +2 -0
- package/dist/errors/BeraError.unit.test.d.ts.map +1 -0
- package/dist/errors/BeraMonitoring.d.ts +46 -0
- package/dist/errors/BeraMonitoring.d.ts.map +1 -0
- package/dist/errors/BeraTracing.d.ts +58 -0
- package/dist/errors/BeraTracing.d.ts.map +1 -0
- package/dist/errors/BeraTracing.unit.test.d.ts +2 -0
- package/dist/errors/BeraTracing.unit.test.d.ts.map +1 -0
- package/dist/errors/InvalidArgumentError.d.ts +59 -0
- package/dist/errors/InvalidArgumentError.d.ts.map +1 -0
- package/dist/errors/NotFoundError.d.ts +25 -0
- package/dist/errors/NotFoundError.d.ts.map +1 -0
- package/dist/errors/RequestError.d.ts +56 -0
- package/dist/errors/RequestError.d.ts.map +1 -0
- package/dist/errors/RequestError.unit.test.d.ts +2 -0
- package/dist/errors/RequestError.unit.test.d.ts.map +1 -0
- package/dist/errors/TransactionFailedError.d.ts +49 -0
- package/dist/errors/TransactionFailedError.d.ts.map +1 -0
- package/dist/errors/assert.d.ts +82 -0
- package/dist/errors/assert.d.ts.map +1 -0
- package/dist/errors/assert.unit.test.d.ts +2 -0
- package/dist/errors/assert.unit.test.d.ts.map +1 -0
- package/dist/errors/errorMap.d.ts +1083 -0
- package/dist/errors/errorMap.d.ts.map +1 -0
- package/dist/errors/exports.d.ts +13 -328
- package/dist/errors/exports.d.ts.map +1 -0
- package/dist/errors/exports.mjs +9 -6
- package/dist/errors/exports.mjs.map +1 -0
- package/dist/errors/getErrorMessage.d.ts +46 -0
- package/dist/errors/getErrorMessage.d.ts.map +1 -0
- package/dist/errors/getRevertReason.d.ts +53 -0
- package/dist/errors/getRevertReason.d.ts.map +1 -0
- package/dist/errors/getRevertReason.integration.test.d.ts +2 -0
- package/dist/errors/getRevertReason.integration.test.d.ts.map +1 -0
- package/dist/errors/initBeraError.d.ts +44 -0
- package/dist/errors/initBeraError.d.ts.map +1 -0
- package/dist/errors/parseViemError.d.ts +88 -0
- package/dist/errors/parseViemError.d.ts.map +1 -0
- package/dist/errors/severity.d.ts +7 -0
- package/dist/errors/severity.d.ts.map +1 -0
- package/dist/errors/spanStatus.d.ts +18 -0
- package/dist/errors/spanStatus.d.ts.map +1 -0
- package/dist/errors/spanStatus.unit.test.d.ts +2 -0
- package/dist/errors/spanStatus.unit.test.d.ts.map +1 -0
- package/dist/{getApolloClient-BcUTGFUb.d.ts → getApolloClient-MWm_iq4u.d.ts} +4 -5
- package/dist/{getValidatorQueuedOperatorAddress-Cxt-DlL_.d.ts → getValidatorQueuedOperatorAddress-N2I7wHd6.d.ts} +7 -58
- package/dist/{global.d-q_LQWQqs.d.ts → global.d-CR3zicga.d.ts} +2 -7
- package/dist/global.d-CiZJ2eHz.d.ts +231 -0
- package/dist/hooks/bend/useGetConvertToAssets.d.ts +9 -0
- package/dist/hooks/bend/useGetConvertToAssets.d.ts.map +1 -0
- package/dist/hooks/dex/useAggregatorsQuotes.d.ts +29 -0
- package/dist/hooks/dex/useAggregatorsQuotes.d.ts.map +1 -0
- package/dist/hooks/dex/useAggregatorsRouterFeeBps.d.ts +2 -0
- package/dist/hooks/dex/useAggregatorsRouterFeeBps.d.ts.map +1 -0
- package/dist/hooks/dex/useAllUserPools.d.ts +68 -0
- package/dist/hooks/dex/useAllUserPools.d.ts.map +1 -0
- package/dist/hooks/dex/useApiPool.d.ts +11 -0
- package/dist/hooks/dex/useApiPool.d.ts.map +1 -0
- package/dist/hooks/dex/useBexStatus.d.ts +2 -0
- package/dist/hooks/dex/useBexStatus.d.ts.map +1 -0
- package/dist/hooks/dex/useCreatePool.d.ts +32 -0
- package/dist/hooks/dex/useCreatePool.d.ts.map +1 -0
- package/dist/hooks/dex/useGlobalLiquidityAndSwapVolume.d.ts +11 -0
- package/dist/hooks/dex/useGlobalLiquidityAndSwapVolume.d.ts.map +1 -0
- package/dist/hooks/dex/useLiquidityMismatch.d.ts +36 -0
- package/dist/hooks/dex/useLiquidityMismatch.d.ts.map +1 -0
- package/dist/hooks/dex/useLpPosition.d.ts +14 -0
- package/dist/hooks/dex/useLpPosition.d.ts.map +1 -0
- package/dist/hooks/dex/useMultipleTokenApprovalsWithSlippage.d.ts +13 -0
- package/dist/hooks/dex/useMultipleTokenApprovalsWithSlippage.d.ts.map +1 -0
- package/dist/hooks/dex/useOnChainPoolData.d.ts +49 -0
- package/dist/hooks/dex/useOnChainPoolData.d.ts.map +1 -0
- package/dist/hooks/dex/usePollPoolCreationRelayerApproval.d.ts +8 -0
- package/dist/hooks/dex/usePollPoolCreationRelayerApproval.d.ts.map +1 -0
- package/dist/hooks/dex/usePool.d.ts +10 -0
- package/dist/hooks/dex/usePool.d.ts.map +1 -0
- package/dist/hooks/dex/usePoolEvents.d.ts +6 -0
- package/dist/hooks/dex/usePoolEvents.d.ts.map +1 -0
- package/dist/hooks/dex/usePoolHistoricalData.d.ts +8 -0
- package/dist/hooks/dex/usePoolHistoricalData.d.ts.map +1 -0
- package/dist/hooks/dex/usePools.d.ts +129 -0
- package/dist/hooks/dex/usePools.d.ts.map +1 -0
- package/dist/hooks/dex/usePriceImpact.d.ts +11 -0
- package/dist/hooks/dex/usePriceImpact.d.ts.map +1 -0
- package/dist/hooks/dex/useSingleAggregatorQuote.d.ts +53 -0
- package/dist/hooks/dex/useSingleAggregatorQuote.d.ts.map +1 -0
- package/dist/hooks/enso/useBendDemultiply.d.ts +18 -0
- package/dist/hooks/enso/useBendDemultiply.d.ts.map +1 -0
- package/dist/hooks/enso/useBendMultiply.d.ts +19 -0
- package/dist/hooks/enso/useBendMultiply.d.ts.map +1 -0
- package/dist/hooks/enso/useBendZapSupply.d.ts +40 -0
- package/dist/hooks/enso/useBendZapSupply.d.ts.map +1 -0
- package/dist/hooks/enso/useEnsoSwapBundle.d.ts +26 -0
- package/dist/hooks/enso/useEnsoSwapBundle.d.ts.map +1 -0
- package/dist/hooks/enso/useEnsoUserTokensWithBalances.d.ts +6 -0
- package/dist/hooks/enso/useEnsoUserTokensWithBalances.d.ts.map +1 -0
- package/dist/hooks/enso/useEnsoWalletV2Address.d.ts +4 -0
- package/dist/hooks/enso/useEnsoWalletV2Address.d.ts.map +1 -0
- package/dist/hooks/enso/useIsBendAuthorized.d.ts +7 -0
- package/dist/hooks/enso/useIsBendAuthorized.d.ts.map +1 -0
- package/dist/hooks/enso/useZapStakeBera.d.ts +23 -0
- package/dist/hooks/enso/useZapStakeBera.d.ts.map +1 -0
- package/dist/hooks/exports.d.ts +109 -1541
- package/dist/hooks/exports.d.ts.map +1 -0
- package/dist/hooks/exports.mjs +447 -754
- package/dist/hooks/exports.mjs.map +1 -0
- package/dist/hooks/governance/exports.d.ts +15 -186
- package/dist/hooks/governance/exports.d.ts.map +1 -0
- package/dist/hooks/governance/exports.mjs +70 -80
- package/dist/hooks/governance/exports.mjs.map +1 -0
- package/dist/hooks/governance/useCreateProposal.d.ts +13 -0
- package/dist/hooks/governance/useCreateProposal.d.ts.map +1 -0
- package/dist/hooks/governance/useGetPastVotes.d.ts +15 -0
- package/dist/hooks/governance/useGetPastVotes.d.ts.map +1 -0
- package/dist/hooks/governance/useHasVoted.d.ts +6 -0
- package/dist/hooks/governance/useHasVoted.d.ts.map +1 -0
- package/dist/hooks/governance/useIsCanceller.d.ts +5 -0
- package/dist/hooks/governance/useIsCanceller.d.ts.map +1 -0
- package/dist/hooks/governance/usePollAllProposals.d.ts +37 -0
- package/dist/hooks/governance/usePollAllProposals.d.ts.map +1 -0
- package/dist/hooks/governance/usePollProposal.d.ts +23 -0
- package/dist/hooks/governance/usePollProposal.d.ts.map +1 -0
- package/dist/hooks/governance/usePollProposalThreshold.d.ts +6 -0
- package/dist/hooks/governance/usePollProposalThreshold.d.ts.map +1 -0
- package/dist/hooks/governance/usePollProposalVotes.d.ts +23 -0
- package/dist/hooks/governance/usePollProposalVotes.d.ts.map +1 -0
- package/dist/hooks/governance/usePollUserDelegates.d.ts +7 -0
- package/dist/hooks/governance/usePollUserDelegates.d.ts.map +1 -0
- package/dist/hooks/governance/useProposalFromTx.d.ts +5 -0
- package/dist/hooks/governance/useProposalFromTx.d.ts.map +1 -0
- package/dist/hooks/governance/useProposalSnapshot.d.ts +12 -0
- package/dist/hooks/governance/useProposalSnapshot.d.ts.map +1 -0
- package/dist/hooks/governance/useProposalState.d.ts +7 -0
- package/dist/hooks/governance/useProposalState.d.ts.map +1 -0
- package/dist/hooks/governance/useProposalTimelockState.d.ts +18 -0
- package/dist/hooks/governance/useProposalTimelockState.d.ts.map +1 -0
- package/dist/hooks/governance/useQuorum.d.ts +17 -0
- package/dist/hooks/governance/useQuorum.d.ts.map +1 -0
- package/dist/hooks/honey/useCappedGlobally.d.ts +11 -0
- package/dist/hooks/honey/useCappedGlobally.d.ts.map +1 -0
- package/dist/hooks/honey/useCappedRelatively.d.ts +11 -0
- package/dist/hooks/honey/useCappedRelatively.d.ts.map +1 -0
- package/dist/hooks/honey/useCollateralWeights.d.ts +9 -0
- package/dist/hooks/honey/useCollateralWeights.d.ts.map +1 -0
- package/dist/hooks/honey/useHoney24hVolume.d.ts +2 -0
- package/dist/hooks/honey/useHoney24hVolume.d.ts.map +1 -0
- package/dist/hooks/honey/useHoneyAlerts.d.ts +47 -0
- package/dist/hooks/honey/useHoneyAlerts.d.ts.map +1 -0
- package/dist/hooks/honey/useHoneyBalances.d.ts +26 -0
- package/dist/hooks/honey/useHoneyBalances.d.ts.map +1 -0
- package/dist/hooks/honey/useHoneyChartData.d.ts +10 -0
- package/dist/hooks/honey/useHoneyChartData.d.ts.map +1 -0
- package/dist/hooks/honey/useHoneySwapState.d.ts +30 -0
- package/dist/hooks/honey/useHoneySwapState.d.ts.map +1 -0
- package/dist/hooks/honey/useHoneyVaultsBalance.d.ts +4 -0
- package/dist/hooks/honey/useHoneyVaultsBalance.d.ts.map +1 -0
- package/dist/hooks/honey/useIsBadCollateralAsset.d.ts +9 -0
- package/dist/hooks/honey/useIsBadCollateralAsset.d.ts.map +1 -0
- package/dist/hooks/honey/useIsBasketModeEnabled.d.ts +6 -0
- package/dist/hooks/honey/useIsBasketModeEnabled.d.ts.map +1 -0
- package/dist/hooks/honey/usePythLatestPrices.d.ts +20 -0
- package/dist/hooks/honey/usePythLatestPrices.d.ts.map +1 -0
- package/dist/hooks/perps/usePythUpdateFee.d.ts +11 -0
- package/dist/hooks/perps/usePythUpdateFee.d.ts.map +1 -0
- package/dist/hooks/pol/useAutoclaimedIncentives.d.ts +8 -0
- package/dist/hooks/pol/useAutoclaimedIncentives.d.ts.map +1 -0
- package/dist/hooks/pol/useAutoclaimedIncentivesTxHash.d.ts +8 -0
- package/dist/hooks/pol/useAutoclaimedIncentivesTxHash.d.ts.map +1 -0
- package/dist/hooks/pol/useBgtAprSimulation.d.ts +7 -0
- package/dist/hooks/pol/useBgtAprSimulation.d.ts.map +1 -0
- package/dist/hooks/pol/useBgtIncentiveDistributorPaused.d.ts +8 -0
- package/dist/hooks/pol/useBgtIncentiveDistributorPaused.d.ts.map +1 -0
- package/dist/hooks/pol/useBgtUnstakedBalance.d.ts +3 -0
- package/dist/hooks/pol/useBgtUnstakedBalance.d.ts.map +1 -0
- package/dist/hooks/pol/useClaimableFees.d.ts +2 -0
- package/dist/hooks/pol/useClaimableFees.d.ts.map +1 -0
- package/dist/hooks/pol/useHighestVaultsAPR.d.ts +23 -0
- package/dist/hooks/pol/useHighestVaultsAPR.d.ts.map +1 -0
- package/dist/hooks/pol/useOnChainRewardVault.d.ts +7 -0
- package/dist/hooks/pol/useOnChainRewardVault.d.ts.map +1 -0
- package/dist/hooks/pol/usePollGlobalData.d.ts +4 -0
- package/dist/hooks/pol/usePollGlobalData.d.ts.map +1 -0
- package/dist/hooks/pol/usePollMarkets.d.ts +7 -0
- package/dist/hooks/pol/usePollMarkets.d.ts.map +1 -0
- package/dist/hooks/pol/useQueuedBeraUnlock.d.ts +9 -0
- package/dist/hooks/pol/useQueuedBeraUnlock.d.ts.map +1 -0
- package/dist/hooks/pol/useRewardTokenToBeraRate.d.ts +6 -0
- package/dist/hooks/pol/useRewardTokenToBeraRate.d.ts.map +1 -0
- package/dist/hooks/pol/useRewardVault.d.ts +8 -0
- package/dist/hooks/pol/useRewardVault.d.ts.map +1 -0
- package/dist/hooks/pol/useRewardVaultBalanceFromStakingToken.d.ts +16 -0
- package/dist/hooks/pol/useRewardVaultBalanceFromStakingToken.d.ts.map +1 -0
- package/dist/hooks/pol/useRewardVaultFromToken.d.ts +7 -0
- package/dist/hooks/pol/useRewardVaultFromToken.d.ts.map +1 -0
- package/dist/hooks/pol/useRewardVaultIncentives.d.ts +6 -0
- package/dist/hooks/pol/useRewardVaultIncentives.d.ts.map +1 -0
- package/dist/hooks/pol/useRewardVaultRewards.d.ts +4 -0
- package/dist/hooks/pol/useRewardVaultRewards.d.ts.map +1 -0
- package/dist/hooks/pol/useRewardVaults.d.ts +15 -0
- package/dist/hooks/pol/useRewardVaults.d.ts.map +1 -0
- package/dist/hooks/pol/useStakedAPR.d.ts +11 -0
- package/dist/hooks/pol/useStakedAPR.d.ts.map +1 -0
- package/dist/hooks/pol/useStakedData.d.ts +41 -0
- package/dist/hooks/pol/useStakedData.d.ts.map +1 -0
- package/dist/hooks/pol/useStakedSnapshots.d.ts +10 -0
- package/dist/hooks/pol/useStakedSnapshots.d.ts.map +1 -0
- package/dist/hooks/pol/useStakingVaultsMetadata.d.ts +7 -0
- package/dist/hooks/pol/useStakingVaultsMetadata.d.ts.map +1 -0
- package/dist/hooks/pol/useTotalStakedAmount.d.ts +6 -0
- package/dist/hooks/pol/useTotalStakedAmount.d.ts.map +1 -0
- package/dist/hooks/pol/useUserVaultInfo.d.ts +7 -0
- package/dist/hooks/pol/useUserVaultInfo.d.ts.map +1 -0
- package/dist/hooks/pol/useUserVaults.d.ts +4 -0
- package/dist/hooks/pol/useUserVaults.d.ts.map +1 -0
- package/dist/hooks/pol/useVaultAddress.d.ts +10 -0
- package/dist/hooks/pol/useVaultAddress.d.ts.map +1 -0
- package/dist/hooks/pol/useVaultHistory.d.ts +5 -0
- package/dist/hooks/pol/useVaultHistory.d.ts.map +1 -0
- package/dist/hooks/pol/useVaultValidators.d.ts +7 -0
- package/dist/hooks/pol/useVaultValidators.d.ts.map +1 -0
- package/dist/hooks/tokens/useBeraCurrentPrice.d.ts +11 -0
- package/dist/hooks/tokens/useBeraCurrentPrice.d.ts.map +1 -0
- package/dist/hooks/tokens/useMultipleTokenInformation.d.ts +9 -0
- package/dist/hooks/tokens/useMultipleTokenInformation.d.ts.map +1 -0
- package/dist/hooks/tokens/usePollAllowances.d.ts +17 -0
- package/dist/hooks/tokens/usePollAllowances.d.ts.map +1 -0
- package/dist/hooks/tokens/usePollBalance.d.ts +12 -0
- package/dist/hooks/tokens/usePollBalance.d.ts.map +1 -0
- package/dist/hooks/tokens/usePollWalletBalances.d.ts +14 -0
- package/dist/hooks/tokens/usePollWalletBalances.d.ts.map +1 -0
- package/dist/hooks/tokens/useStakingTokenInformation.d.ts +8 -0
- package/dist/hooks/tokens/useStakingTokenInformation.d.ts.map +1 -0
- package/dist/hooks/tokens/useTokenCurrentPrices.d.ts +16 -0
- package/dist/hooks/tokens/useTokenCurrentPrices.d.ts.map +1 -0
- package/dist/hooks/tokens/useTokenInformation.d.ts +9 -0
- package/dist/hooks/tokens/useTokenInformation.d.ts.map +1 -0
- package/dist/hooks/tokens/useTokenPrice.d.ts +10 -0
- package/dist/hooks/tokens/useTokenPrice.d.ts.map +1 -0
- package/dist/hooks/tokens/useTokenPrices.d.ts +18 -0
- package/dist/hooks/tokens/useTokenPrices.d.ts.map +1 -0
- package/dist/hooks/tokens/useTokens.d.ts +18 -0
- package/dist/hooks/tokens/useTokens.d.ts.map +1 -0
- package/dist/hooks/tokens/useTotalSupply.d.ts +5 -0
- package/dist/hooks/tokens/useTotalSupply.d.ts.map +1 -0
- package/dist/hooks/tokens/useUnderlyingAsset.d.ts +10 -0
- package/dist/hooks/tokens/useUnderlyingAsset.d.ts.map +1 -0
- package/dist/hooks/useBlockToTimestamp.d.ts +6 -0
- package/dist/hooks/useBlockToTimestamp.d.ts.map +1 -0
- package/dist/hooks/useContractWrite/index.d.ts +3 -0
- package/dist/hooks/useContractWrite/index.d.ts.map +1 -0
- package/dist/hooks/useContractWrite/stateReducer.d.ts +28 -0
- package/dist/hooks/useContractWrite/stateReducer.d.ts.map +1 -0
- package/dist/hooks/useContractWrite/types.d.ts +54 -0
- package/dist/hooks/useContractWrite/types.d.ts.map +1 -0
- package/dist/hooks/useContractWrite/useBeraContractWrite.d.ts +10 -0
- package/dist/hooks/useContractWrite/useBeraContractWrite.d.ts.map +1 -0
- package/dist/hooks/useGetVerifiedAbi.d.ts +2 -0
- package/dist/hooks/useGetVerifiedAbi.d.ts.map +1 -0
- package/dist/hooks/useHistoryState.d.ts +17 -0
- package/dist/hooks/useHistoryState.d.ts.map +1 -0
- package/dist/hooks/usePrevious.d.ts +6 -0
- package/dist/hooks/usePrevious.d.ts.map +1 -0
- package/dist/hooks/validators/useAllValidators.d.ts +7 -0
- package/dist/hooks/validators/useAllValidators.d.ts.map +1 -0
- package/dist/hooks/validators/useApiEnrichedAllocation.d.ts +5 -0
- package/dist/hooks/validators/useApiEnrichedAllocation.d.ts.map +1 -0
- package/dist/hooks/validators/useApiValidator.d.ts +8 -0
- package/dist/hooks/validators/useApiValidator.d.ts.map +1 -0
- package/dist/hooks/validators/useBaselineRewardAllocation.d.ts +2 -0
- package/dist/hooks/validators/useBaselineRewardAllocation.d.ts.map +1 -0
- package/dist/hooks/validators/useManagedValidatorRole.d.ts +13 -0
- package/dist/hooks/validators/useManagedValidatorRole.d.ts.map +1 -0
- package/dist/hooks/validators/useOnChainValidator.d.ts +7 -0
- package/dist/hooks/validators/useOnChainValidator.d.ts.map +1 -0
- package/dist/hooks/validators/useStakingPoolBatch.d.ts +7 -0
- package/dist/hooks/validators/useStakingPoolBatch.d.ts.map +1 -0
- package/dist/hooks/validators/useUserActiveValidators.d.ts +7 -0
- package/dist/hooks/validators/useUserActiveValidators.d.ts.map +1 -0
- package/dist/hooks/validators/useUserBoostsOnValidator.d.ts +8 -0
- package/dist/hooks/validators/useUserBoostsOnValidator.d.ts.map +1 -0
- package/dist/hooks/validators/useUserClaimableIncentives.d.ts +8 -0
- package/dist/hooks/validators/useUserClaimableIncentives.d.ts.map +1 -0
- package/dist/hooks/validators/useUserStakingPositions.d.ts +31 -0
- package/dist/hooks/validators/useUserStakingPositions.d.ts.map +1 -0
- package/dist/hooks/validators/useValidator.d.ts +112 -0
- package/dist/hooks/validators/useValidator.d.ts.map +1 -0
- package/dist/hooks/validators/useValidatorAnalytics.d.ts +11 -0
- package/dist/hooks/validators/useValidatorAnalytics.d.ts.map +1 -0
- package/dist/hooks/validators/useValidatorCommission.d.ts +4 -0
- package/dist/hooks/validators/useValidatorCommission.d.ts.map +1 -0
- package/dist/hooks/validators/useValidatorEstimatedBgtPerYear.d.ts +6 -0
- package/dist/hooks/validators/useValidatorEstimatedBgtPerYear.d.ts.map +1 -0
- package/dist/hooks/validators/useValidatorIncentiveDistribution.d.ts +14 -0
- package/dist/hooks/validators/useValidatorIncentiveDistribution.d.ts.map +1 -0
- package/dist/hooks/validators/useValidatorQueuedCommission.d.ts +5 -0
- package/dist/hooks/validators/useValidatorQueuedCommission.d.ts.map +1 -0
- package/dist/hooks/validators/useValidatorQueuedOperatorAddress.d.ts +5 -0
- package/dist/hooks/validators/useValidatorQueuedOperatorAddress.d.ts.map +1 -0
- package/dist/hooks/validators/useValidatorQueuedRewardAllocation.d.ts +5 -0
- package/dist/hooks/validators/useValidatorQueuedRewardAllocation.d.ts.map +1 -0
- package/dist/hooks/validators/useValidatorRewardAllocation.d.ts +9 -0
- package/dist/hooks/validators/useValidatorRewardAllocation.d.ts.map +1 -0
- package/dist/types/bribeBoost.d.ts +69 -0
- package/dist/types/dex.d.ts +225 -0
- package/dist/types/enso.d.ts +76 -0
- package/dist/types/exports.d.ts +8 -90
- package/dist/types/exports.d.ts.map +1 -0
- package/dist/types/exports.mjs +1 -0
- package/dist/types/exports.mjs.map +1 -0
- package/dist/types/global.d.ts +198 -0
- package/dist/types/governance/exports.d.ts +2 -109
- package/dist/types/governance/exports.d.ts.map +1 -0
- package/dist/types/governance/exports.mjs +1 -0
- package/dist/types/governance/exports.mjs.map +1 -0
- package/dist/types/governance.d.ts +112 -0
- package/dist/types/honeySwap.d.ts +23 -0
- package/dist/types/pol.d.ts +78 -0
- package/dist/types/staking.d.ts +22 -0
- package/dist/useHoneySwapState-CXVWAThr.d.ts +32 -0
- package/dist/utils/beraFetch.d.ts +15 -0
- package/dist/utils/beraFetch.d.ts.map +1 -0
- package/dist/utils/constants.d.ts +27 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/createEmitter.d.ts +88 -0
- package/dist/utils/createEmitter.d.ts.map +1 -0
- package/dist/utils/createEmitter.unit.test.d.ts +2 -0
- package/dist/utils/createEmitter.unit.test.d.ts.map +1 -0
- package/dist/utils/exports.d.ts +25 -429
- package/dist/utils/exports.d.ts.map +1 -0
- package/dist/utils/exports.mjs +33 -22
- package/dist/utils/exports.mjs.map +1 -0
- package/dist/utils/filter.d.ts +10 -0
- package/dist/utils/filter.d.ts.map +1 -0
- package/dist/utils/formatIncentivesTokenMap.d.ts +3 -0
- package/dist/utils/formatIncentivesTokenMap.d.ts.map +1 -0
- package/dist/utils/formatInputTokenValue.d.ts +2 -0
- package/dist/utils/formatInputTokenValue.d.ts.map +1 -0
- package/dist/utils/formatNumber.d.ts +32 -0
- package/dist/utils/formatNumber.d.ts.map +1 -0
- package/dist/utils/formatNumber.unit.test.d.ts +2 -0
- package/dist/utils/formatNumber.unit.test.d.ts.map +1 -0
- package/dist/utils/formatTimestamps.d.ts +20 -0
- package/dist/utils/formatTimestamps.d.ts.map +1 -0
- package/dist/utils/formatTimestamps.unit.test.d.ts +2 -0
- package/dist/utils/formatTimestamps.unit.test.d.ts.map +1 -0
- package/dist/utils/formatTokenList.d.ts +21 -0
- package/dist/utils/formatTokenList.d.ts.map +1 -0
- package/dist/utils/formatUsd.d.ts +5 -0
- package/dist/utils/formatUsd.d.ts.map +1 -0
- package/dist/utils/getContractName.d.ts +10 -0
- package/dist/utils/getContractName.d.ts.map +1 -0
- package/dist/utils/getContractName.unit.test.d.ts +2 -0
- package/dist/utils/getContractName.unit.test.d.ts.map +1 -0
- package/dist/utils/getErrorResponse.d.ts +5 -0
- package/dist/utils/getErrorResponse.d.ts.map +1 -0
- package/dist/utils/getHoneySwapMessage.d.ts +7 -0
- package/dist/utils/getHoneySwapMessage.d.ts.map +1 -0
- package/dist/utils/getHoneySwapMessage.test.d.ts +2 -0
- package/dist/utils/getHoneySwapMessage.test.d.ts.map +1 -0
- package/dist/utils/getServerSideClient.d.ts +6 -0
- package/dist/utils/getServerSideClient.d.ts.map +1 -0
- package/dist/utils/getTestClient.d.ts +73 -0
- package/dist/utils/getTestClient.d.ts.map +1 -0
- package/dist/utils/hasAnyTruthyValues.d.ts +2 -0
- package/dist/utils/hasAnyTruthyValues.d.ts.map +1 -0
- package/dist/utils/isDifferenceExceedingThreshold.d.ts +6 -0
- package/dist/utils/isDifferenceExceedingThreshold.d.ts.map +1 -0
- package/dist/utils/isSubgraphStale.d.ts +5 -0
- package/dist/utils/isSubgraphStale.d.ts.map +1 -0
- package/dist/utils/layerZeroScan.d.ts +39 -0
- package/dist/utils/layerZeroScan.d.ts.map +1 -0
- package/dist/utils/math.d.ts +15 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.unit.test.d.ts +2 -0
- package/dist/utils/math.unit.test.d.ts.map +1 -0
- package/dist/utils/parseBaseArgs.d.ts +6 -0
- package/dist/utils/parseBaseArgs.d.ts.map +1 -0
- package/dist/utils/parseBaseArgs.unit.test.d.ts +2 -0
- package/dist/utils/parseBaseArgs.unit.test.d.ts.map +1 -0
- package/dist/utils/parseWhiskToken.d.ts +21 -0
- package/dist/utils/parseWhiskToken.d.ts.map +1 -0
- package/dist/utils/polyfillAbortSignalAny.d.ts +14 -0
- package/dist/utils/polyfillAbortSignalAny.d.ts.map +1 -0
- package/dist/utils/polyfillAbortSignalAny.unit.test.d.ts +2 -0
- package/dist/utils/polyfillAbortSignalAny.unit.test.d.ts.map +1 -0
- package/dist/utils/poolNamings.d.ts +9 -0
- package/dist/utils/poolNamings.d.ts.map +1 -0
- package/dist/utils/pythHoneyUtils.d.ts +2 -0
- package/dist/utils/pythHoneyUtils.d.ts.map +1 -0
- package/dist/utils/sanitizeRpcUrl.d.ts +10 -0
- package/dist/utils/sanitizeRpcUrl.d.ts.map +1 -0
- package/dist/utils/test-utils.d.ts +2 -0
- package/dist/utils/test-utils.d.ts.map +1 -0
- package/dist/utils/time.d.ts +65 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.unit.test.d.ts +2 -0
- package/dist/utils/time.unit.test.d.ts.map +1 -0
- package/dist/utils/tokenWrapping.d.ts +7 -0
- package/dist/utils/tokenWrapping.d.ts.map +1 -0
- package/dist/utils/tokens.d.ts +37 -0
- package/dist/utils/tokens.d.ts.map +1 -0
- package/dist/utils/tokens.unit.test.d.ts +2 -0
- package/dist/utils/tokens.unit.test.d.ts.map +1 -0
- package/dist/utils/tracedTransport.d.ts +10 -0
- package/dist/utils/tracedTransport.d.ts.map +1 -0
- package/dist/utils/truncateHash.d.ts +5 -0
- package/dist/utils/truncateHash.d.ts.map +1 -0
- package/dist/utils/truncateHash.unit.test.d.ts +2 -0
- package/dist/utils/truncateHash.unit.test.d.ts.map +1 -0
- package/dist/utils/validatorUptimeStatus.d.ts +19 -0
- package/dist/utils/validatorUptimeStatus.d.ts.map +1 -0
- package/package.json +6 -4
- package/src/actions/clients/BeraApolloClient.ts +4 -2
- package/src/actions/clients/exports.ts +0 -1
- package/src/actions/clients/fetchBeep.ts +0 -7
- package/src/actions/clients/fetchOpenApi.ts +4 -4
- package/src/actions/clients/fetchOpenApi.unit.test.ts +12 -28
- package/src/actions/clients/getApolloClient.ts +4 -9
- package/src/actions/dex/aggregators/base.ts +3 -1
- package/src/actions/dex/aggregators/bex.ts +3 -10
- package/src/actions/dex/getPoolWithState.ts +2 -2
- package/src/actions/enso/__tests__/helpers.ts +15 -10
- package/src/actions/enso/getEnsoSwapBundle.ts +3 -8
- package/src/actions/exports.ts +2 -4
- package/src/actions/governance/getDecodedFunctionData.ts +5 -1
- package/src/actions/honey/getChartData.ts +3 -44
- package/src/actions/honey/getHoney24hVolume.ts +2 -21
- package/src/actions/honey/getHoneyTxns.ts +1 -49
- package/src/actions/honey/getSwapPayload.ts +4 -4
- package/src/actions/pol/__tests__/rewardVaults.integration.test.ts +3 -3
- package/src/actions/pol/getAutoclaimedIncentives.ts +1 -1
- package/src/actions/pol/getAutoclaimedIncentivesTxHash.ts +1 -1
- package/src/actions/pol/getEarnedStakedBeraVault.ts +0 -15
- package/src/actions/pol/getGlobalData.ts +10 -29
- package/src/actions/pol/getRewardProofsByValidator.ts +1 -1
- package/src/actions/pol/{getUserVaultsReward.ts → getRewardVaultEarnedRewards.ts} +6 -4
- package/src/actions/pol/getRewardVaults.ts +4 -4
- package/src/actions/pol/getSWBeraVaultMetadata.ts +0 -7
- package/src/actions/pol/getStakingDailyAssets.ts +0 -14
- package/src/actions/pol/getUserClaimableIncentives.ts +1 -1
- package/src/actions/pol/getUserVaultInfo.ts +2 -2
- package/src/actions/pol/getVaultsSupply.ts +5 -2
- package/src/actions/server/getDailyValidatorBlockStats.ts +28 -17
- package/src/actions/tokens/getWalletBalances.ts +1 -3
- package/src/actions/transactions/beraWriteContract.integration.test.ts +16 -3
- package/src/actions/transactions/beraWriteContract.ts +2 -2
- package/src/actions/validators/getApiEnrichedAllocation.ts +1 -1
- package/src/actions/validators/getUserBoostsOnValidator.ts +6 -9
- package/src/actions/validators/getValidatorAnalytics.ts +5 -1
- package/src/actions/validators/getValidatorEstimatedBgtPerYear.ts +3 -3
- package/src/actions/validators/getValidatorIncentiveDistribution.ts +2 -24
- package/src/contexts/exports.ts +1 -1
- package/src/errors/BeraError.ts +51 -1
- package/src/errors/BeraError.unit.test.ts +71 -0
- package/src/errors/BeraTracing.unit.test.ts +17 -18
- package/src/errors/RequestError.ts +18 -4
- package/src/errors/RequestError.unit.test.ts +47 -0
- package/src/errors/assert.ts +29 -0
- package/src/hooks/bend/useGetConvertToAssets.ts +4 -11
- package/src/hooks/dex/useAggregatorsQuotes.ts +3 -1
- package/src/hooks/dex/useAggregatorsRouterFeeBps.ts +3 -8
- package/src/hooks/dex/useAllUserPools.ts +7 -14
- package/src/hooks/dex/useApiPool.ts +4 -11
- package/src/hooks/dex/useCreatePool.ts +13 -13
- package/src/hooks/dex/useGlobalLiquidityAndSwapVolume.ts +2 -3
- package/src/hooks/dex/useLiquidityMismatch.ts +3 -3
- package/src/hooks/dex/useLpPosition.ts +3 -3
- package/src/hooks/dex/useOnChainPoolData.ts +2 -3
- package/src/hooks/dex/usePollPoolCreationRelayerApproval.ts +4 -10
- package/src/hooks/dex/usePoolEvents.ts +3 -3
- package/src/hooks/dex/usePoolHistoricalData.ts +4 -9
- package/src/hooks/dex/usePools.ts +8 -8
- package/src/hooks/dex/usePriceImpact.ts +6 -6
- package/src/hooks/enso/useBendZapSupply.ts +1 -1
- package/src/hooks/enso/useEnsoSwapBundle.ts +1 -1
- package/src/hooks/enso/useEnsoUserTokensWithBalances.ts +1 -5
- package/src/hooks/enso/useZapStakeBera.ts +0 -3
- package/src/hooks/exports.ts +0 -4
- package/src/hooks/governance/useCreateProposal.ts +4 -4
- package/src/hooks/governance/useGetPastVotes.ts +11 -7
- package/src/hooks/governance/useHasVoted.ts +3 -3
- package/src/hooks/governance/useIsCanceller.ts +3 -3
- package/src/hooks/governance/usePollAllProposals.ts +3 -3
- package/src/hooks/governance/usePollProposal.ts +7 -10
- package/src/hooks/governance/usePollProposalThreshold.ts +4 -9
- package/src/hooks/governance/usePollProposalVotes.ts +12 -12
- package/src/hooks/governance/usePollUserDelegates.ts +19 -20
- package/src/hooks/governance/useProposalFromTx.ts +5 -7
- package/src/hooks/governance/useProposalSnapshot.ts +4 -4
- package/src/hooks/governance/useProposalState.ts +4 -4
- package/src/hooks/governance/useProposalTimelockState.ts +2 -2
- package/src/hooks/honey/useCappedGlobally.ts +4 -9
- package/src/hooks/honey/useCappedRelatively.ts +4 -9
- package/src/hooks/honey/useCollateralWeights.ts +4 -9
- package/src/hooks/honey/useHoney24hVolume.ts +1 -5
- package/src/hooks/honey/useHoneyAlerts.ts +9 -9
- package/src/hooks/honey/useHoneyBalances.ts +4 -9
- package/src/hooks/honey/useHoneyChartData.ts +3 -11
- package/src/hooks/honey/useHoneySwapState.ts +2 -2
- package/src/hooks/honey/useHoneyVaultsBalance.ts +4 -9
- package/src/hooks/honey/useIsBadCollateralAsset.ts +4 -9
- package/src/hooks/honey/useIsBasketModeEnabled.ts +1 -6
- package/src/hooks/honey/usePythLatestPrices.ts +4 -6
- package/src/hooks/perps/usePythUpdateFee.ts +3 -3
- package/src/hooks/pol/useAutoclaimedIncentives.ts +2 -7
- package/src/hooks/pol/useAutoclaimedIncentivesTxHash.ts +2 -7
- package/src/hooks/pol/useBgtIncentiveDistributorPaused.ts +1 -6
- package/src/hooks/pol/useBgtUnstakedBalance.ts +4 -9
- package/src/hooks/pol/useClaimableFees.ts +5 -9
- package/src/hooks/pol/useHighestVaultsAPR.ts +5 -8
- package/src/hooks/pol/useOnChainRewardVault.ts +6 -5
- package/src/hooks/pol/usePollGlobalData.ts +4 -9
- package/src/hooks/pol/usePollMarkets.ts +6 -11
- package/src/hooks/pol/useQueuedBeraUnlock.ts +1 -10
- package/src/hooks/pol/useRewardTokenToBeraRate.ts +6 -14
- package/src/hooks/pol/useRewardVault.ts +8 -7
- package/src/hooks/pol/useRewardVaultBalanceFromStakingToken.ts +5 -5
- package/src/hooks/pol/useRewardVaultFromToken.ts +26 -32
- package/src/hooks/pol/useRewardVaultIncentives.ts +1 -6
- package/src/hooks/pol/useRewardVaultRewards.ts +4 -9
- package/src/hooks/pol/useRewardVaults.ts +7 -12
- package/src/hooks/pol/useStakedAPR.ts +1 -6
- package/src/hooks/pol/useStakedData.ts +2 -2
- package/src/hooks/pol/useStakedSnapshots.ts +3 -8
- package/src/hooks/pol/useStakingVaultsMetadata.ts +3 -3
- package/src/hooks/pol/useTotalStakedAmount.ts +1 -6
- package/src/hooks/pol/useUserVaultInfo.ts +4 -9
- package/src/hooks/pol/useUserVaults.ts +4 -8
- package/src/hooks/pol/useVaultAddress.ts +2 -2
- package/src/hooks/pol/useVaultHistory.ts +4 -9
- package/src/hooks/pol/useVaultValidators.ts +4 -9
- package/src/hooks/tokens/useBeraCurrentPrice.ts +8 -4
- package/src/hooks/tokens/useMultipleTokenInformation.ts +1 -6
- package/src/hooks/tokens/usePollAllowances.ts +1 -7
- package/src/hooks/tokens/usePollBalance.ts +0 -3
- package/src/hooks/tokens/usePollWalletBalances.ts +1 -1
- package/src/hooks/tokens/useStakingTokenInformation.ts +4 -13
- package/src/hooks/tokens/useTokenInformation.ts +1 -6
- package/src/hooks/useBlockToTimestamp.ts +1 -1
- package/src/hooks/useContractWrite/index.ts +1 -1
- package/src/hooks/useContractWrite/stateReducer.ts +2 -2
- package/src/hooks/useContractWrite/useBeraContractWrite.ts +1 -3
- package/src/hooks/useGetVerifiedAbi.ts +2 -2
- package/src/hooks/validators/useAllValidators.ts +7 -12
- package/src/hooks/validators/useApiValidator.ts +7 -11
- package/src/hooks/validators/useManagedValidatorRole.ts +0 -1
- package/src/hooks/validators/useOnChainValidator.ts +4 -11
- package/src/hooks/validators/useStakingPoolBatch.ts +4 -9
- package/src/hooks/validators/useUserActiveValidators.ts +4 -9
- package/src/hooks/validators/useUserBoostsOnValidator.ts +4 -6
- package/src/hooks/validators/useUserClaimableIncentives.ts +116 -117
- package/src/hooks/validators/useUserStakingPositions.ts +4 -11
- package/src/hooks/validators/useValidatorAnalytics.ts +4 -3
- package/src/hooks/validators/useValidatorCommission.ts +4 -9
- package/src/hooks/validators/useValidatorEstimatedBgtPerYear.ts +4 -4
- package/src/hooks/validators/useValidatorIncentiveDistribution.ts +1 -3
- package/src/hooks/validators/useValidatorQueuedCommission.ts +1 -6
- package/src/hooks/validators/useValidatorQueuedOperatorAddress.ts +4 -9
- package/src/hooks/validators/useValidatorQueuedRewardAllocation.ts +4 -9
- package/src/hooks/validators/useValidatorRewardAllocation.ts +1 -6
- package/src/types/bribeBoost.d.ts +69 -0
- package/src/types/exports.ts +1 -1
- package/src/types/global.d.ts +5 -7
- package/src/utils/filter.ts +3 -5
- package/src/utils/formatIncentivesTokenMap.ts +8 -8
- package/src/utils/formatInputTokenValue.ts +2 -2
- package/src/utils/formatNumber.ts +5 -5
- package/src/utils/formatTimestamps.unit.test.ts +6 -3
- package/src/utils/formatUsd.ts +6 -4
- package/src/utils/getServerSideClient.ts +3 -3
- package/src/utils/isDifferenceExceedingThreshold.ts +10 -6
- package/src/utils/layerZeroScan.ts +3 -1
- package/src/utils/math.ts +12 -7
- package/src/utils/math.unit.test.ts +114 -15
- package/src/utils/polyfillAbortSignalAny.ts +4 -4
- package/src/utils/polyfillAbortSignalAny.unit.test.ts +3 -1
- package/src/utils/poolNamings.ts +14 -10
- package/src/utils/pythHoneyUtils.ts +2 -2
- package/src/utils/truncateHash.ts +3 -3
- package/src/actions/clients/fetchRailwayBackend.ts +0 -34
- package/src/actions/pol/getGlobalCuttingBoard.ts +0 -25
- package/src/actions/pol/getIncentiveFeeClaimStats.ts +0 -24
- package/src/actions/validators/getDailyValidatorBlockStats.ts +0 -38
- package/src/hooks/tokens/useTokenCurrentPrice.ts +0 -21
- package/src/hooks/validators/useDailyValidatorBlockStats.ts +0 -35
- package/src/hooks/validators/useDefaultRewardAllocation.ts +0 -31
- /package/{src → dist}/types/bribe-boost.d.ts +0 -0
- /package/src/actions/dex/{b-sdk.ts → bSdk.ts} +0 -0
- /package/src/contexts/{block-time-provider.tsx → BlockTimeProvider.tsx} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/bend/useGetConvertToAssets.ts","../../src/hooks/dex/useAggregatorsQuotes.ts","../../src/actions/dex/aggregators/bex.ts","../../src/actions/dex/aggregators/bgt.ts","../../src/actions/dex/aggregators/enso/enso.ts","../../src/actions/dex/aggregators/erc4626.ts","../../src/actions/dex/aggregators/fly.ts","../../src/actions/dex/aggregators/haiku.ts","../../src/actions/dex/aggregators/honey.ts","../../src/actions/dex/aggregators/kyberswap.ts","../../src/actions/dex/aggregators/oogabooga.ts","../../src/actions/dex/aggregators/openOcean.ts","../../src/actions/dex/aggregators/wbera.ts","../../src/hooks/tokens/useUnderlyingAsset.ts","../../src/actions/tokens/getUnderlyingToken.ts","../../src/hooks/dex/useAggregatorsRouterFeeBps.ts","../../src/hooks/dex/useSingleAggregatorQuote.ts","../../src/hooks/dex/useAllUserPools.ts","../../src/hooks/dex/useApiPool.ts","../../src/hooks/dex/useCreatePool.ts","../../src/utils/poolNamings.ts","../../src/hooks/dex/useGlobalLiquidityAndSwapVolume.ts","../../src/hooks/dex/useLiquidityMismatch.ts","../../src/hooks/dex/useLpPosition.ts","../../src/hooks/pol/useRewardVaultBalanceFromStakingToken.ts","../../src/hooks/pol/useRewardVaultFromToken.ts","../../src/hooks/tokens/usePollBalance.ts","../../src/hooks/tokens/useTokenInformation.ts","../../src/hooks/dex/useMultipleTokenApprovalsWithSlippage.ts","../../src/hooks/tokens/usePollAllowances.ts","../../src/hooks/dex/useOnChainPoolData.ts","../../src/hooks/tokens/useMultipleTokenInformation.ts","../../src/hooks/tokens/useTokenCurrentPrices.ts","../../src/hooks/tokens/useTokens.ts","../../src/hooks/dex/usePollPoolCreationRelayerApproval.ts","../../src/hooks/dex/usePool.ts","../../src/hooks/dex/usePoolEvents.ts","../../src/hooks/dex/usePoolHistoricalData.ts","../../src/hooks/dex/usePools.ts","../../src/hooks/dex/usePriceImpact.ts","../../src/hooks/tokens/useTokenPrices.ts","../../src/hooks/enso/useBendDemultiply.ts","../../src/actions/enso/getBendDemultiplyBundle.ts","../../src/actions/enso/flashloan.ts","../../src/actions/enso/util.ts","../../src/hooks/enso/useEnsoWalletV2Address.ts","../../src/hooks/enso/useIsBendAuthorized.ts","../../src/hooks/enso/useBendMultiply.ts","../../src/actions/enso/getBendMultiplyBundle.ts","../../src/hooks/enso/useBendZapSupply.ts","../../src/actions/dex/aggregators/enso/ensoErc4626.ts","../../src/hooks/enso/useEnsoSwapBundle.ts","../../src/actions/enso/getEnsoSwapBundle.ts","../../src/hooks/tokens/usePollWalletBalances.ts","../../src/hooks/enso/useZapStakeBera.ts","../../src/hooks/honey/useCappedGlobally.ts","../../src/hooks/honey/usePythLatestPrices.ts","../../src/hooks/honey/useCappedRelatively.ts","../../src/hooks/honey/useCollateralWeights.ts","../../src/hooks/honey/useHoney24hVolume.ts","../../src/hooks/honey/useHoneyAlerts.ts","../../src/hooks/honey/useHoneyBalances.ts","../../src/hooks/honey/useHoneyVaultsBalance.ts","../../src/hooks/honey/useIsBadCollateralAsset.ts","../../src/hooks/honey/useHoneyChartData.ts","../../src/hooks/honey/useHoneySwapState.ts","../../src/hooks/honey/useIsBasketModeEnabled.ts","../../src/hooks/perps/usePythUpdateFee.ts","../../src/hooks/pol/useAutoclaimedIncentives.ts","../../src/hooks/pol/useAutoclaimedIncentivesTxHash.ts","../../src/hooks/pol/useBgtAprSimulation.ts","../../src/hooks/pol/useBgtIncentiveDistributorPaused.ts","../../src/hooks/pol/useBgtUnstakedBalance.ts","../../src/hooks/pol/useClaimableFees.ts","../../src/hooks/pol/useHighestVaultsAPR.ts","../../src/hooks/pol/useRewardVaults.ts","../../src/hooks/pol/usePollGlobalData.ts","../../src/hooks/pol/usePollMarkets.ts","../../src/hooks/pol/useQueuedBeraUnlock.ts","../../src/hooks/pol/useRewardTokenToBeraRate.ts","../../src/hooks/pol/useOnChainRewardVault.ts","../../src/actions/pol/getStakingTokenInformation.ts","../../src/hooks/pol/useRewardVault.ts","../../src/hooks/pol/useRewardVaultIncentives.ts","../../src/hooks/pol/useRewardVaultRewards.ts","../../src/utils/filter.ts","../../src/hooks/pol/useStakedAPR.ts","../../src/hooks/pol/useStakedData.ts","../../src/actions/pol/getStakingDailyAssets.ts","../../src/hooks/pol/useStakedSnapshots.ts","../../src/hooks/pol/useStakingVaultsMetadata.ts","../../src/hooks/pol/useTotalStakedAmount.ts","../../src/hooks/pol/useUserVaultInfo.ts","../../src/hooks/pol/useUserVaults.ts","../../src/hooks/pol/useVaultAddress.ts","../../src/hooks/pol/useVaultHistory.ts","../../src/hooks/pol/useVaultValidators.ts","../../src/hooks/tokens/useBeraCurrentPrice.ts","../../src/hooks/tokens/useTokenPrice.ts","../../src/hooks/tokens/useStakingTokenInformation.ts","../../src/hooks/tokens/useTotalSupply.ts","../../src/hooks/useBlockToTimestamp.ts","../../src/hooks/useContractWrite/useBeraContractWrite.ts","../../src/hooks/useContractWrite/stateReducer.ts","../../src/hooks/useGetVerifiedAbi.ts","../../src/hooks/useHistoryState.ts","../../src/hooks/usePrevious.ts","../../src/hooks/validators/useAllValidators.ts","../../src/hooks/validators/useApiEnrichedAllocation.ts","../../src/hooks/validators/useApiValidator.ts","../../src/hooks/validators/useBaselineRewardAllocation.ts","../../src/actions/validators/getBaselineRewardAllocation.ts","../../src/hooks/validators/useManagedValidatorRole.ts","../../src/actions/validators/getValidatorRewardAllocatorAddress.ts","../../src/hooks/validators/useStakingPoolBatch.ts","../../src/hooks/validators/useUserActiveValidators.ts","../../src/hooks/validators/useUserBoostsOnValidator.ts","../../src/hooks/validators/useUserClaimableIncentives.ts","../../src/utils/formatIncentivesTokenMap.ts","../../src/hooks/validators/useUserStakingPositions.ts","../../src/hooks/validators/useValidator.ts","../../src/hooks/validators/useOnChainValidator.ts","../../src/hooks/validators/useValidatorAnalytics.ts","../../src/hooks/validators/useValidatorCommission.ts","../../src/hooks/validators/useValidatorEstimatedBgtPerYear.ts","../../src/actions/validators/getValidatorIncentiveDistribution.ts","../../src/hooks/validators/useValidatorIncentiveDistribution.ts","../../src/hooks/validators/useValidatorQueuedCommission.ts","../../src/hooks/validators/useValidatorQueuedOperatorAddress.ts","../../src/hooks/validators/useValidatorQueuedRewardAllocation.ts","../../src/hooks/validators/useValidatorRewardAllocation.ts"],"sourcesContent":["import { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport type { GetConvertToAssetsProps } from \"../../actions/bend/getConvertToAssets\";\nimport { getConvertToAssets } from \"../../actions/bend/getConvertToAssets\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { DefaultHookOptions } from \"../../types/global\";\n\nexport function useGetConvertToAssets(\n {\n sharesAmount,\n vaultAddress,\n vaultChainId,\n }: Omit<GetConvertToAssetsProps, \"publicClient\"> & { vaultChainId?: number },\n options?: DefaultHookOptions,\n) {\n const publicClient = usePublicClient({ chainId: vaultChainId });\n return useSWR(\n publicClient && sharesAmount && vaultAddress\n ? [\"useGetConvertToAssets\", sharesAmount, vaultAddress, vaultChainId]\n : null,\n async ([_, sharesAmount, vaultAddress]) => {\n assertPublicClient(publicClient);\n\n return getConvertToAssets({\n sharesAmount,\n vaultAddress,\n publicClient,\n });\n },\n {\n ...options,\n },\n );\n}\n","import { useMemo } from \"react\";\nimport { type Address, zeroAddress } from \"viem\";\n\nimport { defaultChainId } from \"@berachain/config/internal\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\n\nimport { bex } from \"../../actions/dex/aggregators/bex\";\nimport { bgtRedeem } from \"../../actions/dex/aggregators/bgt\";\nimport { enso } from \"../../actions/dex/aggregators/enso/enso\";\nimport { erc4626Deposit } from \"../../actions/dex/aggregators/erc4626\";\nimport { fly } from \"../../actions/dex/aggregators/fly\";\nimport { haiku } from \"../../actions/dex/aggregators/haiku\";\nimport { honeyNative } from \"../../actions/dex/aggregators/honey\";\nimport { kyberswap } from \"../../actions/dex/aggregators/kyberswap\";\nimport { oogabooga } from \"../../actions/dex/aggregators/oogabooga\";\nimport { openOcean } from \"../../actions/dex/aggregators/openOcean\";\nimport { wberaSwap } from \"../../actions/dex/aggregators/wbera\";\nimport { useBeraFlag } from \"../../contexts/BeraFlags/BeraFlags\";\nimport type { HoneyConfigContextReturn } from \"../../contexts/HoneyConfigProvider\";\nimport type { SwapReferrer } from \"../../enum/dex\";\nimport type { IRawAggregatorQuote, MinimalERC20 } from \"../../types/dex\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\nimport { isToken } from \"../../utils/tokens\";\nimport { useUnderlyingAsset } from \"../tokens/useUnderlyingAsset\";\nimport { useAggregatorsRouterFeeBps } from \"./useAggregatorsRouterFeeBps\";\nimport { useBexStatus } from \"./useBexStatus\";\nimport {\n getAggregatorsSWROptions,\n raw_useSingleAggregatorQuote,\n} from \"./useSingleAggregatorQuote\";\n\nconst AGGREGATORS = [\n oogabooga,\n fly,\n kyberswap,\n openOcean,\n haiku,\n enso,\n bex,\n honeyNative,\n erc4626Deposit,\n];\n\ntype IUseAggregatorsQuotesArgs = BeraJS.BaseFunctionArgs & {\n tokenIn: MinimalERC20;\n tokenOut: MinimalERC20;\n amount: string;\n slippage: number;\n referrer?: SwapReferrer;\n rewardVault?: Address;\n /**\n * Useful cause the collaterals are provided byt he honeyContext and this way we can\n * use the Provider only in the swap page where is needed.\n *\n * The collaterals for the honey mint/redeem aggregator.\n */\n honeyNativeState?: Pick<\n HoneyConfigContextReturn,\n \"collateralList\" | \"protocol\"\n >;\n};\n\nexport function useAggregatorsQuotes(\n args: IUseAggregatorsQuotesArgs,\n options?: DefaultHookOptions,\n) {\n const { address: account } = useBeraWallet();\n const proxyAggregatorsThroughVercel = useBeraFlag(\n \"proxyAggregatorsThroughVercel\",\n );\n const activeAggregators = useBeraFlag(\"aggregators\");\n const publicClient = usePublicClient();\n const { data: feeBps } = useAggregatorsRouterFeeBps();\n\n const isWrapOrUnwrap =\n (isToken(args.tokenIn.address, \"BERA\") ||\n isToken(args.tokenIn.address, \"WBERA\")) &&\n (isToken(args.tokenOut.address, \"BERA\") ||\n isToken(args.tokenOut.address, \"WBERA\"));\n\n const isBgtRedeem = isToken(args.tokenIn.address, \"BGT\", {\n chainId: defaultChainId,\n });\n\n const { data: underlyingToken } = useUnderlyingAsset({\n token: args.tokenOut,\n });\n\n /**\n * Whether it's a native swap (wrap/unwrap) or BGT redeem\n */\n const isNativeSwap = isWrapOrUnwrap || isBgtRedeem;\n\n const { config } = parseBaseArgs(args);\n\n const isMAEnabled = config.bex.aggregatorsRouter !== zeroAddress;\n\n const swrOptions = getAggregatorsSWROptions(options);\n\n const sharedArgs = {\n activeAggregators,\n isMAEnabled,\n underlyingToken,\n isNativeSwap,\n account,\n publicClient,\n proxyAggregatorsThroughVercel,\n feeBps,\n } as const;\n\n // we're using independent useSWRs so we can show quotes as they come\n // instead of waiting for all of them to load\n const oogaBogaResult = raw_useSingleAggregatorQuote(\n {\n ...sharedArgs,\n ...args,\n aggregator: oogabooga,\n },\n swrOptions,\n );\n\n const flyResult = raw_useSingleAggregatorQuote(\n {\n ...sharedArgs,\n ...args,\n aggregator: fly,\n },\n swrOptions,\n );\n\n const erc4626Result = raw_useSingleAggregatorQuote(\n {\n ...sharedArgs,\n ...args,\n aggregator: erc4626Deposit,\n },\n swrOptions,\n );\n\n const kyberswapResult = raw_useSingleAggregatorQuote(\n {\n ...sharedArgs,\n ...args,\n aggregator: kyberswap,\n },\n swrOptions,\n );\n\n const openOceanResult = raw_useSingleAggregatorQuote(\n {\n ...sharedArgs,\n ...args,\n aggregator: openOcean,\n },\n swrOptions,\n );\n\n const haikuResult = raw_useSingleAggregatorQuote(\n {\n ...sharedArgs,\n ...args,\n aggregator: haiku,\n },\n swrOptions,\n );\n\n const ensoResult = raw_useSingleAggregatorQuote(\n {\n ...sharedArgs,\n ...args,\n aggregator: enso,\n },\n swrOptions,\n );\n\n const { protocol: bexProtocol } = useBexStatus();\n\n const bexResult = raw_useSingleAggregatorQuote(\n {\n ...sharedArgs,\n ...args,\n aggregator: bex,\n },\n { ...swrOptions, isEnabled: bexProtocol.isPaused === false },\n );\n\n const wberaSwapResult = raw_useSingleAggregatorQuote({\n ...sharedArgs,\n ...args,\n aggregator: wberaSwap,\n });\n\n const bgtRedeemResult = raw_useSingleAggregatorQuote(\n {\n ...sharedArgs,\n ...args,\n aggregator: bgtRedeem,\n },\n swrOptions,\n );\n\n const honeyResult = raw_useSingleAggregatorQuote(\n {\n ...sharedArgs,\n ...args,\n aggregator: honeyNative,\n },\n swrOptions,\n );\n\n const results = isWrapOrUnwrap\n ? [wberaSwapResult]\n : isBgtRedeem\n ? [bgtRedeemResult]\n : [\n oogaBogaResult,\n erc4626Result,\n flyResult,\n kyberswapResult,\n openOceanResult,\n haikuResult,\n ensoResult,\n honeyResult,\n bexProtocol.isPaused === false ? bexResult : null,\n ].filter((i): i is NonNullable<typeof i> => i !== null);\n\n const data = useMemo(() => {\n const error = results.reduce<(typeof results)[number][\"error\"]>(\n (error, result) => error || result.error,\n undefined,\n );\n\n const loadingAggregatorsNames = results\n .map((r, i) =>\n r.isLoading\n ? isNativeSwap\n ? wberaSwap.name\n : AGGREGATORS[i].name\n : null,\n )\n .filter(Boolean);\n\n const quotes = results\n .filter(\n (result) =>\n result !== undefined &&\n !result.isLoading &&\n !result.error &&\n result.data?.amountOut,\n )\n .map(({ data }) => data) as IRawAggregatorQuote[];\n\n const isLoading = quotes.length === 0 && loadingAggregatorsNames.length > 0;\n return { quotes, loadingAggregatorsNames, isLoading, error };\n }, [results]);\n\n return {\n ...data,\n refresh: () => {\n results.map((r) => r.refresh());\n },\n };\n}\n","import {\n type Address,\n Slippage,\n type SorSwapResult,\n Swap,\n SwapKind,\n Token,\n TokenAmount,\n} from \"@berachain-foundation/berancer-sdk\";\nimport { decodeFunctionData, formatEther } from \"viem\";\n\nimport { getUriFromLink } from \"@berachain/config\";\nimport { ChainId } from \"@berachain/config/internal\";\n\nimport { vaultAbi as balancerVaultAbi } from \"@berachain/abis/bex/vault\";\n\nimport { Aggregators } from \"../../../enum/dex\";\nimport { assertPublicClient } from \"../../../errors/assert\";\nimport { BeraError } from \"../../../errors/BeraError\";\nimport { BeraMonitoring } from \"../../../errors/BeraMonitoring\";\nimport { RequestError } from \"../../../errors/RequestError\";\nimport type { IAggregatorArgs, IRawAggregatorQuote } from \"../../../types/dex\";\nimport { isToken } from \"../../../utils/tokens\";\nimport { BalancerApi } from \"../bSdk\";\nimport { BaseAggregator } from \"./base\";\n\n// Constants\nconst DEFAULT_DEADLINE = 60 * 5; // default transaction deadline in seconds\nconst STALE_PRICE_THRESHOLD = 0.05; // 5% threshold for stale prices\nconst swapKind = SwapKind.GivenIn;\n\nclass BexAggregator extends BaseAggregator {\n name = Aggregators.HubPools;\n supportedChains = [ChainId.MAINNET, ChainId.BEPOLIA];\n readonly url = getUriFromLink(this.config.api);\n readonly type = \"graphql\";\n\n /**\n * Helper function to convert zero address to wrapped token address\n */\n private convertZeroToWrapped(address: Address): Address {\n return isToken(address, \"BERA\") ? this.config.tokens.wbera : address;\n }\n\n /**\n * Helper to calculate price impact percentage\n */\n private calculatePriceImpact(priceImpact: {\n error: string | null;\n priceImpact?: string;\n }): number {\n if (priceImpact.error) {\n console.error(\"Swap price impact error\", priceImpact);\n return 0;\n }\n\n return Number(priceImpact.priceImpact);\n }\n\n /**\n * Helper to check for stale SOR prices\n */\n private checkStalePrices({\n onChainAmount,\n sorPaths,\n sorAmount,\n queryData,\n }: {\n onChainAmount: TokenAmount;\n sorPaths: { pools: string[] }[];\n sorAmount: string;\n queryData: IAggregatorArgs;\n }): void {\n // Check for stale prices\n const deltaFromSorAmount =\n Number.parseFloat(formatEther(onChainAmount.scale18)) /\n Number.parseFloat(sorAmount);\n\n if (Math.abs(1 - deltaFromSorAmount) > STALE_PRICE_THRESHOLD) {\n console.warn(\n \"SOR returned stale prices. Delta from return amount is more than 5%\",\n {\n deltaFromSorAmount,\n },\n );\n\n const error = new BeraError({\n reason: \"SOR_STALE_PRICES\",\n level: \"warning\",\n message:\n \"SOR returned stale prices. Delta from return amount is more than 5%\",\n extra: {\n deltaFromSorAmount,\n pools: sorPaths.map((p) => p.pools),\n onChainAmount: formatEther(onChainAmount.scale18),\n sorAmount,\n queryData,\n },\n fingerprint: [\"SOR_STALE_PRICES\"],\n });\n BeraMonitoring.captureException(error);\n }\n }\n\n async getQuote(args: IAggregatorArgs): Promise<IRawAggregatorQuote> {\n const balancerApi = new BalancerApi(\n this.url,\n // @ts-expect-error b-sdk has more chains than berajs\n this.chainId,\n );\n const { tokenIn, tokenOut, amount, slippage, publicClient } = args;\n this.assertChainSupport({ tokenIn, tokenOut });\n\n assertPublicClient(publicClient);\n\n const wberaIsBera = isToken(tokenIn, \"BERA\") || isToken(tokenOut, \"BERA\");\n\n // Initialize tokens\n const tokenInV3 = new Token(\n this.chainId,\n this.convertZeroToWrapped(tokenIn.address),\n tokenIn.decimals,\n );\n const tokenOutV3 = new Token(\n this.chainId,\n this.convertZeroToWrapped(tokenOut.address),\n tokenOut.decimals,\n );\n\n const tokenAmount = TokenAmount.fromRawAmount(\n tokenInV3,\n amount as `${number}`,\n );\n\n // swap paths\n const {\n paths: sorPaths,\n priceImpact,\n returnAmount: sorAmount,\n }: SorSwapResult = await balancerApi.sorSwapPaths.fetchSorSwapPaths({\n // @ts-expect-error b-sdk has more chains than berajs\n chainId: this.chainId,\n tokenIn: tokenInV3.address,\n tokenOut: tokenOutV3.address,\n swapKind,\n swapAmount: tokenAmount,\n });\n\n if (!sorPaths?.length) {\n throw new RequestError({\n response: undefined,\n endpoint: {\n url: this.url,\n name: this.name,\n type: this.type,\n },\n reason: BaseAggregator.PATH_NOT_FOUND_REASON,\n chainId: this.chainId,\n payload: {\n tokenIn: tokenInV3.address,\n tokenOut: tokenOutV3.address,\n swapKind,\n swapAmount: tokenAmount,\n },\n message: `No swap paths returned from Balancer API`,\n });\n }\n\n // execute swap query\n const swap = new Swap({\n chainId: this.chainId,\n paths: sorPaths,\n swapKind,\n userData: \"0x\" as `0x${string}`,\n });\n const queryOutput = await swap.query(publicClient.transport.url);\n\n if (!(\"expectedAmountOut\" in queryOutput)) {\n throw new Error(\"No Bex paths found\");\n }\n\n this.checkStalePrices({\n onChainAmount: queryOutput.expectedAmountOut,\n sorPaths,\n sorAmount,\n queryData: args,\n });\n\n // format quote response\n return {\n amountOut: queryOutput.expectedAmountOut.amount.toString(),\n amountIn: amount,\n allowanceRequirements: this.parseAllowanceRequirements({\n tokenIn,\n rawAmount: amount,\n spender: queryOutput.to,\n }),\n name: this.name,\n priceImpactPercentage: this.calculatePriceImpact(priceImpact),\n swapFeeBps: 0,\n getCalldata: ({ account }) => {\n // generate user transaction data\n const callData = swap.buildCall({\n slippage: Slippage.fromPercentage(slippage.toString() as `${number}`),\n deadline: BigInt(Math.round(Date.now() / 1000) + DEFAULT_DEADLINE),\n queryOutput,\n sender: account as Address,\n recipient: account as Address,\n wethIsEth: wberaIsBera,\n });\n\n const { args: params, functionName } = decodeFunctionData({\n abi: balancerVaultAbi,\n data: callData.callData,\n });\n\n return {\n params,\n functionName,\n abi: balancerVaultAbi,\n address: callData.to,\n value: callData.value || BigInt(0),\n };\n },\n };\n }\n}\n\nexport const bex = new BexAggregator();\n","import { ChainId } from \"@berachain/config/internal\";\n\nimport { Aggregators } from \"../../../enum/dex\";\nimport { InvalidArgumentError } from \"../../../errors/InvalidArgumentError\";\nimport type {\n IAggregatorArgs,\n IRawAggregatorQuote,\n MinimalERC20,\n} from \"../../../types/dex\";\nimport { beraToken, isToken } from \"../../../utils/tokens\";\nimport { BaseAggregator } from \"./base\";\n\nclass RedeemBgtAggregator extends BaseAggregator {\n name = Aggregators.RedeemBgt;\n supportedChains = [ChainId.MAINNET, ChainId.BEPOLIA];\n readonly type = \"rpc\";\n\n checkChainSupport({\n tokenIn,\n tokenOut,\n }: {\n tokenIn: MinimalERC20;\n tokenOut: MinimalERC20;\n }): boolean {\n if (!super.checkChainSupport({ tokenIn, tokenOut })) {\n return false;\n }\n\n return (\n // only supported on same chain\n tokenIn.chainId === tokenOut.chainId &&\n isToken(tokenIn, \"BGT\", { chainId: tokenIn.chainId }) &&\n isToken(tokenOut, \"BERA\")\n );\n }\n // handles native swaps: wrap and unwrap\n async getQuote({\n tokenIn,\n amount,\n }: Omit<\n IAggregatorArgs,\n \"slippage\" | \"feeBps\" | \"tokenOut\" | \"account\"\n >): Promise<IRawAggregatorQuote> {\n this.assertChainSupport({\n tokenIn,\n tokenOut: { ...beraToken, chainId: tokenIn.chainId },\n });\n\n if (!isToken(tokenIn, \"BGT\", { config: this.config })) {\n throw new InvalidArgumentError({\n property: \"tokenIn\",\n value: tokenIn,\n expected: \"BGT\",\n level: \"warning\",\n });\n }\n\n return {\n amountOut: amount,\n amountIn: amount,\n allowanceRequirements: [],\n name: Aggregators.RedeemBgt,\n isNativeSwap: true,\n swapFeeBps: 0,\n // not adding calldata here because it depends on the connected wallet\n // bgt redeem requires a receiver address\n // moreover this is a sensitive operation, better be sure of what data is being sent\n // by controlling it on the consumer side\n } as const;\n }\n}\n\nexport const bgtRedeem = new RedeemBgtAggregator();\n","import { zeroAddress } from \"viem\";\n\nimport { ChainId } from \"@berachain/config/internal\";\n\nimport aggregatorsRouterAbi from \"@berachain/abis/meta-aggregator/metaAggregatorV2\";\n\nimport { Aggregators } from \"../../../../enum/dex\";\nimport type {\n IAggregatorArgs,\n IRawAggregatorQuote,\n} from \"../../../../types/dex\";\nimport type { IContractWrite } from \"../../../../types/global\";\nimport { BaseAggregator } from \"../base\";\n\nclass EnsoAggregator extends BaseAggregator {\n name = Aggregators.Enso;\n supportedChains = [ChainId.MAINNET];\n readonly type = \"rest\";\n needsAccountForQuote = true;\n\n notFoundMessages: string[] = [\n \"Could not build shortcuts for route\",\n \"Could not quote shortcuts for route\",\n \"Swap not found for a required underlying of defi route,\",\n \"No route found from\",\n ];\n\n async getQuote({\n tokenIn,\n tokenOut,\n amount,\n slippage,\n account = zeroAddress,\n aggregatorsFeeBps,\n proxyAggregatorsThroughVercel = false,\n rewardVault,\n }: IAggregatorArgs): Promise<IRawAggregatorQuote> {\n this.assertChainSupport({ tokenIn, tokenOut });\n\n const {\n tokenInAddress,\n tokenOutAddress,\n isTokenInNative,\n isTokenOutNative,\n } = this.parseAddresses(tokenIn.address, tokenOut.address);\n\n const inputAmountAfterFees = this.getAmountAfterFees(\n amount,\n aggregatorsFeeBps,\n );\n\n // Enso rejects a zero-address `refundReceiver` with 400 Bad Request, so\n // when no wallet is connected (or the account hasn't hydrated yet) fall\n // back to the executor. Only matters for quotes — on execution the user's\n // real address is always set.\n const refundReceiver =\n account === zeroAddress\n ? this.config.bex.aggregatorsRouterExecutor\n : account;\n\n const params = new URLSearchParams({\n fromAddress: this.config.bex.aggregatorsRouterExecutor,\n receiver: this.config.bex.aggregatorsRouterExecutor,\n spender: this.config.bex.aggregatorsRouterExecutor,\n amountIn: inputAmountAfterFees,\n tokenIn: tokenInAddress,\n tokenOut: tokenOutAddress,\n chainId: ChainId.MAINNET.toString(),\n slippage: (Number(slippage) * 100).toString(),\n refundReceiver,\n });\n\n // Build the URL via string concat — the `new URL(relative)` constructor\n // throws on relative paths like `/api/aggregators?...`, which silently\n // breaks the Vercel-proxy path.\n this.url = proxyAggregatorsThroughVercel\n ? `/api/aggregators?aggregator=enso&${params.toString()}`\n : `${this.config.bex.aggregatorsProxyUrl}/enso/api/v1/shortcuts/route?${params.toString()}`;\n\n const response = await this.fetch(this.url);\n\n const quote = await response.json();\n\n const inputData = this.getInputData({\n tokenIn: tokenInAddress,\n amountIn: amount,\n isNative: isTokenInNative,\n });\n\n const outputData = {\n tokenOut: tokenOutAddress,\n receiver: account,\n minAmountOut: this.getMinAmountOut(quote.amountOut.toString(), slippage),\n isNative: isTokenOutNative,\n };\n\n const aggregatorData = {\n aggregator: quote.tx?.to,\n data: quote.tx?.data,\n };\n\n return {\n amountOut: quote.amountOut.toString(),\n amountIn: amount,\n allowanceRequirements: this.parseAllowanceRequirements({\n tokenIn,\n rawAmount: amount,\n spender: this.config.bex.aggregatorsRouter,\n }),\n name: this.name,\n swapFeeBps: aggregatorsFeeBps!,\n getCalldata: () =>\n ({\n params: [\n inputData,\n outputData,\n aggregatorData,\n {\n rewardVault: rewardVault ?? zeroAddress,\n isSwapAndStake: !!rewardVault,\n },\n ],\n functionName: \"swap\",\n abi: aggregatorsRouterAbi,\n // send full amount to router first, which will deduct the swap fee before executing trade\n value: isTokenInNative ? BigInt(amount) : BigInt(\"0\"),\n address: this.config.bex.aggregatorsRouter,\n }) satisfies Omit<\n IContractWrite<typeof aggregatorsRouterAbi, \"swap\">,\n \"message\" | \"actionType\"\n >,\n };\n }\n}\n\nexport const enso = new EnsoAggregator();\n","import { erc4626Abi, formatUnits } from \"viem\";\n\nimport { wberaStakerVaultAbi as stakeBeraVaultAbi } from \"@berachain/abis/pol/wberaStakerVault\";\n\nimport { ContractName } from \"../../../enum/contracts\";\nimport { Aggregators } from \"../../../enum/dex\";\nimport { assertDefined, assertPublicClient } from \"../../../errors/assert\";\nimport type {\n IAggregatorArgs,\n IRawAggregatorQuote,\n Token,\n} from \"../../../types/dex\";\nimport type { IContractWrite } from \"../../../types/global\";\nimport { isToken } from \"../../../utils/tokens\";\nimport { BaseAggregator } from \"./base\";\n\n/**\n * Aggregator that handles direct deposits into ERC4626 vault tokens.\n * Instead of routing through a DEX, this deposits the underlying asset directly\n * into the vault contract (e.g. WBERA → swBERA, HONEY → iBERA, or Bend vault underlying → vault token).\n *\n * Special-cases native BERA → swBERA via `depositNative` (no approval needed).\n */\nclass ERC4626Aggregator extends BaseAggregator {\n name = Aggregators.ERC4626;\n supportedChains = null;\n readonly type = \"rpc\";\n\n /**\n * Returns true when tokenOut is an ERC4626 vault whose underlying asset matches tokenIn,\n * or when depositing native BERA into swBERA.\n */\n checkChainSupport({\n tokenIn,\n tokenOut,\n underlyingToken,\n }: {\n tokenIn: Token;\n tokenOut: Token;\n underlyingToken?: Token;\n }): boolean {\n const result =\n super.checkChainSupport({ tokenIn, tokenOut, underlyingToken }) &&\n !!underlyingToken &&\n underlyingToken?.chainId === tokenOut.chainId &&\n (isToken(underlyingToken, tokenIn) ||\n // this is a special case for the swbera vault\n (isToken(tokenIn, \"BERA\") && isToken(tokenOut, \"SWBERA\")));\n\n return result;\n }\n\n /**\n * Fetches a deposit quote by calling `convertToShares` on the vault.\n * Returns calldata for either `deposit` (ERC20) or `depositNative` (BERA → swBERA).\n */\n async getQuote({\n tokenIn,\n tokenOut,\n amount,\n underlyingToken,\n publicClient,\n }: Omit<\n IAggregatorArgs,\n \"slippage\" | \"feeBps\"\n >): Promise<IRawAggregatorQuote> {\n this.assertChainSupport({ tokenIn, tokenOut, underlyingToken });\n\n assertDefined(underlyingToken, \"underlyingToken\");\n assertPublicClient(publicClient);\n\n const rawOutputAmount = await publicClient.readContract({\n address: tokenOut.address,\n abi: erc4626Abi,\n functionName: \"convertToShares\",\n args: [BigInt(amount)],\n });\n\n const isSwBeraNative =\n isToken(tokenOut, \"SWBERA\") && isToken(tokenIn, \"BERA\");\n\n return {\n amountOut: rawOutputAmount.toString(),\n amountIn: amount,\n allowanceRequirements: isSwBeraNative\n ? []\n : [\n {\n token: tokenIn,\n spender: tokenOut.address,\n amount: {\n raw: amount,\n formatted: formatUnits(BigInt(amount), tokenIn.decimals),\n },\n },\n ],\n name: Aggregators.ERC4626,\n isNativeSwap: false,\n swapFeeBps: 0,\n getCalldata: ({ account }) =>\n isSwBeraNative\n ? ({\n abi: stakeBeraVaultAbi,\n address: tokenOut.address,\n functionName: \"depositNative\",\n params: [BigInt(amount), account],\n value: BigInt(amount),\n } satisfies Omit<\n IContractWrite<typeof stakeBeraVaultAbi, \"depositNative\">,\n \"message\" | \"actionType\"\n >)\n : ({\n abi: erc4626Abi,\n address: tokenOut.address,\n functionName: \"deposit\",\n contractName: ContractName.ERC4626,\n params: [BigInt(amount), account],\n value: 0n,\n } satisfies Omit<\n IContractWrite<typeof erc4626Abi, \"deposit\">,\n \"message\" | \"actionType\"\n >),\n };\n }\n}\n\nexport const erc4626Deposit = new ERC4626Aggregator();\n","import { type Address, type Hex, zeroAddress } from \"viem\";\n\nimport { ChainId } from \"@berachain/config/internal\";\n\nimport aggregatorsRouterAbi from \"@berachain/abis/meta-aggregator/metaAggregatorV2\";\n\nimport { Aggregators } from \"../../../enum/dex\";\nimport type { IAggregatorArgs, IRawAggregatorQuote } from \"../../../types/dex\";\nimport type { IContractWrite } from \"../../../types/global\";\nimport { isToken } from \"../../../utils/tokens\";\nimport { BaseAggregator } from \"./base\";\n\nconst BASE_URL = \"https://api.fly.trade/aggregator\";\n\nclass FlyAggregator extends BaseAggregator {\n name = Aggregators.Fly;\n supportedChains = [ChainId.MAINNET];\n readonly type = \"rest\";\n\n notFoundMessages: string[] = [\n \"Couldn't recognize to token\",\n \"Couldn't recognize from token\",\n \"There is not enough liquidity. Amount is too high.\",\n \"Routes were not found\",\n ];\n\n async getQuote({\n tokenIn,\n tokenOut,\n amount,\n slippage,\n account,\n aggregatorsFeeBps,\n rewardVault,\n }: IAggregatorArgs): Promise<IRawAggregatorQuote> {\n this.assertChainSupport({ tokenIn, tokenOut });\n\n const {\n tokenInAddress,\n tokenOutAddress,\n isTokenInNative,\n isTokenOutNative,\n } = this.parseAddresses(tokenIn.address, tokenOut.address);\n\n const inputAmountAfterFees = this.getAmountAfterFees(\n amount,\n aggregatorsFeeBps,\n );\n\n const url = new URL(`${BASE_URL}/quote`);\n this.url = url.toString();\n const params = new URLSearchParams({\n fromTokenAddress: tokenInAddress,\n toTokenAddress: tokenOutAddress,\n sellAmount: inputAmountAfterFees,\n slippage: (slippage / 100).toString(),\n gasless: \"false\",\n network: \"berachain\",\n });\n\n // fly will transfer funds from the executor and will send amountOut to the executor\n // which in turn will send the funds to the account\n params.set(\"fromAddress\", this.config.bex.aggregatorsRouterExecutor);\n params.set(\"toAddress\", this.config.bex.aggregatorsRouterExecutor);\n\n url.search = params.toString();\n\n const response = await this.fetch(url);\n\n const quoteData = await response.json();\n\n const formattedQuote = {\n amountOut: quoteData.amountOut,\n amountIn: amount,\n allowanceRequirements: this.parseAllowanceRequirements({\n tokenIn,\n rawAmount: amount,\n spender: this.config.bex.aggregatorsRouter,\n }),\n name: this.name,\n swapFeeBps: aggregatorsFeeBps ?? 0,\n };\n\n // fetch transaction data immediately to improve UX and prevent potential failures during swap execution\n const txUrl = new URL(`${BASE_URL}/transaction`);\n\n this.url = txUrl.toString();\n\n const txParams = new URLSearchParams({\n quoteId: quoteData.id,\n estimateGas: \"false\",\n });\n\n txUrl.search = txParams.toString();\n\n const txResponse = await this.fetch(txUrl);\n\n const txData: {\n to: Address;\n data: Hex;\n } = await txResponse.json();\n\n return {\n ...formattedQuote,\n getCalldata: ({ account }) => {\n const inputData = this.getInputData({\n tokenIn: tokenInAddress,\n amountIn: amount,\n isNative: isTokenInNative,\n });\n\n const outputData = {\n tokenOut: tokenOutAddress,\n receiver: account,\n minAmountOut: this.getMinAmountOut(quoteData.amountOut, slippage),\n isNative: isTokenOutNative,\n };\n\n const aggregatorData = {\n aggregator: txData?.to,\n data: txData?.data,\n };\n return {\n params: [\n inputData,\n outputData,\n aggregatorData,\n {\n rewardVault: rewardVault ?? zeroAddress,\n isSwapAndStake: !!rewardVault,\n },\n ],\n functionName: \"swap\",\n abi: aggregatorsRouterAbi,\n // send full amount to router first, which will deduct the swap fee before executing trade\n value: isToken(tokenIn, \"BERA\") ? BigInt(amount) : BigInt(\"0\"),\n address: this.config.bex.aggregatorsRouter,\n } satisfies Omit<\n IContractWrite<typeof aggregatorsRouterAbi, \"swap\">,\n \"message\" | \"actionType\"\n >;\n },\n };\n }\n}\n\nexport const fly = new FlyAggregator();\n","import { formatUnits, parseUnits, zeroAddress } from \"viem\";\n\nimport { ChainId } from \"@berachain/config/internal\";\n\nimport aggregatorsRouterAbi from \"@berachain/abis/meta-aggregator/metaAggregatorV2\";\n\nimport { Aggregators, SwapReferrer } from \"../../../enum/dex\";\nimport { BeraError } from \"../../../errors/BeraError\";\nimport type { IAggregatorArgs, IRawAggregatorQuote } from \"../../../types/dex\";\nimport type { IContractWrite } from \"../../../types/global\";\nimport { BaseAggregator } from \"./base\";\n\nclass HaikuAggregator extends BaseAggregator {\n name = Aggregators.Haiku;\n supportedChains = [ChainId.MAINNET];\n readonly type = \"rest\";\n\n notFoundMessages: string[] = [\n \"token not found\",\n \"Token is not supported\",\n \"No route found for the given input or the liquidity is not enough\",\n \"Invalid input amount. Please ensure the total amount of input is greater than 0.001 USD\",\n ];\n async getQuote({\n tokenIn,\n tokenOut,\n amount,\n slippage,\n aggregatorsFeeBps,\n proxyAggregatorsThroughVercel = false,\n referrer,\n rewardVault,\n }: IAggregatorArgs): Promise<IRawAggregatorQuote> {\n if (tokenIn.decimals === undefined || tokenOut.decimals === undefined) {\n throw new BeraError({\n message: \"Missing required params\",\n level: \"error\",\n });\n }\n\n this.assertChainSupport({ tokenIn, tokenOut });\n const {\n tokenInAddress,\n tokenOutAddress,\n isTokenInNative,\n isTokenOutNative,\n } = this.parseAddresses(tokenIn.address, tokenOut.address);\n\n const inputAmountAfterFees = this.getAmountAfterFees(\n amount,\n aggregatorsFeeBps,\n );\n\n // get route quote from haiku api\n const quoteBody = {\n intent: {\n allowancesMode: \"approve\",\n slippage: slippage / 100,\n receiver: this.config.bex.aggregatorsRouterExecutor,\n input_positions: {\n [`bera:${tokenInAddress}`]: formatUnits(\n BigInt(inputAmountAfterFees),\n tokenIn.decimals,\n ),\n },\n target_weights: {\n [`bera:${tokenOutAddress}`]: 1, // 100% into the output token\n },\n },\n };\n\n // haiku request to use separate API KEYs for zap and swap\n // hence the separate proxy paths (api keys are used at the proxy level)\n const proxyPath = referrer === SwapReferrer.ZAP ? \"zap-haiku\" : \"haiku\";\n\n this.url = proxyAggregatorsThroughVercel\n ? `/api/aggregators?aggregator=haikuQuote`\n : `${this.config.bex.aggregatorsProxyUrl}/${proxyPath}/v1/quoteIntent`;\n\n const quoteResponse = await this.fetch(\n // using vercel proxy in development to avoid CORS issues\n this.url,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(quoteBody),\n },\n );\n\n const quoteData = await quoteResponse.json();\n\n const formattedQuote = {\n amountOut: parseUnits(\n quoteData.balances[0].amount,\n tokenOut.decimals,\n ).toString(),\n amountIn: amount,\n allowanceRequirements: this.parseAllowanceRequirements({\n tokenIn,\n rawAmount: amount,\n spender: this.config.bex.aggregatorsRouter,\n }),\n name: this.name,\n swapFeeBps: aggregatorsFeeBps!,\n };\n\n this.url = proxyAggregatorsThroughVercel\n ? `/api/aggregators?aggregator=haikuSolve`\n : `${this.config.bex.aggregatorsProxyUrl}/${proxyPath}/v1/solveIntent`;\n\n const solveResponse = await this.fetch(this.url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n quoteId: quoteData.quoteId,\n }),\n });\n\n const solveData = await solveResponse.json();\n\n return {\n ...formattedQuote,\n getCalldata: ({ account }) => {\n const inputData = this.getInputData({\n tokenIn: tokenInAddress,\n amountIn: amount,\n isNative: isTokenInNative,\n isPermit2Approval: true, // haiku requires permit2 approval\n permit2SpenderAddress: this.config.bex.haikuAgentAddress,\n });\n\n const outputData = {\n tokenOut: tokenOutAddress,\n receiver: account,\n minAmountOut: this.getMinAmountOut(\n formattedQuote.amountOut,\n slippage,\n ),\n isNative: isTokenOutNative,\n };\n\n const aggregatorData = {\n aggregator: solveData.to,\n data: solveData.data,\n };\n return {\n params: [\n inputData,\n outputData,\n aggregatorData,\n {\n rewardVault: rewardVault ?? zeroAddress,\n isSwapAndStake: !!rewardVault,\n },\n ],\n functionName: \"swap\",\n abi: aggregatorsRouterAbi,\n // send full amount to router first, which will deduct the swap fee before executing trade\n value: isTokenInNative ? BigInt(amount) : BigInt(\"0\"),\n address: this.config.bex.aggregatorsRouter,\n } satisfies Omit<\n IContractWrite<typeof aggregatorsRouterAbi, \"swap\">,\n \"message\" | \"actionType\"\n >;\n },\n };\n }\n}\n\nexport const haiku = new HaikuAggregator();\n","import { type Address, formatUnits } from \"viem\";\n\nimport { ChainId } from \"@berachain/config/internal\";\n\nimport BigNumber from \"@berachain/utils/pkg/bignumber.js\";\n\nimport type { HoneyConfigContextReturn } from \"../../../contexts/HoneyConfigProvider\";\nimport { Aggregators } from \"../../../enum/dex\";\nimport { assertPublicClient } from \"../../../errors/assert\";\nimport { BeraError } from \"../../../errors/BeraError\";\nimport { InvalidArgumentError } from \"../../../errors/InvalidArgumentError\";\nimport type {\n IAggregatorArgs,\n IRawAggregatorQuote,\n Token,\n TokenWithMetadata,\n} from \"../../../types/dex\";\nimport { getHoneyToken, isToken } from \"../../../utils/tokens\";\nimport {\n getHoneyPreview,\n type HoneyPreviewArgs,\n HoneyPreviewMethod,\n} from \"../../honey/getHoneyPreview\";\nimport { getHoneyVaultsBalance } from \"../../honey/getHoneyVaultsBalance\";\nimport { getSwapPayload } from \"../../honey/getSwapPayload\";\nimport { isBasketModeEnabled } from \"../../honey/isBasketModeEnabled\";\nimport { BaseAggregator } from \"./base\";\n\ninterface IHoneyNativeArgs\n extends Omit<\n IAggregatorArgs,\n \"slippage\" | \"feeBps\" | \"aggregatorsFeeBps\" | \"referrer\"\n > {}\n\nfunction _getPreviewMethod(isMint: boolean): HoneyPreviewMethod {\n return isMint ? HoneyPreviewMethod.Mint : HoneyPreviewMethod.Redeem;\n}\n\nexport class HoneyNativeAggregator extends BaseAggregator {\n name = Aggregators.Honey;\n supportedChains = [ChainId.MAINNET];\n readonly type = \"rpc\";\n\n readonly honeyToken: TokenWithMetadata = getHoneyToken(this);\n\n /**\n * Determines if the swap is a honey mint or redeem based on the tokenIn, tokenOut and the colalterals passed.\n * @returns True if the swap is a honey mint or redeem\n */\n isHoneyNativeSwap({\n tokenIn,\n tokenOut,\n honeyNativeState,\n ...args\n }: BeraJS.BaseFunctionArgs & {\n tokenIn: Address;\n tokenOut: Address;\n honeyNativeState?: Pick<HoneyConfigContextReturn, \"collateralList\">;\n }) {\n if (!honeyNativeState?.collateralList) return false;\n\n const isMint = isToken(tokenOut, \"HONEY\", args);\n const isRedeem = isToken(tokenIn, \"HONEY\", args);\n\n if (!isMint && !isRedeem) return false;\n\n return honeyNativeState.collateralList.some((coll) =>\n isToken(coll.address, isMint ? tokenIn : tokenOut),\n );\n }\n\n checkChainSupport({\n tokenIn,\n tokenOut,\n honeyNativeState,\n }: {\n tokenIn: Token;\n tokenOut: Token;\n honeyNativeState?: Pick<HoneyConfigContextReturn, \"collateralList\">;\n }): boolean {\n return (\n super.checkChainSupport({ tokenIn, tokenOut }) &&\n tokenIn.chainId === tokenOut.chainId &&\n this.isHoneyNativeSwap({\n tokenIn: tokenIn.address,\n tokenOut: tokenOut.address,\n honeyNativeState,\n })\n );\n }\n\n async getQuote({\n tokenIn,\n tokenOut,\n amount,\n publicClient,\n account,\n honeyNativeState,\n }: IHoneyNativeArgs): Promise<IRawAggregatorQuote | undefined> {\n const { collateralList: collaterals } = honeyNativeState ?? {};\n if (!collaterals) {\n throw new InvalidArgumentError({\n message: \"Invalid Honey Context state\",\n property: \"collaterals\",\n value: collaterals,\n expected: \"TokenWithOrder[]\",\n });\n }\n assertPublicClient(publicClient);\n\n this.assertChainSupport({ tokenIn, tokenOut });\n\n const isMint = isToken(tokenOut, this.honeyToken);\n\n /**\n * The collaterals on Honey are managed with a state that changes the order based on the selected collateral.\n * hub does not do that, so we need to order the collaterals based on the tokenIn.\n * The first collateral will be the tokenIn.\n * */\n const hubOrderedCollaterals = collaterals;\n\n // Check if the token requested as collateral is a valid collateral token that can be used to mint or redeem honey\n const collateral = collaterals.find((collateral) =>\n isToken(collateral.address, isMint ? tokenIn.address : tokenOut.address),\n );\n if (!collateral) {\n throw new BeraError({\n message: \"This collateral is not part of the Honey protocol\",\n });\n }\n\n /*\n * honeyVaultBalances: Balances of the collateral's vault to check if the vault has enough liquidity\n * isBasketMode: Whether the basket mode is enabled\n */\n const [honeyVaultBalances, isBasketMode] = await Promise.all([\n getHoneyVaultsBalance({\n client: publicClient,\n collateralList: [collateral],\n }),\n isBasketModeEnabled({\n client: publicClient,\n isMint,\n collateralList: collaterals,\n latestPrices: undefined, // no need to get the latest prices for the aggregator\n isPythWrapperEnabled: false, // Pyth wrapper is not supported for the aggregator\n }),\n ]);\n if (!honeyVaultBalances) {\n throw new BeraError({\n message: \"Failed to fetch the Honey vault balances\",\n });\n }\n // Need this to prevent mint or redeem in case of a basket mode\n if (isBasketMode) {\n return undefined;\n }\n\n const collateralVaultBalance = honeyVaultBalances[0];\n\n // Order the collaterals manually\n const collateralIdx = collateral.order;\n if (hubOrderedCollaterals.length > 1 && collateralIdx !== 0) {\n hubOrderedCollaterals.splice(collateralIdx, 1);\n hubOrderedCollaterals.unshift(collateral);\n }\n\n // Honey's contract expects the amount to be in a raw format\n const honeyFormattedAmountIn = formatUnits(\n BigInt(amount),\n isMint ? collateral.decimals : this.honeyToken.decimals,\n );\n\n // Parameters for the honey preview call\n const quoteParams = {\n client: publicClient,\n collateral: collateral,\n collateralList: collaterals,\n amount: honeyFormattedAmountIn,\n method: _getPreviewMethod(isMint),\n latestPrices: undefined, // no need to get the latest prices for the aggregator\n isPythWrapperEnabled: false, // Pyth wrapper is not supported for the aggregator\n } satisfies HoneyPreviewArgs;\n\n // Get the quote for the Honey mint\n const quoteData = await getHoneyPreview(quoteParams);\n\n if (!quoteData) {\n throw new BeraError({\n message: \"Failed to fetch the Honey preview\",\n });\n }\n\n // The quote contains the honey & the collaterals amount, but we'll only ever need honey\n const { honey: honeyQuote, collaterals: collateralsQuote } = quoteData;\n\n // check if the vault has enough liquidity to redeem the collateral\n const haveEnoughLiquidity = !isMint\n ? new BigNumber(collateralVaultBalance?.balance.formatted ?? \"0\").gte(\n formatUnits(\n collateralsQuote[collateral.address],\n collateral.decimals,\n ),\n )\n : true;\n\n if (!haveEnoughLiquidity) {\n return undefined;\n }\n\n /**\n * Get the swap payload for the Honey mint\n * If the account is not provided, we will not get the payload\n */\n const payload = await getSwapPayload({\n state: {\n actionType: isMint ? \"mint\" : \"redeem\",\n fromAmount: [honeyFormattedAmountIn],\n collaterals: hubOrderedCollaterals,\n isBasketModeEnabled: false, // In Hub, we don't support basket mode\n },\n collateralList: hubOrderedCollaterals,\n publicClient,\n priceFeedMap: undefined,\n isPythWrapperEnabled: false,\n });\n\n // In case the user is not connected the payload will not be generated but the preview yes\n if (!payload && account) {\n throw new BeraError({\n message: \"Failed to fetch the Honey swap payload\",\n });\n }\n\n return {\n amountIn: amount,\n amountOut: isMint\n ? honeyQuote.toString()\n : collateralsQuote[collateral.address].toString(),\n allowanceRequirements: this.parseAllowanceRequirements({\n tokenIn,\n rawAmount: amount,\n spender: this.config.bex.aggregatorsRouter,\n }),\n name: Aggregators.Honey,\n swapFeeBps: 0,\n getCalldata: ({ account }) => {\n return payload({ account });\n },\n };\n }\n}\n\nexport const honeyNative = new HoneyNativeAggregator();\n","import { zeroAddress } from \"viem\";\n\nimport { ChainId } from \"@berachain/config/internal\";\n\nimport aggregatorsRouterAbi from \"@berachain/abis/meta-aggregator/metaAggregatorV2\";\n\nimport { Aggregators } from \"../../../enum/dex\";\nimport type { IAggregatorArgs, IRawAggregatorQuote } from \"../../../types/dex\";\nimport type { IContractWrite } from \"../../../types/global\";\nimport { BaseAggregator } from \"./base\";\n\nclass KyberSwapAggregator extends BaseAggregator {\n name = Aggregators.KyberSwap;\n supportedChains = [ChainId.MAINNET];\n readonly type = \"rest\";\n\n notFoundMessages = [\n \"token not found\",\n \"route not found\",\n \"amountIn is greater than max allowed\",\n ];\n async getQuote({\n tokenIn,\n tokenOut,\n amount,\n slippage,\n aggregatorsFeeBps,\n proxyAggregatorsThroughVercel = false,\n rewardVault,\n }: IAggregatorArgs): Promise<IRawAggregatorQuote> {\n this.assertChainSupport({ tokenIn, tokenOut });\n const {\n isTokenInNative,\n isTokenOutNative,\n tokenInAddress,\n tokenOutAddress,\n } = this.parseAddresses(tokenIn.address, tokenOut.address);\n\n const inputAmountAfterFees = this.getAmountAfterFees(\n amount,\n aggregatorsFeeBps,\n );\n\n const params = new URLSearchParams({\n tokenIn: tokenInAddress,\n tokenOut: tokenOutAddress,\n amountIn: inputAmountAfterFees,\n slippageTolerance: (slippage / 100).toString(),\n to: this.config.bex.aggregatorsRouterExecutor,\n clientData: JSON.stringify({ source: \"berachain\" }),\n });\n\n // Build URLs via string concat — the `new URL(relative)` constructor\n // throws on relative paths like `/api/aggregators?...`, which silently\n // breaks the Vercel-proxy path.\n this.url = proxyAggregatorsThroughVercel\n ? `/api/aggregators?aggregator=kyberswapRoutes&${params.toString()}`\n : `${this.config.bex.aggregatorsProxyUrl}/kyberswap/berachain/api/v1/routes?${params.toString()}`;\n\n const routeResponse = await this.fetch(this.url);\n\n const routeData = await routeResponse.json();\n const formattedQuote = {\n amountOut: routeData.data.routeSummary.amountOut,\n amountIn: amount,\n name: this.name,\n swapFeeBps: aggregatorsFeeBps!,\n allowanceRequirements: this.parseAllowanceRequirements({\n tokenIn,\n rawAmount: amount,\n spender: this.config.bex.aggregatorsRouter,\n }),\n } satisfies IRawAggregatorQuote;\n\n // Get the build route data for transaction\n const buildRouteBody = {\n routeSummary: routeData.data.routeSummary,\n sender: this.config.bex.aggregatorsRouterExecutor,\n recipient: this.config.bex.aggregatorsRouterExecutor,\n slippageTolerance: slippage * 100, // kyberswap expects the slippage in basis points\n deadline: Math.floor(Date.now() / 1000) + 60 * 5, // 5 minutes from now\n source: \"berachain\",\n };\n\n const buildUrl = proxyAggregatorsThroughVercel\n ? `/api/aggregators?aggregator=kyberswapBuild&${params.toString()}`\n : `${this.config.bex.aggregatorsProxyUrl}/kyberswap/berachain/api/v1/route/build?${params.toString()}`;\n\n const buildRouteResponse = await this.fetch(buildUrl, {\n method: \"POST\",\n body: JSON.stringify(buildRouteBody),\n });\n\n const buildData = await buildRouteResponse.json();\n\n const inputData = this.getInputData({\n tokenIn: tokenInAddress,\n amountIn: amount,\n isNative: isTokenInNative,\n });\n\n return {\n ...formattedQuote,\n getCalldata: ({ account }) => {\n const outputData = {\n tokenOut: tokenOutAddress,\n receiver: account,\n minAmountOut: this.getMinAmountOut(\n formattedQuote.amountOut,\n slippage,\n ),\n isNative: isTokenOutNative,\n };\n\n const aggregatorData = {\n aggregator: buildData.data.routerAddress,\n data: buildData.data.data,\n };\n return {\n params: [\n inputData,\n outputData,\n aggregatorData,\n {\n rewardVault: rewardVault ?? zeroAddress,\n isSwapAndStake: !!rewardVault,\n },\n ],\n functionName: \"swap\",\n abi: aggregatorsRouterAbi,\n // send full amount to router first, which will deduct the swap fee before executing trade\n value: isTokenInNative ? BigInt(amount) : BigInt(\"0\"),\n address: this.config.bex.aggregatorsRouter,\n } satisfies Omit<\n IContractWrite<typeof aggregatorsRouterAbi, \"swap\">,\n \"message\" | \"actionType\"\n >;\n },\n };\n }\n}\n\nexport const kyberswap = new KyberSwapAggregator();\n","import { zeroAddress } from \"viem\";\n\nimport { ChainId } from \"@berachain/config/internal\";\n\nimport aggregatorsRouterAbi from \"@berachain/abis/meta-aggregator/metaAggregatorV2\";\n\nimport { Aggregators } from \"../../../enum/dex\";\nimport type { IAggregatorArgs, IRawAggregatorQuote } from \"../../../types/dex\";\nimport type { IContractWrite } from \"../../../types/global\";\nimport { BaseAggregator } from \"./base\";\n\nclass OogaboogaAggregator extends BaseAggregator {\n name = Aggregators.Oogabooga;\n supportedChains = [ChainId.MAINNET];\n readonly type = \"rest\";\n\n async getQuote({\n tokenIn,\n tokenOut,\n amount,\n slippage,\n aggregatorsFeeBps,\n proxyAggregatorsThroughVercel = false,\n rewardVault,\n }: IAggregatorArgs): Promise<IRawAggregatorQuote> {\n this.assertChainSupport({ tokenIn, tokenOut });\n\n const {\n tokenInAddress,\n tokenOutAddress,\n isTokenInNative,\n isTokenOutNative,\n } = this.parseAddresses(tokenIn.address, tokenOut.address);\n\n const inputAmountAfterFees = this.getAmountAfterFees(\n amount,\n aggregatorsFeeBps,\n );\n\n const params = new URLSearchParams({\n tokenIn: tokenInAddress,\n tokenOut: tokenOutAddress,\n amount: inputAmountAfterFees,\n slippage: (slippage / 100).toString(),\n to: this.config.bex.aggregatorsRouterExecutor,\n referrer: this.config.bex.aggregatorsRouter,\n });\n this.url = proxyAggregatorsThroughVercel\n ? `/api/aggregators?aggregator=oogabooga&${params.toString()}`\n : `${this.config.bex.aggregatorsProxyUrl}/oogabooga/v1/swap?${params.toString()}`;\n\n const response = await this.fetch(this.url);\n\n const quote = await response.json();\n\n const formattedQuote = {\n amountOut: quote.assumedAmountOut,\n amountIn: amount,\n allowanceRequirements: this.parseAllowanceRequirements({\n tokenIn,\n spender: this.config.bex.aggregatorsRouter,\n rawAmount: amount,\n }),\n name: this.name,\n priceImpactPercentage: quote.priceImpact,\n swapFeeBps: aggregatorsFeeBps!,\n } satisfies IRawAggregatorQuote;\n\n return {\n ...formattedQuote,\n getCalldata: ({ account }) => {\n const inputData = this.getInputData({\n tokenIn: tokenInAddress,\n amountIn: amount,\n isNative: isTokenInNative,\n });\n\n const outputData = {\n tokenOut: tokenOutAddress,\n receiver: account,\n minAmountOut: this.getMinAmountOut(\n formattedQuote.amountOut,\n slippage,\n ),\n isNative: isTokenOutNative,\n };\n\n const aggregatorData = {\n aggregator: quote.tx?.to,\n data: quote.tx?.data,\n };\n return {\n params: [\n inputData,\n outputData,\n aggregatorData,\n {\n rewardVault: rewardVault ?? zeroAddress,\n isSwapAndStake: !!rewardVault,\n },\n ],\n functionName: \"swap\",\n abi: aggregatorsRouterAbi,\n // send full amount to router first, which will deduct the swap fee before executing trade\n value: isTokenInNative ? BigInt(amount) : BigInt(\"0\"),\n address: this.config.bex.aggregatorsRouter,\n } satisfies Omit<\n IContractWrite<typeof aggregatorsRouterAbi, \"swap\">,\n \"message\" | \"actionType\"\n >;\n },\n };\n }\n}\n\nexport const oogabooga = new OogaboogaAggregator();\n","import { zeroAddress } from \"viem\";\n\nimport { ChainId } from \"@berachain/config/internal\";\n\nimport aggregatorsRouterAbi from \"@berachain/abis/meta-aggregator/metaAggregatorV2\";\n\nimport { Aggregators } from \"../../../enum/dex\";\nimport { assertPublicClient } from \"../../../errors/assert\";\nimport { InvalidArgumentError } from \"../../../errors/InvalidArgumentError\";\nimport { RequestError } from \"../../../errors/RequestError\";\nimport type { IAggregatorArgs, IRawAggregatorQuote } from \"../../../types/dex\";\nimport type { IContractWrite } from \"../../../types/global\";\nimport { BaseAggregator } from \"./base\";\n\nclass OpenOceanAggregator extends BaseAggregator {\n name = Aggregators.OpenOcean;\n supportedChains = [ChainId.MAINNET];\n readonly type = \"rest\";\n readonly url = \"https://open-api.openocean.finance/v4/bera/swap\";\n\n notFoundMessages = [\"No avail liquidity for the pair\"];\n async getQuote({\n tokenIn,\n tokenOut,\n amount,\n slippage,\n account = zeroAddress,\n aggregatorsFeeBps,\n publicClient,\n rewardVault,\n }: IAggregatorArgs): Promise<IRawAggregatorQuote> {\n assertPublicClient(publicClient);\n\n if (!tokenIn.decimals) {\n throw new InvalidArgumentError({\n property: \"tokenIn.decimals\",\n value: tokenIn.decimals,\n expected: \"number\",\n chainId: this.chainId,\n });\n }\n\n this.assertChainSupport({ tokenIn, tokenOut });\n\n const inputAmountAfterFees = this.getAmountAfterFees(\n amount,\n aggregatorsFeeBps,\n );\n\n const {\n tokenInAddress,\n tokenOutAddress,\n isTokenInNative,\n isTokenOutNative,\n } = this.parseAddresses(tokenIn.address, tokenOut.address);\n\n const gasPrice = (await publicClient.getGasPrice()).toString();\n\n const quoteParams = new URLSearchParams({\n chain: ChainId.MAINNET.toString(),\n inTokenAddress: tokenInAddress,\n outTokenAddress: tokenOutAddress,\n amountDecimals: inputAmountAfterFees,\n // OpenOcean requires slippage to be at least 0.01%\n slippage: slippage < 0.01 ? \"0.01\" : slippage.toString(),\n account: this.config.bex.aggregatorsRouterExecutor,\n referrer: this.config.bex.aggregatorsRouter,\n gasPrice,\n });\n\n const quoteResponse = await this.fetch(\n `${this.url}?${quoteParams.toString()}`,\n );\n\n const quoteData = await quoteResponse.json();\n\n // validate successful quote response\n if (quoteData.code !== 200 || !quoteData.data) {\n const isNotFound = this.notFoundMessages.some((message) =>\n quoteData.error.includes(message),\n );\n\n throw new RequestError({\n response: quoteResponse,\n endpoint: { url: this.url, name: this.name, type: this.type },\n cause: quoteData,\n reason: isNotFound\n ? BaseAggregator.PATH_NOT_FOUND_REASON\n : quoteData.error,\n });\n }\n\n const formattedQuote = {\n amountOut: quoteData.data.outAmount,\n amountIn: amount,\n allowanceRequirements: this.parseAllowanceRequirements({\n tokenIn,\n rawAmount: amount,\n spender: this.config.bex.aggregatorsRouter,\n }),\n name: this.name,\n swapFeeBps: aggregatorsFeeBps!,\n };\n\n return {\n ...formattedQuote,\n getCalldata: ({ account }) => {\n const inputData = this.getInputData({\n tokenIn: tokenInAddress,\n amountIn: amount,\n isNative: isTokenInNative,\n });\n\n const outputData = {\n tokenOut: tokenOutAddress,\n receiver: account,\n minAmountOut: this.getMinAmountOut(\n formattedQuote.amountOut,\n slippage,\n ),\n isNative: isTokenOutNative,\n };\n\n const aggregatorData = {\n aggregator: quoteData.data.to,\n data: quoteData.data.data,\n };\n return {\n params: [\n inputData,\n outputData,\n aggregatorData,\n {\n rewardVault: rewardVault ?? zeroAddress,\n isSwapAndStake: !!rewardVault,\n },\n ],\n functionName: \"swap\",\n abi: aggregatorsRouterAbi,\n // send full amount to router first, which will deduct the swap fee before executing trade\n value: isTokenInNative ? BigInt(amount) : BigInt(\"0\"),\n address: this.config.bex.aggregatorsRouter,\n } satisfies Omit<\n IContractWrite<typeof aggregatorsRouterAbi, \"swap\">,\n \"message\" | \"actionType\"\n >;\n },\n };\n }\n}\n\nexport const openOcean = new OpenOceanAggregator();\n","import { ChainId } from \"@berachain/config/internal\";\n\nimport { wberaAbi } from \"@berachain/abis/wbera\";\n\nimport { Aggregators } from \"../../../enum/dex\";\nimport type {\n IAggregatorArgs,\n IRawAggregatorQuote,\n Token,\n} from \"../../../types/dex\";\nimport type { IContractWrite } from \"../../../types/global\";\nimport { isToken } from \"../../../utils/tokens\";\nimport { BaseAggregator } from \"./base\";\n\nclass WBeraAggregator extends BaseAggregator {\n name = Aggregators.Wrap;\n supportedChains = [ChainId.MAINNET, ChainId.BEPOLIA];\n readonly type = \"rpc\";\n\n checkChainSupport({\n tokenIn,\n tokenOut,\n }: {\n tokenIn: Token;\n tokenOut: Token;\n }): boolean {\n if (\n // same chain\n tokenIn.chainId !== tokenOut.chainId ||\n // must be one of our chains\n !super.checkChainSupport({ tokenIn, tokenOut })\n ) {\n return false;\n }\n\n return (\n (isToken(tokenIn, \"BERA\") && isToken(tokenOut, \"WBERA\")) ||\n (isToken(tokenIn, \"WBERA\") && isToken(tokenOut, \"BERA\"))\n );\n }\n\n // handles native swaps: wrap and unwrap\n async getQuote({\n tokenIn,\n tokenOut,\n amount,\n }: Omit<\n IAggregatorArgs,\n \"slippage\" | \"feeBps\"\n >): Promise<IRawAggregatorQuote> {\n this.assertChainSupport({ tokenIn, tokenOut });\n\n const isWrap = isToken(tokenIn, \"BERA\") && isToken(tokenOut, \"WBERA\");\n\n return {\n amountOut: amount,\n amountIn: amount,\n allowanceRequirements: [],\n name: isWrap ? Aggregators.Wrap : Aggregators.Unwrap,\n isNativeSwap: true,\n swapFeeBps: 0,\n getCalldata: () => {\n return isWrap\n ? ({\n abi: wberaAbi,\n address: this.config.tokens.wbera,\n functionName: \"deposit\",\n params: [],\n value: BigInt(amount),\n } satisfies Omit<\n IContractWrite<typeof wberaAbi, \"deposit\">,\n \"message\" | \"actionType\"\n >)\n : ({\n abi: wberaAbi,\n address: this.config.tokens.wbera,\n functionName: \"withdraw\",\n params: [BigInt(amount)],\n value: BigInt(0),\n } satisfies Omit<\n IContractWrite<typeof wberaAbi, \"withdraw\">,\n \"message\" | \"actionType\"\n >);\n },\n };\n }\n}\n\nexport const wberaSwap = new WBeraAggregator();\n","import { useConfig } from \"@berachain/wagmi/hooks\";\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { getUnderlyingToken } from \"../../actions/tokens/getUnderlyingToken\";\nimport type { MinimalERC20 } from \"../../types/dex\";\nimport { isToken } from \"../../utils/tokens\";\n\n/**\n * SWR hook that resolves the underlying asset of an ERC4626 vault token.\n * Returns `null` for non-vault tokens. Results are cached immutably since\n * a vault's underlying asset doesn't change.\n */\nexport function useUnderlyingAsset({ token }: { token: MinimalERC20 }) {\n const wagmiConfig = useConfig();\n\n return useSWRImmutable(\n token && wagmiConfig && !isToken(token, \"BERA\")\n ? [\"useUnderlyingAsset\", token]\n : null,\n async ([, token]) => getUnderlyingToken({ token, wagmiConfig }),\n );\n}\n","import { type Config, getPublicClient } from \"@wagmi/core\";\nimport { erc4626Abi } from \"viem\";\n\nimport { assertPublicClient } from \"../../errors/assert\";\nimport { initBeraError } from \"../../errors/initBeraError\";\nimport type { MinimalERC20 } from \"../../types/dex\";\nimport { isToken } from \"../../utils/tokens\";\nimport { getTokenInformation } from \"./getTokenInformation\";\n\n/**\n * Attempts to resolve the underlying asset of an ERC4626 vault by calling `asset()`.\n * Returns the full token info if the token is an ERC4626 vault, or `null` if it isn't\n * (i.e. the `asset()` call reverts). Skips the native gas token (BERA) since it can't be a vault.\n */\nexport async function getUnderlyingToken({\n token,\n wagmiConfig,\n}: {\n token: MinimalERC20;\n wagmiConfig: Config;\n}) {\n try {\n if (isToken(token, \"BERA\")) {\n // gas token can't have an underlying token\n return null;\n }\n\n const publicClient = getPublicClient(wagmiConfig, {\n chainId: token.chainId,\n });\n\n assertPublicClient(publicClient);\n\n const address = await publicClient.readContract({\n address: token.address,\n abi: erc4626Abi,\n functionName: \"asset\",\n });\n\n return getTokenInformation({\n address: address,\n publicClient,\n chainId: token.chainId,\n });\n } catch (e) {\n const err = initBeraError({ cause: e });\n if (err.reason === 'The contract function \"asset\" reverted.') {\n return null;\n }\n\n throw err;\n }\n}\n","import { type PublicClient, zeroAddress } from \"viem\";\n\nimport aggregatorsRouterAbi from \"@berachain/abis/meta-aggregator/metaAggregatorV2\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\n\nexport function useAggregatorsRouterFeeBps() {\n const publicClient = usePublicClient() as PublicClient;\n const { config } = parseBaseArgs({\n chainId: publicClient.chain?.id,\n });\n return useSWRImmutable(\n publicClient &&\n config.bex.aggregatorsRouter &&\n config.bex.aggregatorsRouter !== zeroAddress\n ? ([\"useAggregatorsRouterFeeBps\", config.bex.aggregatorsRouter] as const)\n : null,\n async ([, aggregatorsRouter]) => {\n const fee = await publicClient.readContract({\n address: aggregatorsRouter,\n abi: aggregatorsRouterAbi,\n functionName: \"SWAP_FEE_RATE\",\n });\n return Number(fee);\n },\n );\n}\n","import { type Address, type PublicClient, parseUnits, zeroAddress } from \"viem\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport type { SWRConfiguration } from \"@berachain/utils/pkg/swr\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { BaseAggregator } from \"../../actions/dex/aggregators/base\";\nimport { useBeraFlag } from \"../../contexts/BeraFlags/BeraFlags\";\nimport type {\n HoneyConfigContextReturn,\n TokenWithOrder,\n} from \"../../contexts/HoneyConfigProvider\";\nimport { Aggregators, type SwapReferrer } from \"../../enum/dex\";\nimport { POLLING } from \"../../enum/polling\";\nimport { BeraError } from \"../../errors/BeraError\";\nimport { RequestError } from \"../../errors/RequestError\";\nimport type { MinimalERC20 } from \"../../types/dex\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\nimport { seconds } from \"../../utils/time\";\nimport { isToken } from \"../../utils/tokens\";\nimport { useAggregatorsRouterFeeBps } from \"./useAggregatorsRouterFeeBps\";\n\nexport type IUseAggregatorsQuotesArgs = BeraJS.BaseFunctionArgs & {\n tokenIn: MinimalERC20;\n tokenOut: MinimalERC20;\n amount: string;\n slippage: number;\n referrer?: SwapReferrer;\n rewardVault?: Address;\n /**\n * Useful cause the collaterals are provided byt he honeyContext and this way we can\n * use the Provider only in the swap page where is needed.\n *\n * The collaterals for the honey mint/redeem aggregator.\n */\n honeyNativeState?: Pick<\n HoneyConfigContextReturn,\n \"collateralList\" | \"protocol\"\n >;\n underlyingToken?: MinimalERC20 | null;\n};\n\ntype IQueryKey = readonly [\n string, // \"useAggregatorsQuotes\n string, // name\n MinimalERC20, // tokenIn\n MinimalERC20, // tokenOut\n string, // parsedAmount\n number, // slippage\n Address | undefined, // account\n number | undefined, // feeBps\n SwapReferrer | undefined, // referrer\n Address | undefined, // rewardVault\n MinimalERC20 | null | undefined, // underlyingToken\n TokenWithOrder[] | undefined, // collateralList\n];\n\nexport const USE_AGGREGATORS_QUOTES_QUERY_KEY = \"useAggregatorsQuotes\";\n\n/**\n * Builds the SWR cache key for a single aggregator quote request.\n * Returns `null` (disabling the query) when the aggregator is unsupported,\n * disabled via config flags, or missing required dependencies like feeBps.\n */\nfunction getQueryKey({\n aggregator,\n account,\n args,\n feeBps,\n activeAggregators,\n isMAEnabled,\n}: {\n aggregator: BaseAggregator;\n account: Address | undefined;\n args: IUseAggregatorsQuotesArgs;\n feeBps: number | undefined;\n /**\n * List of active aggregators fetched from edge config flags.\n *\n * If undefined, all aggregators are enabled.\n */\n activeAggregators: string[] | undefined;\n isMAEnabled: boolean;\n}): IQueryKey | null {\n if (!Number(args.amount)) {\n return null;\n }\n if (\n !aggregator.checkChainSupport({\n tokenIn: args.tokenIn,\n tokenOut: args.tokenOut,\n underlyingToken: args.underlyingToken,\n honeyNativeState: args.honeyNativeState,\n })\n ) {\n return null;\n }\n\n const name = aggregator.name;\n\n const usesMAContract = ![\n Aggregators.HubPools,\n Aggregators.Honey,\n Aggregators.Wrap,\n Aggregators.Unwrap,\n Aggregators.ERC4626,\n ].includes(name);\n\n if (!isMAEnabled && usesMAContract) {\n return null;\n }\n const { tokenIn, tokenOut, amount, slippage, referrer, rewardVault } = args;\n\n const parsedAmount = parseUnits(amount, tokenIn.decimals).toString();\n\n const isEnabledOnConfig =\n // always enable wrap and unwrap\n aggregator.name === Aggregators.Wrap ||\n aggregator.name === Aggregators.RedeemBgt ||\n aggregator.name === Aggregators.Honey ||\n !activeAggregators ||\n activeAggregators.includes(name.toLowerCase().replaceAll(\" \", \"\"));\n\n if (!isEnabledOnConfig) {\n return null;\n }\n if (\n aggregator.name === Aggregators.Honey &&\n args.honeyNativeState?.protocol.isPaused\n ) {\n // if the honey protocol is paused, don't query any quotes\n return null;\n }\n\n const needsUnderlyingToken =\n aggregator.name === Aggregators.ERC4626 ||\n aggregator.name === Aggregators.EnsoErc4626;\n\n if (usesMAContract && feeBps === undefined) {\n return null;\n }\n\n return [\n USE_AGGREGATORS_QUOTES_QUERY_KEY,\n name,\n tokenIn,\n tokenOut,\n parsedAmount,\n slippage,\n aggregator.needsAccountForQuote ? account : undefined,\n usesMAContract ? feeBps : 0,\n referrer,\n rewardVault,\n needsUnderlyingToken ? args.underlyingToken : undefined,\n aggregator.name === Aggregators.Honey\n ? args.honeyNativeState?.collateralList\n : undefined,\n ];\n}\n\n/**\n * Creates the SWR fetcher that calls `aggregator.getQuote()` with\n * the parameters extracted from the query key tuple.\n */\nfunction getQueryFn({\n aggregator,\n publicClient,\n proxyAggregatorsThroughVercel,\n}: {\n aggregator: BaseAggregator;\n publicClient?: PublicClient;\n proxyAggregatorsThroughVercel?: boolean;\n}) {\n return async ([\n ,\n ,\n tokenIn,\n tokenOut,\n amount,\n slippage,\n account,\n aggregatorsFeeBps,\n referrer,\n rewardVault,\n underlyingToken,\n honeyCollaterals,\n ]: IQueryKey) =>\n aggregator.getQuote({\n tokenIn,\n tokenOut,\n amount,\n slippage,\n account,\n aggregatorsFeeBps,\n publicClient,\n proxyAggregatorsThroughVercel,\n referrer,\n rewardVault,\n underlyingToken,\n honeyNativeState: {\n collateralList: honeyCollaterals ?? [],\n },\n });\n}\n\n/**\n * this hook is used internally to avoid caling the same hook and checks\n * on every useSingleAggregatorQuote call, when called inside useAggregatorsQuotes.\n *\n * @internal\n */\nexport function raw_useSingleAggregatorQuote(\n {\n feeBps,\n publicClient,\n account,\n proxyAggregatorsThroughVercel,\n activeAggregators,\n isMAEnabled,\n ...args\n }: IUseAggregatorsQuotesArgs & {\n account: Address | undefined;\n aggregator: BaseAggregator;\n feeBps: number | undefined;\n activeAggregators: string[] | undefined;\n isMAEnabled: boolean;\n publicClient: PublicClient | undefined;\n proxyAggregatorsThroughVercel: boolean | undefined;\n },\n options?: DefaultHookOptions,\n) {\n // we're using independent useSWRs so we can show quotes as they come\n // instead of waiting for all of them to load\n return useSWR(\n getQueryKey({\n aggregator: args.aggregator,\n account,\n args,\n feeBps,\n activeAggregators,\n isMAEnabled,\n }),\n getQueryFn({\n aggregator: args.aggregator,\n proxyAggregatorsThroughVercel,\n publicClient,\n }),\n options,\n );\n}\n\n/**\n * Returns shared SWR options for aggregator quote polling, including\n * custom error retry logic that stops retrying on \"path not found\" and 403 errors.\n */\nexport function getAggregatorsSWROptions(\n options?: DefaultHookOptions,\n): SWRConfiguration {\n return {\n refreshInterval: POLLING.FAST, // every 10s\n errorRetryCount: 3,\n ...options,\n // biome-ignore lint/nursery/useMaxParams: the function is defined in the SWRConfiguration type\n onErrorRetry(err, key, config, revalidate, revalidateOpts) {\n options?.onErrorRetry?.(err, key, config, revalidate, revalidateOpts);\n if (err instanceof BeraError) {\n if (err.reason === BaseAggregator.PATH_NOT_FOUND_REASON) {\n return;\n }\n }\n\n if (err instanceof RequestError && err.statusCode === 403) {\n console.warn(key[1], \"returned error 403, stopping retries\");\n return;\n }\n\n if (revalidateOpts.retryCount > (config.errorRetryCount ?? 3)) {\n return;\n }\n\n setTimeout(() => {\n revalidate();\n }, config.errorRetryInterval ?? seconds(10));\n },\n };\n}\n\n/**\n * Standalone hook for fetching a quote from a single aggregator.\n * Resolves wallet, fee, and feature flag context internally — use this\n * when you need a quote outside of the `useAggregatorsQuotes` multi-quote flow.\n */\nexport function useSingleAggregatorQuote(\n args: IUseAggregatorsQuotesArgs & { aggregator: BaseAggregator },\n options?: DefaultHookOptions,\n) {\n const { address: account } = useBeraWallet();\n const proxyAggregatorsThroughVercel = useBeraFlag(\n \"proxyAggregatorsThroughVercel\",\n );\n const activeAggregators = useBeraFlag(\"aggregators\");\n const publicClient = usePublicClient();\n\n const { data: feeBps } = useAggregatorsRouterFeeBps();\n\n if (args.aggregator.name !== Aggregators.Wrap) {\n const isWrapOrUnwrap =\n (isToken(args.tokenIn.address, \"BERA\") ||\n isToken(args.tokenIn.address, \"WBERA\")) &&\n (isToken(args.tokenOut.address, \"BERA\") ||\n isToken(args.tokenOut.address, \"WBERA\"));\n\n if (!isWrapOrUnwrap) {\n return null;\n }\n }\n\n const { config } = parseBaseArgs(args);\n\n const isMAEnabled = config.bex.aggregatorsRouter !== zeroAddress;\n\n // we're using independent useSWRs so we can show quotes as they come\n // instead of waiting for all of them to load\n return raw_useSingleAggregatorQuote(\n {\n ...args,\n aggregator: args.aggregator,\n feeBps,\n activeAggregators,\n account,\n isMAEnabled,\n publicClient,\n proxyAggregatorsThroughVercel,\n },\n getAggregatorsSWROptions(options),\n );\n}\n","import type { GetPoolsQueryVariables } from \"@berachain/graphql/dex/api\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getAllPools } from \"../../actions/dex/getAllPools\";\nimport { POLLING } from \"../../enum/polling\";\nimport type { DefaultHookOptions } from \"../../types/global\";\n\nexport function useAllUserPoolsQueryKey({\n query,\n}: {\n query?: GetPoolsQueryVariables;\n} = {}) {\n return [\"useAllUserPools\", query];\n}\n\nexport function useAllUserPools(\n query: GetPoolsQueryVariables,\n options?: DefaultHookOptions,\n) {\n return useSWR(\n useAllUserPoolsQueryKey({ query }),\n async ([_, params]) => {\n return getAllPools({\n ...(params as GetPoolsQueryVariables),\n fetchPolicy: \"no-cache\",\n });\n },\n {\n refreshInterval: POLLING.SLOW,\n ...options,\n },\n );\n}\n","import { type Address, type Hex, isAddress } from \"viem\";\n\nimport type { MinimalPoolFragment } from \"@berachain/graphql/dex/api\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getApiPool } from \"../../actions/dex/getApiPool\";\nimport { POLLING } from \"../../enum/polling\";\nimport { InvalidArgumentError } from \"../../errors/InvalidArgumentError\";\n\nexport function useApiPoolQueryKey({\n poolId,\n account,\n}: {\n poolId: Hex;\n account?: Address;\n}) {\n return poolId ? ([`usePool-api`, poolId, account] as const) : null;\n}\n\nexport function useApiPool({\n poolId,\n account,\n}: {\n poolId: Hex;\n account?: Address;\n}) {\n return useSWR(\n useApiPoolQueryKey({ poolId, account }),\n async ([, poolId, account]): Promise<MinimalPoolFragment> => {\n if (account && !isAddress(account)) {\n throw new InvalidArgumentError({\n property: \"account\",\n value: account,\n expected: \"Address\",\n });\n }\n return getApiPool({\n poolId,\n account: account as Address,\n });\n },\n {\n refreshInterval: POLLING.NORMAL,\n },\n );\n}\n","import { useMemo } from \"react\";\nimport { PoolType } from \"@berachain-foundation/berancer-sdk\";\nimport { type Address, keccak256, parseUnits, zeroAddress } from \"viem\";\n\nimport { poolCreationHelperAbi as balancerPoolCreationHelperAbi } from \"@berachain/abis/bex/poolCreationHelper\";\n\nimport { TransactionActionType } from \"../../enum/txnEnum\";\nimport type { Token, TokenWithAmount } from \"../../types/dex\";\nimport type { IContractWrite } from \"../../types/global\";\nimport { DEFAULT_METAMASK_GAS_LIMIT } from \"../../utils/constants\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\nimport { generatePoolName, generatePoolSymbol } from \"../../utils/poolNamings\";\nimport { isToken } from \"../../utils/tokens\";\n\ninterface UseCreatePoolProps extends BeraJS.BaseFunctionArgs {\n poolCreateTokens: Token[];\n initialLiquidityTokens: TokenWithAmount[];\n normalizedWeights: bigint[]; // NOTE: if you pass weights that have off-by-1 errors pool create will fail (ex: 0.3 repeating)\n poolType: PoolType;\n swapFee: number;\n owner: string;\n poolSymbol: string;\n poolName: string;\n amplification: number;\n oracles: Oracle[]; // NOTE: the default state for oracles should be 0x0 address for each token with cache duration of ~100\n}\ninterface UseCreatePoolReturn {\n generatedPoolName: string;\n generatedPoolSymbol: string;\n createPoolArgs: any;\n}\n\nexport enum OracleMode {\n None = \"None\",\n Custom = \"Custom\",\n}\n\nexport interface Oracle {\n mode: OracleMode;\n address: string;\n tokenAddress: string;\n cacheDuration: number;\n}\n\nfunction createStablePoolArgs({\n poolCreationHelper,\n poolCreateTokens,\n initialLiquidityTokens,\n swapFeePercentage,\n salt,\n poolName,\n poolSymbol,\n owner,\n amplification,\n oracles,\n message,\n actionType,\n gasLimit = DEFAULT_METAMASK_GAS_LIMIT,\n}: {\n poolCreationHelper: Address;\n poolCreateTokens: Token[];\n initialLiquidityTokens: TokenWithAmount[];\n swapFeePercentage: bigint;\n salt: string;\n poolName: string;\n poolSymbol: string;\n owner: string;\n amplification: number;\n oracles: Oracle[];\n message: string;\n actionType: TransactionActionType;\n gasLimit?: bigint;\n}) {\n // Map and sort pool creation token addresses NOTE: we should never see BERA in this array.\n const sortedPoolCreateAddresses = poolCreateTokens\n .map((token) => token.address.toLowerCase())\n .sort((a, b) => (a < b ? -1 : 1));\n\n const combinedData = sortedPoolCreateAddresses.map((address) => {\n // Match with initial liquidity tokens\n const liquidityToken = initialLiquidityTokens.find(\n (token) =>\n token.address.toLowerCase() === address ||\n (isToken(address, \"WBERA\") && isToken(token.address, \"BERA\")),\n );\n\n const amountIn = liquidityToken\n ? parseUnits(liquidityToken.amount, liquidityToken.decimals)\n : 0n; // FIXME we need to throw errors from here if zipping fails.\n\n // Match with oracles\n const oracle = oracles.find(\n (oracle) => oracle.tokenAddress.toLowerCase() === address.toLowerCase(),\n );\n const rateProvider = oracle ? oracle.address : zeroAddress;\n const cacheDuration = oracle ? BigInt(oracle.cacheDuration) : BigInt(100);\n\n return { amountIn, rateProvider, cacheDuration };\n });\n\n // Extract results into separate arrays\n const sortedAmountsIn = combinedData.map((data) => data.amountIn);\n const sortedRateProviders = combinedData.map((data) => data.rateProvider);\n const sortedCacheDurations = combinedData.map((data) => data.cacheDuration);\n\n // Determine if native token (BERA) is included, and if so calculate its value, that is the value of this tx\n const nativeTokenIndex = initialLiquidityTokens.findIndex((token) =>\n isToken(token.address, \"BERA\"),\n );\n const value =\n nativeTokenIndex !== -1\n ? parseUnits(\n initialLiquidityTokens[nativeTokenIndex].amount,\n initialLiquidityTokens[nativeTokenIndex].decimals,\n )\n : 0n;\n const joinWBERAPoolWithBERA = value > 0n;\n\n return {\n address: poolCreationHelper,\n abi: balancerPoolCreationHelperAbi,\n functionName: \"createAndJoinStablePool\",\n params: [\n poolName,\n poolSymbol,\n sortedPoolCreateAddresses,\n BigInt(amplification),\n sortedRateProviders,\n sortedCacheDurations,\n false, // Exempt from yield protocol fee NOTE: this should be false for stable pools if rate providers are 0x0\n swapFeePercentage,\n sortedAmountsIn,\n owner as `0x${string}`,\n salt,\n joinWBERAPoolWithBERA,\n ],\n message,\n actionType,\n value,\n gasLimit,\n track: {\n eventName: \"hub_pool_create\",\n eventData: {\n poolName: poolName,\n poolSymbol: poolSymbol,\n },\n },\n } as IContractWrite<\n typeof balancerPoolCreationHelperAbi,\n \"createAndJoinStablePool\"\n >;\n}\n\nfunction createWeightedPoolArgs({\n poolCreationHelper,\n poolCreateTokens,\n initialLiquidityTokens,\n normalizedWeights,\n swapFeePercentage,\n salt,\n poolName,\n poolSymbol,\n owner,\n message,\n actionType,\n gasLimit = DEFAULT_METAMASK_GAS_LIMIT,\n}: {\n poolCreationHelper: Address;\n poolCreateTokens: Token[];\n initialLiquidityTokens: TokenWithAmount[];\n normalizedWeights: bigint[];\n swapFeePercentage: bigint;\n salt: string;\n poolName: string;\n poolSymbol: string;\n owner: string;\n message: string;\n actionType: TransactionActionType;\n gasLimit?: bigint;\n}) {\n // When joining weighted pools with BERA, we allow it as a joinPoolToken but never as a createPoolToken.\n const createPoolTokens: string[] = [];\n const joinPoolTokens: string[] = [];\n const sortedWeights: bigint[] = [];\n const sortedAmountsIn: bigint[] = [];\n\n poolCreateTokens\n .map((token, index) => {\n return {\n createToken: token.address,\n joinToken: initialLiquidityTokens[index].address, // NOTE: this will allow native token as a join token\n weight: normalizedWeights[index],\n amountIn: parseUnits(\n initialLiquidityTokens[index].amount,\n initialLiquidityTokens[index].decimals,\n ),\n };\n })\n .sort((a, b) =>\n a.createToken.toLowerCase() < b.createToken.toLowerCase() ? -1 : 1,\n )\n .forEach((item) => {\n createPoolTokens.push(item.createToken);\n joinPoolTokens.push(item.joinToken);\n sortedWeights.push(item.weight);\n sortedAmountsIn.push(item.amountIn);\n });\n\n // Determine if native token (BERA) is involved and calculate its value, that is the value of this tx\n const nativeTokenIndex = joinPoolTokens.indexOf(zeroAddress);\n const value =\n nativeTokenIndex !== -1 ? sortedAmountsIn[nativeTokenIndex] : 0n;\n\n return {\n address: poolCreationHelper,\n abi: balancerPoolCreationHelperAbi,\n functionName: \"createAndJoinWeightedPool\",\n params: [\n poolName,\n poolSymbol,\n createPoolTokens,\n joinPoolTokens,\n sortedWeights,\n Array(createPoolTokens.length).fill(zeroAddress),\n swapFeePercentage,\n sortedAmountsIn,\n owner as `0x${string}`,\n salt,\n ],\n message,\n actionType,\n value,\n gasLimit,\n track: {\n eventName: \"hub_pool_create\",\n eventData: {\n poolName: poolName,\n poolSymbol: poolSymbol,\n },\n },\n } as IContractWrite<\n typeof balancerPoolCreationHelperAbi,\n \"createAndJoinWeightedPool\"\n >;\n}\n\nexport function useCreatePool({\n poolCreateTokens,\n initialLiquidityTokens,\n normalizedWeights,\n poolType,\n poolName,\n poolSymbol,\n swapFee,\n owner,\n amplification,\n oracles,\n ...baseArgs\n}: UseCreatePoolProps): UseCreatePoolReturn {\n // Generated names\n const { generatedPoolName, generatedPoolSymbol } = useMemo(() => {\n if (!poolCreateTokens) {\n return {\n generatedPoolName: \"\",\n generatedPoolSymbol: \"\",\n };\n }\n const generatedPoolName = generatePoolName(poolCreateTokens);\n const generatedPoolSymbol = generatePoolSymbol({\n tokens: poolCreateTokens,\n weights: normalizedWeights,\n poolType,\n });\n\n return {\n generatedPoolName,\n generatedPoolSymbol,\n };\n }, [poolCreateTokens, normalizedWeights, poolType]);\n\n // Pool create tx\n const createPoolArgs = useMemo(() => {\n if (\n !owner ||\n poolName === \"\" ||\n poolSymbol === \"\" ||\n poolCreateTokens.length !== initialLiquidityTokens.length ||\n poolCreateTokens.length === 0\n ) {\n return null;\n }\n\n const swapFeePercentage = parseUnits(swapFee.toString(), 16);\n const salt = keccak256(Buffer.from(`${poolName}-${owner}`));\n const { config: chainConfig } = parseBaseArgs(baseArgs);\n\n if (poolType === PoolType.Weighted) {\n return createWeightedPoolArgs({\n poolCreationHelper: chainConfig.bex.poolCreationHelper,\n poolCreateTokens,\n initialLiquidityTokens,\n normalizedWeights,\n swapFeePercentage,\n salt,\n poolName,\n poolSymbol,\n owner,\n message: `Create pool ${poolName}`,\n actionType: TransactionActionType.CREATE_POOL,\n });\n }\n\n if (\n poolType === PoolType.ComposableStable ||\n poolType === PoolType.MetaStable\n ) {\n return createStablePoolArgs({\n poolCreationHelper: chainConfig.bex.poolCreationHelper,\n poolCreateTokens,\n initialLiquidityTokens,\n swapFeePercentage,\n salt,\n poolName,\n poolSymbol,\n owner,\n amplification,\n oracles,\n message: `Create pool ${poolName}`,\n actionType: TransactionActionType.CREATE_POOL,\n });\n }\n\n return null;\n }, [\n poolCreateTokens,\n initialLiquidityTokens,\n normalizedWeights,\n poolType,\n swapFee,\n poolName,\n poolSymbol,\n owner,\n amplification,\n oracles,\n ]);\n\n return {\n generatedPoolName,\n generatedPoolSymbol,\n createPoolArgs,\n };\n}\n","import { PoolType } from \"@berachain-foundation/berancer-sdk\";\nimport { formatUnits } from \"viem\";\n\nimport type { Token } from \"../types/dex\";\n\n// Utility function to sort tokens by their address without modifying the original array\nfunction sortTokensByAddress(tokens: Token[]): Token[] {\n return [...tokens].sort((a, b) =>\n a.address.toLowerCase().localeCompare(b.address.toLowerCase()),\n );\n}\n\nexport function generatePoolName(tokens: Token[]): string {\n if (tokens.length === 0) {\n return \"\";\n }\n return sortTokensByAddress(tokens)\n .map((token) => token.symbol)\n .join(\" | \");\n}\n\nexport function generatePoolSymbol({\n tokens,\n weights,\n poolType,\n}: {\n tokens: Token[];\n weights: bigint[];\n poolType: PoolType;\n}): string {\n let poolTypeString: string;\n\n switch (poolType) {\n case PoolType.ComposableStable:\n poolTypeString = \"STABLE\";\n break;\n default:\n poolTypeString = poolType.toString().toUpperCase();\n break;\n }\n\n if (poolType === PoolType.Weighted) {\n if (weights.length === 0) {\n return \"\";\n }\n return `${sortTokensByAddress(tokens)\n .map((token, index) => {\n const weight = weights[index];\n const weightPercentage =\n Number.parseFloat(formatUnits(weight, 18)) * 100;\n return `${weightPercentage.toFixed(0)}${token.symbol}`;\n })\n .join(\"-\")}-${poolTypeString}`;\n }\n return `${sortTokensByAddress(tokens)\n .map((token) => token.symbol)\n .join(\"-\")}-${poolTypeString}`;\n}\n","import { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getGlobalLiquidityAndSwapVolume } from \"../../actions/dex/getGlobalLiquidityAndSwapVolume\";\n\nexport function useGlobalLiquidityAndSwapVolume() {\n const response = useSWR(\"useGlobalLiquidityAndSwapVolume\", async () =>\n getGlobalLiquidityAndSwapVolume(),\n );\n\n return {\n ...response,\n data: {\n totalLiquidity: Number(\n response.data?.protocolMetricsAggregated.totalLiquidity,\n ),\n swapVolume24h: Number(\n response.data?.protocolMetricsAggregated.swapVolume24h,\n ),\n },\n };\n}\n","import { useEffect, useState } from \"react\";\nimport { PoolType } from \"@berachain-foundation/berancer-sdk\";\n\nimport { PoolCreationStep } from \"../../enum/dex\";\nimport type { TokenCurrentPriceMap, TokenWithAmount } from \"../../types/dex\";\nimport { wrapNativeTokens } from \"../../utils/tokenWrapping\";\nimport { type Oracle, OracleMode } from \"./useCreatePool\";\n\nconst DEFAULT_LIQUIDITY_MISMATCH_TOLERANCE_PERCENT = 0.05; // 5%\n\nexport type LiquidityMismatchInfo = {\n title: string | null;\n message: string | null;\n suggestWeighted?: boolean;\n};\n\ninterface UseLiquidityMismatchParams {\n currentStep: PoolCreationStep;\n tokenPrices?: TokenCurrentPriceMap;\n isLoadingTokenPrices: boolean;\n tokens: TokenWithAmount[] | null;\n weights: bigint[] | null;\n weightsError: string | null;\n poolType: PoolType;\n liquidityMismatchTolerancePercent?: number;\n oracles: Oracle[];\n}\n\n/**\n * Hook for detecting liquidity mismatches.\n *\n * @param {PoolCreationStep} currentStep - The current step of the pool creation process.\n * @param {Record<string, number>} tokenPrices - The current token prices.\n * @param {boolean} isLoadingTokenPrices - Whether the token prices are still loading.\n * @param {Array<{ address: string, amount: number }>} tokens - The tokens in the pool, including their addresses and amounts.\n * @param {Record<string, number>} weights - The per-token weights in the pool we are creating.\n * @param {string | null} weightsError - An error message for the weights indicating that the weights are invalid.\n * @param {string} poolType - The type of pool being created.\n * @param {number} liquidityMismatchTolerancePercent - The tolerance for liquidity mismatches in percent.\n * @returns {Object} The liquidity mismatch info.\n */\nexport function useLiquidityMismatch({\n currentStep,\n tokenPrices,\n isLoadingTokenPrices,\n tokens,\n weights,\n weightsError,\n poolType,\n liquidityMismatchTolerancePercent = DEFAULT_LIQUIDITY_MISMATCH_TOLERANCE_PERCENT,\n oracles,\n}: UseLiquidityMismatchParams): LiquidityMismatchInfo {\n // NOTE: would be nice to use Maps/Records more in here, as the zipping/unzipping is cumbersome.\n // NOTE: if we pull in string literal for currentStep things would also be a bit clearer in here.\n const [liquidityMismatchInfo, setLiquidityMismatchInfo] =\n useState<LiquidityMismatchInfo>({ title: null, message: null });\n\n useEffect(() => {\n // If we are either using custom rate-providing oracles or have incorrect/loading token prices, we cant do validation.\n if (\n !tokenPrices ||\n isLoadingTokenPrices ||\n !tokens ||\n !weights ||\n weightsError ||\n tokens.some((token) => !token.address) ||\n oracles.some((oracle) => oracle.mode === OracleMode.Custom) // Oracles give prices on their own, we dont support that here yet.\n ) {\n setLiquidityMismatchInfo({ title: null, message: null });\n return;\n }\n\n // Calculate some basic metrics we'll use to determine per-token contributions and model potential losses from arbitrage.\n let totalLiquidityUSD = 0;\n const tokenUSDAmounts: number[] = [];\n const numTokens = tokens.length;\n const wrappedTokens = wrapNativeTokens(tokens);\n const tokenUSDPrices = wrappedTokens.map((token) => {\n const tokenPriceUSD =\n tokenPrices[token.address.toLowerCase()]?.price ?? 0;\n if (!tokenPriceUSD || tokenPriceUSD === 0) {\n tokenUSDAmounts.push(0);\n return null;\n }\n const tokenAmountUSD = tokenPriceUSD * Number.parseFloat(token.amount);\n tokenUSDAmounts.push(tokenAmountUSD);\n totalLiquidityUSD += tokenAmountUSD;\n return tokenPriceUSD;\n });\n\n // Doesn't matter what step it is, if we have missing token prices for tokens we have selected, we cant issue a real warning.\n if (\n tokenUSDPrices.some((price) => price === null) ||\n tokenUSDPrices.length !== numTokens\n ) {\n setLiquidityMismatchInfo({\n title: \"Missing token price data\",\n message: `One or more token(s) do not have valid market price data. Please verify that token market prices align with the pool\n weightings and your initial liquidity amounts.`,\n });\n return;\n }\n\n // Step 1 - During token selection we check for a deviation in the quote prices of the tokens selected (for stable pools).\n if (\n currentStep === PoolCreationStep.SELECT_TOKENS &&\n poolType === PoolType.ComposableStable\n ) {\n const normalizedUSDPrices = tokenUSDPrices.map(\n (priceUSD) => priceUSD! / tokenUSDPrices[0]!, // always normalize on the first token's price\n );\n const maxDifference =\n Math.max(...normalizedUSDPrices) - Math.min(...normalizedUSDPrices);\n\n if (maxDifference > liquidityMismatchTolerancePercent) {\n setLiquidityMismatchInfo({\n title: \"Selected tokens have a significant price deviation\",\n message: \"Did you mean to create a Weighted pool instead?\",\n suggestWeighted: true,\n });\n } else {\n setLiquidityMismatchInfo({ title: null, message: null });\n }\n\n return;\n }\n\n // Validation During Liquidity Input and onwards.\n if (\n totalLiquidityUSD === 0 ||\n tokenUSDAmounts.some((value) => value === 0)\n ) {\n // User has not yet entered fully their liquidity values, so return early.\n setLiquidityMismatchInfo({ title: null, message: null });\n return;\n }\n\n // Simulate arbitrage for the pool to determine potential losses from arbitrageurs.\n // NOTE: we assume shortfalls and excesses are losses, but in reality the actual losses would be more complex to realise.\n // Balancer does this similarily https://github.com/balancer/frontend-v2/blob/8563b8d33b6bff266148bd48d7ebc89f921374f4/src/components/cards/CreatePool/InitialLiquidity.vue#L75\n let totalLossUSD = 0;\n if (poolType === PoolType.ComposableStable) {\n const expectedPerTokenLiquidityUSD = totalLiquidityUSD / numTokens;\n tokenUSDAmounts.forEach((value) => {\n totalLossUSD += Math.abs(expectedPerTokenLiquidityUSD - value);\n });\n } else if (poolType === PoolType.Weighted) {\n tokenUSDAmounts.forEach((value, index) => {\n const weightProportion = Number(weights[index]) / 1e18;\n const expectedValueUSD = totalLiquidityUSD * weightProportion;\n totalLossUSD += Math.abs(expectedValueUSD - value);\n });\n }\n\n // We'll show a total loss if it's 90% or more\n const isTotalLoss = totalLossUSD >= totalLiquidityUSD * 0.9;\n totalLossUSD = Math.min(totalLossUSD, totalLiquidityUSD);\n const totalLossPercentage = totalLossUSD / totalLiquidityUSD;\n\n if (totalLossPercentage > liquidityMismatchTolerancePercent) {\n setLiquidityMismatchInfo({\n // If it's a total loss we dont display a percentage\n title: isTotalLoss\n ? \"You could lose all of your initial liquidity\"\n : `You could lose $${totalLossUSD.toFixed(2)} (~${(\n totalLossPercentage * 100\n ).toFixed(2)}%)`,\n message: `Based on the market token prices, the value of tokens does not align with the specified pool weights. \n This discrepancy could expose you to potential losses from arbitrageurs. ${\n poolType === PoolType.ComposableStable\n ? \"Did you mean to create a Weighted pool instead?\"\n : \"\"\n }`,\n suggestWeighted: poolType === PoolType.ComposableStable,\n });\n } else {\n // All good bb bb\n setLiquidityMismatchInfo({ title: null, message: null });\n }\n }, [\n currentStep,\n tokenPrices,\n isLoadingTokenPrices,\n tokens,\n weights,\n weightsError,\n poolType,\n liquidityMismatchTolerancePercent,\n oracles,\n ]);\n return liquidityMismatchInfo;\n}\n","import { type Address, formatEther, isAddressEqual } from \"viem\";\n\nimport type { MinimalPoolFragment } from \"@berachain/graphql/dex/api\";\nimport BigNumber from \"@berachain/utils/pkg/bignumber.js\";\n\nimport type { IUserPosition } from \"../../types/dex\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { useRewardVaultBalanceFromStakingToken } from \"../pol/useRewardVaultBalanceFromStakingToken\";\nimport { usePollBalance } from \"../tokens/usePollBalance\";\n\ntype IUseLpPositionArgs = {\n pool: MinimalPoolFragment | undefined;\n vaultAddress?: Address | undefined;\n};\n\n/**\n * Given a pool and used within an initialized viem context, returns the user's position\n */\nexport function useLpPosition(\n { pool, vaultAddress }: IUseLpPositionArgs,\n options?: DefaultHookOptions,\n): DefaultHookReturnType<IUserPosition> {\n const { data: userPosition, ...rest } = usePollBalance({\n address: pool?.address,\n });\n\n const { data: userVaultTokenBalance, refresh: refreshVaultDeposit } =\n useRewardVaultBalanceFromStakingToken(\n {\n stakingToken: pool?.address,\n rewardVaultAddress: vaultAddress ?? pool?.rewardVault?.vaultAddress,\n },\n options,\n );\n\n const actualPoolShares = pool\n ? Number.parseFloat(pool?.dynamicData?.totalShares ?? \"0\")\n : 0;\n\n const tvlInUsd = pool?.dynamicData?.totalLiquidity\n ? Number(pool?.dynamicData?.totalLiquidity ?? 0)\n : null;\n\n const lpTokenPrice =\n actualPoolShares && tvlInUsd ? tvlInUsd / Number(actualPoolShares) : 0;\n\n const tokenRatioPerLp = pool?.tokens?.map((token) => {\n return {\n address: token.address,\n ratio: actualPoolShares\n ? Number(token.balance) / Number(actualPoolShares)\n : 0,\n };\n });\n\n return {\n data: {\n lpTokenPrice,\n lpBalance: userPosition\n ? {\n ...userPosition,\n usdValue: userPosition\n ? Number(userPosition.balance.formatted) * lpTokenPrice\n : undefined,\n }\n : undefined,\n tokenBalances: pool?.tokens?.map((token) => {\n const tokenRatio =\n tokenRatioPerLp?.find((tr) =>\n isAddressEqual(tr.address as Address, token.address as Address),\n )?.ratio ?? 0;\n\n const userBalance = tokenRatio\n ? BigNumber(userPosition?.balance.formatted ?? \"0\").times(tokenRatio)\n : BigNumber(0);\n const price = Number(token.balanceUSD) / Number(token.balance);\n\n return {\n ...token,\n\n balance: {\n raw: userBalance?.isGreaterThan(0)\n ? userBalance\n .times(10 ** token.decimals!)\n .toFixed(0)\n .toString()\n : \"0\",\n formatted: userBalance.toString(),\n },\n price,\n usdValue:\n Number.isNaN(price) || !userBalance\n ? undefined\n : Number.parseFloat(userBalance.toString()) * price,\n };\n }),\n stakedBalance: userVaultTokenBalance?.address\n ? {\n ...userVaultTokenBalance,\n balance: {\n raw: userVaultTokenBalance.balance.toString(),\n // Pools always use the 18 decimals\n formatted: formatEther(userVaultTokenBalance.balance),\n },\n usdValue:\n Number(formatEther(userVaultTokenBalance.balance)) * lpTokenPrice,\n }\n : undefined,\n },\n ...rest,\n refresh: () => {\n rest.refresh?.();\n refreshVaultDeposit();\n },\n };\n}\n","import { type Address, isAddress, zeroAddress } from \"viem\";\n\nimport { rewardVaultAbi } from \"@berachain/abis/pol/rewards/rewardVault\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { useRewardVaultFromToken } from \"./useRewardVaultFromToken\";\n\n// NOTE: this is entirely on-chain\nexport function useRewardVaultBalanceFromStakingToken(\n {\n stakingToken,\n rewardVaultAddress: _rewardVaultAddress,\n }: {\n stakingToken: Address | undefined;\n rewardVaultAddress?: Address;\n },\n options?: DefaultHookOptions,\n) {\n const { address: account } = useBeraWallet();\n const publicClient = usePublicClient();\n\n const isEnabled = options?.isEnabled ?? true;\n const {\n data: rewardVaultAddress = _rewardVaultAddress,\n error,\n refresh: mutateRewardVaultAddress,\n isLoading: isLoadingRewardVaultAddress,\n } = useRewardVaultFromToken(\n {\n tokenAddress: stakingToken,\n },\n {\n isEnabled: !_rewardVaultAddress && isEnabled,\n },\n );\n\n const swrResponse = useSWR(\n rewardVaultAddress &&\n account &&\n publicClient &&\n isAddress(rewardVaultAddress) &&\n isAddress(account)\n ? [\"useVaultBalanceFromStakingToken\", rewardVaultAddress, account]\n : null,\n\n async ([, rewardVaultAddress, account]) => {\n assertPublicClient(publicClient);\n\n if (rewardVaultAddress === zeroAddress) {\n return {\n address: rewardVaultAddress,\n balance: 0n,\n };\n }\n\n const balance = await publicClient.readContract({\n address: rewardVaultAddress,\n abi: rewardVaultAbi,\n functionName: \"balanceOf\",\n args: [account],\n });\n\n return {\n address: rewardVaultAddress,\n balance: balance,\n };\n },\n options,\n );\n\n return {\n ...swrResponse,\n refresh: () => {\n mutateRewardVaultAddress();\n swrResponse.refresh();\n },\n isLoading: swrResponse.isLoading || isLoadingRewardVaultAddress,\n };\n}\n","import { type Address, isAddress, zeroAddress } from \"viem\";\n\nimport { rewardVaultFactoryAbi } from \"@berachain/abis/pol/rewards/rewardVaultFactory\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { assertPublicClient } from \"../../errors/assert\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\n\nexport function useRewardVaultFromToken(\n {\n tokenAddress,\n }: {\n tokenAddress: Address | string | undefined;\n },\n {\n isEnabled = true,\n }: {\n isEnabled?: boolean;\n } = {},\n) {\n const publicClient = usePublicClient();\n\n const QUERY_KEY: readonly [string, Address] | null =\n publicClient && tokenAddress && isAddress(tokenAddress) && isEnabled\n ? [\"useRewardVaultFromToken\", tokenAddress]\n : null;\n\n return useSWRImmutable<Address | undefined, any, typeof QUERY_KEY>(\n QUERY_KEY,\n async ([, tokenAddress]) => {\n if (!tokenAddress) {\n throw new Error(\"useRewardVaultFromToken needs a valid token address\");\n }\n\n assertPublicClient(publicClient);\n\n const { config } = parseBaseArgs({\n chainId: publicClient.chain.id,\n });\n\n const res = await publicClient.readContract({\n address: config.pol.factory,\n abi: rewardVaultFactoryAbi,\n functionName: \"getVault\",\n args: [tokenAddress],\n });\n\n return res === zeroAddress ? undefined : res;\n },\n );\n}\n","import {\n type Address,\n erc20Abi,\n formatEther,\n formatUnits,\n isAddress,\n zeroAddress,\n} from \"viem\";\n\nimport { defaultChainId } from \"@berachain/config/internal\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { BalanceToken } from \"../../types/dex\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { beraToken, isToken } from \"../../utils/tokens\";\nimport { useTokenInformation } from \"./useTokenInformation\";\n\nexport function usePollBalance(\n {\n address: addressString,\n owner,\n chainId = defaultChainId,\n }: {\n /**\n * Token address to get the balance of\n */\n address: string | undefined;\n owner?: Address | undefined;\n chainId?: number;\n },\n options?: DefaultHookOptions,\n): Omit<DefaultHookReturnType<BalanceToken | undefined>, \"mutate\"> {\n let address = addressString;\n //enso has the native token as ethAddress, we need to convert it to zeroAddress\n if (isToken(address, \"ETH\")) {\n address = zeroAddress as Address;\n }\n const publicClient = usePublicClient({ chainId });\n const { address: account } = useBeraWallet();\n const assetOwner = owner ?? account;\n\n const QUERY_KEY =\n publicClient &&\n assetOwner &&\n isAddress(assetOwner) &&\n address &&\n isAddress(address)\n ? ([\"usePollBalance\", assetOwner, address, chainId] as const)\n : null;\n\n const { data: tokenInformation, isLoading: isLoadingTokenInformation } =\n useTokenInformation({ address, chainId });\n\n const isNativeToken = isToken(address, \"BERA\");\n\n const { isLoading, data, error, ...rest } = useSWR(\n QUERY_KEY,\n async ([, assetOwner, address]) => {\n assertPublicClient(publicClient);\n\n if (!isToken(address, \"BERA\")) {\n return await publicClient.readContract({\n address: address as `0x${string}`,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [assetOwner],\n });\n }\n return await publicClient.getBalance({\n address: assetOwner,\n });\n },\n {\n refreshInterval: POLLING.FAST,\n ...options,\n },\n );\n\n const formattedBalance =\n !error && data\n ? isToken(address, \"BERA\")\n ? formatEther(data as bigint)\n : tokenInformation && !isLoadingTokenInformation\n ? formatUnits(data, tokenInformation.decimals)\n : undefined\n : undefined;\n\n const tokenBalance = {\n chainId,\n balance: data\n ? {\n raw: data.toString(),\n formatted: formattedBalance ?? \"0\",\n }\n : { raw: \"0\", formatted: \"0\" },\n address: address as `0x${string}`,\n decimals: isNativeToken\n ? beraToken.decimals\n : (tokenInformation?.decimals ?? 0),\n symbol: isNativeToken ? beraToken.symbol : (tokenInformation?.symbol ?? \"\"),\n name: isNativeToken ? beraToken.name : (tokenInformation?.name ?? \"\"),\n } satisfies BalanceToken;\n\n return {\n ...rest,\n isLoading: isLoading || isNativeToken ? isLoadingTokenInformation : false,\n error: error || !isNativeToken ? error : undefined,\n data: tokenBalance,\n };\n}\n","import { isAddress, zeroAddress } from \"viem\";\n\nimport { defaultChainId } from \"@berachain/config/internal\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { getTokenInformation } from \"../../actions/tokens/getTokenInformation\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { Token } from \"../../types/dex\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { beraToken, isToken } from \"../../utils/tokens\";\n\nexport type UseTokenInformationResponse = DefaultHookReturnType<\n Token | undefined\n>;\n\nexport type UseTokenInformationArgs = {\n address: string | undefined;\n chainId: number;\n};\nexport function useTokenInformation(\n args: UseTokenInformationArgs,\n options?: DefaultHookOptions,\n): UseTokenInformationResponse {\n const publicClient = usePublicClient({\n chainId: args.chainId,\n });\n const QUERY_KEY =\n args?.address && publicClient && isAddress(args.address)\n ? ([\"useTokenInformation\", args.address, args.chainId] as const)\n : null;\n return useSWRImmutable<Token | undefined, any, typeof QUERY_KEY>(\n QUERY_KEY,\n async ([_, address, chainId = defaultChainId]) => {\n if (isToken(address, \"BERA\")) {\n return {\n address: zeroAddress,\n decimals: beraToken.decimals,\n name: beraToken.name,\n symbol: beraToken.symbol,\n chainId,\n } satisfies Token;\n }\n\n // We already checked for publicClient in the QUERY_KEY\n // so we can safely assume that publicClient is defined\n // but we need this for correct type inference\n assertPublicClient(publicClient);\n\n return await getTokenInformation({\n address,\n publicClient,\n chainId,\n });\n },\n { ...options },\n );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { parseUnits, zeroAddress } from \"viem\";\n\nimport BigNumber from \"@berachain/utils/pkg/bignumber.js\";\n\nimport { BeraError } from \"../../errors/BeraError\";\nimport type { AllowanceQueryItem, AllowanceToken } from \"../../types/dex\";\nimport { isToken } from \"../../utils/tokens\";\nimport { usePollAllowances } from \"../tokens/usePollAllowances\";\n\ntype NeedsApprovalToken = AllowanceToken & {\n maxAmountIn: bigint;\n};\n\nfunction calculateMaxAmountIn({\n amount,\n decimals,\n slippage,\n}: {\n amount: bigint;\n decimals: number;\n slippage: number | undefined;\n}) {\n const slippageInWei = parseUnits((slippage ?? 0).toString(), decimals);\n return amount + (amount * slippageInWei) / BigInt(100 * 10 ** decimals);\n}\n\nexport function useMultipleTokenApprovalsWithSlippage(\n tokenInput: AllowanceQueryItem[],\n options?: {\n slippage?: number;\n },\n) {\n const { slippage } = options ?? {};\n\n const items = useMemo(\n () =>\n tokenInput\n .filter((token) => token.token.address !== zeroAddress)\n .filter((token) => BigNumber(token.amount.formatted).gt(0)),\n [tokenInput],\n );\n\n const {\n data: allowances,\n refresh,\n isLoading,\n } = usePollAllowances({\n items,\n });\n\n const needsApproval = useMemo<NeedsApprovalToken[]>(\n () =>\n allowances\n ?.map<NeedsApprovalToken | undefined>((allowance) => {\n const item = items.find((item) =>\n isToken(item.token.address, allowance.token),\n );\n\n if (!item) {\n // Since we're checking the allowances, the tokens should be present\n throw new BeraError({\n message:\n \"Token not found when matching allowance in useMultipleTokenApprovalsWithSlippage\",\n cause: {\n allowance,\n items,\n },\n });\n }\n\n const maxAmountIn = calculateMaxAmountIn({\n decimals: item.token.decimals,\n amount: BigInt(item.amount.raw),\n slippage,\n });\n\n if (BigNumber(allowance.allowance.raw).lt(maxAmountIn)) {\n return {\n ...item,\n needsApproval: true,\n maxAmountIn,\n allowance: {\n raw: allowance.allowance.raw,\n formatted: allowance.allowance.formatted,\n },\n };\n }\n\n return undefined;\n })\n .filter((token) => token !== undefined) ?? [],\n [allowances, slippage, items],\n );\n\n return {\n needsApproval,\n refresh,\n isLoading,\n };\n}\n","import { useBeraWallet, useConfig } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getAllowances } from \"../../actions/tokens/getAllowances\";\nimport { POLLING } from \"../../enum/polling\";\nimport type { AllowanceQueryItem, AllowanceToken } from \"../../types/dex\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport type UsePollAllowancesArgs = {\n items: AllowanceQueryItem[];\n};\nexport interface UsePollAllowancesResponse\n extends DefaultHookReturnType<AllowanceToken[] | undefined> {}\n\n/**\n *\n * @brief Allows the user to poll the allowances of a given token array.\n *\n * @param contract the address of the ERC20 token contract\n * @param tokens the list of tokens to poll allowances for\n * @param chainId the chain ID to check allowances on\n */\nexport function usePollAllowances(\n args: UsePollAllowancesArgs,\n options?: DefaultHookOptions,\n): UsePollAllowancesResponse {\n const config = useConfig();\n\n const { address: account } = useBeraWallet();\n const QUERY_KEY =\n config && account && args?.items\n ? ([\"usePollAllowances\", account, args?.items] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, account, items]) => {\n return getAllowances({\n items,\n account,\n config,\n });\n },\n {\n ...options,\n refreshInterval: options?.refreshInterval ?? POLLING.NORMAL,\n },\n );\n}\n","import { useMemo } from \"react\";\nimport { type Address, formatUnits, isAddress } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { getOnChainPool } from \"../../actions/dex/getOnChainPool\";\nimport type { TokenPriceInfo } from \"../../types/dex\";\nimport { useMultipleTokenInformation } from \"../tokens/useMultipleTokenInformation\";\nimport { useTokenCurrentPrices } from \"../tokens/useTokenCurrentPrices\";\n\nexport function useOnChainPoolDataQueryKey(\n args: { poolId: string } | { address: Address },\n) {\n const address = \"poolId\" in args ? args.poolId?.slice(0, 42) : args.address;\n\n const isAddressValid = isAddress(address);\n\n const isValid = isAddressValid;\n\n return isValid && address ? ([\"useOnChainPoolData\", address] as const) : null;\n}\n\ninterface OnChainPoolToken {\n address: Address;\n name: string;\n decimals: number;\n symbol: string;\n index: number;\n weight?: string;\n balance: string;\n token: {\n __typename: \"Token\";\n token: { address: Address; name: string; decimals: number; symbol: string };\n latestUSDPrice: TokenPriceInfo | undefined;\n };\n}\n\nexport interface OnChainPoolFragment {\n id: string;\n name: string;\n address: Address;\n factory: Address;\n swapFee: string;\n totalShares: string;\n totalLiquidity: string;\n createTime: number;\n type: string;\n tokens: OnChainPoolToken[];\n // Reference: https://github.com/balancer/docs-developers/blob/main/references/valuing-balancer-lp-tokens/pools/stablepools.md#getamplificationparameter\n amplificationParameter:\n | {\n currentFormattedValue: number | undefined;\n }\n | undefined;\n}\n\nexport function useOnChainPoolData(poolId: string) {\n const publicClient = usePublicClient();\n\n const address = poolId?.slice(0, 42) as Address;\n\n const QUERY_KEY = useOnChainPoolDataQueryKey({ poolId });\n const {\n data: poolData,\n error,\n isLoading,\n refresh: mutate,\n } = useSWRImmutable(\n // FIXME: why are we using useSWRImmutable when we fetch tokenSupply and swapFee?\n publicClient ? QUERY_KEY : null,\n async ([, poolId]) => {\n return getOnChainPool({\n poolId,\n // @ts-expect-error viem types\n publicClient,\n });\n },\n );\n\n const { data: tokenInformation, isLoading: isTokenInformationLoading } =\n useMultipleTokenInformation({\n addresses: poolData?.poolTokens[0],\n });\n\n const { data: tokenPrices, isLoading: isTokenPricesLoading } =\n useTokenCurrentPrices({\n addressIn: poolData?.poolTokens[0],\n });\n\n const pool = useMemo(() => {\n if (!poolData || !tokenInformation) {\n return undefined;\n }\n\n const pool: OnChainPoolFragment = {\n address: address.toLowerCase() as Address,\n id: poolId.toLowerCase() as string,\n type: poolData.type,\n factory: poolData.factory,\n totalShares: poolData.totalSupply,\n totalLiquidity: \"0\", // overwritten below\n swapFee: poolData.swapFee,\n createTime: 0,\n name: poolData.name,\n tokens: tokenInformation.map((token, idx) => ({\n address: token.address.toLowerCase() as Address,\n name: token.name,\n decimals: token.decimals,\n symbol: token.symbol,\n index: idx,\n weight: poolData.weights?.[idx] ?? undefined,\n balance: formatUnits(\n BigInt(poolData.poolTokens[1][idx]),\n token.decimals,\n ),\n token: {\n __typename: \"Token\",\n token,\n latestUSDPrice: tokenPrices?.[token.address],\n },\n })),\n amplificationParameter: poolData?.amplificationParameter && {\n // For example, if value is 300000n and precision is 1000n, the user-set amplification parameter would be 300000n / 1000n = 300n.\n currentFormattedValue:\n Number(poolData.amplificationParameter[0]) /\n Number(poolData.amplificationParameter[2]),\n },\n };\n\n const totalLiquidity = pool.tokens?.reduce((acc, token) => {\n const tokenUSDPrice = Number(\n tokenPrices?.[token.address.toLowerCase()]?.price ?? 0,\n );\n if (!tokenUSDPrice) return acc;\n return acc + tokenUSDPrice * Number(token.balance);\n }, 0);\n\n pool.totalLiquidity = totalLiquidity?.toString() ?? \"\";\n\n return pool;\n }, [poolData, tokenInformation, tokenPrices, address, poolId]);\n\n return {\n data: pool,\n error,\n isLoading: isLoading || isTokenInformationLoading || isTokenPricesLoading,\n refresh: mutate,\n };\n}\n","import { isAddress } from \"viem\";\n\nimport { defaultChainId } from \"@berachain/config/internal\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { getTokenInformation } from \"../../actions/tokens/getTokenInformation\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { Token } from \"../../types/dex\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport type UseMultipleTokenInformationResponse = DefaultHookReturnType<\n Token[]\n>;\n\nexport type useMultipleTokenInformationArgs = {\n addresses: string[] | readonly string[] | undefined;\n chainId?: number;\n};\nexport function useMultipleTokenInformation(\n args: useMultipleTokenInformationArgs,\n options?: DefaultHookOptions,\n): UseMultipleTokenInformationResponse {\n const publicClient = usePublicClient();\n\n const QUERY_KEY =\n publicClient && args.addresses\n ? ([\n \"useMultipleTokenInformation\",\n args.addresses,\n args.chainId ?? defaultChainId,\n ] as const)\n : null;\n\n return useSWRImmutable<Token[], unknown, typeof QUERY_KEY>(\n QUERY_KEY,\n async ([, addresses, chainId]) => {\n // We already checked for publicClient in the QUERY_KEY\n // so we can safely assume that publicClient is defined\n // but we need this for correct type inference\n assertPublicClient(publicClient);\n\n return Promise.all(\n addresses.map(async (address) => {\n if (!address || !isAddress(address, { strict: false })) {\n throw new Error(\"Invalid address\");\n }\n\n const tk = await getTokenInformation({\n address: address,\n publicClient,\n chainId,\n });\n\n if (!tk) {\n throw new Error(`Token ${address} not found`);\n }\n\n return tk;\n }),\n );\n },\n { ...options },\n );\n}\n","import { useMemo } from \"react\";\nimport { type Address, isAddress, zeroAddress } from \"viem\";\n\nimport { defaultChainId } from \"@berachain/config/internal\";\n\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getTokenCurrentPrices } from \"../../actions/prices/getTokenCurrentPrices\";\nimport { POLLING } from \"../../enum/polling\";\nimport type { TokenCurrentPriceMap, TokenWithPrice } from \"../../types/dex\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { isToken } from \"../../utils/tokens\";\nimport { useTokens } from \"./useTokens\";\n\n/**\n * @deprecated use useTokenPrices instead that supports multichain tokens\n */\nexport function useTokenCurrentPrices(\n {\n addressIn,\n }: {\n addressIn?: string[] | readonly string[];\n } = {},\n options: DefaultHookOptions = {\n refreshInterval: POLLING.NORMAL,\n revalidateOnFocus: true,\n },\n) {\n const { tokenList, ensoTokens } = useTokens();\n\n /**\n * Berachain or Bepolia Tokens. All tokens from other chains are excluded since API doesn't price them.\n */\n const beraAddresses = useMemo<Address[]>(() => {\n const addresses: Address[] = [];\n\n if (addressIn) {\n addresses.push(\n ...(addressIn.filter((a): a is Address => isAddress(a)) as Address[]),\n );\n }\n return addresses.map((a) => a.toLowerCase() as Address);\n }, [tokenList]);\n\n const hasAddressesNotInTokenList = useMemo(() => {\n const tokenSet = new Set(\n tokenList?.map((token) => token.address.toLowerCase() as Address),\n );\n // Native BERA (zero address) is priced via WBERA in getTokenCurrentPrices.\n // Treat zero address as \"known\" whenever WBERA exists in token list.\n if (tokenList.some((token) => isToken(token, \"WBERA\"))) {\n tokenSet.add(zeroAddress);\n }\n\n return beraAddresses?.some((a) => !tokenSet.has(a));\n }, [beraAddresses, tokenList]);\n\n /**\n * If no addressIn is provided, use default token list\n * If all addressIn are in the token list, use default token list\n * If some addressIn are not in the token list, use addressIn\n */\n const addresses = hasAddressesNotInTokenList\n ? beraAddresses\n : tokenList.map((token) => token.address);\n\n const QUERY_KEY = addresses\n ? ([\n \"useTokenCurrentPrices\",\n addresses.map((a) => a.toLowerCase() as Address),\n ] as const)\n : null;\n\n const apiResponse = useSWR(\n QUERY_KEY,\n async ([, addresses]) => {\n // this only works for Berachain tokens\n return getTokenCurrentPrices({ addressIn: addresses });\n },\n options,\n );\n\n const ensoMatchingPrices = useMemo<TokenCurrentPriceMap>(() => {\n if (!ensoTokens) return {};\n\n const ensoPricesMap = new Map<number, Map<Address, TokenWithPrice>>([\n [defaultChainId, new Map()],\n ]);\n\n for (const token of ensoTokens) {\n if (token.price === undefined || token.chainId !== defaultChainId)\n continue;\n\n ensoPricesMap\n .get(defaultChainId)\n ?.set(token.address.toLowerCase() as Address, {\n ...token,\n price: token.price,\n chainId: defaultChainId,\n });\n }\n\n return Object.fromEntries(\n addresses.map((address) => {\n const price = ensoPricesMap.get(defaultChainId)?.get(address)?.price;\n\n if (!price) return [null, null];\n\n return [\n address.toLowerCase() as Address,\n {\n price,\n chainId: defaultChainId,\n updatedAt: Date.now(),\n },\n ];\n }),\n );\n }, [ensoTokens]);\n\n const data = useMemo(\n () => ({\n ...ensoMatchingPrices,\n // in this deprecated hook, we let api override enso prices, since there's no multichain support\n ...apiResponse.data,\n }),\n [ensoMatchingPrices, apiResponse.data],\n );\n\n return {\n ...apiResponse,\n data,\n };\n}\n","import { useContext } from \"react\";\n\nimport { TokenContext } from \"../../contexts/TokensProvider\";\nimport { BeraError } from \"../../errors/BeraError\";\nimport type { FormatTokenListReturnType } from \"../../utils/formatTokenList\";\n\nexport function useTokens() {\n const context = useContext(TokenContext);\n\n if (!context) {\n throw new BeraError({\n message: \"useTokens must be used within a TokensProvider\",\n level: \"fatal\",\n });\n }\n return {\n ...context,\n /**\n * @deprecated use useTokens().tokenList instead\n */\n data: {\n tokenList: context.tokenList,\n customTokenList: context.userTokens,\n featuredTokenList: context.featuredTokens,\n } satisfies FormatTokenListReturnType,\n };\n}\n","import type { Address } from \"viem\";\n\nimport { vaultAbi as balancerVaultAbi } from \"@berachain/abis/bex/vault\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\n\n/**\n * Hook for fetching relayer approval status with SWR\n *\n * @returns SWR data spread and refresh function\n */\nexport function usePollPoolCreationRelayerApproval(\n options?: DefaultHookOptions,\n) {\n const { address: account } = useBeraWallet();\n const publicClient = usePublicClient();\n\n const QUERY_KEY =\n account && publicClient\n ? ([\n \"usePollPoolCreationRelayerApproval\",\n account,\n publicClient.chain.id,\n ] as const)\n : null;\n\n return useSWR<boolean>(\n QUERY_KEY,\n async ([, account]) => {\n assertPublicClient(publicClient);\n\n const { config } = parseBaseArgs({ chainId: publicClient.chain.id });\n const approved = await publicClient.readContract({\n address: config.bex.vault,\n abi: balancerVaultAbi,\n functionName: \"hasApprovedRelayer\",\n args: [account as Address, config.bex.poolCreationHelper],\n });\n\n return approved;\n },\n { ...options },\n );\n}\n","import type { Hex } from \"viem\";\n\nimport { useApiPool } from \"./useApiPool\";\nimport { useOnChainPoolData } from \"./useOnChainPoolData\";\n\nexport function usePool({ poolId }: { poolId: Hex }) {\n const balancerApiPool = useApiPool({ poolId });\n\n const {\n data: onChainPool,\n isLoading: isOnChainPoolLoading,\n refresh: refreshOnChainPool,\n error: onChainPoolError,\n } = useOnChainPoolData(poolId);\n\n return {\n data: [undefined, balancerApiPool.data, onChainPool] as const,\n isLoading: balancerApiPool.isLoading || isOnChainPoolLoading,\n isError: balancerApiPool.error || onChainPoolError,\n refresh: () => {\n balancerApiPool.refresh();\n\n refreshOnChainPool();\n },\n };\n}\n","import type { GqlPoolEventType } from \"@berachain/graphql/dex/api\";\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { getPoolEvents } from \"../../actions/dex/getPoolEvents\";\nimport { POLLING } from \"../../enum/polling\";\n\nexport function usePoolEvents({\n poolId,\n typeInArray,\n}: {\n poolId: string | undefined;\n typeInArray: GqlPoolEventType[];\n}) {\n return useSWRImmutable(\n poolId ? ([\"usePoolEvents\", poolId, typeInArray] as const) : null,\n async ([, poolId, typeInArray]) => getPoolEvents({ poolId, typeInArray }),\n {\n refreshInterval: POLLING.SLOW,\n },\n );\n}\n","import type {\n GqlChain,\n PoolHistoricalDataFragment,\n} from \"@berachain/graphql/dex/api\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getPoolHistoricalData } from \"../../actions/dex/getPoolHistoricalData\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\n\ntype UsePoolHistoricalDataArgs = {\n poolId: string | undefined;\n};\n\nexport function usePoolHistoricalData(\n { poolId, ...baseArgs }: UsePoolHistoricalDataArgs & BeraJS.BaseFunctionArgs,\n options?: DefaultHookOptions,\n): DefaultHookReturnType<PoolHistoricalDataFragment[] | undefined> {\n const { config } = parseBaseArgs(baseArgs);\n const QUERY_KEY = poolId\n ? ([\"usePoolHistoricalData\", poolId] as const)\n : null;\n\n return useSWR<\n PoolHistoricalDataFragment[] | undefined,\n any,\n typeof QUERY_KEY\n >(\n QUERY_KEY,\n async ([, poolId]) => {\n return getPoolHistoricalData({\n poolId,\n chain: config.bex.chainName as GqlChain,\n });\n },\n options,\n );\n}\n","import { useMemo } from \"react\";\n\nimport type { GetPoolsQueryVariables } from \"@berachain/graphql/dex/api\";\nimport { useBeraWallet } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getAllPools } from \"../../actions/dex/getAllPools\";\nimport { POLLING } from \"../../enum/polling\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { useAllUserPools } from \"./useAllUserPools\";\n\nexport function usePoolsQueryKey({\n query,\n}: {\n query?: GetPoolsQueryVariables;\n} = {}) {\n return [\"useAllPools\", query];\n}\n/**\n * Returns all pools from bex api, including user's pools if logged in\n * @todo add subgraph fallback\n */\nexport function usePools(\n query: GetPoolsQueryVariables,\n options?: DefaultHookOptions,\n) {\n const { address: account } = useBeraWallet();\n const {\n data: userPools,\n isLoading: isUserPoolsLoading,\n refresh: mutateUserPools,\n } = useAllUserPools({\n userAddress: account,\n chain: query.chain,\n });\n\n const {\n data: pools,\n isLoading: isPoolsLoading,\n refresh: mutatePools,\n error: poolsError,\n } = useSWR(\n usePoolsQueryKey({ query }),\n async ([_, query]) => {\n return getAllPools(query as GetPoolsQueryVariables);\n },\n {\n refreshInterval: POLLING.SLOW,\n ...options,\n },\n );\n\n const mergedPools = useMemo(() => {\n if (!pools || !userPools?.pools?.length) return pools?.pools ?? [];\n const userPoolsById = Object.fromEntries(\n userPools.pools.map((pool) => [pool.id.toLowerCase(), pool]),\n );\n return pools.pools\n .map((pool) => ({\n ...pool,\n ...(userPoolsById[pool.id.toLowerCase()] || {}),\n }))\n .filter(Boolean);\n }, [pools, userPools]);\n\n const pagination = useMemo(() => {\n return {\n page: Math.ceil((query?.skip ?? 0) / (query?.first ?? 10)),\n pageSize: query?.first,\n count: Math.ceil((pools?.count ?? 0) / (query?.first ?? 10)),\n };\n }, [pools, query.skip, query.first]);\n\n return {\n pools: mergedPools ?? [],\n walletPools: pools?.pools ?? [],\n isLoading: isPoolsLoading || isUserPoolsLoading,\n error: poolsError,\n refresh: () => {\n mutatePools();\n mutateUserPools();\n },\n pagination,\n };\n}\n","import { useMemo } from \"react\";\n\nimport type { Token } from \"../../types/dex\";\nimport { computePriceImpact } from \"../../utils/math\";\nimport { useTokenPrices } from \"../tokens/useTokenPrices\";\n\nexport function usePriceImpact({\n tokenIn,\n tokenOut,\n formattedAmountIn,\n formattedAmountOut,\n}: {\n tokenIn: Token | undefined;\n tokenOut: Token | undefined;\n formattedAmountIn: string | undefined;\n formattedAmountOut: string | undefined;\n}) {\n const { getTokenPrice, isLoading } = useTokenPrices({\n tokens: tokenIn && tokenOut ? [tokenIn, tokenOut] : undefined,\n });\n const tokenInPrice = getTokenPrice(tokenIn);\n const tokenOutPrice = getTokenPrice(tokenOut);\n\n const priceImpact = useMemo(() => {\n if (!tokenIn || !tokenOut || !formattedAmountIn || !formattedAmountOut)\n return undefined;\n\n if (tokenInPrice == null || tokenOutPrice == null) return null;\n return computePriceImpact({\n tokenInPrice: tokenInPrice.toString(),\n tokenOutPrice: tokenOutPrice.toString(),\n inAmount: formattedAmountIn,\n outAmount: formattedAmountOut,\n });\n }, [\n tokenIn,\n tokenOut,\n formattedAmountIn,\n formattedAmountOut,\n tokenInPrice,\n tokenOutPrice,\n ]);\n return {\n data: priceImpact,\n isLoading,\n };\n}\n","import { useCallback, useMemo } from \"react\";\nimport type { Address } from \"viem\";\n\nimport { defaultChainId } from \"@berachain/config/internal\";\n\nimport { POLLING } from \"../../enum/polling\";\nimport type { Token } from \"../../types/dex\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { useTokenCurrentPrices } from \"./useTokenCurrentPrices\";\nimport { useTokens } from \"./useTokens\";\n\nexport type TokenPriceInput = Pick<Token, \"address\" | \"chainId\">;\n\nexport type TokenPriceOutput = TokenPriceInput & {\n price: number;\n};\nexport type TokenPriceMap = Record<number, Record<Address, number>>;\n\nexport function useTokenPrices(\n {\n tokens,\n }: {\n tokens?: TokenPriceInput[];\n } = {},\n options: DefaultHookOptions = {\n refreshInterval: POLLING.NORMAL,\n revalidateOnFocus: true,\n },\n) {\n const { ensoTokens } = useTokens();\n\n const apiResponse = useTokenCurrentPrices(\n {\n addressIn: tokens\n ?.filter((token) => token.chainId === defaultChainId)\n .map((token) => token.address),\n },\n options,\n );\n\n const data = useMemo(() => {\n const prices: TokenPriceOutput[] = [];\n\n if (!tokens) {\n return [];\n }\n\n const tokenMap = new Map<number, Map<Address, TokenPriceInput>>();\n\n for (const token of tokens) {\n const chainId = token.chainId ?? defaultChainId;\n if (!tokenMap.has(chainId)) {\n tokenMap.set(chainId, new Map<Address, TokenPriceInput>());\n }\n tokenMap.get(chainId)?.set(token.address.toLowerCase() as Address, token);\n }\n\n if (apiResponse.data) {\n for (const [address, price] of Object.entries(apiResponse.data)) {\n if (\n price &&\n tokenMap\n .get(price.chainId ?? defaultChainId)\n ?.get(address.toLowerCase() as Address) &&\n price.price !== undefined\n ) {\n const token = tokenMap\n .get(price.chainId ?? defaultChainId)\n ?.get(address.toLowerCase() as Address);\n\n if (!token) {\n continue;\n }\n\n prices.push({\n ...token,\n chainId: price.chainId,\n price: price.price,\n });\n }\n }\n }\n\n if (ensoTokens) {\n for (const tk of ensoTokens) {\n if (tk.price !== undefined && tk.chainId !== undefined) {\n prices.push({\n ...tk,\n chainId: tk.chainId,\n price: tk.price,\n });\n }\n }\n }\n\n return prices;\n }, [apiResponse.data, ensoTokens, tokens]);\n\n const priceMap = useMemo<TokenPriceMap>(() => {\n const map: TokenPriceMap = {};\n for (const item of data) {\n const chainId = item.chainId ?? defaultChainId;\n if (!map[chainId]) {\n map[chainId] = {} as Record<Address, number>;\n }\n map[chainId][item.address.toLowerCase() as Address] = item.price;\n }\n\n return map;\n }, [data]);\n\n const getTokenPrice = useCallback(\n (token?: TokenPriceInput) => {\n if (!token) return undefined;\n const price =\n priceMap[token.chainId ?? defaultChainId]?.[\n token.address?.toLowerCase() as Address\n ] ?? undefined;\n\n return price;\n },\n [priceMap],\n );\n\n return {\n isLoading: apiResponse.isLoading,\n error: apiResponse.error,\n data,\n priceMap,\n getTokenPrice,\n };\n}\n","\"use client\";\n\nimport type { Address, Hex } from \"viem\";\nimport { parseUnits } from \"viem\";\n\nimport { defaultChainId } from \"@berachain/config/internal\";\n\nimport {\n useBeraWagmi,\n useBeraWallet,\n usePublicClient,\n} from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getEnsoClient } from \"../../actions/clients/getEnsoClient\";\nimport { getBendDemultiplyBundle } from \"../../actions/enso/getBendDemultiplyBundle\";\nimport { useBeraFlag } from \"../../contexts/BeraFlags/BeraFlags\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { Token } from \"../../types/dex\";\nimport type { BendDemultiplyBundleResponse } from \"../../types/enso\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { useEnsoWalletV2Address } from \"./useEnsoWalletV2Address\";\nimport { useIsBendAuthorized } from \"./useIsBendAuthorized\";\n\nexport type UseBendDemultiply = {\n collateralToken?: Token;\n loanToken?: Token;\n marketId?: Hex;\n primaryAddress?: Address;\n repayAmount?: string;\n slippage?: number;\n chainId?: number;\n collateralPriceInLoanAsset?: string;\n currentCollateral?: string;\n currentDebt?: string;\n};\n\nexport function useBendDemultiply(\n {\n collateralToken,\n loanToken,\n marketId,\n primaryAddress,\n repayAmount,\n slippage,\n chainId,\n collateralPriceInLoanAsset,\n currentCollateral,\n currentDebt,\n }: UseBendDemultiply,\n options?: DefaultHookOptions,\n) {\n const { address: fromAddress } = useBeraWallet();\n const { account: { chainId: accountChainId } = {} } = useBeraWagmi();\n\n const chainIdToUse = chainId ?? accountChainId ?? defaultChainId;\n const publicClient = usePublicClient({ chainId: chainIdToUse });\n const { data: ensoWalletV2Address } = useEnsoWalletV2Address({\n chainId: chainIdToUse,\n });\n const { data: isAuthorized } = useIsBendAuthorized({\n chainId: chainIdToUse,\n primaryAddress,\n ensoWalletV2Address,\n });\n const proxyAggregatorsThroughVercel = useBeraFlag(\n \"proxyAggregatorsThroughVercel\",\n );\n\n const QUERY_KEY =\n collateralToken &&\n loanToken &&\n marketId &&\n primaryAddress &&\n repayAmount &&\n ensoWalletV2Address &&\n isAuthorized !== undefined &&\n collateralToken.address !== loanToken.address &&\n Number(repayAmount) > 0 &&\n slippage !== undefined &&\n collateralPriceInLoanAsset !== undefined &&\n currentCollateral &&\n currentDebt &&\n Number(currentDebt) > 0 &&\n fromAddress\n ? ([\n \"useBendDemultiply\",\n fromAddress,\n collateralToken,\n loanToken,\n marketId,\n primaryAddress,\n chainIdToUse,\n repayAmount,\n slippage,\n collateralPriceInLoanAsset,\n currentCollateral,\n currentDebt,\n ensoWalletV2Address,\n isAuthorized,\n proxyAggregatorsThroughVercel ?? false,\n ] as const)\n : null;\n\n return useSWR<BendDemultiplyBundleResponse, unknown, typeof QUERY_KEY>(\n QUERY_KEY,\n async ([\n _,\n fromAddress,\n collateralToken,\n loanToken,\n marketId,\n primaryAddress,\n chainId,\n repayAmount,\n slippage,\n collateralPriceInLoanAsset,\n currentCollateral,\n currentDebt,\n ensoWalletV2Address,\n isAuthorized,\n proxyAggregatorsThroughVercel,\n ]) => {\n assertPublicClient(publicClient);\n\n const rawRepayAmount = parseUnits(\n repayAmount,\n loanToken.decimals,\n ).toString();\n const rawCurrentCollateral = parseUnits(\n currentCollateral,\n collateralToken.decimals,\n ).toString();\n const rawCurrentDebt = parseUnits(\n currentDebt,\n loanToken.decimals,\n ).toString();\n\n return getBendDemultiplyBundle({\n fromAddress,\n repayAmount: rawRepayAmount,\n collateralToken,\n loanToken,\n marketId,\n primaryAddress,\n chainId,\n ensoClient: getEnsoClient({\n baseURL: proxyAggregatorsThroughVercel ? \"/api/enso\" : undefined,\n }),\n slippage,\n publicClient,\n collateralPriceInLoanAsset,\n currentCollateral: rawCurrentCollateral,\n currentDebt: rawCurrentDebt,\n ensoWalletV2Address,\n isAuthorized,\n });\n },\n {\n ...options,\n refreshInterval: POLLING.NORMAL,\n },\n );\n}\n","import type { BundleAction, EnsoClient } from \"@ensofinance/sdk\";\nimport { type Address, formatUnits, type Hex, type PublicClient } from \"viem\";\n\nimport BigNumber from \"@berachain/utils/pkg/bignumber.js\";\n\nimport { assertAddress, assertPositive } from \"../../errors/assert\";\nimport { InvalidArgumentError } from \"../../errors/InvalidArgumentError\";\nimport type { Token } from \"../../types/dex\";\nimport type { BendDemultiplyBundleResponse } from \"../../types/enso\";\nimport { assembleBendFlashloanTransactions } from \"./flashloan\";\nimport { computeSwapOutputRatio, toEnsoAddress } from \"./util\";\n\n// full-repay cleanup needs a non-trivial leftover debt balance after `repay`.\n// without this proportional buffer, enso may fail to route near-zero dust.\nconst FULL_REPAY_CLEANUP_BUFFER_BPS = 25n; // 0.25%\nconst BPS_DIVISOR = 10_000n;\n\nexport interface GetBendDemultiplyBundleArgs {\n fromAddress: Address;\n repayAmount: string;\n collateralToken: Token;\n loanToken: Token;\n marketId: Hex;\n primaryAddress: Address;\n chainId: number;\n ensoClient: EnsoClient;\n slippage: number;\n publicClient: PublicClient;\n collateralPriceInLoanAsset: string;\n currentCollateral: string;\n currentDebt: string;\n ensoWalletV2Address: Address;\n isAuthorized: boolean;\n}\n\n/**\n * Calculate the collateral amount to flashloan and sell in order to repay\n * the target debt amount.\n *\n * collateralNeeded = repayAmount / (collateralPrice * swapOutputRatio)\n *\n * This is the inverse of the multiply direction: we need enough collateral\n * that, after swapping to the loan token with slippage, covers the repay\n * amount. The result is clamped to `currentCollateral` (can't withdraw\n * more than exists in the position).\n */\nexport function calculateDemultiplyCollateralAmount({\n repayAmount,\n collateralPriceInLoanAsset,\n collateralToken,\n loanToken,\n slippage,\n currentCollateral,\n}: {\n repayAmount: string;\n collateralPriceInLoanAsset: string;\n collateralToken: Token;\n loanToken: Token;\n slippage: number;\n currentCollateral: string;\n}): string {\n const swapOutputRatio = computeSwapOutputRatio(slippage);\n const collateralPrice = new BigNumber(collateralPriceInLoanAsset);\n\n if (collateralPrice.lte(0)) {\n throw new InvalidArgumentError({\n property: \"collateralPriceInLoanAsset\",\n value: collateralPriceInLoanAsset,\n expected: \"a value greater than zero\",\n });\n }\n\n const loanDecimalsMul = new BigNumber(10).pow(loanToken.decimals);\n const collateralDecimalsMul = new BigNumber(10).pow(collateralToken.decimals);\n\n const repayAmountHuman = new BigNumber(repayAmount).dividedBy(\n loanDecimalsMul,\n );\n\n const flashloanCollateralHuman = repayAmountHuman\n .dividedBy(collateralPrice)\n .dividedBy(swapOutputRatio);\n\n const flashloanCollateralRaw = flashloanCollateralHuman\n .multipliedBy(collateralDecimalsMul)\n .integerValue(BigNumber.ROUND_UP);\n\n if (flashloanCollateralRaw.lte(0)) return \"0\";\n\n return BigNumber.minimum(\n flashloanCollateralRaw,\n new BigNumber(currentCollateral),\n ).toFixed(0);\n}\n\n/**\n * Estimate the position change after executing a demultiply.\n *\n * Unlike multiply, these values represent *reductions* from the current\n * position — the caller subtracts them to get the new totals.\n * Returns human-readable (formatted) values for display.\n */\nexport function getPositionEstimate({\n repayAmount,\n collateralToWithdraw,\n collateralToken,\n loanToken,\n}: {\n repayAmount: string;\n collateralToWithdraw: string;\n collateralToken: Token;\n loanToken: Token;\n}): BendDemultiplyBundleResponse[\"positionEstimate\"] {\n return {\n finalCollateral: formatUnits(\n BigInt(collateralToWithdraw),\n collateralToken.decimals,\n ),\n totalBorrow: formatUnits(BigInt(repayAmount), loanToken.decimals),\n };\n}\n\nexport async function getBendDemultiplyBundle({\n fromAddress,\n repayAmount,\n collateralToken,\n loanToken,\n marketId,\n primaryAddress,\n chainId,\n ensoClient,\n slippage,\n publicClient,\n collateralPriceInLoanAsset,\n currentCollateral,\n currentDebt,\n ensoWalletV2Address,\n isAuthorized,\n}: GetBendDemultiplyBundleArgs): Promise<BendDemultiplyBundleResponse> {\n assertAddress(fromAddress, \"fromAddress\");\n assertPositive(repayAmount, \"repayAmount\");\n assertPositive(currentDebt, \"currentDebt\");\n\n const rawRepayAmount = BigInt(repayAmount);\n const rawCurrentDebt = BigInt(currentDebt);\n const isFullRepayment = rawRepayAmount >= rawCurrentDebt;\n\n const collateralAddress = toEnsoAddress(collateralToken.address);\n const loanAddress = toEnsoAddress(loanToken.address);\n\n // proportional extra debt amount (in raw units) reserved for full-repay cleanup.\n const rawCleanupDebtAmountFromBps =\n (rawRepayAmount * FULL_REPAY_CLEANUP_BUFFER_BPS + (BPS_DIVISOR - 1n)) /\n BPS_DIVISOR;\n const rawFullRepaymentCleanupDebtAmount = isFullRepayment\n ? rawCleanupDebtAmountFromBps\n : 0n;\n // on full repay, quote flashloan collateral against repay + cleanup buffer.\n // this intentionally creates remaining debt token in the callback so it can\n // be swapped back to collateral and re-deposited.\n const rawTargetRepayForFlashloanQuote = (\n rawRepayAmount + rawFullRepaymentCleanupDebtAmount\n ).toString();\n\n const collateralToWithdraw = calculateDemultiplyCollateralAmount({\n repayAmount: rawTargetRepayForFlashloanQuote,\n collateralPriceInLoanAsset,\n collateralToken,\n loanToken,\n slippage,\n currentCollateral,\n });\n const isFlashloanCollateralClamped =\n BigInt(collateralToWithdraw) >= BigInt(currentCollateral);\n // if flashloan collateral is clamped by current collateral, skip cleanup to\n // avoid adding extra callback steps when there is no safe collateral headroom.\n const shouldRunFullRepaymentCleanup =\n isFullRepayment &&\n rawFullRepaymentCleanupDebtAmount > 0n &&\n !isFlashloanCollateralClamped;\n\n if (BigInt(collateralToWithdraw) <= 0n) {\n throw new InvalidArgumentError({\n property: \"collateralToWithdraw\",\n value: collateralToWithdraw,\n expected: \"positive amount\",\n });\n }\n\n const baseCallbackActions = [\n // [0] Swap flashloaned collateral into loan tokens\n {\n protocol: \"enso\",\n action: \"route\",\n args: {\n tokenIn: collateralAddress,\n tokenOut: loanAddress,\n amountIn: collateralToWithdraw,\n slippage: slippage * 100,\n },\n },\n // [1] Repay debt using the swapped loan tokens\n {\n protocol: \"bend\",\n action: \"repay\",\n args: {\n primaryAddress,\n positionId: marketId,\n tokenIn: loanAddress,\n amountIn: { useOutputOfCallAt: 0 },\n onBehalfOf: fromAddress,\n },\n },\n ];\n\n // On full repayment: swap leftover debt-token dust back to collateral and\n // re-deposit it, so dust isn't left in the user's wallet.\n // Cleanup indices are computed dynamically from baseCallbackActions length.\n const cleanupStartIdx = baseCallbackActions.length;\n const fullRepaymentCleanupActions = shouldRunFullRepaymentCleanup\n ? [\n // Read remaining debt token balance after repay\n {\n protocol: \"enso\",\n action: \"balance\",\n args: {\n token: loanAddress,\n },\n },\n // Swap remaining debt tokens back to collateral\n {\n protocol: \"enso\",\n action: \"route\",\n args: {\n tokenIn: loanAddress,\n tokenOut: collateralAddress,\n amountIn: {\n useOutputOfCallAt: cleanupStartIdx,\n },\n slippage: slippage * 100,\n },\n },\n // Re-deposit recovered collateral into Bend\n {\n protocol: \"bend\",\n action: \"deposit\",\n args: {\n primaryAddress,\n positionId: marketId,\n tokenIn: collateralAddress,\n amountIn: {\n useOutputOfCallAt: cleanupStartIdx + 1,\n },\n onBehalfOf: fromAddress,\n },\n },\n ]\n : [];\n\n const callbackActions = [\n ...baseCallbackActions,\n ...fullRepaymentCleanupActions,\n // Final action: withdraw collateral to repay the flashloan\n {\n protocol: \"bend\",\n action: \"withdraw\",\n args: {\n primaryAddress,\n positionId: marketId,\n tokenOut: collateralAddress,\n amountOut: collateralToWithdraw,\n onBehalfOf: fromAddress,\n },\n },\n ];\n\n const flashloanActions = [\n {\n protocol: \"bend\",\n action: \"flashloan\",\n args: {\n flashloanToken: collateralAddress,\n flashloanAmount: collateralToWithdraw,\n tokenOut: loanAddress,\n callback: callbackActions,\n },\n },\n ];\n\n // @ts-expect-error Enso SDK BundleAction typing does not include Bend flashloan action shape yet.\n const bundleActions: BundleAction[] = flashloanActions;\n\n const bundle = await ensoClient.getBundleData(\n {\n fromAddress,\n receiver: fromAddress,\n spender: fromAddress,\n chainId,\n routingStrategy: \"ensowallet-v2\",\n },\n bundleActions,\n );\n\n const { transactions } = await assembleBendFlashloanTransactions({\n fromAddress,\n amountIn: \"0\",\n tokenIn: collateralToken,\n primaryAddress,\n bundle,\n publicClient,\n ensoWalletV2Address,\n isAuthorized,\n });\n\n return {\n bundle,\n transactions,\n positionEstimate: getPositionEstimate({\n repayAmount,\n collateralToWithdraw,\n collateralToken,\n loanToken,\n }),\n };\n}\n","import type { BundleData } from \"@ensofinance/sdk\";\nimport {\n type Address,\n encodeFunctionData,\n getAddress,\n type PublicClient,\n} from \"viem\";\n\nimport { morphoAbi } from \"@berachain/abis/bend/morpho\";\n\nimport { ensoWalletV2FactoryAbi } from \"../../abi/enso/ensoWalletV2Factory\";\nimport { assertDefined } from \"../../errors/assert\";\nimport type { AllowanceQueryItem, MinimalERC20 } from \"../../types/dex\";\nimport type { GetZapTransactions, Quantity } from \"../../types/enso\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\nimport { getEnsoWalletTransactionsWithApproval } from \"./util\";\n\nexport async function getEnsoWalletV2Address({\n publicClient,\n ensoWalletV2Factory,\n accountAddress,\n}: {\n publicClient: PublicClient;\n ensoWalletV2Factory: Address;\n accountAddress: Address;\n}): Promise<Address> {\n return publicClient.readContract({\n address: ensoWalletV2Factory,\n abi: ensoWalletV2FactoryAbi,\n functionName: \"getAddress\",\n args: [accountAddress],\n }) as Promise<Address>;\n}\n\nexport async function getIsBendAuthorized({\n publicClient,\n primaryAddress,\n accountAddress,\n ensoWalletV2Address,\n}: {\n publicClient: PublicClient;\n primaryAddress: Address;\n accountAddress: Address;\n ensoWalletV2Address: Address;\n}): Promise<boolean> {\n return publicClient.readContract({\n address: primaryAddress,\n abi: morphoAbi,\n functionName: \"isAuthorized\",\n args: [accountAddress, ensoWalletV2Address],\n }) as Promise<boolean>;\n}\n\n/**\n * Assemble the final transaction list for a Bend flashloan bundle.\n *\n * Handles:\n * 1. ERC-20 approval for the Enso wallet (if tokenIn is not native and\n * allowance is insufficient)\n * 2. Morpho setAuthorization transaction (if not yet authorized)\n * 3. The bundle execution transaction itself\n *\n * @returns `{ transactions, approvals, ensoWalletFlashloanAdapter }`\n */\nexport async function assembleBendFlashloanTransactions({\n fromAddress,\n amountIn,\n tokenIn,\n primaryAddress,\n bundle,\n publicClient,\n ensoWalletV2Address,\n isAuthorized,\n}: {\n fromAddress: Address;\n amountIn: Quantity;\n tokenIn: MinimalERC20;\n primaryAddress: Address;\n bundle: BundleData;\n publicClient: PublicClient;\n ensoWalletV2Address: Address;\n isAuthorized: boolean;\n}): Promise<{\n transactions: GetZapTransactions;\n approvals: AllowanceQueryItem[];\n ensoWalletFlashloanAdapter: Address;\n}> {\n const { config } = parseBaseArgs({});\n const { walletFlashloanAdapter: ensoWalletFlashloanAdapter } = config.enso;\n assertDefined(\n ensoWalletFlashloanAdapter,\n \"config.enso.walletFlashloanAdapter\",\n );\n\n const { transactions: ensoTransactions, approval } =\n await getEnsoWalletTransactionsWithApproval({\n fromAddress,\n amountIn,\n tokenIn,\n bundle,\n publicClient,\n });\n\n const transactions: GetZapTransactions = [];\n\n if (!isAuthorized) {\n transactions.push({\n to: primaryAddress,\n data: encodeFunctionData({\n abi: morphoAbi,\n functionName: \"setAuthorization\",\n args: [ensoWalletV2Address, true],\n }),\n value: 0n,\n });\n }\n\n transactions.push(...ensoTransactions);\n\n const approvals: AllowanceQueryItem[] = approval ? [approval] : [];\n\n return {\n transactions,\n approvals,\n ensoWalletFlashloanAdapter: getAddress(ensoWalletFlashloanAdapter),\n };\n}\n","import {\n type Address,\n encodeFunctionData,\n erc20Abi,\n ethAddress,\n formatUnits,\n getAddress,\n zeroAddress,\n} from \"viem\";\n\nimport BigNumber from \"@berachain/utils/pkg/bignumber.js\";\n\nimport { InvalidArgumentError } from \"../../errors/InvalidArgumentError\";\nimport type { AllowanceQueryItem, Token } from \"../../types/dex\";\nimport type {\n GetEnsoWalletTransactionsWithApprovalArgs,\n GetZapTransactions,\n GetZapTransactionsArgs,\n} from \"../../types/enso\";\n\n/**\n * Convert a token address to Enso-compatible format.\n * Enso uses the special `ethAddress` sentinel for native tokens instead of `zeroAddress`.\n */\nexport function toEnsoAddress(address: Address): Address {\n return address === zeroAddress ? ethAddress : address;\n}\n\nfunction toBigIntOrUndefined(\n value: string | number | bigint | null | undefined,\n): bigint | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n return typeof value === \"bigint\" ? value : BigInt(value);\n}\n\n/**\n * Get the zap transactions for a given bundle.\n * @returns The zap transaction & approval transaction if required.\n */\nexport async function getTransactionsFromBundle({\n fromAddress,\n amountIn,\n tokenIn,\n chainId,\n ensoClient,\n bundle,\n publicClient,\n}: GetZapTransactionsArgs): Promise<GetZapTransactions> {\n const transactions: GetZapTransactions = [];\n /**\n * If the token is not the native token, we need to check if approval is required.\n */\n if (tokenIn !== ethAddress) {\n const approvalRequest = await ensoClient.getApprovalData({\n fromAddress,\n tokenAddress: tokenIn,\n chainId,\n amount: amountIn,\n });\n\n // check if approval is actually required by checking current allowance\n let requiresApproval = true;\n if (publicClient) {\n const currentAllowance = await publicClient.readContract({\n address: tokenIn as Address,\n abi: erc20Abi,\n functionName: \"allowance\",\n args: [fromAddress, approvalRequest.spender],\n });\n requiresApproval = currentAllowance < BigInt(amountIn);\n }\n\n // Only add approval transaction if it's actually required\n if (requiresApproval) {\n const approvalValue = toBigIntOrUndefined(approvalRequest.tx.value) ?? 0n;\n transactions.push({\n to: approvalRequest.tx.to,\n data: approvalRequest.tx.data as `0x${string}`,\n value: approvalValue,\n gasLimit: BigInt(approvalRequest.gas),\n });\n }\n }\n const bundleValue = toBigIntOrUndefined(bundle.tx.value) ?? 0n;\n transactions.push({\n to: bundle.tx.to,\n data: bundle.tx.data as `0x${string}`,\n value: bundleValue,\n gasLimit: BigInt(bundle.gas),\n });\n return transactions;\n}\n\n/**\n * Get ensowallet transactions for a bundle with approval handling.\n * Checks allowance on the ensowallet spender and prepends approval when needed.\n * @returns The bundle transaction and optional approval transaction.\n */\nexport async function getEnsoWalletTransactionsWithApproval({\n fromAddress,\n amountIn,\n tokenIn,\n bundle,\n publicClient,\n}: GetEnsoWalletTransactionsWithApprovalArgs): Promise<{\n transactions: GetZapTransactions;\n approval: AllowanceQueryItem | null;\n}> {\n const transactions: GetZapTransactions = [];\n const spender = getAddress(bundle.tx.to);\n let approval: AllowanceQueryItem | null = null;\n\n /**\n * If the token is not the native token, we need to check if approval is required.\n */\n const tokenInAddress = toEnsoAddress(tokenIn.address);\n if (tokenInAddress !== ethAddress) {\n // Check current allowance\n const currentAllowance = await publicClient.readContract({\n address: tokenIn.address as Address,\n abi: erc20Abi,\n functionName: \"allowance\",\n args: [fromAddress, spender],\n });\n\n const amountInBigInt = BigInt(amountIn);\n const requiresApproval = currentAllowance < amountInBigInt;\n\n // Only add approval transaction if it's actually required\n if (requiresApproval) {\n const raw = amountInBigInt.toString();\n approval = {\n token: tokenIn,\n amount: {\n raw,\n formatted: formatUnits(amountInBigInt, tokenIn.decimals),\n },\n spender,\n };\n\n const approvalData = encodeFunctionData({\n abi: erc20Abi,\n functionName: \"approve\",\n args: [spender, amountInBigInt],\n });\n\n transactions.push({\n to: tokenIn.address,\n data: approvalData,\n value: 0n,\n });\n }\n }\n const bundleValue = toBigIntOrUndefined(bundle.tx.value) ?? 0n;\n transactions.push({\n to: bundle.tx.to,\n data: bundle.tx.data as `0x${string}`,\n value: bundleValue,\n gasLimit: bundle.gas ? BigInt(bundle.gas) : undefined,\n });\n return { transactions, approval };\n}\n\n/**\n * Compute the fraction of swap output retained after accounting for slippage.\n *\n * @param slippage Slippage tolerance as a percentage (e.g. 0.5 means 0.5%).\n * @returns `1 - slippage/100`. Throws if the result is non-positive.\n */\nexport function computeSwapOutputRatio(slippage: number): BigNumber {\n const slippageRatio = new BigNumber(slippage).dividedBy(100);\n const ratio = new BigNumber(1).minus(slippageRatio);\n\n if (ratio.lte(0)) {\n throw new InvalidArgumentError({\n property: \"slippage\",\n value: slippage,\n expected: \"a value lower than 100\",\n });\n }\n\n return ratio;\n}\n\n/**\n * Convert a human-readable collateral-to-loan price into a raw-unit ratio.\n *\n * The result expresses how many raw loan-token units correspond to one raw\n * collateral-token unit:\n *\n * rawPrice = formattedPrice * (10^loanDecimals) / (10^collateralDecimals)\n */\nexport function computeRawCollateralToLoanPrice(\n formattedPrice: BigNumber,\n collateralToken: Token,\n loanToken: Token,\n): BigNumber {\n return formattedPrice\n .multipliedBy(new BigNumber(10).pow(loanToken.decimals))\n .dividedBy(new BigNumber(10).pow(collateralToken.decimals));\n}\n","\"use client\";\n\nimport type { Address } from \"viem\";\nimport { getAddress } from \"viem\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getEnsoWalletV2Address } from \"../../actions/enso/flashloan\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\n\nexport function useEnsoWalletV2Address({ chainId }: { chainId: number }) {\n const { address: fromAddress } = useBeraWallet();\n const publicClient = usePublicClient({ chainId });\n\n const { config } = parseBaseArgs({});\n const ensoWalletV2Factory = config.enso.walletV2Factory;\n\n const QUERY_KEY =\n fromAddress && ensoWalletV2Factory\n ? ([\"useEnsoWalletV2Address\", fromAddress, ensoWalletV2Factory] as const)\n : null;\n\n return useSWR<Address, unknown, typeof QUERY_KEY>(\n QUERY_KEY,\n async ([_, accountAddress, factory]) => {\n assertPublicClient(publicClient);\n return getEnsoWalletV2Address({\n publicClient,\n ensoWalletV2Factory: getAddress(factory),\n accountAddress,\n });\n },\n { refreshInterval: POLLING.SLOW },\n );\n}\n","\"use client\";\n\nimport type { Address } from \"viem\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getIsBendAuthorized } from \"../../actions/enso/flashloan\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\n\nexport function useIsBendAuthorized({\n chainId,\n primaryAddress,\n ensoWalletV2Address,\n}: {\n chainId: number;\n primaryAddress?: Address;\n ensoWalletV2Address?: Address;\n}) {\n const { address: fromAddress } = useBeraWallet();\n const publicClient = usePublicClient({ chainId });\n\n const QUERY_KEY =\n fromAddress && primaryAddress && ensoWalletV2Address\n ? ([\n \"useIsBendAuthorized\",\n fromAddress,\n primaryAddress,\n ensoWalletV2Address,\n ] as const)\n : null;\n\n return useSWR<boolean, unknown, typeof QUERY_KEY>(\n QUERY_KEY,\n async ([_, accountAddress, primaryAddress, ensoWalletV2Address]) => {\n assertPublicClient(publicClient);\n return getIsBendAuthorized({\n publicClient,\n primaryAddress,\n accountAddress,\n ensoWalletV2Address,\n });\n },\n { refreshInterval: POLLING.SLOW },\n );\n}\n","\"use client\";\n\nimport type { Address, Hex } from \"viem\";\nimport { parseUnits } from \"viem\";\n\nimport { defaultChainId } from \"@berachain/config/internal\";\n\nimport {\n useBeraWagmi,\n useBeraWallet,\n usePublicClient,\n} from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getEnsoClient } from \"../../actions/clients/getEnsoClient\";\nimport { getBendMultiplyBundle } from \"../../actions/enso/getBendMultiplyBundle\";\nimport { useBeraFlag } from \"../../contexts/BeraFlags/BeraFlags\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { Token } from \"../../types/dex\";\nimport type { BendMultiplyBundleResponse } from \"../../types/enso\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { useEnsoWalletV2Address } from \"./useEnsoWalletV2Address\";\nimport { useIsBendAuthorized } from \"./useIsBendAuthorized\";\n\nexport type UseBendMultiply = {\n collateralToken?: Token;\n loanToken?: Token;\n marketId?: Hex;\n primaryAddress?: Address;\n formattedSupplyCollateralAmount?: string;\n formattedCurrentCollateralAmount?: string;\n formattedCurrentBorrowAmount?: string;\n leverageMultiplier?: number;\n slippage?: number;\n chainId?: number;\n formattedCollateralPriceInLoanAsset?: string;\n};\n\nexport function useBendMultiply(\n {\n collateralToken,\n loanToken,\n marketId,\n primaryAddress,\n formattedSupplyCollateralAmount,\n formattedCurrentCollateralAmount,\n formattedCurrentBorrowAmount,\n leverageMultiplier,\n slippage,\n chainId,\n formattedCollateralPriceInLoanAsset,\n }: UseBendMultiply,\n options?: DefaultHookOptions,\n) {\n const { address: fromAddress } = useBeraWallet();\n const { account: { chainId: accountChainId } = {} } = useBeraWagmi();\n\n const chainIdToUse = chainId ?? accountChainId ?? defaultChainId;\n const publicClient = usePublicClient({ chainId: chainIdToUse });\n const { data: ensoWalletV2Address } = useEnsoWalletV2Address({\n chainId: chainIdToUse,\n });\n const { data: isAuthorized } = useIsBendAuthorized({\n chainId: chainIdToUse,\n primaryAddress,\n ensoWalletV2Address,\n });\n const proxyAggregatorsThroughVercel = useBeraFlag(\n \"proxyAggregatorsThroughVercel\",\n );\n\n const QUERY_KEY =\n collateralToken &&\n loanToken &&\n marketId &&\n primaryAddress &&\n ensoWalletV2Address &&\n isAuthorized !== undefined &&\n collateralToken.address !== loanToken.address &&\n slippage !== undefined &&\n leverageMultiplier !== undefined &&\n formattedCollateralPriceInLoanAsset !== undefined &&\n (Number(formattedSupplyCollateralAmount ?? 0) > 0 ||\n (leverageMultiplier > 1 &&\n (Number(formattedCurrentCollateralAmount ?? 0) > 0 ||\n Number(formattedSupplyCollateralAmount ?? 0) > 0))) &&\n fromAddress\n ? ([\n \"useBendMultiply\",\n fromAddress,\n collateralToken,\n loanToken,\n marketId,\n primaryAddress,\n chainIdToUse,\n formattedSupplyCollateralAmount ?? \"\",\n formattedCurrentCollateralAmount ?? \"\",\n formattedCurrentBorrowAmount ?? \"\",\n leverageMultiplier,\n slippage,\n formattedCollateralPriceInLoanAsset,\n ensoWalletV2Address,\n isAuthorized,\n proxyAggregatorsThroughVercel ?? false,\n ] as const)\n : null;\n\n return useSWR<BendMultiplyBundleResponse, unknown, typeof QUERY_KEY>(\n QUERY_KEY,\n async ([\n _,\n fromAddress,\n collateralToken,\n loanToken,\n marketId,\n primaryAddress,\n chainId,\n formattedSupplyCollateralAmount,\n formattedCurrentCollateralAmount,\n formattedCurrentBorrowAmount,\n leverageMultiplier,\n slippage,\n formattedCollateralPriceInLoanAsset,\n ensoWalletV2Address,\n isAuthorized,\n proxyAggregatorsThroughVercel,\n ]) => {\n assertPublicClient(publicClient);\n\n const rawSupplyCollateralAmount = parseUnits(\n formattedSupplyCollateralAmount || \"0\",\n collateralToken.decimals,\n ).toString();\n const rawCurrentCollateralAmount = parseUnits(\n formattedCurrentCollateralAmount || \"0\",\n collateralToken.decimals,\n ).toString();\n const rawCurrentBorrowAmount = parseUnits(\n formattedCurrentBorrowAmount || \"0\",\n loanToken.decimals,\n ).toString();\n\n return getBendMultiplyBundle({\n fromAddress,\n rawSupplyCollateralAmount,\n rawCurrentCollateralAmount,\n rawCurrentBorrowAmount,\n collateralToken,\n loanToken,\n marketId,\n primaryAddress,\n chainId,\n ensoClient: getEnsoClient({\n baseURL: proxyAggregatorsThroughVercel ? \"/api/enso\" : undefined,\n }),\n slippage,\n leverageMultiplier,\n publicClient,\n formattedCollateralPriceInLoanAsset,\n ensoWalletV2Address,\n isAuthorized,\n });\n },\n {\n ...options,\n refreshInterval: POLLING.NORMAL,\n },\n );\n}\n","import type { BundleAction, EnsoClient } from \"@ensofinance/sdk\";\nimport type { Address, Hex, PublicClient } from \"viem\";\n\nimport BigNumber from \"@berachain/utils/pkg/bignumber.js\";\n\nimport { assertAddress } from \"../../errors/assert\";\nimport { InvalidArgumentError } from \"../../errors/InvalidArgumentError\";\nimport type { Token } from \"../../types/dex\";\nimport type { BendMultiplyBundleResponse } from \"../../types/enso\";\nimport { assembleBendFlashloanTransactions } from \"./flashloan\";\nimport {\n computeRawCollateralToLoanPrice,\n computeSwapOutputRatio,\n toEnsoAddress,\n} from \"./util\";\n\nexport interface GetBendMultiplyBundleArgs {\n fromAddress: Address;\n rawSupplyCollateralAmount: string;\n rawCurrentCollateralAmount: string;\n rawCurrentBorrowAmount: string;\n collateralToken: Token;\n loanToken: Token;\n marketId: Hex;\n primaryAddress: Address;\n chainId: number;\n ensoClient: EnsoClient;\n slippage: number;\n leverageMultiplier: number;\n publicClient: PublicClient;\n formattedCollateralPriceInLoanAsset: string;\n ensoWalletV2Address: Address;\n isAuthorized: boolean;\n}\n\n/**\n * Calculate the loan amount needed to reach a target leverage multiplier.\n *\n * The closed-form formula accounts for the recursive nature of leveraged\n * looping: each borrowed amount is swapped to collateral (losing value to\n * slippage), then deposited, which increases borrowing capacity.\n *\n * targetLtv = 1 - 1/leverage\n * rawPrice = collateral-to-loan price in raw token units\n * denominator = 1 - targetLtv * swapOutputRatio\n *\n * borrowAmount = (targetLtv * collateralBase * rawPrice - currentBorrow)\n * / denominator\n *\n * The denominator corrects for the recursive loop: each unit of loan token\n * that survives the swap (after slippage) becomes new collateral that\n * enables further borrowing. When denominator <= 0, the leverage target is\n * unreachable at the current slippage tolerance.\n */\nexport function calculateMultiplyBorrowAmount({\n rawSupplyCollateralAmount,\n rawCurrentCollateralAmount,\n rawCurrentBorrowAmount,\n formattedCollateralPriceInLoanAsset,\n collateralToken,\n loanToken,\n leverageMultiplier,\n slippage,\n}: {\n rawSupplyCollateralAmount: string;\n rawCurrentCollateralAmount: string;\n rawCurrentBorrowAmount: string;\n formattedCollateralPriceInLoanAsset: string;\n collateralToken: Token;\n loanToken: Token;\n leverageMultiplier: number;\n slippage: number;\n}): string {\n const normalizedLeverage = Math.max(leverageMultiplier, 1);\n if (normalizedLeverage <= 1) return \"0\";\n\n const swapOutputRatio = computeSwapOutputRatio(slippage);\n const formattedCollateralPrice = new BigNumber(\n formattedCollateralPriceInLoanAsset,\n );\n\n if (formattedCollateralPrice.lte(0)) {\n throw new InvalidArgumentError({\n property: \"formattedCollateralPriceInLoanAsset\",\n value: formattedCollateralPriceInLoanAsset,\n expected: \"a value greater than zero\",\n });\n }\n\n const rawCollateralToLoanPrice = computeRawCollateralToLoanPrice(\n formattedCollateralPrice,\n collateralToken,\n loanToken,\n );\n\n const targetLtv = new BigNumber(1).minus(\n new BigNumber(1).dividedBy(normalizedLeverage),\n );\n const rawCollateralBase = new BigNumber(rawCurrentCollateralAmount).plus(\n rawSupplyCollateralAmount,\n );\n const rawCurrentBorrow = new BigNumber(rawCurrentBorrowAmount);\n\n // Denominator accounts for the recursive multiplier effect of re-deposited\n // swap proceeds. A non-positive value means slippage eats all new collateral.\n const denominator = new BigNumber(1).minus(\n targetLtv.multipliedBy(swapOutputRatio),\n );\n\n if (denominator.lte(0)) {\n throw new InvalidArgumentError({\n property: \"leverageMultiplier\",\n value: leverageMultiplier,\n expected: \"a lower leverage target for current slippage\",\n });\n }\n\n const requiredRawBorrow = targetLtv\n .multipliedBy(rawCollateralBase)\n .multipliedBy(rawCollateralToLoanPrice)\n .minus(rawCurrentBorrow)\n .dividedBy(denominator);\n\n if (requiredRawBorrow.lte(0)) return \"0\";\n\n const rawBorrowAmount = requiredRawBorrow.integerValue(BigNumber.ROUND_UP);\n if (rawBorrowAmount.lte(0)) return \"0\";\n\n return rawBorrowAmount.toFixed(0);\n}\n\n/**\n * Estimate the position after executing a multiply loop.\n *\n * For a deposit-only (rawBorrowAmount = 0) scenario, final collateral is just\n * the supplied amount. When borrowing, the loan is swapped to collateral\n * (accounting for slippage) and added to the supplied amount.\n *\n * Returns human-readable (formatted) values for display.\n */\nexport function getPositionEstimate({\n rawSupplyCollateralAmount,\n collateralToken,\n loanToken,\n rawBorrowAmount,\n formattedCollateralPriceInLoanAsset,\n slippage,\n}: {\n rawSupplyCollateralAmount: string;\n collateralToken: Token;\n loanToken: Token;\n rawBorrowAmount: string;\n formattedCollateralPriceInLoanAsset: string;\n slippage: number;\n}): BendMultiplyBundleResponse[\"positionEstimate\"] {\n const collateralDecimalsMul = new BigNumber(10).pow(collateralToken.decimals);\n const loanDecimalsMul = new BigNumber(10).pow(loanToken.decimals);\n const rawSupplyCollateral = new BigNumber(rawSupplyCollateralAmount);\n const rawBorrow = new BigNumber(rawBorrowAmount);\n\n if (rawBorrow.lte(0)) {\n return {\n finalCollateral: rawSupplyCollateral\n .dividedBy(collateralDecimalsMul)\n .toFixed(),\n totalBorrow: \"0\",\n };\n }\n\n const swapOutputRatio = computeSwapOutputRatio(slippage);\n const rawCollateralToLoanPrice = computeRawCollateralToLoanPrice(\n new BigNumber(formattedCollateralPriceInLoanAsset),\n collateralToken,\n loanToken,\n );\n\n // Collateral gained from swapping the borrowed loan tokens (after slippage)\n const rawLoopCollateral = rawCollateralToLoanPrice.lte(0)\n ? new BigNumber(0)\n : rawBorrow\n .multipliedBy(swapOutputRatio)\n .dividedBy(rawCollateralToLoanPrice);\n\n const finalFormattedCollateral = rawSupplyCollateral\n .plus(rawLoopCollateral)\n .dividedBy(collateralDecimalsMul);\n const totalFormattedBorrow = rawBorrow.dividedBy(loanDecimalsMul);\n\n return {\n finalCollateral: finalFormattedCollateral.toFixed(),\n totalBorrow: totalFormattedBorrow.toFixed(),\n };\n}\n\nexport async function getBendMultiplyBundle({\n fromAddress,\n rawSupplyCollateralAmount,\n rawCurrentCollateralAmount,\n rawCurrentBorrowAmount,\n collateralToken,\n loanToken,\n marketId,\n primaryAddress,\n chainId,\n ensoClient,\n slippage,\n leverageMultiplier,\n publicClient,\n formattedCollateralPriceInLoanAsset,\n ensoWalletV2Address,\n isAuthorized,\n}: GetBendMultiplyBundleArgs): Promise<BendMultiplyBundleResponse> {\n assertAddress(fromAddress, \"fromAddress\");\n\n const collateralAddress = toEnsoAddress(collateralToken.address);\n const loanAddress = toEnsoAddress(loanToken.address);\n\n const rawBorrowAmount = calculateMultiplyBorrowAmount({\n rawSupplyCollateralAmount,\n rawCurrentCollateralAmount,\n rawCurrentBorrowAmount,\n formattedCollateralPriceInLoanAsset,\n collateralToken,\n loanToken,\n leverageMultiplier,\n slippage,\n });\n\n // -- Callback action indices for `useOutputOfCallAt` references.\n // These MUST match the array position of each action in the callback below.\n const CALLBACK_IDX_ROUTE_LOAN_TO_COLLATERAL = 0;\n const CALLBACK_IDX_BALANCE_COLLATERAL = 1;\n\n const depositOnlyActions = [\n {\n protocol: \"bend\",\n action: \"deposit\",\n args: {\n primaryAddress,\n positionId: marketId,\n tokenIn: collateralAddress,\n amountIn: rawSupplyCollateralAmount,\n onBehalfOf: fromAddress,\n },\n },\n ];\n\n const hasWalletSupply = rawSupplyCollateralAmount !== \"0\";\n\n const flashloanActions = [\n {\n protocol: \"bend\",\n action: \"flashloan\",\n args: {\n flashloanToken: loanAddress,\n flashloanAmount: rawBorrowAmount,\n // Only include tokenIn/amountIn when the user is supplying collateral\n // from their wallet. For loop-only (multiply from existing position\n // collateral), no wallet transfer is needed.\n ...(hasWalletSupply && {\n tokenIn: collateralAddress,\n amountIn: rawSupplyCollateralAmount,\n }),\n tokenOut: loanAddress,\n callback: [\n // [0] Swap the flashloaned loan tokens into collateral\n {\n protocol: \"enso\",\n action: \"route\",\n args: {\n tokenIn: loanAddress,\n tokenOut: collateralAddress,\n amountIn: rawBorrowAmount,\n slippage: slippage * 100,\n },\n },\n // [1] Check collateral balance after swap\n {\n protocol: \"enso\",\n action: \"balance\",\n args: {\n token: collateralAddress,\n },\n },\n // [2] Deposit all collateral (from balance check) into Bend\n {\n protocol: \"bend\",\n action: \"deposit\",\n args: {\n primaryAddress,\n positionId: marketId,\n tokenIn: collateralAddress,\n amountIn: {\n useOutputOfCallAt: CALLBACK_IDX_BALANCE_COLLATERAL,\n },\n onBehalfOf: fromAddress,\n },\n },\n // [3] Borrow loan tokens to repay the flashloan\n {\n protocol: \"bend\",\n action: \"borrow\",\n args: {\n primaryAddress,\n positionId: marketId,\n collateral: collateralAddress,\n tokenOut: loanAddress,\n amountOut: rawBorrowAmount,\n onBehalfOf: fromAddress,\n },\n },\n ],\n },\n },\n ];\n\n // @ts-expect-error Enso SDK BundleAction typing does not include Bend flashloan action shape yet.\n const bundleActions: BundleAction[] =\n rawBorrowAmount === \"0\" ? depositOnlyActions : flashloanActions;\n\n const bundle = await ensoClient.getBundleData(\n {\n fromAddress,\n receiver: fromAddress,\n spender: fromAddress,\n chainId,\n routingStrategy: \"ensowallet-v2\",\n },\n bundleActions,\n );\n\n const { transactions } = await assembleBendFlashloanTransactions({\n fromAddress,\n amountIn: rawSupplyCollateralAmount,\n tokenIn: collateralToken,\n primaryAddress,\n bundle,\n publicClient,\n ensoWalletV2Address,\n isAuthorized,\n });\n\n return {\n bundle,\n transactions,\n positionEstimate: getPositionEstimate({\n rawSupplyCollateralAmount,\n collateralToken,\n loanToken,\n rawBorrowAmount,\n formattedCollateralPriceInLoanAsset,\n slippage,\n }),\n };\n}\n","\"use client\";\n\nimport { type Address, formatEther, parseUnits, zeroAddress } from \"viem\";\n\nimport { defaultChainId as berachainChainId } from \"@berachain/config/internal\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { ensoErc4626 } from \"../../actions/dex/aggregators/enso/ensoErc4626\";\nimport { useBeraFlag } from \"../../contexts/BeraFlags/BeraFlags\";\nimport { POLLING } from \"../../enum/polling\";\nimport {\n assertAddress,\n assertDefined,\n assertPublicClient,\n} from \"../../errors/assert\";\nimport type { BalanceToken, MinimalERC20 } from \"../../types/dex\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { isToken } from \"../../utils/tokens\";\nimport { useGetConvertToAssets } from \"../bend/useGetConvertToAssets\";\nimport { usePriceImpact } from \"../dex/usePriceImpact\";\nimport { usePollBalance } from \"../tokens/usePollBalance\";\nimport { useTokenPrices } from \"../tokens/useTokenPrices\";\n\ntype UseBendZapSupplyArgs = {\n /*\n * The input token to swap from\n */\n tokenIn?: BalanceToken;\n /*\n * The loan token to swap to\n */\n loanToken: MinimalERC20;\n /*\n * The bend vault to swap to\n */\n bendVault: MinimalERC20;\n /*\n * The reward vault to swap to\n */\n rewardVault?: Address;\n /*\n * The amount of input token to swap\n */\n amount?: string;\n /*\n * The slippage tolerance to use for the route in percentage\n */\n slippage?: number;\n};\n\n/**\n * Get the bend zap supply transaction requests for swapping tokens using Enso.\n * @param {UseBendZapSupplyArgs} props - The props for the hook see {@link UseBendZapSupplyArgs}\n * @returns {DefaultHookReturnType<GetZapTransactionResponse> & {tokens: BalanceToken[], refresh: () => void}}\n *\n * The bend transaction response data with polling enabled, see {@link GetZapTransactionResponse} and {@link BalanceToken}\n * @remarks The hook is only enabled when all parameters are provided and amount is greater than 0\n */\nexport function useBendZapSupply(\n {\n tokenIn,\n loanToken,\n bendVault,\n rewardVault,\n amount,\n slippage,\n }: UseBendZapSupplyArgs,\n options?: DefaultHookOptions,\n) {\n const { getTokenPrice } = useTokenPrices({\n tokens: tokenIn && loanToken ? [tokenIn, loanToken] : undefined,\n });\n\n const swrResponse = useBendZapSupplyHelper(\n {\n tokenIn,\n loanToken,\n bendVault,\n rewardVault,\n amount: amount\n ? parseUnits(amount, tokenIn?.decimals ?? 18).toString()\n : undefined,\n slippage,\n },\n options,\n );\n\n const {\n data: zapSupplyAmount,\n isLoading: isZapSupplyAmountLoading,\n error: zapSupplyAmountError,\n } = useGetConvertToAssets({\n sharesAmount: BigInt(swrResponse.data?.amountOut ?? 0),\n vaultAddress: bendVault.address,\n vaultChainId: bendVault.chainId,\n });\n\n const { data: priceImpact, isLoading: isPriceImpactLoading } = usePriceImpact(\n {\n tokenIn: tokenIn,\n tokenOut: loanToken,\n formattedAmountIn: amount,\n formattedAmountOut: zapSupplyAmount?.formatted ?? \"0\",\n },\n );\n\n const isCrossChain = tokenIn?.chainId && tokenIn.chainId !== berachainChainId;\n\n // fetch native token balance for source chain (needed for bridge fee check)\n const { data: nativeBalanceData, isLoading: isNativeBalanceLoading } =\n usePollBalance(\n {\n address: zeroAddress,\n chainId: isCrossChain ? tokenIn?.chainId : undefined,\n },\n { isEnabled: !!isCrossChain },\n );\n\n // for cross-chain zaps, check if transaction value exceeds native token balance\n // (tx.value includes bridge fees that must be paid in native token)\n const transactionValue =\n swrResponse.data?.getCalldata?.({ account: zeroAddress })?.value ?? 0n;\n\n // check if user has enough native token for bridge fees\n const nativeBalance = nativeBalanceData?.balance ?? {\n raw: \"0\",\n formatted: \"0\",\n };\n const hasInsufficientNativeBalance =\n isCrossChain &&\n transactionValue > 0n &&\n !isNativeBalanceLoading &&\n transactionValue > BigInt(nativeBalance.raw);\n\n // formatted native fee for gas reserve display\n const nativeFee =\n isCrossChain && transactionValue > 0n\n ? formatEther(transactionValue)\n : undefined;\n\n return {\n ...swrResponse,\n zapSupplyAmount,\n zapSupplyAmountError,\n isZapSupplyAmountLoading,\n priceImpact,\n isPriceImpactLoading,\n hasInsufficientNativeBalance,\n isCrossChain,\n nativeFee,\n refresh: () => {\n swrResponse.refresh();\n },\n };\n}\n\nexport function useBendZapSupplyHelper(\n {\n tokenIn,\n loanToken,\n bendVault,\n rewardVault,\n amount,\n slippage,\n }: UseBendZapSupplyArgs,\n options?: DefaultHookOptions,\n) {\n const { address: fromAddress } = useBeraWallet();\n const proxyAggregatorsThroughVercel = useBeraFlag(\n \"proxyAggregatorsThroughVercel\",\n );\n\n const isEnabled =\n !!tokenIn &&\n !!loanToken &&\n !!bendVault &&\n !!amount &&\n !!fromAddress &&\n !isToken(loanToken.address, tokenIn.address) &&\n tokenIn.chainId &&\n Number(amount) > 0 &&\n !!slippage;\n\n const publicClientBeraChain = usePublicClient();\n const QUERY_KEY = isEnabled\n ? ([\n \"useBendZapSupply\",\n fromAddress,\n tokenIn,\n loanToken,\n bendVault,\n rewardVault,\n amount,\n slippage,\n proxyAggregatorsThroughVercel ?? false,\n ] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([\n ,\n fromAddress,\n tokenIn,\n loanToken,\n bendVault,\n rewardVault,\n amount,\n slippage,\n ]) => {\n assertPublicClient(publicClientBeraChain);\n assertAddress(fromAddress, \"fromAddress\");\n assertAddress(tokenIn?.address, \"tokenInAddress\");\n assertDefined(tokenIn?.chainId, \"tokenInChainId\");\n\n return ensoErc4626.getQuote({\n tokenIn,\n tokenOut: bendVault,\n underlyingToken: loanToken,\n amount,\n slippage,\n account: fromAddress,\n rewardVault,\n proxyAggregatorsThroughVercel,\n });\n },\n {\n ...options,\n refreshInterval: POLLING.NORMAL,\n },\n );\n}\n","import type { BundleAction } from \"@ensofinance/sdk\";\nimport { type Address, ethAddress, type Hex, zeroAddress } from \"viem\";\n\nimport { Aggregators } from \"../../../../enum/dex\";\nimport { assertAddress } from \"../../../../errors/assert\";\nimport type {\n IAggregatorArgs,\n IRawAggregatorQuote,\n} from \"../../../../types/dex\";\nimport { getEnsoClient } from \"../../../clients/getEnsoClient\";\nimport { BaseAggregator } from \"../base\";\n\nclass EnsoErc4626Aggregator extends BaseAggregator {\n name = Aggregators.EnsoErc4626;\n supportedChains = null;\n readonly type = \"rest\";\n needsAccountForQuote = true;\n\n notFoundMessages: string[] = [\n \"Could not build shortcuts for route\",\n \"Could not quote shortcuts for route\",\n \"Swap not found for a required underlying of defi route,\",\n \"No route found from\",\n ];\n\n async getQuote({\n tokenIn,\n tokenOut,\n amount,\n slippage,\n account = zeroAddress,\n aggregatorsFeeBps,\n proxyAggregatorsThroughVercel = false,\n rewardVault,\n underlyingToken,\n }: IAggregatorArgs): Promise<IRawAggregatorQuote> {\n this.assertChainSupport({ tokenIn, tokenOut });\n\n assertAddress(account, \"account\");\n\n const ensoClient = getEnsoClient({\n baseURL: proxyAggregatorsThroughVercel ? \"/api/enso\" : undefined,\n });\n\n if (tokenIn.address === zeroAddress) tokenIn.address = ethAddress;\n if (tokenOut.address === zeroAddress) tokenOut.address = ethAddress;\n\n /**\n * This is the token that will be swapped by enso, but might not be the same as the token out.\n *\n * If an underlying token is provided, we'll swap to that and then deposit it into the vault,\n * assuming that token out is an ERC4626 vault.\n */\n const zapTokenOut = underlyingToken ?? tokenOut;\n\n const bundleActions: BundleAction[] = [\n // this is the base route action, which will swap the token in to the zap token out\n // it handles cross-chain swaps and refunds the user if the swap fails\n // this might even be the only action if no underlying token or reward vault is provided\n {\n protocol: \"enso\",\n action: \"route\",\n args: {\n tokenIn: tokenIn.address,\n tokenOut: zapTokenOut.address,\n destinationChainId:\n // must be undefined if the token is the same chain\n tokenIn.chainId === zapTokenOut.chainId\n ? undefined\n : zapTokenOut.chainId,\n refundReceiver: account,\n amountIn: amount,\n slippage: slippage * 100, // Enso expects slippage in basis points\n },\n },\n ];\n\n if (underlyingToken) {\n // deposit the underlying token into the vault\n // this works both for Staked BERA/iBera and Bend Vaults\n bundleActions.push({\n protocol: \"erc4626\",\n action: \"deposit\",\n args: {\n amountIn: { useOutputOfCallAt: 0 },\n tokenIn: underlyingToken.address,\n primaryAddress: tokenOut.address,\n tokenOut: tokenOut.address,\n },\n });\n }\n\n if (rewardVault) {\n // if an address is provided, funds will be staked into the reward vault\n\n // offset dynamically reads length of bundleActions array to get the output of the previous call\n const offset = bundleActions.length;\n bundleActions.push(\n {\n protocol: \"enso\",\n action: \"balance\",\n args: {\n token: tokenOut.address,\n },\n },\n {\n protocol: \"erc20\",\n action: \"approve\",\n args: {\n amount: { useOutputOfCallAt: offset },\n spender: rewardVault,\n token: tokenOut.address,\n },\n },\n {\n protocol: \"enso\",\n action: \"call\",\n args: {\n address: rewardVault,\n args: [account, { useOutputOfCallAt: offset }],\n method: \"stakeOnBehalf\",\n abi: \"function stakeOnBehalf(address account, uint256 amount) external\",\n },\n },\n {\n protocol: \"enso\",\n action: \"balance\",\n args: {\n token: rewardVault,\n },\n },\n );\n }\n\n const bundle = await ensoClient.getBundleData(\n {\n fromAddress: account,\n receiver: account,\n spender: account,\n chainId: tokenIn.chainId,\n routingStrategy: \"router\",\n },\n bundleActions,\n );\n\n const tokenOutAddress = (rewardVault?.toLowerCase() ??\n tokenOut.address.toLowerCase()) as Address;\n\n const amountOut =\n // @ts-expect-error enso has not typed this but is returned sometimes from API.\n bundle.minAmountsOut?.[tokenOutAddress] ??\n bundle.amountsOut[tokenOutAddress] ??\n \"0\";\n\n return {\n amountOut,\n amountIn: amount,\n allowanceRequirements: this.parseAllowanceRequirements({\n tokenIn,\n rawAmount: amount,\n spender: bundle.tx.to,\n }),\n name: this.name,\n swapFeeBps: 0,\n priceImpactPercentage: bundle.priceImpact\n ? bundle.priceImpact / 100\n : null,\n getCalldata: () => ({\n address: bundle.tx.to,\n data: bundle.tx.data as Hex,\n value: BigInt(bundle.tx.value ?? 0),\n // not returning gas limit because it's usually underestimated by enso.\n // gasLimit: BigInt(bundle.gas),\n }),\n };\n }\n}\n\nexport const ensoErc4626 = new EnsoErc4626Aggregator();\n","\"use client\";\n\nimport { getPublicClient } from \"@wagmi/core\";\nimport { parseUnits } from \"viem\";\n\nimport { defaultChainId as berachainChainId } from \"@berachain/config/internal\";\n\nimport { useBeraWallet, useConfig } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getEnsoClient } from \"../../actions/clients/getEnsoClient\";\nimport { getEnsoSwapBundle } from \"../../actions/enso/getEnsoSwapBundle\";\nimport { useBeraFlag } from \"../../contexts/BeraFlags/BeraFlags\";\nimport { POLLING } from \"../../enum/polling\";\nimport {\n assertAddress,\n assertAmount,\n assertDefined,\n assertPublicClient,\n} from \"../../errors/assert\";\nimport type { BalanceToken, MinimalERC20 } from \"../../types/dex\";\nimport type { GetZapTransactionResponse } from \"../../types/enso\";\nimport { usePollWalletBalances } from \"../tokens/usePollWalletBalances\";\n\n/**\n * Get the swap bundle for swapping tokens using Enso.\n * @param {Pick<BalanceToken, \"address\" | \"decimals\">} tokenIn - The input token to swap from\n * @param {Pick<BalanceToken, \"address\" | \"decimals\">} tokenOut - The output token to swap to\n * @param {string} amount - The amount of input token to swap\n * @param {number} slippage - The slippage tolerance to use for the route in percentage\n * @returns {DefaultHookReturnType<GetZapTransactionResponse> & {tokens: BalanceToken[], refresh: () => void}}\n *\n * The zap transaction response data with polling enabled, see {@link GetZapTransactionResponse} and {@link BalanceToken}\n * @remarks The hook is only enabled when all parameters are provided and amount is greater than 0\n */\nexport function useEnsoSwapBundle({\n tokenIn,\n tokenOut,\n amount,\n slippage,\n}: {\n tokenIn?: Pick<MinimalERC20, \"address\" | \"decimals\" | \"chainId\">;\n tokenOut?: Pick<MinimalERC20, \"address\" | \"decimals\">;\n amount?: string;\n slippage?: number;\n}) {\n const { address: fromAddress } = useBeraWallet();\n const wagmiConfig = useConfig();\n const proxyAggregatorsThroughVercel = useBeraFlag(\n \"proxyAggregatorsThroughVercel\",\n );\n const ensoClient = getEnsoClient({\n baseURL: proxyAggregatorsThroughVercel ? \"/api/enso\" : undefined,\n });\n\n const { refresh: refreshBalances } = usePollWalletBalances();\n\n const isEnabled =\n !!tokenIn &&\n !!tokenOut &&\n !!amount &&\n Number(amount) > 0 &&\n !!slippage &&\n !!fromAddress &&\n !!tokenIn.chainId;\n\n const QUERY_KEY = isEnabled\n ? ([\n \"useEnsoSwapBundle\",\n fromAddress,\n tokenIn,\n tokenOut,\n amount,\n slippage,\n proxyAggregatorsThroughVercel ?? false,\n ] as const)\n : null;\n\n const swrResponse = useSWR(\n QUERY_KEY,\n async ([, fromAddress, tokenIn, tokenOut, amount, slippage]) => {\n assertAddress(fromAddress, \"fromAddress\");\n assertAddress(tokenIn?.address, \"tokenInAddress\");\n assertDefined(tokenIn?.chainId, \"tokenInChainId\");\n assertAddress(tokenOut?.address, \"tokenOutAddress\");\n assertAmount(amount, \"amount\");\n assertAmount(slippage, \"slippage\");\n\n const publicClient = getPublicClient(wagmiConfig, {\n chainId: tokenIn.chainId,\n });\n assertPublicClient(publicClient);\n\n const rawAmount = parseUnits(amount, tokenIn.decimals).toString();\n\n return getEnsoSwapBundle({\n fromAddress,\n amountIn: rawAmount,\n tokenIn: tokenIn.address,\n tokenOut: tokenOut.address,\n chainId: tokenIn.chainId,\n ensoClient,\n destinationChainId: berachainChainId,\n slippage,\n publicClient,\n });\n },\n {\n refreshInterval: POLLING.NORMAL,\n isEnabled: isEnabled,\n },\n );\n\n return {\n ...swrResponse,\n refresh: () => {\n swrResponse.refresh();\n refreshBalances();\n },\n };\n}\n","import type { BundleAction } from \"@ensofinance/sdk\";\nimport { ethAddress, zeroAddress } from \"viem\";\n\nimport { assertAddress } from \"../../errors/assert\";\nimport type {\n GetEnsoSwapBundleArgs,\n GetZapTransactionResponse,\n} from \"../../types/enso\";\nimport { getTransactionsFromBundle } from \"./util\";\n\nexport async function getEnsoSwapBundle({\n fromAddress,\n amountIn,\n tokenIn,\n tokenOut,\n chainId,\n ensoClient,\n destinationChainId,\n slippage,\n publicClient,\n}: GetEnsoSwapBundleArgs): Promise<GetZapTransactionResponse> {\n assertAddress(fromAddress, \"fromAddress\");\n\n if (tokenOut === zeroAddress) tokenOut = ethAddress;\n\n const bundleAction: BundleAction = {\n protocol: \"enso\",\n action: \"route\",\n args: {\n tokenIn,\n tokenOut,\n amountIn,\n slippage: slippage * 100, // Enso expects slippage in basis points\n },\n };\n /**\n * If the zap is cross chain, we need to add the destination chain id and the refund receiver.\n *\n * Enso still need to update the sdk types to support this.\n */\n if (destinationChainId && destinationChainId !== chainId) {\n bundleAction.args = {\n ...bundleAction.args,\n destinationChainId: destinationChainId,\n refundReceiver: fromAddress,\n };\n }\n\n const bundle = await ensoClient.getBundleData(\n {\n fromAddress: fromAddress,\n receiver: fromAddress,\n spender: fromAddress,\n chainId: chainId,\n routingStrategy: \"router\",\n },\n [bundleAction],\n );\n const transactions = await getTransactionsFromBundle({\n fromAddress,\n amountIn,\n tokenIn,\n chainId,\n ensoClient,\n bundle,\n publicClient,\n });\n return {\n bundle,\n transactions,\n };\n}\n","import { useMemo } from \"react\";\nimport type { Address } from \"viem\";\n\nimport {\n useBeraWallet,\n useConfig,\n usePublicClient,\n} from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getWalletBalances } from \"../../actions/tokens/getWalletBalances\";\nimport { POLLING } from \"../../enum/polling\";\nimport type { BalanceToken, Token } from \"../../types/dex\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { useTokens } from \"./useTokens\";\n\nexport type UsePollWalletBalancesArgs = {\n /**\n * If provided, the tokens will be used instead of the default token list.\n */\n tokens?: Token[];\n walletAddress?: Address;\n};\nexport interface UsePollBalancesResponse\n extends DefaultHookReturnType<BalanceToken[] | undefined> {}\n\nexport function usePollWalletBalances(\n args?: UsePollWalletBalancesArgs,\n options?: DefaultHookOptions,\n): UsePollBalancesResponse {\n const publicClient = usePublicClient();\n const wagmiConfig = useConfig();\n const { address: connectedAccount } = useBeraWallet();\n\n const { tokenList, refresh } = useTokens();\n\n const wallet = args?.walletAddress ?? connectedAccount;\n\n const tokens = useMemo(() => {\n return new Map<string, Token>(\n (args?.tokens ?? tokenList)?.map((t) => [t.address.toLowerCase(), t]) ??\n [],\n );\n }, [tokenList, args?.tokens]);\n\n const QUERY_KEY =\n publicClient && tokenList !== undefined && wallet\n ? ([\n \"usePollWalletBalances\",\n wallet,\n // TODO: adding the whole list to the query is very inefficient, we should only add the tokens addresses\n Array.from(tokens.values()),\n ] as const)\n : null;\n\n const swrResponse = useSWR<BalanceToken[] | undefined, any, typeof QUERY_KEY>(\n QUERY_KEY,\n async ([, wallet, tokenList]) => {\n return getWalletBalances({\n account: wallet,\n tokenList,\n wagmiConfig,\n });\n },\n {\n refreshInterval: POLLING.NORMAL,\n ...options,\n },\n );\n\n return {\n ...swrResponse,\n refresh: () => {\n swrResponse?.refresh();\n refresh();\n },\n };\n}\n","\"use client\";\n\nimport { formatUnits, parseUnits } from \"viem\";\n\nimport { chainConfigs, defaultChainId } from \"@berachain/config/internal\";\n\nimport { useBeraWallet } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { ensoErc4626 } from \"../../actions/dex/aggregators/enso/ensoErc4626\";\nimport { POLLING } from \"../../enum/polling\";\nimport type { MinimalERC20 } from \"../../types/dex\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { usePriceImpact } from \"../dex/usePriceImpact\";\n\ntype UseZapStakeBeraArgs = {\n inputToken: MinimalERC20 | undefined;\n amount: string;\n underlyingToken: MinimalERC20 | undefined;\n slippage?: number;\n inputTokenPrice?: number;\n tokenOut: MinimalERC20;\n};\n\n/**\n * hook to get zap stake BERA transaction data from enso.\n * supports cross-chain zaps from any chain to berachain staking.\n */\nexport function useZapStakeBera(\n {\n inputToken,\n amount,\n underlyingToken,\n slippage,\n tokenOut,\n }: UseZapStakeBeraArgs,\n options?: DefaultHookOptions,\n) {\n const { address: account } = useBeraWallet();\n // enso route simulation needs a real EOA-like address; zeroAddress can fail simulation.\n // use the connected wallet when available, otherwise fallback to our configured aggregator executor.\n const quoteAccount =\n account ?? chainConfigs[defaultChainId].bex.aggregatorsRouterExecutor;\n\n const isEnabled =\n !!inputToken &&\n !!amount &&\n Number(amount) > 0 &&\n !!inputToken.chainId &&\n !!underlyingToken &&\n !!slippage;\n\n const QUERY_KEY = isEnabled\n ? ([\n \"useZapStakeBera\",\n inputToken,\n amount,\n quoteAccount,\n slippage,\n underlyingToken,\n tokenOut,\n ] as const)\n : null;\n\n const swrResponse = useSWR(\n QUERY_KEY,\n async ([\n ,\n inputToken,\n amount,\n quoteAccount,\n slippage,\n underlyingToken,\n tokenOut,\n ]) => {\n const rawAmount = parseUnits(amount, inputToken.decimals).toString();\n\n return ensoErc4626.getQuote({\n account: quoteAccount,\n amount: rawAmount,\n tokenIn: inputToken,\n underlyingToken: underlyingToken,\n tokenOut: tokenOut,\n slippage,\n });\n },\n {\n ...options,\n refreshInterval: POLLING.NORMAL,\n },\n );\n const { data: priceImpactPercentage } = usePriceImpact({\n tokenIn: inputToken,\n tokenOut: tokenOut,\n formattedAmountIn: amount,\n formattedAmountOut: formatUnits(\n BigInt(swrResponse.data?.amountOut ?? \"0\"),\n tokenOut.decimals,\n ),\n });\n\n return {\n ...swrResponse,\n data: {\n ...swrResponse.data,\n priceImpactPercentage,\n isCrossChain: inputToken && tokenOut.chainId !== inputToken?.chainId,\n },\n };\n}\n","import { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getGlobalCapLimit } from \"../../actions/honey/getGlobalCapLimit\";\nimport { useHoneyConfig } from \"../../contexts/HoneyConfigProvider\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { Token } from \"../../types/dex\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { usePythLatestPrices } from \"./usePythLatestPrices\";\n\nexport interface UseCappedGloballyResponse\n extends DefaultHookReturnType<boolean | undefined> {}\n\nexport function useCappedGlobally(\n {\n asset,\n amount,\n isMint,\n isBasketModeEnabled,\n }: {\n asset: Token | undefined;\n amount: string | undefined;\n isMint: boolean;\n isBasketModeEnabled: boolean | undefined;\n },\n options?: DefaultHookOptions,\n): UseCappedGloballyResponse {\n const publicClient = usePublicClient();\n const { priceFeedMap, flags } = useHoneyConfig();\n const { data: latestPrices } = usePythLatestPrices(\n {\n priceFeedMap:\n asset?.address && priceFeedMap\n ? { [asset.address]: priceFeedMap[asset.address] }\n : undefined,\n },\n {\n isEnabled: flags.isPythWrapperEnabled && !!asset?.address,\n },\n );\n const QUERY_KEY =\n amount &&\n asset &&\n ((flags.isPythWrapperEnabled && !!latestPrices?.prices.length) ||\n !flags.isPythWrapperEnabled)\n ? ([\n \"useCappedGlobally\",\n amount,\n asset,\n latestPrices,\n flags.isPythWrapperEnabled,\n isBasketModeEnabled,\n ] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([\n _,\n amount,\n asset,\n latestPrices,\n isPythWrapperEnabled,\n isBasketModeEnabled,\n ]) => {\n if (isBasketModeEnabled) {\n return false;\n }\n assertPublicClient(publicClient);\n\n return await getGlobalCapLimit({\n client: publicClient,\n asset,\n amount: isMint ? amount : `-${amount}`,\n isMint,\n latestPrices,\n isPythWrapperEnabled,\n });\n },\n {\n ...options,\n refreshInterval: 0,\n },\n );\n}\n","import type { BeraSwrResponse } from \"@berachain/utils/pkg/swr\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport type { PythLatestUpdates } from \"../../actions/honey/getPythLatestPrices\";\nimport { getPythLatestPrices } from \"../../actions/honey/getPythLatestPrices\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport type { PythPriceFeedMap } from \"../../types/honeySwap\";\n\n/**\n * Hook to fetch the latest Pyth price updates for specified pair addresses\n * @param {Object} params - The parameters object\n * @param {Address[] | undefined} params.pairMainAddress - Array of pair addresses to fetch price updates for\n * @returns {BeraSwrResponse<PythLatestUpdates>} SWR response containing the latest Pyth price updates\n * @example\n * ```ts\n * const { data, error } = usePythLatestPrices({\n * pairMainAddress: [\"0x123...\", \"0x456...\"]\n * });\n * ```\n */\nexport function usePythLatestPrices(\n {\n priceFeedMap,\n }: {\n priceFeedMap: PythPriceFeedMap | undefined;\n },\n options?: DefaultHookOptions,\n): BeraSwrResponse<PythLatestUpdates> {\n const priceFeedIds = priceFeedMap ? Object.values(priceFeedMap) : null;\n\n const QUERY_KEY = priceFeedIds\n ? ([\"usePythLatestPrices\", priceFeedIds] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([_, priceFeeds]) => {\n const data = await getPythLatestPrices({ priceFeedId: priceFeeds });\n return data;\n },\n options,\n );\n}\n","import type { Address } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getRelativeCapLimit } from \"../../actions/honey/getRelativeCapLimit\";\nimport { useHoneyConfig } from \"../../contexts/HoneyConfigProvider\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport interface UseCappedRelativelyResponse\n extends DefaultHookReturnType<boolean | undefined> {}\n\nexport function useCappedRelatively(\n {\n asset,\n amount,\n isMint,\n isBasketModeEnabled,\n }: {\n asset: Address | undefined;\n amount: string | undefined;\n isMint: boolean;\n isBasketModeEnabled: boolean | undefined;\n },\n options?: DefaultHookOptions,\n): UseCappedRelativelyResponse {\n const publicClient = usePublicClient();\n const { collateralList, referenceCollateral } = useHoneyConfig();\n const QUERY_KEY =\n asset && amount\n ? ([\n \"useCappedRelatively\",\n asset,\n amount,\n collateralList,\n referenceCollateral,\n ] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([_, asset, amount, collaterals, referenceCollateral]) => {\n if (isBasketModeEnabled) {\n return false;\n }\n assertPublicClient(publicClient);\n\n if (!isMint) {\n const newAmount = `-${amount}`;\n\n if (referenceCollateral.address !== asset) {\n return false;\n }\n\n const isCapped = await Promise.all(\n collaterals.map((coll) =>\n getRelativeCapLimit({\n client: publicClient,\n asset: coll.address,\n amount: newAmount,\n isMint,\n referenceCollateral,\n }),\n ),\n );\n return isCapped.some((isCapped) => isCapped);\n }\n\n return await getRelativeCapLimit({\n client: publicClient,\n asset,\n amount,\n isMint,\n referenceCollateral,\n });\n },\n {\n refreshInterval: 0,\n ...options,\n },\n );\n}\n","import type { Address } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getCollateralWeights } from \"../../actions/honey/getCollateralWeights\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { Token } from \"../../types/dex\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport interface UseCollateralWeightsResponse\n extends DefaultHookReturnType<Record<Address, bigint> | undefined> {}\n\nexport function useCollateralWeights(\n {\n collateralList,\n }: {\n collateralList: Token[] | undefined;\n },\n options?: DefaultHookOptions,\n): UseCollateralWeightsResponse {\n const publicClient = usePublicClient();\n const QUERY_KEY =\n publicClient && collateralList\n ? ([\"useCollateralWeights\", collateralList] as const)\n : undefined;\n\n return useSWR(\n QUERY_KEY,\n async ([_, collateralList]) => {\n assertPublicClient(publicClient);\n\n return await getCollateralWeights({\n client: publicClient,\n collateralList,\n });\n },\n {\n ...options,\n refreshInterval: options?.refreshInterval ?? POLLING.NORMAL,\n },\n );\n}\n","import { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getHoney24hVolume } from \"../../actions/honey/getHoney24hVolume\";\nimport { POLLING } from \"../../enum/polling\";\n\nexport function useHoney24hVolume() {\n const response = useSWR([\"useHoney24hVolume\"], () => getHoney24hVolume(), {\n refreshInterval: POLLING.SLOW,\n });\n\n return response;\n}\n","import { useMemo } from \"react\";\n\nimport BigNumber from \"@berachain/utils/pkg/bignumber.js\";\n\nimport type { GetHoneyVaultsBalanceResponse } from \"../../actions/honey/getHoneyVaultsBalance\";\nimport {\n type TokenWithOrder,\n useHoneyConfig,\n} from \"../../contexts/HoneyConfigProvider\";\nimport type { BalanceToken, Token } from \"../../types/dex\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\nimport { isToken } from \"../../utils/tokens\";\nimport { useCappedGlobally } from \"./useCappedGlobally\";\nimport { useCappedRelatively } from \"./useCappedRelatively\";\nimport { useHoneyBalances } from \"./useHoneyBalances\";\nimport type { IHoneySwapState } from \"./useHoneySwapState\";\nimport { useHoneyVaultsBalance } from \"./useHoneyVaultsBalance\";\nimport { useIsBadCollateralAsset } from \"./useIsBadCollateralAsset\";\n\n/**\n * Interface defining the state props that we need without the entire IHoneySwapState\n */\ntype HoneyAlertStateProps = Pick<\n IHoneySwapState,\n | \"actionType\"\n | \"fromAmount\"\n | \"toAmount\"\n | \"collaterals\"\n | \"isBasketModeEnabled\"\n>;\n\n/**\n * Interface defining the alert states returned by the useHoneyAlerts hook\n */\ninterface HoneyAlertsReturn {\n /** Indicates if the vault's liquidity is completely depleted (balance <= 1) */\n isLiquidityDepleted: boolean;\n isLiquidityDepletedCollaterals: Token[] | undefined;\n /** Indicates if the requested redeem amount exceeds available liquidity in the vault*/\n isRedeemMoreThanLiquidity: boolean;\n isRedeemMoreThanLiquidityCollaterals: Token[] | undefined;\n /** Indicates if the vault's liquidity is low (balance <= 1000) */\n isLowLiquidity: boolean;\n isLiquidityLowCollaterals: Token[] | undefined;\n /** Indicates if the selected collateral is flagged as bad (blacklisted or depegged) */\n isDepegged: boolean;\n /** Indicates if the selected collateral is blacklisted */\n isBlacklisted: boolean;\n /** Indicates if the input amount exceeds the global cap limit */\n isCappedGlobally: boolean | undefined;\n /** Indicates if the input amount exceeds the relative cap limit */\n isCappedRelatively: boolean | undefined;\n /** Indicates if the input amount exceeds the balance of the user */\n isExceedingBalance: boolean;\n}\n\n/**\n * Checks if the vault's liquidity is below a specified threshold\n * @param {Object} params - The parameters object\n * @param {number} params.lowerThan - The threshold value to compare against\n * @param {GetHoneyVaultsBalanceResponse[] | undefined} params.vaultsBalances - The current balance of the vaults\n * @param {HoneyAlertStateProps} params.state - The current state of the Honey swap operation\n * @returns {Object} Object containing the result of the check and the collaterals that are below the threshold\n * @returns {boolean} isLow - True if liquidity is below the threshold, false otherwise\n * @returns {Token[]} isLiquidityLowCollaterals - The collaterals that are below the threshold\n */\nfunction getIsLiquidityLowerThan({\n lowerThan,\n vaultsBalances,\n state,\n collateralList,\n}: {\n lowerThan: number;\n state: HoneyAlertStateProps;\n vaultsBalances: GetHoneyVaultsBalanceResponse[] | undefined;\n collateralList: TokenWithOrder[];\n}): { isLow: boolean; isLiquidityLowCollaterals: Token[] } {\n const isMint = state.actionType === \"mint\";\n if (!isMint && !state.isBasketModeEnabled) {\n const redeemedVaultBalance = vaultsBalances?.find(\n (vault) =>\n vault.address.toLowerCase() ===\n state.collaterals[0].address.toLowerCase(),\n );\n const isLow = new BigNumber(\n redeemedVaultBalance?.balance.formatted ?? \"0\",\n ).lte(lowerThan);\n // Get what collaterals are below the threshold to suggest others to the user\n const isLiquidityLowCollaterals = collateralList.filter((coll) => {\n const vaultBalance = vaultsBalances?.find(\n (vault) => vault.address.toLowerCase() === coll.address.toLowerCase(),\n );\n return new BigNumber(vaultBalance?.balance.formatted ?? \"0\").lte(\n lowerThan,\n );\n });\n return {\n isLow,\n isLiquidityLowCollaterals,\n };\n }\n return {\n isLow: false,\n isLiquidityLowCollaterals: [],\n };\n}\n\n/**\n * Checks if the requested redeem amount exceeds the available liquidity in the vault\n * @param {Object} params - The parameters object\n * @param {Record<`0x${string}`, BalanceToken> | undefined} params.honeyBalances - The current honey balances\n * @param {GetHoneyVaultsBalanceResponse | undefined} params.redeemedVaultBalance - The current vault balance\n * @param {HoneyAlertStateProps} params.state - The current state of the Honey swap operation\n * @returns {Object} Object containing the result of the check and the collaterals that exceed the liquidity\n * @returns {boolean} isMore - True if redeem amount exceeds liquidity, false otherwise\n * @returns {Token[]} isRedeemMoreThanLiquidityCollaterals - The collaterals that exceed the liquidity\n */\nfunction getRedeemMoreThanLiquidity({\n vaultsBalances,\n redeemedVaultBalance,\n state,\n collateralList,\n}: {\n vaultsBalances: GetHoneyVaultsBalanceResponse[] | undefined;\n redeemedVaultBalance: GetHoneyVaultsBalanceResponse | undefined;\n collateralList: TokenWithOrder[];\n state: HoneyAlertStateProps;\n}) {\n const isMint = state.actionType === \"mint\";\n if (!isMint && vaultsBalances && redeemedVaultBalance) {\n // if basket mode is enabled, check all collateral balances and amount to redeem\n const isRedeemMoreThanLiquidityCollaterals = collateralList.filter(\n (coll) => {\n const vaultBalance = vaultsBalances.find(\n (vault) => vault.address.toLowerCase() === coll.address.toLowerCase(),\n );\n const amountToRedeem = state.toAmount[state.collaterals.indexOf(coll)];\n return new BigNumber(vaultBalance?.balance.formatted ?? \"0\").lt(\n amountToRedeem ?? \"0\",\n );\n },\n );\n return {\n isMore: !!isRedeemMoreThanLiquidityCollaterals.find((coll) =>\n isToken(coll, state.collaterals[0]),\n ),\n isRedeemMoreThanLiquidityCollaterals,\n };\n }\n return { isMore: false, isRedeemMoreThanLiquidityCollaterals: undefined };\n}\n\n/**\n * Checks if the input amount exceeds the user's balance\n * @param {Object} params - The parameters object\n * @param {HoneyAlertStateProps} params.state - The current state of the Honey swap operation\n * @param {Record<`0x${string}`, BalanceToken> | undefined} params.honeyBalances - The current honey balances\n * @returns {boolean} True if input amount exceeds balance, false otherwise\n */\nfunction getExceedingBalance({\n state,\n honeyBalances,\n ...args\n}: BeraJS.BaseFunctionArgs & {\n state: HoneyAlertStateProps;\n honeyBalances: Record<`0x${string}`, BalanceToken> | undefined;\n}): boolean {\n const { config } = parseBaseArgs(args);\n const isMint = state.actionType === \"mint\";\n if (!isMint && honeyBalances) {\n return new BigNumber(state.fromAmount[0]).gt(\n honeyBalances[config.honey.token]?.balance.formatted ?? \"0\",\n );\n }\n if (\n isMint &&\n honeyBalances &&\n state.isBasketModeEnabled !== undefined &&\n state.collaterals.length > 0\n ) {\n if (!state.isBasketModeEnabled) {\n return new BigNumber(\n honeyBalances[state.collaterals[0].address]?.balance.formatted,\n ).lt(state.fromAmount[0]);\n }\n return state.collaterals.some((coll, idx) => {\n const amount = state.fromAmount[idx];\n return new BigNumber(honeyBalances[coll.address]?.balance.formatted).lt(\n amount,\n );\n });\n }\n return false;\n}\n\n/**\n * Hook that monitors various alert conditions for Honey swap operations\n *\n * This hook tracks multiple states that could affect swap operations:\n * - Liquidity levels in vaults (depleted, low)\n * - Collateral quality (blacklisted, depegged)\n * - Cap limits for transactions (global, relative)\n * - Balance checks\n *\n * @param {Object} params - The parameters object\n * @param {HoneyAlertStateProps} params.state - The current state of the Honey swap operation\n * @returns {HoneyAlertsReturn} Object containing various alert states\n\n */\nexport function useHoneyAlerts({\n actionType,\n collaterals,\n fromAmount,\n toAmount,\n isBasketModeEnabled,\n}: HoneyAlertStateProps): HoneyAlertsReturn {\n const state = {\n actionType,\n collaterals,\n fromAmount,\n toAmount,\n isBasketModeEnabled,\n };\n const isMint = actionType === \"mint\";\n\n // ===== BAD COLLATERAL =====\n // Check if selected collaterals are flagged as bad (blacklisted or depegged)\n const { data } = useIsBadCollateralAsset({\n collateral: collaterals[0],\n });\n const { collateralList } = useHoneyConfig();\n const { isBlacklisted, isDepegged } = data ?? {\n isBlacklisted: false,\n isDepegged: false,\n };\n\n // ===== CAP LIMITS =====\n // Check if the input amount exceeds the cap limit\n const { data: isCappedGlobally } = useCappedGlobally({\n asset: collaterals[0],\n amount: isMint ? fromAmount[0] : toAmount[0],\n isMint,\n isBasketModeEnabled,\n });\n const { data: isCappedRelatively } = useCappedRelatively({\n asset: collaterals[0]?.address,\n amount: isMint ? fromAmount[0] : toAmount[0],\n isMint,\n isBasketModeEnabled,\n });\n\n // ===== BALANCES =====\n const { data: honeyBalances } = useHoneyBalances();\n const { data: vaultsBalances } = useHoneyVaultsBalance();\n\n const redeemedCollateral = collaterals[0]?.address;\n const redeemedVaultBalance = vaultsBalances?.find(\n (vault) => vault.address.toLowerCase() === redeemedCollateral.toLowerCase(),\n );\n\n // ===== LIQUIDITY ALERTS =====\n const [isLiquidityDepleted, isLowLiquidity] = useMemo(() => {\n const isDepleted = getIsLiquidityLowerThan({\n lowerThan: 1,\n vaultsBalances,\n state,\n collateralList,\n });\n const isLow = getIsLiquidityLowerThan({\n lowerThan: 1000,\n vaultsBalances,\n state,\n collateralList,\n });\n return [isDepleted, isLow];\n }, [vaultsBalances, state]);\n\n const {\n isMore: isRedeemMoreThanLiquidity,\n isRedeemMoreThanLiquidityCollaterals,\n } = useMemo(() => {\n return getRedeemMoreThanLiquidity({\n vaultsBalances,\n redeemedVaultBalance,\n state,\n collateralList,\n });\n }, [vaultsBalances, redeemedVaultBalance, state, collateralList]);\n\n // ===== EXCEEDING BALANCE ALERTS =====\n const isExceedingBalance = useMemo(\n () =>\n getExceedingBalance({\n state,\n honeyBalances,\n }),\n [state, honeyBalances],\n );\n\n return {\n isLiquidityDepleted: isLiquidityDepleted.isLow,\n isLiquidityDepletedCollaterals:\n isLiquidityDepleted.isLiquidityLowCollaterals,\n isRedeemMoreThanLiquidity,\n isRedeemMoreThanLiquidityCollaterals,\n isLowLiquidity: isLowLiquidity.isLow,\n isLiquidityLowCollaterals: isLowLiquidity.isLiquidityLowCollaterals,\n isBlacklisted: state.isBasketModeEnabled ? false : isBlacklisted,\n isDepegged: state.isBasketModeEnabled ? false : isDepegged,\n isCappedGlobally,\n isCappedRelatively,\n isExceedingBalance,\n };\n}\n","import type { Address } from \"viem\";\n\nimport {\n useBeraWallet,\n useConfig,\n usePublicClient,\n} from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getWalletBalances } from \"../../actions/tokens/getWalletBalances\";\nimport { useHoneyConfig } from \"../../contexts/HoneyConfigProvider\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { BalanceToken } from \"../../types/dex\";\nimport type { DefaultHookReturnType } from \"../../types/global\";\nimport { getHoneyToken } from \"../../utils/tokens\";\n\n/**\n * Hook that fetches and maintains balances for HONEY token and collateral tokens\n *\n * This hook:\n * - Fetches balances for all collateral tokens and the HONEY token\n * - Updates balances at regular intervals (10s)\n * - Returns a map of token addresses to their respective balances\n * - Provides a refresh function to manually trigger balance updates\n *\n * The hook requires:\n * - A connected wallet account\n * - A public client\n * - BeraJS configuration\n * - A list of collateral tokens\n *\n * @returns {DefaultHookReturnType<Record<Address, BalanceToken>>} Object containing:\n * - data: Map of token addresses to their balances\n * - error: Any error that occurred during fetching\n * - isLoading: Loading state\n * - refresh: Function to manually refresh balances\n */\nexport function useHoneyBalances(): DefaultHookReturnType<\n Record<Address, BalanceToken>\n> {\n const publicClient = usePublicClient();\n const { address: account } = useBeraWallet();\n const { collateralList } = useHoneyConfig(); // needed\n const wagmiConfig = useConfig();\n const QUERY_KEY =\n account && collateralList && publicClient\n ? ([\"useHoneyBalances\", account, collateralList] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([_, account, collateralList]) => {\n assertPublicClient(publicClient);\n\n const tokenList = [...(collateralList ?? []), getHoneyToken({})];\n\n const tokenBalances = await getWalletBalances({\n account,\n tokenList,\n wagmiConfig,\n });\n\n const balancesMap = tokenBalances?.reduce(\n (acc, balance) => {\n acc[balance.address] = balance;\n return acc;\n },\n {} as Record<Address, BalanceToken>,\n );\n\n return balancesMap;\n },\n {\n refreshInterval: POLLING.FAST,\n },\n );\n}\n","import { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport {\n type GetHoneyVaultsBalanceResponse,\n getHoneyVaultsBalance,\n} from \"../../actions/honey/getHoneyVaultsBalance\";\nimport { useHoneyConfig } from \"../../contexts/HoneyConfigProvider\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport function useHoneyVaultsBalance(\n options?: DefaultHookOptions,\n): DefaultHookReturnType<GetHoneyVaultsBalanceResponse[]> {\n const publicClient = usePublicClient();\n const { collateralList } = useHoneyConfig();\n const QUERY_KEY =\n collateralList && publicClient\n ? ([\"useHoneyVaultsBalance\", collateralList] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([_, collateralList]) => {\n assertPublicClient(publicClient);\n\n return await getHoneyVaultsBalance({\n client: publicClient,\n collateralList,\n });\n },\n { ...options, refreshInterval: POLLING.NORMAL },\n );\n}\n","import { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport {\n type IsBadCollateralResponse,\n isBadCollateralAsset,\n} from \"../../actions/honey/isBadCollateralAsset\";\nimport { useHoneyConfig } from \"../../contexts/HoneyConfigProvider\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { Token } from \"../../types/dex\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { usePythLatestPrices } from \"./usePythLatestPrices\";\n\nexport interface UseIsBadCollateralResponse\n extends DefaultHookReturnType<IsBadCollateralResponse | undefined> {}\n\nexport function useIsBadCollateralAsset(\n { collateral }: { collateral: Token | undefined },\n options?: DefaultHookOptions,\n): UseIsBadCollateralResponse {\n const publicClient = usePublicClient();\n const { priceFeedMap, flags } = useHoneyConfig();\n const { data: latestPrices } = usePythLatestPrices(\n {\n priceFeedMap: collateral?.address\n ? {\n [collateral.address]: priceFeedMap[collateral.address],\n }\n : undefined,\n },\n {\n isEnabled: flags.isPythWrapperEnabled && !!collateral?.address,\n },\n );\n const QUERY_KEY =\n publicClient &&\n collateral &&\n ((flags.isPythWrapperEnabled && !!latestPrices?.prices.length) ||\n !flags.isPythWrapperEnabled)\n ? ([\n \"useIsBadCollateralAsset\",\n collateral,\n latestPrices,\n flags.isPythWrapperEnabled,\n ] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([_, collateral, latestPrices, isPythWrapperEnabled]) => {\n assertPublicClient(publicClient);\n\n return await isBadCollateralAsset({\n client: publicClient,\n collateral,\n latestPrices,\n isPythWrapperEnabled,\n });\n },\n {\n ...options,\n refreshInterval: options?.refreshInterval ?? POLLING.NORMAL,\n },\n );\n}\n","import { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getChartData } from \"../../actions/honey/getChartData\";\n\nexport function useHoneyChartData({ days }: { days: number }) {\n return useSWR([\"useHoneyChartData\", days] as const, async ([_, days]) => {\n return await getChartData({ days });\n });\n}\n","import { useEffect, useReducer } from \"react\";\nimport { formatUnits } from \"viem\";\n\nimport { defaultChainId } from \"@berachain/config/internal\";\n\nimport {\n type TokenWithOrder,\n useHoneyConfig,\n} from \"../../contexts/HoneyConfigProvider\";\nimport { HoneySwapAction } from \"../../enum/honey\";\nimport type { HoneySwapActions } from \"../../types/honeySwap\";\nimport { isToken } from \"../../utils/tokens\";\nimport { useIsBasketModeEnabled } from \"./useIsBasketModeEnabled\";\n\nexport interface IHoneySwapState {\n actionType: \"mint\" | \"redeem\";\n /**\n * List of current collaterals\n */\n collaterals: TokenWithOrder[];\n fromAmount: string[];\n toAmount: string[];\n isBasketModeEnabled: boolean | undefined;\n isTyping: boolean;\n isSubmitting: boolean;\n isLoading: boolean;\n}\n\nconst defaultState: IHoneySwapState = {\n actionType: \"mint\",\n collaterals: [],\n fromAmount: [],\n toAmount: [],\n isBasketModeEnabled: false,\n isTyping: false,\n isSubmitting: false,\n isLoading: false,\n};\n\nexport function reducer(\n state: IHoneySwapState,\n action: HoneySwapActions,\n): IHoneySwapState {\n switch (action.type) {\n case HoneySwapAction.RESET_AMOUNTS:\n return {\n ...state,\n fromAmount: [],\n toAmount: [],\n };\n case HoneySwapAction.ACTION_TYPE_CHANGE:\n // updates the action type and resets the amounts\n return reducer(\n {\n ...state,\n actionType: action.value,\n },\n { type: HoneySwapAction.RESET_AMOUNTS },\n );\n case HoneySwapAction.COLLATERALS_CHANGE:\n return {\n ...state,\n collaterals: action.value,\n fromAmount: [],\n toAmount: [],\n };\n case HoneySwapAction.FROM_AMOUNT_CHANGE: {\n const newFromAmount = state.fromAmount;\n newFromAmount[action.index] = action.value;\n return {\n ...state,\n fromAmount: newFromAmount,\n };\n }\n case HoneySwapAction.TO_AMOUNT_CHANGE: {\n const newToAmount = state.toAmount;\n newToAmount[action.index] = action.value;\n return {\n ...state,\n toAmount: newToAmount,\n };\n }\n case HoneySwapAction.PREVIEW_CHANGE: {\n const preview = action.value;\n const isMint = state.actionType === \"mint\";\n /**\n * Changed asset ---\n * Do not change the amount of the asset used for the preview\n * There currently is an issue in the contracts where the preview is returning\n * a different value if is made from the collaterals rather than honey, only in redeem mode\n * */\n\n // if the token is the one changed do not replace it with the preview value,\n // if its mint then use fromAmount or toAmount accordingly,\n // if the preview value is \"0\" then replace it with \"\" (empty string)\n const collateralsAmount = state.collaterals.map((coll, idx) => {\n // The index in toAmount & fromAmount is based on the contract ordered collateral addresses\n // const idx = coll.order;\n if (action.changedAsset === coll.address) {\n if (isMint) {\n return state.fromAmount[idx];\n }\n return state.toAmount[idx];\n }\n if (preview.collaterals[coll.address]) {\n return formatUnits(preview.collaterals[coll.address], coll.decimals);\n }\n return state.isBasketModeEnabled ? \"0\" : \"\";\n });\n\n const honey = isToken(action.changedAsset, \"HONEY\", {\n chainId: defaultChainId,\n })\n ? isMint\n ? state.toAmount[0]\n : state.fromAmount[0]\n : !preview.honey\n ? state.isBasketModeEnabled\n ? \"0\"\n : \"\"\n : formatUnits(preview.honey, 18);\n\n return {\n ...state,\n fromAmount: isMint ? collateralsAmount : [honey],\n toAmount: isMint ? [honey] : collateralsAmount,\n };\n }\n case HoneySwapAction.IS_BASKET_MODE_ENABLED_CHANGE:\n return {\n ...state,\n isBasketModeEnabled: action.value,\n fromAmount: [],\n toAmount: [],\n };\n case HoneySwapAction.IS_TYPING_CHANGE:\n return {\n ...state,\n isTyping: action.value,\n };\n case HoneySwapAction.IS_SUBMITTING_CHANGE:\n return {\n ...state,\n isSubmitting: action.value,\n };\n case HoneySwapAction.IS_LOADING_CHANGE:\n return {\n ...state,\n isLoading: action.value,\n };\n default:\n throw new Error(`Unknown action type: ${action}`);\n }\n}\n\nexport function useHoneySwapState() {\n const { collateralList } = useHoneyConfig();\n const [state, dispatch] = useReducer(\n reducer,\n defaultState,\n (initialState) => {\n const collaterals = collateralList;\n return {\n ...initialState,\n collaterals,\n } satisfies IHoneySwapState;\n },\n );\n\n const { data: isBasketModeEnabled } = useIsBasketModeEnabled({\n state,\n });\n\n /**\n * This is for timed updates\n * Ex: BasketMode check\n * */\n useEffect(() => {\n // UPDATE FOR BASKET MODE CHANGE\n if (\n isBasketModeEnabled !== undefined &&\n state.isBasketModeEnabled !== isBasketModeEnabled\n ) {\n // start loading\n dispatch({\n type: HoneySwapAction.IS_LOADING_CHANGE,\n value: true,\n });\n\n dispatch({\n type: HoneySwapAction.IS_BASKET_MODE_ENABLED_CHANGE,\n value: isBasketModeEnabled,\n });\n\n dispatch({\n type: HoneySwapAction.IS_LOADING_CHANGE,\n value: false,\n });\n }\n }, [isBasketModeEnabled]);\n\n return { state, dispatch };\n}\n","import { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { isBasketModeEnabled } from \"../../actions/honey/isBasketModeEnabled\";\nimport { useHoneyConfig } from \"../../contexts/HoneyConfigProvider\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport type { IHoneySwapState } from \"./useHoneySwapState\";\nimport { usePythLatestPrices } from \"./usePythLatestPrices\";\n\nexport function useIsBasketModeEnabled(\n { state }: { state: IHoneySwapState },\n options?: DefaultHookOptions,\n): DefaultHookReturnType<boolean | undefined> {\n const publicClient = usePublicClient();\n const { priceFeedMap, flags, collateralList } = useHoneyConfig();\n const { data: latestPrices } = usePythLatestPrices(\n {\n priceFeedMap,\n },\n {\n isEnabled: flags.isPythWrapperEnabled && !!collateralList.length,\n },\n );\n const isMint = state.actionType === \"mint\";\n const QUERY_KEY =\n publicClient &&\n state &&\n collateralList.length > 0 &&\n ((flags.isPythWrapperEnabled && !!latestPrices?.prices.length) ||\n !flags.isPythWrapperEnabled)\n ? ([\n \"useIsBasketModeEnabled\",\n isMint,\n latestPrices,\n flags.isPythWrapperEnabled,\n collateralList,\n ] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([_, isMint, latestPrices, isPythWrapperEnabled, collateralList]) => {\n assertPublicClient(publicClient);\n\n const isActive = await isBasketModeEnabled({\n client: publicClient,\n isMint,\n collateralList,\n latestPrices,\n isPythWrapperEnabled,\n });\n\n return isActive;\n },\n {\n ...options,\n refreshInterval: options?.refreshInterval ?? POLLING.FAST,\n },\n );\n}\n","import type { Address } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { getPythUpdateFee } from \"../../actions/pyth/getUpdateFee\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { getPythDefaultUpdateFee } from \"../../utils/pythHoneyUtils\";\n\nexport function usePythUpdateFee(\n {\n pythPriceFeedCalldata,\n tokenListLength,\n }: {\n pythPriceFeedCalldata: Address[] | undefined;\n tokenListLength: number;\n },\n options?: DefaultHookOptions,\n) {\n const publicClient = usePublicClient();\n const QUERY_KEY =\n pythPriceFeedCalldata && pythPriceFeedCalldata.length > 0\n ? ([\"usePythUpdateFee\", pythPriceFeedCalldata] as const)\n : null;\n const { data = getPythDefaultUpdateFee(tokenListLength), isLoading } =\n useSWRImmutable(\n QUERY_KEY,\n async ([_, pythPriceFeedCalldata]) => {\n assertPublicClient(publicClient);\n\n return getPythUpdateFee({\n client: publicClient,\n priceFeedId: pythPriceFeedCalldata,\n });\n },\n options,\n );\n\n return {\n QUERY_KEY,\n data,\n isLoading,\n };\n}\n","import { useBeraWallet } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getAutoclaimedIncentives } from \"../../actions/pol/getAutoclaimedIncentives\";\nimport type { AutoclaimedIncentivesResponse } from \"../../types/bribeBoost\";\nimport type { DefaultHookReturnType } from \"../../types/global\";\n\ninterface UseAutoclaimedIncentivesArgs {\n // Hard gate: when false the SWR key is null, so the API is never called.\n // The banner consumer flips this to true only after both `!isBgtPolRewardToken`\n // and `bgtIncentiveDistributor.paused() === true` have been verified.\n enabled: boolean;\n}\n\nexport function useAutoclaimedIncentives({\n enabled,\n}: UseAutoclaimedIncentivesArgs): DefaultHookReturnType<AutoclaimedIncentivesResponse | null> {\n const { address: account } = useBeraWallet();\n\n const QUERY_KEY =\n enabled && account\n ? ([\"useAutoclaimedIncentives\", account] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, account]) => getAutoclaimedIncentives({ account }),\n {\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n },\n );\n}\n","import { useBeraWallet } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getAutoclaimedIncentivesTxHash } from \"../../actions/pol/getAutoclaimedIncentivesTxHash\";\nimport { POLLING } from \"../../enum/polling\";\nimport type { AutoclaimedIncentivesTxHashResponse } from \"../../types/bribeBoost\";\nimport type { DefaultHookReturnType } from \"../../types/global\";\n\ninterface UseAutoclaimedIncentivesTxHashArgs {\n // Hard gate, identical to `useAutoclaimedIncentives` — only flip true once\n // both `!isBgtPolRewardToken` and `bgtIncentiveDistributor.paused()` hold.\n enabled: boolean;\n}\n\nexport function useAutoclaimedIncentivesTxHash({\n enabled,\n}: UseAutoclaimedIncentivesTxHashArgs): DefaultHookReturnType<AutoclaimedIncentivesTxHashResponse | null> {\n const { address: account } = useBeraWallet();\n\n const QUERY_KEY =\n enabled && account\n ? ([\"useAutoclaimedIncentivesTxHash\", account] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, account]) => getAutoclaimedIncentivesTxHash({ account }),\n {\n // txhashes flip from absent → present as the bot processes each token,\n // so we need to actually poll. Cadence matches the bot's tx cadence\n // (minutes, not seconds) and lets the user watch pending → claimed\n // transitions without reloading the page.\n refreshInterval: POLLING.NORMAL,\n revalidateOnFocus: true,\n revalidateOnReconnect: true,\n revalidateIfStale: false,\n },\n );\n}\n","import { useMemo } from \"react\";\n\nimport {\n type GetBgtAprSimulationArgs,\n type GetBgtAprSimulationResult,\n getBgtAprSimulation,\n} from \"../../actions/pol/getBgtAprSimulation\";\n\nexport function useBgtAprSimulation(args: GetBgtAprSimulationArgs | undefined):\n | GetBgtAprSimulationResult\n /**\n * Returns undefined if still loading\n */\n | undefined {\n return useMemo(() => {\n if (!args) {\n return undefined;\n }\n\n return getBgtAprSimulation(args);\n }, [args]);\n}\n","import { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport useSWR from \"@berachain/utils/pkg/swr\";\n\nimport { getBgtIncentiveDistributorPaused } from \"../../actions/pol/getBgtIncentiveDistributorPaused\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\n/**\n * Client hook around `getBgtIncentiveDistributorPaused`. When `paused()` is\n * true, users can no longer self-claim incentives and the bot distributes them\n * on their behalf. Fails closed (`false`) so a read error never blocks the UI.\n */\nexport function useBgtIncentiveDistributorPaused(\n options?: DefaultHookOptions,\n): DefaultHookReturnType<boolean> {\n const publicClient = usePublicClient();\n\n const QUERY_KEY = publicClient\n ? ([\"useBgtIncentiveDistributorPaused\", publicClient.chain?.id] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async () =>\n getBgtIncentiveDistributorPaused({ publicClient }).catch(() => false),\n {\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n ...options,\n },\n );\n}\n","import { formatEther } from \"viem\";\n\nimport { bgtAbi } from \"@berachain/abis/pol/bgt\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\n\n// TODO: REFACTOR ON REDEPLOY\nexport function useBgtUnstakedBalance(\n options?: DefaultHookOptions,\n): DefaultHookReturnType<string | undefined> {\n const { address: account } = useBeraWallet();\n const publicClient = usePublicClient();\n const QUERY_KEY =\n account && publicClient\n ? ([\"useBgtUnstakedBalance\", account] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, account]) => {\n assertPublicClient(publicClient);\n\n const { config } = parseBaseArgs({\n chainId: publicClient.chain.id,\n });\n\n const bgtBalance = await publicClient.readContract({\n address: config.tokens.bgt,\n abi: bgtAbi,\n functionName: \"unboostedBalanceOf\",\n args: [account],\n });\n return formatEther(bgtBalance);\n },\n {\n ...options,\n refreshInterval: options?.refreshInterval ?? POLLING.NORMAL,\n },\n );\n}\n","import { formatUnits } from \"viem\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getRewardVaultEarnedRewards } from \"../../actions/pol/getRewardVaultEarnedRewards\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\n\nexport function useClaimableFees() {\n const { address: account } = useBeraWallet();\n const publicClient = usePublicClient();\n const QUERY_KEY =\n account && publicClient ? ([\"useClaimableFees\", account] as const) : null;\n return useSWR(\n QUERY_KEY,\n async ([, account]) => {\n assertPublicClient(publicClient);\n const { config } = parseBaseArgs({\n chainId: publicClient.chain.id,\n });\n const vaultReward = await getRewardVaultEarnedRewards({\n account,\n vaultAddress: config.pol.staker,\n publicClient,\n });\n return formatUnits(vaultReward, 18);\n },\n {\n refreshInterval: POLLING.SLOW * 2,\n },\n );\n}\n","import type { GqlRewardVaultDynamicData } from \"@berachain/graphql/dex/api\";\nimport {\n type GqlRewardVaultFilter,\n GqlRewardVaultOrderBy,\n GqlRewardVaultOrderDirection,\n} from \"@berachain/graphql/pol/api\";\n\nimport { useRewardVaults } from \"./useRewardVaults\";\n\n/**\n * Hook that fetches and returns the highest APR (Annual Percentage Rate) from reward vaults.\n *\n * @param {`0x${string}`[]} [params.filteringVaults=[]] - Optional array of vault addresses to filter by\n *\n * @returns {Object} An object containing:\n * - highestApr: The highest APR value from the reward vaults\n * - isLoading: Loading state\n *\n * @example\n * const { highestApr } = useHighestVaultsAPR({\n * filteringVaults: ['0x123...', '0x456...']\n * });\n */\nexport function useHighestVaultsAPR(\n where: GqlRewardVaultFilter = {},\n { isEnabled = true }: { isEnabled?: boolean } = {},\n): {\n highestApr: GqlRewardVaultDynamicData[\"apr\"] | undefined;\n isLoading: boolean;\n} {\n const swrResponse = useRewardVaults(\n {\n filter: {\n orderBy: GqlRewardVaultOrderBy.Apr,\n orderDirection: GqlRewardVaultOrderDirection.Desc,\n pageSize: 1,\n where,\n },\n },\n {\n refreshInterval: 0,\n revalidateOnFocus: false,\n refreshWhenOffline: false,\n isEnabled,\n },\n );\n\n return {\n isLoading: swrResponse.isLoading,\n highestApr: swrResponse.data?.rewardVaultList[0].dynamicData?.apr,\n };\n}\n","import type { GetVaultsQueryVariables } from \"@berachain/graphql/pol/api\";\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getRewardVaults } from \"../../actions/pol/getRewardVaults\";\nimport type { DefaultHookOptions } from \"../../types/global\";\n\nexport function useRewardVaultsQueryKey(\n filter?: GetVaultsQueryVariables,\n onChainIncentives = false,\n) {\n return [\"useRewardVaults\", filter, onChainIncentives] as const;\n}\n\nexport function useRewardVaults(\n args: {\n filter?: GetVaultsQueryVariables;\n onChainIncentives?: boolean;\n },\n options?: DefaultHookOptions,\n) {\n const QUERY_KEY = useRewardVaultsQueryKey(\n args.filter,\n args.onChainIncentives,\n );\n const publicClient = usePublicClient();\n return useSWR(\n QUERY_KEY,\n async ([, filter, onChainIncentives]) => {\n return await getRewardVaults({\n filter: filter,\n publicClient: onChainIncentives ? publicClient : undefined,\n });\n },\n options,\n );\n}\n","import { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport {\n type GlobalData,\n getGlobalData,\n} from \"../../actions/pol/getGlobalData\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport function usePollGlobalData(\n options?: DefaultHookOptions,\n): DefaultHookReturnType<GlobalData> {\n const publicClient = usePublicClient();\n\n return useSWR<GlobalData>(\n publicClient ? \"usePollGlobalData\" : null,\n async () => {\n assertPublicClient(publicClient);\n\n return getGlobalData(publicClient);\n },\n {\n revalidateOnFocus: false,\n ...options,\n },\n );\n}\n","import { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { type GetMarkets, getMarkets } from \"../../actions/pol/getMarkets\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport interface UsePollMarketsResponse\n extends DefaultHookReturnType<GetMarkets> {}\n\nexport function usePollMarketsQueryKey() {\n return \"usePollMarkets\";\n}\n\nexport function usePollMarkets(\n options?: DefaultHookOptions,\n): UsePollMarketsResponse {\n const QUERY_KEY = usePollMarketsQueryKey();\n return useSWRImmutable<GetMarkets, any, typeof QUERY_KEY>(\n QUERY_KEY,\n async () => {\n const res = await getMarkets();\n return res;\n },\n {\n ...options,\n },\n );\n}\n","import { type Address, isAddress } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport {\n getSWBeraWithdrawal,\n type StakedBeraWithdrawal,\n} from \"../../actions/pol/getSWBeraWithdrawal\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { DefaultHookOptions } from \"../../types/global\";\n\nexport function useQueuedBeraUnlock(\n {\n receiptTokenAddresses,\n account,\n version,\n }: {\n receiptTokenAddresses: Address[];\n account?: Address | string;\n version: \"V1\" | \"V2\";\n },\n options?: DefaultHookOptions,\n) {\n const publicClient = usePublicClient();\n\n const QUERY_KEY =\n receiptTokenAddresses &&\n account &&\n publicClient &&\n isAddress(account) &&\n version\n ? ([\n \"useQueuedBeraUnlock\",\n receiptTokenAddresses,\n account,\n version,\n ] as const)\n : null;\n\n return useSWRImmutable<StakedBeraWithdrawal[], any, typeof QUERY_KEY>(\n QUERY_KEY,\n async ([, receiptTokenAddresses, account, version]) => {\n assertPublicClient(publicClient);\n\n return await Promise.all(\n receiptTokenAddresses.map(async (receiptTokenAddress) => {\n return await getSWBeraWithdrawal({\n contractAddress: receiptTokenAddress,\n accountAddress: account,\n publicClient,\n version,\n });\n }),\n ).then((results) => results.flat());\n },\n {\n refreshInterval: POLLING.FAST,\n ...options,\n },\n );\n}\n","import type { Address } from \"viem\";\n\nimport { defaultChainId } from \"@berachain/config/internal\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getRewardTokenToBeraRate } from \"../../actions/pol/getRewardTokenToBeraRate\";\nimport { assertAddress, assertPublicClient } from \"../../errors/assert\";\nimport type { DefaultHookOptions } from \"../../types/global\";\n\nexport function useRewardTokenToBeraRate(\n {\n address,\n }: {\n address: Address | undefined;\n },\n opt?: DefaultHookOptions,\n) {\n const QUERY_KEY = address\n ? ([\"useRewardTokenToBeraRate\", address] as const)\n : null;\n const publicClient = usePublicClient({ chainId: defaultChainId });\n\n return useSWR(\n QUERY_KEY,\n async ([_, address]) => {\n assertAddress(address, \"address\");\n assertPublicClient(publicClient);\n\n return getRewardTokenToBeraRate({\n address: address as `0x${string}`,\n publicClient,\n });\n },\n {\n ...opt,\n },\n );\n}\n","import { type Address, erc20Abi, formatUnits, isAddress } from \"viem\";\n\nimport { beraChefAbi } from \"@berachain/abis/pol/rewards/beraChef\";\n\nimport type { ApiVaultFragment } from \"@berachain/graphql/pol/api\";\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getRewardVaultIncentives } from \"../../actions/pol/getRewardVaultIncentives\";\nimport { getRewardVaultStakingToken } from \"../../actions/pol/getRewardVaultStakingToken\";\nimport { getStakingTokenInformation } from \"../../actions/pol/getStakingTokenInformation\";\nimport { getTokenInformation } from \"../../actions/tokens/getTokenInformation\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\n\nfunction useOnChainRewardVaultQueryKey(address: Address | undefined) {\n return address && isAddress(address)\n ? ([\"onChainRewardVault\", address.toLowerCase() as Address] as const)\n : null;\n}\n\nexport function useOnChainRewardVault(\n {\n address,\n }: {\n address: Address | undefined;\n },\n opt: DefaultHookOptions,\n) {\n const publicClient = usePublicClient();\n\n const QUERY_KEY = useOnChainRewardVaultQueryKey(address);\n\n return useSWR<\n ApiVaultFragment,\n unknown,\n ReturnType<typeof useOnChainRewardVaultQueryKey>\n >(\n publicClient ? QUERY_KEY : null,\n async ([, address]) => {\n assertPublicClient(publicClient);\n const { config } = parseBaseArgs({\n chainId: publicClient.chain.id,\n });\n\n const stakingTokenAddress = await getRewardVaultStakingToken({\n address,\n publicClient: publicClient,\n });\n\n const [incentives, isWhitelisted, stakingTokenAmount] = await Promise.all(\n [\n getRewardVaultIncentives({\n address,\n stakingToken: stakingTokenAddress,\n publicClient,\n }),\n publicClient.readContract({\n address: config.pol.beraChef,\n abi: beraChefAbi,\n functionName: \"isWhitelistedVault\",\n args: [address],\n }),\n publicClient.readContract({\n address: stakingTokenAddress,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [address],\n }),\n ],\n );\n\n const [stakingToken, incentiveTokens] = await Promise.all([\n getStakingTokenInformation({\n address: stakingTokenAddress,\n publicClient: publicClient,\n }),\n Promise.all(\n incentives.map((add) =>\n getTokenInformation({\n address: add.token,\n chainId: publicClient.chain.id,\n publicClient: publicClient,\n }),\n ),\n ),\n ]);\n\n if (!stakingToken) {\n throw new Error(\"Staking token not found\");\n }\n\n return {\n id: address,\n address,\n vaultAddress: address,\n stakingToken: {\n address: stakingTokenAddress,\n name: stakingToken.name ?? \"\",\n symbol: stakingToken.symbol ?? \"\",\n decimals: stakingToken.decimals ?? 0,\n },\n stakingTokenAmount: formatUnits(\n stakingTokenAmount,\n stakingToken.decimals ?? 18,\n ),\n isVaultWhitelisted: isWhitelisted,\n activeIncentives: incentives.map((incentive, idx) => ({\n active: !!incentive.remainingAmount,\n remainingAmount: incentive.remainingAmount,\n remainingAmountUsd: \"0\",\n incentiveRate: incentive.incentiveRate,\n incentiveRateUsd: \"0\",\n tokenAddress: incentive.token,\n token: incentiveTokens[idx]!,\n })),\n } satisfies ApiVaultFragment;\n },\n opt,\n );\n}\n","import { type Address, erc20Abi, formatUnits, type PublicClient } from \"viem\";\n\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { Token } from \"../../types/dex\";\n\nexport interface GetStakingTokenInformation {\n address: Address;\n publicClient: PublicClient | undefined;\n}\n\nexport type GetStakingTokenInformationResponse = Partial<Token> | undefined;\n\nexport async function getStakingTokenInformation({\n address,\n publicClient,\n}: GetStakingTokenInformation): Promise<GetStakingTokenInformationResponse> {\n assertPublicClient(publicClient);\n\n const [decimals, name, symbol, totalSupply] = await publicClient.multicall({\n contracts: [\n {\n address,\n abi: erc20Abi,\n functionName: \"decimals\",\n },\n {\n address: address,\n abi: erc20Abi,\n functionName: \"name\",\n },\n {\n address: address,\n abi: erc20Abi,\n functionName: \"symbol\",\n },\n {\n address: address,\n abi: erc20Abi,\n functionName: \"totalSupply\",\n },\n ],\n allowFailure: true,\n });\n\n const token = {\n address: address,\n decimals: decimals.result,\n name: name.result,\n symbol: symbol.result,\n totalSupply:\n totalSupply.result !== undefined\n ? decimals.status === \"success\"\n ? formatUnits(totalSupply.result, decimals.result)\n : totalSupply.result.toString()\n : undefined,\n };\n\n return token;\n}\n","import type { Address } from \"viem\";\n\nimport type { ApiVaultFragment } from \"@berachain/graphql/pol/api\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getRewardVault } from \"../../actions/pol/getRewardVault\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { useOnChainRewardVault } from \"./useOnChainRewardVault\";\n\nexport interface UseRewardVaultResponse\n extends DefaultHookReturnType<ApiVaultFragment> {}\n\nexport function useRewardVaultQueryKey(address: Address | undefined) {\n return address\n ? ([\"useRewardVault\", address.toLowerCase() as Address] as const)\n : null;\n}\n\nexport function useRewardVault(\n id: Address | undefined,\n options?: DefaultHookOptions,\n): UseRewardVaultResponse {\n const QUERY_KEY = useRewardVaultQueryKey(id);\n\n // The off-chain fetch is intentionally always enabled; `isEnabled` only gates\n // the on-chain fallback below, so it is stripped from this call's options.\n const { isEnabled: _isEnabled, ...swrOptions } = options ?? {};\n const swrResponse = useSWR(\n QUERY_KEY,\n async ([_, id]) => getRewardVault({ address: id }),\n swrOptions,\n );\n\n const isOnChainEnabled =\n options?.isEnabled ??\n ((!!swrResponse.error || !swrResponse.isLoading) && !swrResponse.data);\n\n const onChainRewardVault = useOnChainRewardVault(\n { address: id },\n { ...options, isEnabled: isOnChainEnabled },\n );\n\n return {\n data: onChainRewardVault.data ?? swrResponse.data,\n error: onChainRewardVault.error ?? swrResponse.error,\n isLoading: onChainRewardVault.isLoading || swrResponse.isLoading,\n isValidating: onChainRewardVault.isValidating ?? swrResponse.isValidating,\n refresh: () => {\n swrResponse.refresh();\n onChainRewardVault.refresh();\n },\n };\n}\n","import type { Address } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getRewardVaultIncentives } from \"../../actions/pol/getRewardVaultIncentives\";\nimport { assertPublicClient } from \"../../errors/assert\";\n\nexport function useRewardVaultIncentives({\n address,\n stakingToken,\n}: {\n address: Address | undefined;\n stakingToken: Address | undefined;\n}) {\n const publicClient = usePublicClient();\n\n const QUERY_KEY =\n publicClient && address && stakingToken\n ? ([\"useRewardVaultIncentives\", address, stakingToken] as const)\n : null;\n\n return useSWR(QUERY_KEY, async ([, address, stakingToken]) => {\n assertPublicClient(publicClient);\n\n return await getRewardVaultIncentives({\n address,\n stakingToken,\n publicClient,\n });\n });\n}\n","import type { Address } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getRewardVaultRewards } from \"../../actions/pol/getRewardVaultRewards\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { DefaultHookOptions } from \"../../types/global\";\n\nexport function useRewardVaultRewards(\n address: Address,\n options?: DefaultHookOptions,\n) {\n const publicClient = usePublicClient();\n\n const QUERY_KEY =\n publicClient && address\n ? ([\"useRewardVaultRewards\", address] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, address]) => {\n assertPublicClient(publicClient);\n\n return await getRewardVaultRewards(address, publicClient);\n },\n {\n ...options,\n },\n );\n}\n","/**\n * Filters data to get one data point per day\n * @param data - The data to filter\n * @returns The filtered data\n */\nexport function dailyResolution<\n T extends { timestamp?: number; _timestamp?: number },\n>(data: T[]): T[] {\n // Filter to get one data point per day\n const dailyData: T[] = [];\n let lastDay = \"\";\n\n for (const item of data) {\n if (!item.timestamp && !item._timestamp) continue;\n // Convert Unix timestamp (seconds) to milliseconds for Date constructor\n const timestampMs = (item?.timestamp ?? item?._timestamp ?? 0) * 1000;\n const currentDay = new Date(timestampMs);\n const currentDayStr = currentDay.toDateString();\n if (currentDayStr !== lastDay) {\n const newTimestamp =\n new Date(currentDay.setHours(0, 0, 0, 0)).getTime() / 1000;\n dailyData.push({\n ...item,\n timestamp: newTimestamp,\n _timestamp: newTimestamp,\n });\n lastDay = currentDayStr;\n }\n }\n\n return dailyData;\n}\n","import type { GqlVaultSnapshotDataRange } from \"@berachain/graphql/dex/api\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getStakedBeraSnapshots } from \"../../actions/pol/getStakedBeraSnapshots\";\nimport type { DefaultHookReturnType } from \"../../types/global\";\nimport { dailyResolution } from \"../../utils/filter\";\n\ntype UseStakedAPR = {\n timestamp: number;\n apr: string;\n}[];\nexport function useStakedAPR({\n range,\n}: {\n range: GqlVaultSnapshotDataRange;\n}): DefaultHookReturnType<UseStakedAPR> {\n const QUERY_KEY = range ? ([\"useStakedAPR\", range] as const) : null;\n return useSWR(QUERY_KEY, async ([, range]) => {\n const unsortedStakedBeraSnapshots = await getStakedBeraSnapshots({\n range,\n });\n\n const sortedStakedBeraSnapshots = dailyResolution(\n unsortedStakedBeraSnapshots.sort((a, b) => a.timestamp - b.timestamp),\n );\n\n return sortedStakedBeraSnapshots.map((item) => ({\n timestamp: item.timestamp,\n apr: item.apr,\n }));\n });\n}\n","import { useMemo } from \"react\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport BigNumber from \"@berachain/utils/pkg/bignumber.js\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getEarnedStakedBeraVault } from \"../../actions/pol/getEarnedStakedBeraVault\";\nimport { getRewardTokenToBeraRate } from \"../../actions/pol/getRewardTokenToBeraRate\";\nimport { getStakedBeraAPR } from \"../../actions/pol/getStakedBeraAPR\";\nimport { useBeraFlag } from \"../../contexts/BeraFlags/BeraFlags\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type { StakedBeraAsset } from \"../../types/pol\";\nimport type { StakingConfig } from \"../../types/staking\";\nimport { usePollWalletBalances } from \"../tokens/usePollWalletBalances\";\nimport { useTokenPrices } from \"../tokens/useTokenPrices\";\n\n/**\n * Fetches staked asset data in two phases for progressive loading:\n *\n * 1. APR — independent fetch, resolves quickly, shared by both phases.\n * 2. Balances (fast path) — wallet balances (via usePollWalletBalances),\n * token prices (via useTokenPrices), and exchange rates.\n * Provides staked amounts and USD values immediately (earnings are 0).\n * 3. Positions (slow path) — adds earnings data from the vault.\n * Provides the full picture with earned amounts and USD values.\n *\n * Consumers can show `balances` right away and swap in `data` once positions resolve.\n */\nexport function useStakedData(stakingConfigs: StakingConfig[]) {\n const window = useBeraFlag(\"swberaAprWindow\");\n\n const publicClient = usePublicClient();\n const { address: account } = useBeraWallet();\n\n const receiptTokens = useMemo(\n () => stakingConfigs.map((config) => config.receiptToken),\n [stakingConfigs],\n );\n const inputTokens = useMemo(\n () => stakingConfigs.map((config) => config.inputTokens[0]),\n [stakingConfigs],\n );\n\n // APR — only updates every ~12 hours on BE\n const aprKey = window ? ([\"useStakedData:apr\", window] as const) : null;\n const { data: apr } = useSWR(\n aprKey,\n async ([, window]) => getStakedBeraAPR({ window }),\n { refreshInterval: POLLING.NORMAL },\n );\n\n const {\n data: walletBalances,\n isLoading: isLoadingBalances,\n error: walletBalancesError,\n } = usePollWalletBalances({ tokens: receiptTokens });\n\n // NOT BERA PRICE, INPUT TOKEN PRICE.\n // A price-backend failure is handled gracefully (USD values become `undefined`\n // → rendered as \"—\"), so it deliberately does NOT feed the hard `error` state.\n const { getTokenPrice } = useTokenPrices({\n tokens: inputTokens,\n });\n\n // exchange rates from receipt token → input token (on-chain reads)\n const exchangeRatesKey =\n publicClient && receiptTokens.length > 0\n ? ([\"useStakedData:exchangeRates\", receiptTokens] as const)\n : null;\n\n const { data: exchangeRates, error: exchangeRatesError } = useSWR(\n exchangeRatesKey,\n async ([, receiptTokens]) => {\n assertPublicClient(publicClient);\n return Promise.all(\n receiptTokens.map((token) =>\n getRewardTokenToBeraRate({\n address: token.address,\n publicClient,\n }),\n ),\n );\n },\n { refreshInterval: POLLING.NORMAL },\n );\n\n // positions (slow path) — fetch earnings and exchange rates from the vault\n const positionsKey =\n account && publicClient && stakingConfigs.length > 0\n ? ([\"useStakedData:positions\", account, stakingConfigs] as const)\n : null;\n\n const {\n data: positionsRaw,\n error: positionsError,\n isLoading: isLoadingPositions,\n isValidating: isValidatingPositions,\n } = useSWR(\n positionsKey,\n async ([, account, stakingConfigs]) => {\n assertPublicClient(publicClient);\n\n return Promise.all(\n stakingConfigs.map(async (stakingConfig) => {\n const stakingToken = stakingConfig.receiptToken;\n\n const [earnings, exchangeRate] = await Promise.all([\n getEarnedStakedBeraVault({\n address: stakingToken.address,\n account,\n }),\n getRewardTokenToBeraRate({\n address: stakingToken.address,\n publicClient,\n }),\n ]);\n\n return { earnings, exchangeRate };\n }),\n );\n },\n { refreshInterval: POLLING.FAST },\n );\n\n // Earnings come from the backend (slow path). Once that request settles —\n // whether it resolved or errored — stop showing the \"loading earnings\"\n // skeleton on the fast path, so a backend outage degrades to \"—\" rather\n // than a spinner that never resolves.\n const earningsSettled = !!positionsRaw || !!positionsError;\n\n // balances (fast path) — derived from hooks above, no extra requests\n const balances = useMemo<StakedBeraAsset[] | undefined>(() => {\n if (!walletBalances || !exchangeRates) return undefined;\n\n return stakingConfigs.map((config, i): StakedBeraAsset => {\n const inputToken = config.inputTokens[0];\n const stakedBalance =\n walletBalances.find((b) => b.address === config.receiptToken.address)\n ?.balance.raw ?? \"0\";\n const exchangeRate = exchangeRates[i] ?? 0;\n // `undefined` (not 0) when the price backend is unavailable, so USD\n // values render as \"—\" instead of a misleading \"$0.00\".\n const inputTokenPrice = getTokenPrice(inputToken);\n\n const total = new BigNumber(stakedBalance).multipliedBy(exchangeRate);\n const stakedAmount = total.dividedBy(10 ** inputToken.decimals);\n const stakedAmountUsd =\n inputTokenPrice === undefined\n ? undefined\n : stakedAmount.multipliedBy(inputTokenPrice).toNumber();\n\n return {\n token: inputToken,\n apr,\n stakedAmount: stakedAmount.toNumber(),\n stakedAmountUsd,\n earnedAmount: 0,\n earnedAmountUsd: earningsSettled ? undefined : 0,\n isLoadingEarnings: !earningsSettled,\n };\n });\n }, [\n walletBalances,\n exchangeRates,\n stakingConfigs,\n apr,\n getTokenPrice,\n earningsSettled,\n ]);\n\n // derive full StakedBeraAsset[] from raw positions + shared hooks\n const data = useMemo<StakedBeraAsset[] | undefined>(() => {\n if (!positionsRaw || !walletBalances) return undefined;\n\n return stakingConfigs.map((config, i): StakedBeraAsset => {\n const inputToken = config.inputTokens[0];\n const stakingToken = config.receiptToken;\n const { earnings, exchangeRate: exchangeRateRaw } = positionsRaw[i];\n\n // `undefined` (not 0) when the price backend is unavailable, so USD\n // values render as \"—\" instead of a misleading \"$0.00\".\n const inputTokenPrice = getTokenPrice(inputToken);\n const stakedBalance =\n walletBalances.find((b) => b.address === stakingToken.address)?.balance\n .raw ?? \"0\";\n const exchangeRate = exchangeRateRaw ?? 0;\n\n const unrealisedGains = new BigNumber(earnings.earningsTotal).minus(\n earnings.earningsRealized,\n );\n const total = new BigNumber(stakedBalance).multipliedBy(exchangeRate);\n const deposited = total.minus(unrealisedGains);\n\n const stakedAmount = deposited.dividedBy(10 ** inputToken.decimals);\n const earnedAmount = unrealisedGains.dividedBy(10 ** inputToken.decimals);\n const stakedAmountUsd =\n inputTokenPrice === undefined\n ? undefined\n : stakedAmount.multipliedBy(inputTokenPrice).toNumber();\n const earnedAmountUsd =\n inputTokenPrice === undefined\n ? undefined\n : earnedAmount.multipliedBy(inputTokenPrice).toNumber();\n\n return {\n token: inputToken,\n apr,\n stakedAmount: stakedAmount.toNumber(),\n earnedAmount: earnedAmount.toNumber(),\n stakedAmountUsd,\n earnedAmountUsd,\n };\n });\n }, [positionsRaw, walletBalances, stakingConfigs, apr, getTokenPrice]);\n\n return {\n /** Fast path: staked amounts + USD values (no earnings) */\n balances,\n /** Slow path: full enriched positions with earnings */\n data,\n /** True only when both balances and positions are still loading */\n isLoading: isLoadingBalances && isLoadingPositions,\n isLoadingBalances,\n isLoadingPositions,\n isValidatingPositions,\n /**\n * Hard error: the RPC fast-path could not produce staked balances (wallet\n * balances or exchange-rate reads failed). Price and earnings backend\n * failures are intentionally excluded — those degrade gracefully (USD/APR\n * render as \"—\", earnings stop loading) so RPC-derived amounts still show.\n */\n error: walletBalancesError ?? exchangeRatesError,\n /** Set when the earnings (slow path) request failed. */\n positionsError,\n /**\n * True once the earnings (slow path) request has settled — resolved or\n * errored. Consumers should stop showing an earnings loading state once\n * this is true, even if `data` never arrives (backend outage).\n */\n earningsSettled,\n };\n}\n","import type { Address } from \"viem\";\n\nimport { fetchBeep } from \"../clients/fetchBeep\";\n\nexport async function getStakingDailyAssets({\n address,\n range,\n}: {\n address: Address;\n range: 30 | 60 | 90;\n}) {\n // beep backend (next-gen), typed against `@berachain/graphql/beep`.\n return fetchBeep(\"/v0/stake/{vault}/stats-by-day\", {\n path: { vault: address },\n query: { days: `${range}` },\n });\n}\n","import type { Address } from \"viem\";\n\nimport type { StakeStatsByDayResponse } from \"@berachain/graphql/beep\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getStakingDailyAssets } from \"../../actions/pol/getStakingDailyAssets\";\nimport type { DefaultHookReturnType } from \"../../types/global\";\nimport { dailyResolution } from \"../../utils/filter\";\n\ntype UseStakedBeraSnapshot = Record<Address, StakeStatsByDayResponse>;\nexport function useStakedSnapshots({\n range,\n addresses,\n}: {\n addresses: Address[];\n range: 30 | 60 | 90;\n}): DefaultHookReturnType<UseStakedBeraSnapshot> {\n const QUERY_KEY = range\n ? ([\"useStakedSnapshots\", range, addresses] as const)\n : null;\n return useSWR(QUERY_KEY, async ([, range, addresses]) => {\n const [...sortedStakingDailyAssetsArray] = await Promise.all([\n ...addresses.map(async (address) => {\n const unstakingDailyAssets = await getStakingDailyAssets({\n address,\n range,\n });\n const sortedStakingDailyAssets = dailyResolution(\n unstakingDailyAssets.sort((a, b) => a.timestamp - b.timestamp),\n );\n return {\n [address]: sortedStakingDailyAssets,\n };\n }),\n ]);\n\n // Merge all address data into a single object\n return sortedStakingDailyAssetsArray.reduce(\n (acc, addressData) => ({ ...acc, ...addressData }),\n {} as UseStakedBeraSnapshot,\n );\n });\n}\n","import type { Address } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getSWBeraVaultMetadata } from \"../../actions/pol/getSWBeraVaultMetadata\";\nimport { useBlockTime } from \"../../contexts/BlockTimeProvider\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\n\nexport type StakingVaultEntry = {\n address: Address;\n underlyingAsset: Address;\n};\n\nexport function useStakingVaultsMetadata(vaults: StakingVaultEntry[] = []) {\n const publicClient = usePublicClient();\n const blockTime = useBlockTime();\n const QUERY_KEY =\n vaults.length > 0 && publicClient && blockTime\n ? ([\"useStakingVaultMetadata\", vaults, publicClient, blockTime] as const)\n : null;\n return useSWR(\n QUERY_KEY,\n async ([, vaults, publicClient, blockTime]) => {\n assertPublicClient(publicClient);\n return Promise.all(\n vaults.map((vault) =>\n getSWBeraVaultMetadata({\n address: vault.address,\n underlyingAsset: vault.underlyingAsset,\n publicClient,\n blockTime,\n }),\n ),\n );\n },\n { refreshInterval: POLLING.FAST },\n );\n}\n","import type { Address } from \"@berachain/config\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getTotalStakedAmount } from \"../../actions/pol/getTotalStakedAmount\";\nimport type { DefaultHookReturnType } from \"../../types/global\";\n\nexport function useTotalStakedAmount({\n vaultAddresses,\n}: {\n vaultAddresses: Address[];\n}): DefaultHookReturnType<Record<Address, bigint>> {\n const publicClient = usePublicClient();\n\n return useSWR(\n vaultAddresses && publicClient\n ? [\"useTotalStakedAmount\", vaultAddresses]\n : null,\n ([, vaultAddresses]) => {\n return getTotalStakedAmount({ vaultAddresses, publicClient });\n },\n );\n}\n","import type { Address } from \"viem\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getUserVaultInfo } from \"../../actions/pol/getUserVaultInfo\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport type { UserVaultInfo } from \"../../types/pol\";\n\nexport function useUserVaultInfo(\n args: {\n vaultAddress: Address | undefined;\n },\n options?: DefaultHookOptions,\n): DefaultHookReturnType<UserVaultInfo> {\n const { address: account } = useBeraWallet();\n const publicClient = usePublicClient();\n const QUERY_KEY =\n account && publicClient && args.vaultAddress\n ? ([\"useUserVaultInfo\", account, args.vaultAddress] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, account, vaultAddress]) => {\n assertPublicClient(publicClient);\n\n return getUserVaultInfo({\n account,\n vaultAddress,\n publicClient,\n });\n },\n {\n ...options,\n refreshInterval: options?.refreshInterval ?? POLLING.NORMAL,\n },\n );\n}\n","import { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport {\n type GetUserVaultsResponse,\n getUserVaults,\n} from \"../../actions/pol/getUserVaults\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport function useUserVaults(\n options?: DefaultHookOptions,\n): DefaultHookReturnType<GetUserVaultsResponse> {\n const { address: account } = useBeraWallet();\n const publicClient = usePublicClient();\n const QUERY_KEY =\n account && publicClient ? ([\"useUserVaults\", account] as const) : null;\n return useSWR<GetUserVaultsResponse, unknown, typeof QUERY_KEY>(\n QUERY_KEY,\n async ([, account]) => {\n assertPublicClient(publicClient);\n\n return await getUserVaults({\n account,\n publicClient,\n });\n },\n {\n ...options,\n refreshInterval: options?.refreshInterval ?? POLLING.NORMAL,\n keepPreviousData: true,\n },\n );\n}\n","import type { Address } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getRewardVaultStakingToken } from \"../../actions/pol/getRewardVaultStakingToken\";\nimport { assertPublicClient } from \"../../errors/assert\";\n\nexport interface RewardVault {\n stakeToken: Address;\n address: Address;\n}\nexport function useVaultAddress(vaultAddress: Address) {\n const publicClient = usePublicClient();\n const QUERY_KEY =\n vaultAddress && publicClient\n ? ([\"useVaultAddress\", vaultAddress] as const)\n : null;\n\n return useSWR(QUERY_KEY, async ([, vaultAddress]) => {\n assertPublicClient(publicClient);\n\n const [stakeToken] = await Promise.all([\n getRewardVaultStakingToken({\n address: vaultAddress,\n publicClient: publicClient,\n }),\n ]);\n return { stakeToken, address: vaultAddress };\n });\n}\n","import type { GetVaultHistoryQuery } from \"@berachain/graphql/pol/api\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport {\n type GetVaultHistoryArgs,\n getVaultHistory,\n} from \"../../actions/pol/getVaultHistory\";\nimport type { DefaultHookReturnType } from \"../../types/global\";\n\nexport function useVaultHistory({\n vault,\n range,\n resolution,\n}: GetVaultHistoryArgs): DefaultHookReturnType<\n GetVaultHistoryQuery[\"polGetRewardVaultSnapshots\"]\n> {\n const QUERY_KEY = vault\n ? ([\"useVaultHistory\", vault, range, resolution] as const)\n : null;\n return useSWR(QUERY_KEY, ([, vault, range, resolution]) =>\n getVaultHistory({ vault, range, resolution }),\n );\n}\n","import type { Address } from \"viem\";\n\nimport type { ApiValidatorFragment } from \"@berachain/graphql/pol/api\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getVaultValidators } from \"../../actions/pol/getVaultValidators\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport interface UsePollValidatorInfoResponse\n extends DefaultHookReturnType<ApiValidatorFragment[] | undefined> {}\n\nexport function useVaultValidators(\n id: Address,\n options?: DefaultHookOptions,\n): UsePollValidatorInfoResponse {\n const QUERY_KEY = id ? ([\"useVaultValidators\", id] as const) : null;\n return useSWR(\n QUERY_KEY,\n async ([, address]) => {\n return await getVaultValidators({\n address,\n });\n },\n {\n ...options,\n },\n );\n}\n","import { defaultChainId } from \"@berachain/config/internal\";\n\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { beraToken } from \"../../utils/tokens\";\nimport { useTokenPrice } from \"./useTokenPrice\";\n\n/**\n * Shorthand for `useTokenPrice` with the Bera token address.\n * @returns\n */\nexport function useBeraCurrentPrice(opts?: DefaultHookOptions) {\n return useTokenPrice(\n { token: { ...beraToken, chainId: defaultChainId } },\n opts,\n );\n}\n","import type { Address } from \"viem\";\n\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { type TokenPriceInput, useTokenPrices } from \"./useTokenPrices\";\n\nexport function useTokenPrice(\n { token }: { token: TokenPriceInput | undefined },\n options?: DefaultHookOptions,\n) {\n const { isLoading, error, priceMap } = useTokenPrices(\n { tokens: token ? [token] : undefined },\n options,\n );\n\n return {\n data: token\n ? priceMap[token.chainId]?.[token.address.toLowerCase() as Address]\n : undefined,\n isLoading,\n error,\n };\n}\n","import { isAddress, zeroAddress } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { getStakingTokenInformation } from \"../../actions/pol/getStakingTokenInformation\";\nimport type { Token } from \"../../types/dex\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { beraToken, isToken } from \"../../utils/tokens\";\n\nexport type UseStakingTokenInformationResponse = DefaultHookReturnType<\n Partial<Token> | undefined\n>;\n\nexport type useStakingTokenInformationArgs = {\n address: string | undefined;\n};\nexport function useStakingTokenInformation(\n args: useStakingTokenInformationArgs,\n options?: DefaultHookOptions,\n): UseStakingTokenInformationResponse {\n const publicClient = usePublicClient();\n const QUERY_KEY =\n args?.address && publicClient && isAddress(args.address)\n ? ([\"useStakingTokenInformation\", args.address] as const)\n : null;\n return useSWRImmutable<Partial<Token> | undefined, any, typeof QUERY_KEY>(\n QUERY_KEY,\n async ([_, address]) => {\n if (isToken(address, \"BERA\")) {\n return {\n address: zeroAddress,\n decimals: beraToken.decimals,\n name: beraToken.name,\n symbol: beraToken.symbol,\n };\n }\n\n return await getStakingTokenInformation({\n address,\n publicClient,\n });\n },\n { ...options },\n );\n}\n","import { type Address, erc20Abi } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { assertPublicClient } from \"../../errors/assert\";\n\nexport function useTotalSupply({ address }: { address: Address | undefined }) {\n const publicClient = usePublicClient();\n return useSWR(\n address && publicClient ? [\"useTotalSupply\", address] : null,\n ([, address]) => {\n assertPublicClient(publicClient);\n return publicClient.readContract({\n address,\n abi: erc20Abi,\n functionName: \"totalSupply\",\n args: [],\n });\n },\n );\n}\n","import { useBlockNumber, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { getBlockTimestamp } from \"../actions/misc/getBlockTimestamp\";\nimport { useBlockTime } from \"../contexts/BlockTimeProvider\";\nimport { assertPublicClient } from \"../errors/assert\";\nimport { parseBaseArgs } from \"../utils/parseBaseArgs\";\nimport { msToSeconds, seconds } from \"../utils/time\";\n\n/**\n *\n * @returns Timestamp in seconds\n */\nexport function useBlockToTimestamp(\n inputBlock: number | bigint | string,\n): number | undefined {\n const publicClient = usePublicClient();\n const { config } = parseBaseArgs({ chainId: publicClient?.chain.id });\n const { data: currentBlock, isLoading } = useBlockNumber({\n cacheTime: seconds(config.averageBlockTime),\n });\n\n const { data: block } = useSWRImmutable(\n currentBlock && publicClient && Number(inputBlock) > 0\n ? [\"useBlockToTimestamp\", inputBlock, currentBlock]\n : null,\n async ([, inputBlock, currentBlock]) => {\n assertPublicClient(publicClient);\n return getBlockTimestamp({\n block: inputBlock,\n currentBlock,\n blockTime: blockDuration,\n publicClient,\n });\n },\n );\n\n const blockDuration = useBlockTime();\n\n if (block) {\n return Number(block.timestamp);\n }\n\n if (isLoading || !currentBlock) return undefined;\n\n return Math.floor(\n msToSeconds(Date.now()) +\n blockDuration * (Number(inputBlock) - Number(currentBlock)),\n );\n}\n","import { useCallback, useReducer } from \"react\";\nimport type { Abi, ContractFunctionArgs, ContractFunctionName } from \"viem\";\n\nimport { useBeraWagmi, useConfig } from \"@berachain/wagmi/hooks\";\n\nimport { beraWriteContract } from \"../../actions/transactions/beraWriteContract\";\nimport { useBeraFlag } from \"../../contexts/BeraFlags/BeraFlags\";\nimport { TransactionFailedError } from \"../../errors/TransactionFailedError\";\nimport type { IContractWrite } from \"../../types/global\";\nimport { ActionEnum, initialState, reducer } from \"./stateReducer\";\nimport type { IUseContractWriteArgs, UseContractWriteApi } from \"./types\";\n\nexport function useBeraContractWrite({\n onlyPermissionless,\n onSuccess,\n onError,\n onLoading,\n onWarning,\n onSubmission,\n}: IUseContractWriteArgs & {\n /**\n * Whether to allow only permissionless transactions.\n *\n * This is useful when UI is reading data for another account compared to the connected account.\n */\n onlyPermissionless?: boolean;\n} = {}): UseContractWriteApi {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n const { account, onSmartAccountRejection } = useBeraWagmi();\n const wagmiConfig = useConfig();\n\n /**\n * We are using a longer timeout for wallets with EIP-7702 (safe wallet) because it takes longer to confirm the transaction.\n * 10 minutes for safe wallets\n * 2 minutes for EOA wallets\n * */\n const txConfirmationTimeout = account?.wallet?.isContract\n ? 60_000 * 10\n : 120_000;\n\n // Reset the state of the hook to the initial state\n const reset = useCallback(() => {\n dispatch({ type: ActionEnum.RESET });\n }, []);\n\n const enableSimulateCalls = useBeraFlag(\"enableSimulateCalls\");\n\n const write = useCallback(\n <\n abi extends Abi | undefined = undefined,\n functionName extends abi extends Abi\n ? ContractFunctionName<abi>\n : never = abi extends Abi ? ContractFunctionName<abi> : never,\n params extends abi extends Abi\n ? ContractFunctionArgs<abi, \"payable\" | \"nonpayable\", functionName>\n : never = abi extends Abi\n ? ContractFunctionArgs<abi, \"payable\" | \"nonpayable\", functionName>\n : never,\n >(\n writeArgs: IContractWrite<abi, functionName, params>,\n ) => {\n if (onlyPermissionless && !writeArgs.permissionless) {\n const er = new TransactionFailedError({\n message:\n \"Trying to send a non-permissionless transaction with an overridden account\",\n displayMessage:\n \"You can't send this transaction with an overridden account. Please reset the account in the settings popover.\",\n level: \"info\",\n input: writeArgs,\n });\n onWarning?.(er, writeArgs);\n onError?.(er, writeArgs);\n\n throw er;\n }\n return beraWriteContract({\n wagmiConfig,\n ...(writeArgs as IContractWrite),\n txConfirmationTimeout,\n enableSimulateCalls,\n onLoading(...args) {\n dispatch({ type: ActionEnum.LOADING });\n // can't use ...args because of typing issues\n writeArgs.onLoading?.(writeArgs);\n onLoading?.(...args);\n },\n onWarning(...args) {\n // can't use ...args because of typing issues\n writeArgs.onWarning?.(args[0], writeArgs);\n onWarning?.(...args);\n },\n onSubmission(...args) {\n dispatch({ type: ActionEnum.SUBMITTING });\n // can't use ...args because of typing issues\n writeArgs.onSubmission?.(args[0], writeArgs);\n onSubmission?.(...args);\n },\n onSuccess(...args) {\n dispatch({ type: ActionEnum.SUCCESS });\n // can't use ...args because of typing issues\n writeArgs.onSuccess?.(args[0], writeArgs);\n onSuccess?.(...args);\n },\n onError(...args) {\n dispatch({ type: ActionEnum.ERROR });\n writeArgs.onError?.(args[0], writeArgs);\n if (args[0].reason === \"AtomicReadyWalletRejectedUpgradeError\") {\n onSmartAccountRejection();\n }\n onError?.(...args);\n },\n });\n },\n [\n wagmiConfig,\n onLoading,\n onWarning,\n onSubmission,\n onSuccess,\n onError,\n onlyPermissionless,\n enableSimulateCalls,\n ],\n );\n\n return {\n isLoading: state.confirmState === \"loading\",\n isSubmitting: state.confirmState === \"submitting\",\n isSuccess: state.confirmState === \"success\",\n isError: state.confirmState === \"fail\",\n write,\n reset,\n };\n}\n","type LoadingState = \"idle\" | \"loading\" | \"success\" | \"fail\" | \"submitting\";\n\nexport enum ActionEnum {\n ERROR = \"confirm_error\",\n SUCCESS = \"confirm_receipt\",\n LOADING = \"confirm_sending\",\n SUBMITTING = \"confirm_submitting\",\n RESET = \"confirm_reset\",\n}\n\ntype Action =\n | { type: ActionEnum.LOADING }\n | { type: ActionEnum.SUCCESS }\n | { type: ActionEnum.ERROR }\n | { type: ActionEnum.SUBMITTING }\n | { type: ActionEnum.RESET };\n\ninterface State {\n confirmState: LoadingState;\n txnHash: string;\n message: string;\n}\n\nexport const initialState: State = {\n confirmState: \"idle\",\n txnHash: \"\",\n message: \"\",\n};\n\nexport function reducer(state: State, actions: Action): State {\n switch (actions.type) {\n case ActionEnum.LOADING:\n return {\n ...state,\n confirmState: \"loading\",\n };\n case ActionEnum.SUCCESS:\n return {\n ...state,\n confirmState: \"success\",\n };\n case ActionEnum.ERROR:\n return {\n ...state,\n confirmState: \"fail\",\n };\n case ActionEnum.SUBMITTING:\n return {\n ...state,\n confirmState: \"submitting\",\n };\n // NOTE: if we are resetting the state of the useTxn/useWriteContract hook, we need to reset the state to the initial state\n case ActionEnum.RESET:\n return {\n ...initialState,\n };\n default:\n return state;\n }\n}\n","import { isAddress, zeroAddress } from \"viem\";\n\nimport { chainId } from \"@berachain/config/internal\";\n\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { beraFetchJson } from \"../utils/beraFetch\";\n\ninterface SuccessResponse {\n status: \"1\";\n message: \"OK\";\n result: string;\n}\n\ninterface ErrorResponse {\n status: \"0\";\n message: \"NOTOK\";\n result: string;\n}\n\ntype ApiResponse = SuccessResponse | ErrorResponse;\n\nasync function fetchVerifiedAbi(address: string): Promise<string> {\n const data = await beraFetchJson<ApiResponse>({\n url: `https://api.routescan.io/v2/network/testnet/evm/${chainId}/etherscan/api?module=contract&action=getabi&address=${address}`,\n type: \"rest\",\n name: \"RouteScan\",\n });\n\n if (data.status === \"0\") {\n throw new Error(data.result);\n }\n\n return data.result;\n}\n\nexport function useGetVerifiedAbi(address?: string) {\n return useSWRImmutable<string>(\n address &&\n isAddress(address) &&\n // Address zero can't be a contract for sure\n address !== zeroAddress\n ? ([\"useGetVerifiedAbi\", address] as const)\n : null,\n () => (address ? fetchVerifiedAbi(address) : Promise.resolve(\"\")),\n {},\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\ntype UseHistoryStateOptions<T> = {\n key: string;\n defaultValue: T;\n};\n\n/**\n * useHistoryState is a hook that allows storing state in the browser's history state\n * it is useful for storing state that you want to persist across pages\n * It is indexed by the key parameter to be able to store multiple states on the same page and\n * also to not override nextjs usage of the history state\n * @param {string} key - the key to store the state under\n * @param {T} defaultValue - the default value to use if the state is not found\n * @returns {T} state - the current state\n * @returns {function} setHistoryState - a function to set the state\n */\nexport function useHistoryState<T>({\n key,\n defaultValue,\n}: UseHistoryStateOptions<T>) {\n // function to get current state from history\n const getCurrentState = useCallback((): T => {\n if (typeof window === \"undefined\") {\n return defaultValue;\n }\n const existing = window.history.state?.[key];\n const state = existing !== undefined ? existing : defaultValue;\n return state;\n }, [key, defaultValue]);\n\n // use useState to trigger re-renders\n const [state, setState] = useState<T>(getCurrentState());\n\n const setHistoryState = useCallback(\n (value: T | ((prev: T) => T)) => {\n const currentState = getCurrentState();\n\n const newValue = value instanceof Function ? value(currentState) : value;\n\n const historyState = window.history.state || {};\n const newHistoryState = { ...historyState, [key]: newValue };\n\n // always use replaceState for updates to avoid creating new history entries\n window.history.replaceState(newHistoryState, \"\");\n setState(newValue);\n },\n [key, getCurrentState],\n );\n\n useEffect(() => {\n const existing = window.history.state?.[key];\n if (existing === undefined) {\n // if no existing state, create initial history entry\n const currentState = window.history.state || {};\n const newState = { ...currentState, [key]: defaultValue };\n window.history.replaceState(newState, \"\");\n }\n }, [key, defaultValue]);\n\n return [state, setHistoryState] as const;\n}\n","import { useEffect, useRef } from \"react\";\n\n/**\n * Returns the previous value of a variable before the render\n * @param value - the value to return the previous value for\n */\nexport function usePrevious<T>(value: T): T | undefined {\n const ref = useRef<T | undefined>(undefined);\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n","import type {\n GetValidatorsQuery,\n GetValidatorsQueryVariables,\n GqlChain,\n} from \"@berachain/graphql/pol/api\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getAllValidators } from \"../../actions/validators/getAllValidators\";\nimport { POLLING } from \"../../enum/polling\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\n\nexport function useAllValidatorsQueryKey({\n variables,\n}: {\n variables?: GetValidatorsQueryVariables;\n} = {}): (string | GetValidatorsQueryVariables | undefined)[] {\n return [\"useAllValidators\", variables];\n}\n\nexport function useAllValidators(\n variables: GetValidatorsQueryVariables & BeraJS.BaseFunctionArgs,\n options?: DefaultHookOptions,\n): DefaultHookReturnType<GetValidatorsQuery | undefined> {\n const { config } = parseBaseArgs(variables);\n return useSWR<GetValidatorsQuery | undefined>(\n useAllValidatorsQueryKey({ variables }),\n async ([, variables]) => {\n const result = await getAllValidators({\n variables: {\n chain: config.bex.chainName as GqlChain,\n ...variables,\n },\n });\n return result;\n },\n {\n refreshInterval: POLLING.SLOW,\n ...options,\n },\n );\n}\n","import { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getApiEnrichedAllocation } from \"../../actions/validators/getApiEnrichedAllocation\";\nimport type { ValidatorRewardAllocation } from \"../../actions/validators/getValidatorRewardAllocation\";\n\nexport function useApiEnrichedAllocation({\n allocation,\n}: {\n allocation: ValidatorRewardAllocation | undefined;\n}) {\n return useSWR(\n allocation ? [\"useApiEnrichedAllocation\", allocation] : null,\n ([, allocation]) => {\n return getApiEnrichedAllocation({ allocation });\n },\n );\n}\n","import { type Address, isHex } from \"viem\";\n\nimport type { GetValidatorQuery } from \"@berachain/graphql/pol/api\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getApiValidator } from \"../../actions/validators/getApiValidator\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport interface UsePollValidatorInfoResponse\n extends DefaultHookReturnType<GetValidatorQuery> {}\n\nexport function useApiValidatorQueryKey(id: Address) {\n return id ? ([\"useApiValidator\", id] as const) : null;\n}\n\nexport function useApiValidator(\n id: Address,\n options?: DefaultHookOptions,\n): UsePollValidatorInfoResponse {\n const QUERY_KEY = useApiValidatorQueryKey(id);\n return useSWR(\n id ? QUERY_KEY : null,\n async ([, id]) => {\n if (!id || !isHex(id)) throw new Error(`Invalid validator ID: ${id}`);\n\n return getApiValidator({ id });\n },\n options,\n );\n}\n","import { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getBaselineRewardAllocation } from \"../../actions/validators/getBaselineRewardAllocation\";\nimport { assertPublicClient } from \"../../errors/assert\";\n\nexport function useBaselineRewardAllocation() {\n const publicClient = usePublicClient();\n return useSWR(publicClient ? [\"baselineRewardAllocation\"] : null, () => {\n assertPublicClient(publicClient);\n return getBaselineRewardAllocation({\n publicClient,\n });\n });\n}\n","import type { PublicClient } from \"viem\";\n\nimport { rewardAllocatorFactoryAbi as rewardAllocationFactoryAbi } from \"@berachain/abis/pol/rewards/rewardAllocatorFactory\";\n\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\nimport { formatValidatorRewardAllocation } from \"./getValidatorRewardAllocation\";\n\nexport async function getBaselineRewardAllocation({\n publicClient,\n ...args\n}: BeraJS.BaseFunctionArgs & { publicClient: PublicClient }) {\n const { config } = parseBaseArgs(args);\n\n const raw = await publicClient.readContract({\n abi: rewardAllocationFactoryAbi,\n address: config.pol.rewardAllocationFactory,\n functionName: \"getBaselineAllocation\",\n });\n const block =\n raw.startBlock !== 0n\n ? await publicClient.getBlock({\n blockNumber: raw.startBlock,\n })\n : { timestamp: 0 };\n\n return formatValidatorRewardAllocation(raw, Number(block.timestamp));\n}\n","import { useMemo } from \"react\";\nimport type { Address, PublicClient } from \"viem\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getValidatorOperatorAddress } from \"../../actions/validators/getValidatorOperatorAddress\";\nimport { getValidatorRewardAllocatorAddress } from \"../../actions/validators/getValidatorRewardAllocatorAddress\";\nimport { useBeraFlag } from \"../../contexts/BeraFlags/BeraFlags\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport type ManagedValidatorRole = {\n operator: Address | null;\n rewardAllocator: Address | null;\n hasOperatorRole: boolean;\n hasRewardAllocatorRole: boolean;\n};\n\nfunction isOperator(\n account: Address | undefined,\n validatorRoles: Pick<ManagedValidatorRole, \"operator\"> | undefined,\n): boolean {\n if (!account || !validatorRoles) return false;\n if (validatorRoles.operator?.toLowerCase() === account.toLowerCase()) {\n return true;\n }\n return false;\n}\n\n// If the account is the operator and the reward allocator is undefined, then the account is a reward allocator\nfunction isRewardAllocator(\n account: Address | undefined,\n validatorRoles:\n | Pick<ManagedValidatorRole, \"rewardAllocator\" | \"operator\">\n | undefined,\n): boolean {\n if (!account || !validatorRoles) return false;\n\n // If reward allocator is set, check for it\n if (validatorRoles.rewardAllocator) {\n return (\n validatorRoles.rewardAllocator.toLowerCase() === account.toLowerCase()\n );\n }\n\n // If the account is the operator and the reward allocator is undefined, then the account is also a reward allocator\n return isOperator(account, validatorRoles);\n}\n\nexport function useManagedValidatorRole(\n {\n pubKey,\n account: accountAddress,\n }: { pubKey: Address | undefined; account?: Address | undefined },\n options?: DefaultHookOptions,\n): DefaultHookReturnType<ManagedValidatorRole | undefined> {\n const publicClient = usePublicClient();\n const mockValidatorOperator = useBeraFlag(\"mockValidatorOperator\");\n const mockValidatorRewardAllocator = useBeraFlag(\n \"mockValidatorRewardAllocator\",\n );\n const QUERY_KEY =\n publicClient && pubKey\n ? ([\"useManagedValidatorRole\", pubKey] as const)\n : null;\n\n const { address: connectedAccount } = useBeraWallet();\n\n const account = accountAddress ?? connectedAccount;\n\n const swrResponse = useSWR(\n QUERY_KEY,\n async ([, pubKey]) => {\n assertPublicClient(publicClient);\n\n const [operator, rewardAllocator] = await Promise.all([\n getValidatorOperatorAddress({\n client: publicClient as PublicClient,\n pubKey,\n }),\n getValidatorRewardAllocatorAddress({\n client: publicClient as PublicClient,\n pubKey,\n }),\n ]);\n return {\n operator: operator ?? null,\n rewardAllocator,\n };\n },\n {\n ...options,\n },\n );\n\n // Check for account roles\n const hasOperatorRole = useMemo(() => {\n return mockValidatorOperator || isOperator(account, swrResponse.data);\n }, [account, mockValidatorOperator, swrResponse.data]);\n const hasRewardAllocatorRole = useMemo(() => {\n return (\n mockValidatorRewardAllocator ||\n isRewardAllocator(account, swrResponse.data)\n );\n }, [account, mockValidatorRewardAllocator, swrResponse.data]);\n\n return {\n ...swrResponse,\n data: swrResponse.data\n ? {\n ...swrResponse.data,\n hasOperatorRole,\n hasRewardAllocatorRole,\n }\n : undefined,\n };\n}\n","import { type Address, type PublicClient, zeroAddress } from \"viem\";\n\nimport { beraChefAbi } from \"@berachain/abis/pol/rewards/beraChef\";\n\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\n\nexport type ValidatorRewardAllocatorAddress = Address;\n\n/**\n * Get the reward allocator address for a validator\n * @param param0\n * @returns\n */\nexport async function getValidatorRewardAllocatorAddress({\n client,\n pubKey,\n ...args\n}: {\n client: PublicClient;\n pubKey: Address;\n} & BeraJS.BaseFunctionArgs): Promise<ValidatorRewardAllocatorAddress | null> {\n const { config } = parseBaseArgs(args);\n\n try {\n const result = await client.readContract({\n address: config.pol.beraChef,\n abi: beraChefAbi,\n functionName: \"valRewardAllocator\",\n args: [pubKey],\n });\n if (result === zeroAddress) {\n return null;\n }\n return result as ValidatorRewardAllocatorAddress;\n } catch (e) {\n console.log(\"getValidatorRewardAllocatorAddress:\", e);\n throw e;\n }\n}\n","import type { Address } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getStakingPoolBatch } from \"../../actions/validators/getStakingPoolBatch\";\nimport { POLLING } from \"../../enum/polling\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport function useStakingPoolBatch({\n valPubKey,\n options,\n}: {\n valPubKey: Address;\n options?: DefaultHookOptions;\n}): DefaultHookReturnType<number | undefined> {\n const publicClient = usePublicClient();\n const QUERY_KEY =\n publicClient && valPubKey\n ? ([\"useStakingPoolBatch\", valPubKey] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, valPubKey]) => {\n assertPublicClient(publicClient);\n\n return await getStakingPoolBatch({\n client: publicClient,\n valPubKey,\n });\n },\n {\n refreshInterval: POLLING.FAST,\n ...options,\n },\n );\n}\n","import { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport {\n getUserActiveValidators,\n type ValidatorWithUserBoost,\n} from \"../../actions/validators/getUserActiveValidators\";\nimport { POLLING } from \"../../enum/polling\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\ninterface UseUserActiveValidatorsResponse\n extends DefaultHookReturnType<ValidatorWithUserBoost[] | undefined> {}\n\nexport function useUserActiveValidators(\n options?: DefaultHookOptions,\n): UseUserActiveValidatorsResponse {\n const { address: account } = useBeraWallet();\n const publicClient = usePublicClient();\n const QUERY_KEY =\n publicClient && account\n ? ([\"useUserActiveValidators\", account] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, account]) => {\n return await getUserActiveValidators({\n account,\n publicClient,\n });\n },\n {\n ...options,\n refreshInterval: options?.refreshInterval ?? POLLING.SLOW,\n keepPreviousData: true,\n },\n );\n}\n","import type { Address } from \"viem\";\n\nimport { useBeraWallet, usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport {\n getUserBoostsOnValidator,\n type UserBoostsOnValidator,\n} from \"../../actions/validators/getUserBoostsOnValidator\";\nimport { POLLING } from \"../../enum/polling\";\nimport type { DefaultHookReturnType } from \"../../types/global\";\n\nexport function useUserBoostsOnValidator({\n pubkey,\n ...args\n}: {\n pubkey: Address | undefined;\n account?: Address;\n}): DefaultHookReturnType<UserBoostsOnValidator> {\n const { address: connectedAccount } = useBeraWallet();\n\n const publicClient = usePublicClient();\n const account = args.account ?? connectedAccount;\n\n const QUERY_KEY =\n account && pubkey\n ? ([\"useUserBoostsOnValidator\", pubkey, account] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, pubkey, account]) => {\n return await getUserBoostsOnValidator({\n account,\n pubkey: pubkey!,\n publicClient,\n });\n },\n {\n refreshInterval: POLLING.NORMAL,\n },\n );\n}\n","import { useCallback, useMemo } from \"react\";\n\nimport { useBeraWallet } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getRewardProofsByValidator } from \"../../actions/pol/getRewardProofsByValidator\";\nimport { getUserClaimableIncentives } from \"../../actions/pol/getUserClaimableIncentives\";\nimport { POLLING } from \"../../enum/polling\";\nimport { BeraError } from \"../../errors/BeraError\";\nimport { BeraMonitoring } from \"../../errors/BeraMonitoring\";\nimport { InvalidArgumentError } from \"../../errors/InvalidArgumentError\";\nimport type { BribeBoostRewardProof } from \"../../types/bribeBoost\";\nimport type { DefaultHookReturnType } from \"../../types/global\";\nimport { formatIncentivesTokenMap } from \"../../utils/formatIncentivesTokenMap\";\n\ninterface UseUserClaimableIncentivesReturnType\n extends DefaultHookReturnType<BribeBoostRewardProof[]> {\n tokenMap?: Set<string> | undefined;\n}\n\nexport function useUserClaimableIncentives(): UseUserClaimableIncentivesReturnType {\n const { address: account } = useBeraWallet();\n\n const REWARDS_QUERY_KEY = account\n ? ([\"useUserClaimableIncentives\", account] as const)\n : null;\n\n const allRewardsResponse = useSWR(\n REWARDS_QUERY_KEY,\n async ([, account]) => {\n if (!account) {\n throw new BeraError({\n message: \"useUserClaimableIncentives needs a logged in account\",\n level: \"error\",\n });\n }\n\n // Get all reward tokens and all claimable validator associated with the account\n return await getUserClaimableIncentives({\n account,\n });\n },\n {\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n refreshInterval: POLLING.SLOW,\n },\n );\n\n const allRewards = allRewardsResponse?.data;\n const tokenMap = useMemo(() => {\n // Return empty set if no incentives data or still loading\n if (!allRewards) {\n return undefined;\n }\n\n // If the data is not an array, capture an error\n if (!Array.isArray(allRewards)) {\n BeraMonitoring.captureException(\n new BeraError({\n message: \"Incorrect aggregated incentives data receieved.\",\n level: \"error\",\n extra: {\n allRewards,\n account: account,\n },\n }),\n );\n return undefined;\n }\n\n return formatIncentivesTokenMap(allRewards);\n }, [allRewards, account]);\n\n const QUERY_KEY =\n account && allRewards\n ? ([\"useUserClaimableIncentives\", account, allRewards] as const)\n : null;\n\n const swrResponse = useSWR(\n QUERY_KEY,\n async ([, account, allRewards]) => {\n if (!account) {\n throw new InvalidArgumentError({\n property: \"account\",\n value: account,\n expected: \"Address\",\n });\n }\n\n // Return empty set if no incentives data or still loading\n if (!allRewards) {\n return [];\n }\n\n if (!Array.isArray(allRewards)) {\n // If the data is unexpected, throw an error\n throw new InvalidArgumentError({\n message:\n \"Incorrect aggregated incentives data receieved to calculate proofs.\",\n property: \"allRewards\",\n value: allRewards,\n expected: \"Array\",\n level: \"error\",\n });\n }\n\n const validatorsSet = new Set(allRewards.map((item) => item.validator));\n const validatorAddresses = Array.from(validatorsSet);\n\n // Get total count of rewards for each validator in increments of MAX_PROOFS_SIZE_PER_INCENTIVE_CLAIM\n return await Promise.all(\n validatorAddresses.map(async (validator) => {\n const proofsData = await getRewardProofsByValidator({\n account: account,\n validator: validator as `0x${string}`,\n page: 1,\n perPage: 10_000,\n });\n\n return {\n ...proofsData,\n validator: validator,\n };\n }),\n );\n },\n {\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n refreshInterval: POLLING.SLOW,\n },\n );\n\n const refresh = useCallback(() => {\n allRewardsResponse?.refresh();\n swrResponse?.refresh();\n }, [allRewardsResponse, swrResponse]);\n\n return {\n ...swrResponse,\n isLoading: allRewardsResponse?.isLoading || swrResponse?.isLoading,\n tokenMap,\n refresh,\n };\n}\n","import type { BribeBoostRewardItem } from \"../types/bribeBoost\";\n\nexport function formatIncentivesTokenMap(\n allRewards: BribeBoostRewardItem[],\n): Set<string> {\n const tokenMap = new Set<string>();\n\n for (const item of allRewards) {\n if (Array.isArray(item.rewards)) {\n for (const reward of item.rewards) {\n if (reward.token) {\n tokenMap.add(reward.token);\n }\n }\n }\n }\n\n return tokenMap;\n}\n","import type { Address } from \"viem\";\n\nimport { useSWRImmutable } from \"@berachain/utils/pkg/swr\";\n\nimport { getUserStakingPositions } from \"../../actions/validators/getUserStakingPositions\";\n\n/**\n * Hook to fetch and manage user staking positions for validators\n *\n * This hook retrieves staking positions for a given account and optionally filters\n * by a specific validator address.\n *\n * @param params - Configuration parameters for the hook\n * @param params.account - The user's wallet address to fetch staking positions for\n * @param params.validatorAddress - Optional validator address to filter positions by\n *\n *\n * @example\n * ```tsx\n * // Fetch all staking positions for a user\n * const { data, isLoading, error } = useUserStakingPositions({\n * account: userAddress\n * });\n *\n * // Fetch staking positions for a specific validator\n * const { data, isLoading, error } = useUserStakingPositions({\n * account: userAddress,\n * validatorAddress: \"0x1234...\"\n * });\n * ```\n */\nexport function useUserStakingPositions({\n account,\n validatorAddress,\n}: {\n account: Address | undefined;\n validatorAddress?: Address;\n}) {\n const queryClient = account\n ? ([\"useUserStakingPositions\", account, validatorAddress] as const)\n : null;\n return useSWRImmutable(\n queryClient,\n async ([_, account, validatorAddress]) => {\n const userStakingPolls = await getUserStakingPositions(account);\n if (validatorAddress) {\n return userStakingPolls.filter(\n (pool) =>\n pool.validatorAddress.toLowerCase() ===\n validatorAddress.toLowerCase(),\n );\n }\n return userStakingPolls;\n },\n );\n}\n","import { type Address, keccak256 } from \"viem\";\n\nimport type { GqlValidatorDynamicData } from \"@berachain/graphql/dex/api\";\nimport type { ApiValidatorFragment } from \"@berachain/graphql/pol/api\";\n\nimport type { DefaultHookOptions } from \"../../types/global\";\nimport { useApiValidator } from \"./useApiValidator\";\nimport { useOnChainValidator } from \"./useOnChainValidator\";\n\nexport function useValidator(\n { pubkey }: { pubkey: Address },\n options: DefaultHookOptions,\n) {\n const {\n data: { validator: indexerValidator, uptime } = {},\n isLoading: isIndexerValidatorLoading,\n error: indexerValidatorError,\n } = useApiValidator(keccak256(pubkey), options);\n\n const {\n data: onChainValidator,\n isLoading: isOnChainValidatorLoading,\n error: onChainValidatorError,\n } = useOnChainValidator({ pubkey }, options);\n\n return {\n data: {\n uptime,\n validator:\n indexerValidator || onChainValidator\n ? ({\n ...indexerValidator,\n ...onChainValidator,\n operator:\n onChainValidator?.operator ?? indexerValidator?.operator,\n dynamicData: {\n activeBoostAmount:\n onChainValidator?.dynamicData?.activeBoostAmount ??\n indexerValidator?.dynamicData?.activeBoostAmount ??\n \"\",\n queuedBoostAmount:\n indexerValidator?.dynamicData?.queuedBoostAmount ?? \"\",\n allTimeDistributedRewards:\n indexerValidator?.dynamicData?.allTimeDistributedRewards ??\n \"0\",\n rewardRate:\n onChainValidator?.dynamicData?.rewardRate ??\n indexerValidator?.dynamicData?.rewardRate ??\n \"\",\n stakedBeraAmount:\n indexerValidator?.dynamicData?.stakedBeraAmount ?? \"\",\n lastDayDistributedRewards:\n indexerValidator?.dynamicData?.lastDayDistributedRewards ??\n \"\",\n lastDayProposedBlockCount:\n indexerValidator?.dynamicData?.lastDayProposedBlockCount ?? 0,\n activeBoostAmountRank:\n indexerValidator?.dynamicData?.activeBoostAmountRank ?? 0,\n\n boostApr: (indexerValidator?.dynamicData?.boostApr ??\n // todo: remove 'as' once BE has migrated types\n 0) as GqlValidatorDynamicData[\"boostApr\"],\n commissionOnIncentives:\n indexerValidator?.dynamicData?.commissionOnIncentives ?? 0,\n },\n id: (onChainValidator?.id ?? indexerValidator?.id) as Address,\n pubkey: (onChainValidator?.pubkey ??\n indexerValidator?.pubkey) as Address,\n metadata:\n onChainValidator?.metadata ?? indexerValidator?.metadata,\n rewardAllocationWeights:\n onChainValidator?.rewardAllocationWeights ??\n indexerValidator?.rewardAllocationWeights ??\n [],\n } satisfies ApiValidatorFragment)\n : null,\n },\n isLoading: isIndexerValidatorLoading || isOnChainValidatorLoading,\n error: indexerValidatorError || onChainValidatorError,\n };\n}\n","import { type Address, keccak256 } from \"viem\";\n\nimport { beaconDepositAbi } from \"@berachain/abis/pol/beaconDeposit\";\nimport { bgtAbi } from \"@berachain/abis/pol/bgt\";\nimport { beraChefAbi } from \"@berachain/abis/pol/rewards/beraChef\";\n\nimport type { ApiValidatorFragment } from \"@berachain/graphql/pol/api\";\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\nimport { parseBaseArgs } from \"../../utils/parseBaseArgs\";\n\nexport function useOnChainValidator(\n { pubkey }: { pubkey: Address },\n options: DefaultHookOptions,\n): DefaultHookReturnType<Partial<ApiValidatorFragment>> {\n const publicClient = usePublicClient();\n const QUERY_KEY = pubkey ? ([\"useOnChainValidator\", pubkey] as const) : null;\n return useSWR(\n publicClient ? QUERY_KEY : null,\n async ([, pubkey]) => {\n assertPublicClient(publicClient);\n\n const { config } = parseBaseArgs({\n chainId: publicClient.chain.id,\n });\n\n const [operator, boostees, _rewardAllocation] = await Promise.all([\n publicClient.readContract({\n address: config.depositContract,\n abi: beaconDepositAbi,\n functionName: \"getOperator\",\n args: [pubkey],\n }),\n publicClient?.readContract({\n address: config.tokens.bgt,\n abi: bgtAbi,\n functionName: \"boostees\",\n args: [pubkey],\n }),\n publicClient.readContract({\n address: config.pol.beraChef,\n abi: beraChefAbi,\n functionName: \"getActiveRewardAllocation\",\n args: [pubkey],\n }),\n ]);\n\n return {\n id: keccak256(pubkey),\n pubkey,\n operator,\n votingPower: Number(boostees),\n } as Partial<ApiValidatorFragment>;\n },\n options,\n );\n}\n","import type { Address } from \"viem\";\n\nimport type { GetValidatorAnalyticsQuery } from \"@berachain/graphql/pol/subgraph\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getValidatorAnalytics } from \"../../actions/validators/getValidatorAnalytics\";\nimport { POLLING } from \"../../enum/polling\";\nimport type { DefaultHookReturnType } from \"../../types/global\";\n\n/**\n * @deprecated will be removed in pol vNext\n */\nexport function useValidatorAnalytics({\n pubkey,\n dayRange,\n}: {\n pubkey: Address | undefined;\n dayRange: number;\n}): DefaultHookReturnType<GetValidatorAnalyticsQuery> {\n const QUERY_KEY =\n pubkey && dayRange\n ? ([\"useValidatorAnalytics\", pubkey, dayRange] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, pubkey, dayRange]) => {\n return await getValidatorAnalytics({\n pubkey: pubkey,\n dayRange,\n });\n },\n {\n refreshInterval: POLLING.SLOW,\n },\n );\n}\n","import type { Address, PublicClient } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport useSWR from \"@berachain/utils/pkg/swr\";\n\nimport { getValidatorCommission } from \"../../actions/validators/getValidatorCommission\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport function useValidatorCommission(\n pubKey: Address,\n options?: DefaultHookOptions,\n): DefaultHookReturnType<number | undefined | null> {\n const publicClient = usePublicClient();\n const QUERY_KEY =\n publicClient && pubKey\n ? ([\"useValidatorCommission\", pubKey] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, pubKey]) => {\n return await getValidatorCommission({\n client: publicClient as PublicClient,\n pubKey: pubKey,\n });\n },\n {\n ...options,\n },\n );\n}\n","import type { ApiValidatorMinimalFragment } from \"@berachain/graphql/pol/api\";\n\nimport { getValidatorEstimatedBgtPerYear } from \"../../actions/validators/getValidatorEstimatedBgtPerYear\";\nimport { useBlockTime } from \"../../contexts/BlockTimeProvider\";\nimport { usePollGlobalData } from \"../pol/usePollGlobalData\";\n\nexport function useValidatorEstimatedBgtPerYear(\n validator: ApiValidatorMinimalFragment,\n): { data: number | undefined; isLoading: boolean } {\n const { data: globalData, isLoading } = usePollGlobalData();\n\n const blockTime = useBlockTime();\n\n return {\n data: globalData\n ? getValidatorEstimatedBgtPerYear(\n validator,\n Number(globalData?.totalStakedBeraAmount),\n blockTime,\n )\n : undefined,\n isLoading,\n };\n}\n","import type { Address } from \"viem\";\n\nimport type { ValidatorIncentivesResponse } from \"@berachain/graphql/beep\";\n\nimport { BeraError } from \"../../errors/BeraError\";\nimport { calculateTimestampFromDays } from \"../../utils/formatTimestamps\";\nimport { fetchBeep } from \"../clients/fetchBeep\";\n\n/** Browser-only. Reads validator incentive distribution from beep. */\nexport async function getValidatorIncentiveDistribution({\n pubkey,\n dayRange,\n}: {\n pubkey: Address;\n dayRange: number;\n}): Promise<ValidatorIncentivesResponse | undefined> {\n if (typeof window === \"undefined\") {\n throw new BeraError({\n message:\n \"getValidatorIncentiveDistribution is browser-only; call from a Client Component / SWR hook\",\n level: \"error\",\n });\n }\n\n // beep backend (next-gen). It is a public (`NEXT_PUBLIC_*`) URL, so it can be\n // called directly from the browser — no Vercel proxy.\n //\n // beep's `after` cursor is in seconds; `calculateTimestampFromDays` returns\n // microseconds, matching the subgraph's `timestamp_gte`. Pin it to the start\n // of the target day (UTC) so the cursor is stable within a day instead of\n // sliding every second — beep buckets by `interval: \"day\"` anyway, and a\n // stable value keeps requests cacheable.\n const SECONDS_PER_DAY = 86_400;\n const after = String(\n Math.floor(\n calculateTimestampFromDays(dayRange) / 1_000_000 / SECONDS_PER_DAY,\n ) * SECONDS_PER_DAY,\n );\n\n // beep defaults to 100 rows/page, so page until a short page to gather the\n // full range (matches the subgraph's `first: 1000`). In practice this is a\n // single request — a busy validator is ~325 rows over the UI's max 90-day\n // window, well under one page.\n const PER_PAGE = 1000;\n const rows: ValidatorIncentivesResponse = [];\n let page = 1;\n while (true) {\n const pageRows = await fetchBeep(\"/v0/validators/{pubkey}/incentives\", {\n path: { pubkey },\n query: {\n interval: \"day\",\n after,\n page: String(page),\n perPage: String(PER_PAGE),\n },\n });\n rows.push(...pageRows);\n if (pageRows.length < PER_PAGE) break;\n page++;\n }\n\n return rows;\n}\n","import type { Address } from \"viem\";\n\nimport type { ValidatorIncentivesResponse } from \"@berachain/graphql/beep\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getValidatorIncentiveDistribution } from \"../../actions/validators/getValidatorIncentiveDistribution\";\nimport { POLLING } from \"../../enum/polling\";\nimport type { DefaultHookReturnType } from \"../../types/global\";\n\n/**\n * Historical per-validator incentive distribution. Split from\n * `useValidatorAnalytics` so the IncentivesEarned chart can switch data\n * sources independently of the other charts that still consume the umbrella\n * `GetValidatorAnalytics` query.\n */\nexport function useValidatorIncentiveDistribution({\n pubkey,\n dayRange,\n}: {\n pubkey: Address | undefined;\n dayRange: number;\n}): DefaultHookReturnType<ValidatorIncentivesResponse> {\n const QUERY_KEY =\n pubkey && dayRange\n ? ([\"useValidatorIncentiveDistribution\", pubkey, dayRange] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, pubkey, dayRange]) => {\n return await getValidatorIncentiveDistribution({ pubkey, dayRange });\n },\n {\n refreshInterval: POLLING.SLOW,\n },\n );\n}\n","import type { Address } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport {\n getValidatorQueuedCommission,\n type ValidatorQueuedCommission,\n} from \"../../actions/validators/getValidatorQueuedCommission\";\nimport { assertPublicClient } from \"../../errors/assert\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport function useValidatorQueuedCommission(\n pubKey: Address,\n options?: DefaultHookOptions,\n): DefaultHookReturnType<ValidatorQueuedCommission | undefined | null> {\n const publicClient = usePublicClient();\n const QUERY_KEY =\n publicClient && pubKey\n ? ([\"useValidatorQueuedCommission\", pubKey] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, pubKey]) => {\n assertPublicClient(publicClient);\n return await getValidatorQueuedCommission({\n client: publicClient,\n pubKey,\n });\n },\n {\n ...options,\n },\n );\n}\n","import type { Address, PublicClient } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport {\n getValidatorQueuedOperatorAddress,\n type ValidatorQueuedOperatorAddress,\n} from \"../../actions/validators/getValidatorQueuedOperatorAddress\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport function useValidatorQueuedOperatorAddress(\n pubKey: Address,\n options?: DefaultHookOptions,\n): DefaultHookReturnType<ValidatorQueuedOperatorAddress | undefined> {\n const publicClient = usePublicClient();\n const QUERY_KEY =\n publicClient && pubKey\n ? ([\"useValidatorQueuedOperatorAddress\", pubKey] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, pubKey]) => {\n return await getValidatorQueuedOperatorAddress({\n client: publicClient as PublicClient,\n pubKey,\n });\n },\n {\n ...options,\n },\n );\n}\n","import type { Address, PublicClient } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getValidatorQueuedRewardAllocation } from \"../../actions/validators/getValidatorQueuedRewardAllocation\";\nimport type { ValidatorRewardAllocation } from \"../../actions/validators/getValidatorRewardAllocation\";\nimport type {\n DefaultHookOptions,\n DefaultHookReturnType,\n} from \"../../types/global\";\n\nexport function useValidatorQueuedRewardAllocation(\n pubKey: Address,\n options?: DefaultHookOptions,\n): DefaultHookReturnType<ValidatorRewardAllocation | undefined> {\n const publicClient = usePublicClient();\n const QUERY_KEY =\n publicClient && pubKey\n ? ([\"useValidatorQueuedRewardAllocation\", pubKey] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, pubKey]) => {\n return await getValidatorQueuedRewardAllocation({\n client: publicClient as PublicClient,\n pubKey,\n });\n },\n {\n ...options,\n },\n );\n}\n","import type { Address, PublicClient } from \"viem\";\n\nimport { usePublicClient } from \"@berachain/wagmi/hooks\";\nimport { useSWR } from \"@berachain/utils/pkg/swr\";\n\nimport { getValidatorRewardAllocation } from \"../../actions/validators/getValidatorRewardAllocation\";\nimport type { DefaultHookOptions } from \"../../types/global\";\n\nexport function useValidatorRewardAllocation(\n pubKey: Address,\n options?: DefaultHookOptions,\n) {\n const publicClient = usePublicClient();\n const QUERY_KEY =\n publicClient && pubKey\n ? ([\"useValidatorRewardAllocation\", pubKey] as const)\n : null;\n\n return useSWR(\n QUERY_KEY,\n async ([, pubKey]) => {\n return getValidatorRewardAllocation({\n client: publicClient as PublicClient,\n pubKey,\n });\n },\n {\n ...options,\n },\n );\n}\n"],"mappings":"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","names":["sharesAmount","vaultAddress","zeroAddress","useBeraWallet","usePublicClient","ChainId","ChainId","ChainId","ChainId","zeroAddress","ChainId","aggregatorsRouterAbi","ChainId","account","zeroAddress","aggregatorsRouterAbi","formatUnits","zeroAddress","ChainId","aggregatorsRouterAbi","ChainId","formatUnits","zeroAddress","aggregatorsRouterAbi","formatUnits","ChainId","ChainId","collateral","formatUnits","account","zeroAddress","ChainId","aggregatorsRouterAbi","ChainId","zeroAddress","aggregatorsRouterAbi","zeroAddress","ChainId","aggregatorsRouterAbi","ChainId","zeroAddress","aggregatorsRouterAbi","zeroAddress","ChainId","aggregatorsRouterAbi","ChainId","zeroAddress","account","aggregatorsRouterAbi","ChainId","ChainId","erc4626Abi","erc4626Abi","token","zeroAddress","aggregatorsRouterAbi","usePublicClient","usePublicClient","zeroAddress","aggregatorsRouterAbi","parseUnits","zeroAddress","usePublicClient","parseUnits","usePublicClient","zeroAddress","useBeraWallet","usePublicClient","zeroAddress","error","data","poolId","account","useMemo","PoolType","parseUnits","zeroAddress","formatUnits","OracleMode","parseUnits","oracle","zeroAddress","useMemo","generatedPoolName","generatedPoolSymbol","PoolType","PoolType","PoolType","formatEther","isAddress","zeroAddress","useBeraWallet","usePublicClient","isAddress","zeroAddress","usePublicClient","usePublicClient","isAddress","tokenAddress","zeroAddress","useBeraWallet","usePublicClient","isAddress","rewardVaultAddress","account","zeroAddress","formatEther","formatUnits","isAddress","zeroAddress","defaultChainId","useBeraWallet","usePublicClient","isAddress","zeroAddress","defaultChainId","usePublicClient","usePublicClient","isAddress","chainId","defaultChainId","zeroAddress","chainId","defaultChainId","zeroAddress","usePublicClient","useBeraWallet","isAddress","assetOwner","address","formatEther","formatUnits","formatEther","useMemo","parseUnits","zeroAddress","useBeraWallet","useConfig","useConfig","useBeraWallet","account","parseUnits","useMemo","zeroAddress","item","useMemo","formatUnits","isAddress","usePublicClient","isAddress","defaultChainId","usePublicClient","usePublicClient","defaultChainId","chainId","isAddress","useMemo","isAddress","zeroAddress","defaultChainId","useMemo","addresses","isAddress","zeroAddress","defaultChainId","isAddress","usePublicClient","poolId","useMemo","pool","formatUnits","balancerVaultAbi","useBeraWallet","usePublicClient","useBeraWallet","usePublicClient","account","balancerVaultAbi","poolId","typeInArray","poolId","useMemo","useBeraWallet","useBeraWallet","query","useMemo","useMemo","useMemo","defaultChainId","defaultChainId","useMemo","chainId","useMemo","parseUnits","defaultChainId","useBeraWallet","usePublicClient","formatUnits","encodeFunctionData","getAddress","erc20Abi","formatUnits","zeroAddress","zeroAddress","chainId","erc20Abi","formatUnits","encodeFunctionData","getAddress","formatUnits","chainId","getAddress","useBeraWallet","usePublicClient","chainId","useBeraWallet","usePublicClient","getAddress","useBeraWallet","usePublicClient","chainId","useBeraWallet","usePublicClient","primaryAddress","ensoWalletV2Address","chainId","useBeraWallet","defaultChainId","usePublicClient","fromAddress","collateralToken","loanToken","marketId","primaryAddress","repayAmount","slippage","collateralPriceInLoanAsset","currentCollateral","currentDebt","ensoWalletV2Address","isAuthorized","proxyAggregatorsThroughVercel","parseUnits","parseUnits","defaultChainId","useBeraWagmi","useBeraWallet","usePublicClient","getPositionEstimate","chainId","chainId","useBeraWallet","useBeraWagmi","defaultChainId","usePublicClient","fromAddress","collateralToken","loanToken","marketId","primaryAddress","formattedSupplyCollateralAmount","formattedCurrentCollateralAmount","formattedCurrentBorrowAmount","leverageMultiplier","slippage","formattedCollateralPriceInLoanAsset","ensoWalletV2Address","isAuthorized","proxyAggregatorsThroughVercel","parseUnits","formatEther","parseUnits","zeroAddress","useBeraWallet","usePublicClient","ethAddress","zeroAddress","zeroAddress","ethAddress","parseUnits","zeroAddress","formatEther","useBeraWallet","usePublicClient","fromAddress","tokenIn","loanToken","bendVault","rewardVault","amount","slippage","getPublicClient","parseUnits","berachainChainId","useBeraWallet","useConfig","ethAddress","zeroAddress","chainId","zeroAddress","ethAddress","useMemo","useBeraWallet","useConfig","usePublicClient","usePublicClient","useConfig","useBeraWallet","useMemo","wallet","tokenList","useBeraWallet","useConfig","fromAddress","tokenIn","tokenOut","amount","slippage","getPublicClient","parseUnits","berachainChainId","formatUnits","parseUnits","defaultChainId","useBeraWallet","useBeraWallet","defaultChainId","inputToken","amount","quoteAccount","slippage","underlyingToken","tokenOut","parseUnits","formatUnits","usePublicClient","isBasketModeEnabled","usePublicClient","amount","asset","latestPrices","usePublicClient","isBasketModeEnabled","usePublicClient","asset","amount","referenceCollateral","isCapped","usePublicClient","usePublicClient","collateralList","useMemo","useBeraWallet","useConfig","usePublicClient","usePublicClient","useBeraWallet","useConfig","account","collateralList","usePublicClient","usePublicClient","collateralList","usePublicClient","usePublicClient","collateral","latestPrices","isBasketModeEnabled","useMemo","days","useEffect","formatUnits","defaultChainId","usePublicClient","usePublicClient","isMint","latestPrices","collateralList","formatUnits","defaultChainId","initialState","isBasketModeEnabled","useEffect","usePublicClient","usePublicClient","pythPriceFeedCalldata","useBeraWallet","useBeraWallet","account","useBeraWallet","useBeraWallet","account","useMemo","useMemo","usePublicClient","usePublicClient","formatEther","useBeraWallet","usePublicClient","useBeraWallet","usePublicClient","account","formatEther","formatUnits","useBeraWallet","usePublicClient","useBeraWallet","usePublicClient","account","formatUnits","usePublicClient","usePublicClient","usePublicClient","usePublicClient","isAddress","usePublicClient","usePublicClient","isAddress","receiptTokenAddresses","account","version","defaultChainId","usePublicClient","usePublicClient","defaultChainId","address","erc20Abi","formatUnits","isAddress","usePublicClient","erc20Abi","formatUnits","erc20Abi","formatUnits","isAddress","usePublicClient","address","erc20Abi","formatUnits","id","usePublicClient","usePublicClient","address","stakingToken","usePublicClient","usePublicClient","address","range","useMemo","useBeraWallet","usePublicClient","window","usePublicClient","useBeraWallet","useMemo","receiptTokens","account","stakingConfigs","range","addresses","usePublicClient","usePublicClient","vaults","publicClient","blockTime","usePublicClient","usePublicClient","vaultAddresses","useBeraWallet","usePublicClient","useBeraWallet","usePublicClient","account","useBeraWallet","usePublicClient","useBeraWallet","usePublicClient","account","usePublicClient","usePublicClient","vaultAddress","vault","range","resolution","defaultChainId","defaultChainId","isAddress","zeroAddress","usePublicClient","usePublicClient","isAddress","zeroAddress","erc20Abi","usePublicClient","usePublicClient","address","erc20Abi","usePublicClient","usePublicClient","inputBlock","currentBlock","useCallback","useReducer","useBeraWagmi","useConfig","reducer","useReducer","reducer","useBeraWagmi","useConfig","useCallback","isAddress","zeroAddress","isAddress","zeroAddress","useCallback","useEffect","useState","state","useEffect","variables","allocation","id","usePublicClient","usePublicClient","useMemo","useBeraWallet","usePublicClient","zeroAddress","beraChefAbi","beraChefAbi","zeroAddress","usePublicClient","useBeraWallet","pubKey","useMemo","usePublicClient","usePublicClient","valPubKey","useBeraWallet","usePublicClient","useBeraWallet","usePublicClient","account","useBeraWallet","usePublicClient","useBeraWallet","usePublicClient","pubkey","account","useCallback","useMemo","useBeraWallet","useBeraWallet","account","useMemo","allRewards","useCallback","account","validatorAddress","keccak256","keccak256","bgtAbi","beraChefAbi","usePublicClient","usePublicClient","pubkey","bgtAbi","beraChefAbi","keccak256","keccak256","pubkey","dayRange","usePublicClient","usePublicClient","pubKey","pubkey","dayRange","usePublicClient","usePublicClient","pubKey","usePublicClient","usePublicClient","pubKey","usePublicClient","usePublicClient","pubKey","usePublicClient","usePublicClient","pubKey"]}
|