@berachain/berajs 0.1.0 → 0.1.2
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/{dex-jD95agMv.d.cts → HoneyConfigProvider-6PXZJMSU.d.cts} +172 -172
- package/dist/{dex-CxzGqVLe.d.ts → HoneyConfigProvider-CwDFrt02.d.ts} +172 -172
- package/dist/abi/index.cjs +2 -1
- package/dist/abi/index.cjs.map +1 -0
- package/dist/abi/index.mjs +2 -1
- package/dist/abi/index.mjs.map +1 -0
- package/dist/actions/index.cjs +2 -1
- package/dist/actions/index.cjs.map +1 -0
- package/dist/actions/index.d.cts +8 -8
- package/dist/actions/index.d.ts +8 -8
- package/dist/actions/index.mjs +2 -1
- package/dist/actions/index.mjs.map +1 -0
- package/dist/chunk-22MQVFHP.cjs +2 -0
- package/dist/chunk-22MQVFHP.cjs.map +1 -0
- package/dist/chunk-3TKSVFZ3.mjs +2 -0
- package/dist/chunk-3TKSVFZ3.mjs.map +1 -0
- package/dist/chunk-6VF3RF53.cjs +3 -0
- package/dist/chunk-6VF3RF53.cjs.map +1 -0
- package/dist/{chunk-2422CKAT.mjs → chunk-6W22TFYA.mjs} +2 -1
- package/dist/chunk-6W22TFYA.mjs.map +1 -0
- package/dist/chunk-AMRJ4B36.mjs +2 -0
- package/dist/chunk-AMRJ4B36.mjs.map +1 -0
- package/dist/{chunk-4IBBLGNS.mjs → chunk-DS2ZDVKU.mjs} +1 -0
- package/dist/chunk-DS2ZDVKU.mjs.map +1 -0
- package/dist/{chunk-B47PDJZM.cjs → chunk-ED43NYSE.cjs} +2 -1
- package/dist/chunk-ED43NYSE.cjs.map +1 -0
- package/dist/chunk-EU4WFADK.cjs +2 -0
- package/dist/chunk-EU4WFADK.cjs.map +1 -0
- package/dist/{chunk-ASRHUDAH.mjs → chunk-HCTFDGXL.mjs} +1 -0
- package/dist/chunk-HCTFDGXL.mjs.map +1 -0
- package/dist/{chunk-K4NZIO2Z.mjs → chunk-IOSYBHKU.mjs} +1 -0
- package/dist/chunk-IOSYBHKU.mjs.map +1 -0
- package/dist/{chunk-4GY57XKG.cjs → chunk-JMKLDDKY.cjs} +1 -0
- package/dist/chunk-JMKLDDKY.cjs.map +1 -0
- package/dist/chunk-KMKUXP2S.mjs +3 -0
- package/dist/chunk-KMKUXP2S.mjs.map +1 -0
- package/dist/chunk-OJXJ6CZ4.mjs +4 -0
- package/dist/chunk-OJXJ6CZ4.mjs.map +1 -0
- package/dist/{chunk-VA37UBED.mjs → chunk-PHIOKO3A.mjs} +2 -1
- package/dist/chunk-PHIOKO3A.mjs.map +1 -0
- package/dist/{chunk-IKAE7CQU.cjs → chunk-QCK474XD.cjs} +1 -0
- package/dist/chunk-QCK474XD.cjs.map +1 -0
- package/dist/chunk-REDXXUK7.cjs +2 -0
- package/dist/chunk-REDXXUK7.cjs.map +1 -0
- package/dist/{chunk-K2FCHQHA.cjs → chunk-S74ZMG2G.cjs} +2 -1
- package/dist/chunk-S74ZMG2G.cjs.map +1 -0
- package/dist/{chunk-NOV7UCGA.cjs → chunk-TOAXF4YW.cjs} +1 -0
- package/dist/chunk-TOAXF4YW.cjs.map +1 -0
- package/dist/chunk-UZ5CB33M.cjs +2 -0
- package/dist/chunk-UZ5CB33M.cjs.map +1 -0
- package/dist/chunk-VYWYJR63.mjs +2 -0
- package/dist/chunk-VYWYJR63.mjs.map +1 -0
- package/dist/{chunk-WZLPSG5R.cjs → chunk-XFPTQMAK.cjs} +3 -2
- package/dist/chunk-XFPTQMAK.cjs.map +1 -0
- package/dist/chunk-YK4NINF5.mjs +2 -0
- package/dist/chunk-YK4NINF5.mjs.map +1 -0
- package/dist/contexts/index.cjs +2 -1
- package/dist/contexts/index.cjs.map +1 -0
- package/dist/contexts/index.d.cts +7 -5
- package/dist/contexts/index.d.ts +7 -5
- package/dist/contexts/index.mjs +2 -1
- package/dist/contexts/index.mjs.map +1 -0
- package/dist/enum/index.cjs +2 -1
- package/dist/enum/index.cjs.map +1 -0
- package/dist/enum/index.d.cts +1 -1
- package/dist/enum/index.d.ts +1 -1
- package/dist/enum/index.mjs +2 -1
- package/dist/enum/index.mjs.map +1 -0
- package/dist/errors/index.cjs +2 -1
- package/dist/errors/index.cjs.map +1 -0
- package/dist/errors/index.d.cts +1 -1
- package/dist/errors/index.d.ts +1 -1
- package/dist/errors/index.mjs +2 -1
- package/dist/errors/index.mjs.map +1 -0
- package/dist/{getValidatorQueuedOperatorAddress-9jSXlAse.d.ts → getValidatorQueuedOperatorAddress-9xY2RUGe.d.cts} +2 -2
- package/dist/{getValidatorQueuedOperatorAddress-BCYlvah3.d.cts → getValidatorQueuedOperatorAddress-Ne2zoiiV.d.ts} +2 -2
- package/dist/hooks/index.cjs +3 -2
- package/dist/hooks/index.cjs.map +1 -0
- package/dist/hooks/index.d.cts +9 -9
- package/dist/hooks/index.d.ts +9 -9
- package/dist/hooks/index.mjs +3 -2
- package/dist/hooks/index.mjs.map +1 -0
- package/dist/{staking-Bw46L2PT.d.ts → staking-F9Nx9TKD.d.ts} +1 -1
- package/dist/{staking-BxYDlMtj.d.cts → staking-f4BpYH7l.d.cts} +1 -1
- package/dist/{txnEnum-Diichv9Z.d.cts → txnEnum-BQKDfaeH.d.cts} +1 -0
- package/dist/{txnEnum-Diichv9Z.d.ts → txnEnum-BQKDfaeH.d.ts} +1 -0
- package/dist/types/index.cjs +2 -1
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +5 -5
- package/dist/types/index.d.ts +5 -5
- package/dist/types/index.mjs +2 -1
- package/dist/types/index.mjs.map +1 -0
- package/dist/{useHoneySwapState-YfMSTWY3.d.cts → useHoneySwapState-C-9BV4VB.d.cts} +1 -1
- package/dist/{useHoneySwapState-CD8v6y1k.d.ts → useHoneySwapState-CUY5Sm1b.d.ts} +1 -1
- package/dist/utils/index.cjs +2 -1
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +5 -5
- package/dist/utils/index.d.ts +5 -5
- package/dist/utils/index.mjs +2 -1
- package/dist/utils/index.mjs.map +1 -0
- package/package.json +4 -3
- package/src/abi/bend/bundler.ts +60 -0
- package/src/abi/bend/generalAdapter.ts +362 -0
- package/src/abi/bend/metaMorpho.ts +2584 -0
- package/src/abi/bend/morpho.ts +444 -0
- package/src/abi/bend/morphoVault.ts +1456 -0
- package/src/abi/bend/publicAllocator.ts +355 -0
- package/src/abi/bex/aggregatorsRouter.ts +492 -0
- package/src/abi/bex/balancerComposableStablePoolFactoryV6.ts +283 -0
- package/src/abi/bex/balancerPoolCreationHelper.ts +267 -0
- package/src/abi/bex/balancerVault.ts +757 -0
- package/src/abi/enso/ensoRouterAbi.ts +140 -0
- package/src/abi/governance/governance.ts +1016 -0
- package/src/abi/governance/governanceTimelock.ts +589 -0
- package/src/abi/honey/collateralVault.ts +1144 -0
- package/src/abi/honey/honey.ts +563 -0
- package/src/abi/honey/honeyFactory.ts +1270 -0
- package/src/abi/honey/honeyFactoryReader.ts +894 -0
- package/src/abi/honey/honeyRootOracle.ts +492 -0
- package/src/abi/honey/pythPriceOracle.ts +619 -0
- package/src/abi/honey/pythWrapper.ts +446 -0
- package/src/abi/index.ts +35 -0
- package/src/abi/pol/beaconDeposit.ts +595 -0
- package/src/abi/pol/beraChef.ts +1019 -0
- package/src/abi/pol/bgt.ts +1008 -0
- package/src/abi/pol/bgtIncentiveDistributor.ts +640 -0
- package/src/abi/pol/bgtStaker.ts +1034 -0
- package/src/abi/pol/rewardAllocationFactory.ts +408 -0
- package/src/abi/pol/rewardVault.ts +1928 -0
- package/src/abi/pol/rewardVaultFactory.ts +586 -0
- package/src/abi/pol/rewardVaultHelper.ts +882 -0
- package/src/abi/pol/stakeBeraVault.ts +1116 -0
- package/src/abi/pol/stakeBeraVaultWithdrawalRequest.ts +618 -0
- package/src/abi/pol/wbera.ts +366 -0
- package/src/abi/pyth/pyth.ts +566 -0
- package/src/abi/pyth/pythErrors.ts +72 -0
- package/src/abi/utils/EIP7702StatelessDelegator.ts +523 -0
- package/src/abi/utils/bundler3errors.ts +6 -0
- package/src/abi/utils/commonAbiErrors.ts +9 -0
- package/src/abi/utils/erc20errors.ts +74 -0
- package/src/abi/utils/merkleDistributor.ts +838 -0
- package/src/abi/utils/multicall3.ts +242 -0
- package/src/abi/utils/openChainErrors.ts +139 -0
- package/src/abi/utils/upgradableBeacon.ts +86 -0
- package/src/actions/bend/getConvertToAssets.ts +23 -0
- package/src/actions/bend/getMaxDeposit.ts +21 -0
- package/src/actions/clients/BeraApolloClient.ts +125 -0
- package/src/actions/clients/getApolloClient.ts +109 -0
- package/src/actions/clients/getEnsoClient.ts +24 -0
- package/src/actions/dex/__tests__/aggregators.unit.test.ts +112 -0
- package/src/actions/dex/__tests__/allPools.integration.test.ts +13 -0
- package/src/actions/dex/__tests__/getOnChainPool.unit.test.ts +15 -0
- package/src/actions/dex/__tests__/haiku.integration.test.ts +40 -0
- package/src/actions/dex/aggregators/base.ts +174 -0
- package/src/actions/dex/aggregators/bex.ts +255 -0
- package/src/actions/dex/aggregators/bgt.ts +50 -0
- package/src/actions/dex/aggregators/enso.ts +113 -0
- package/src/actions/dex/aggregators/fly.ts +136 -0
- package/src/actions/dex/aggregators/haiku.ts +171 -0
- package/src/actions/dex/aggregators/honey.ts +245 -0
- package/src/actions/dex/aggregators/kyberswap.ts +142 -0
- package/src/actions/dex/aggregators/oogabooga.ts +110 -0
- package/src/actions/dex/aggregators/openOcean.ts +142 -0
- package/src/actions/dex/aggregators/wbera.ts +72 -0
- package/src/actions/dex/b-sdk.ts +48 -0
- package/src/actions/dex/getAllPools.ts +60 -0
- package/src/actions/dex/getApiPool.ts +47 -0
- package/src/actions/dex/getGlobalLiquidityAndSwapVolume.ts +29 -0
- package/src/actions/dex/getIsTokenExploited.ts +63 -0
- package/src/actions/dex/getOnChainPool.ts +216 -0
- package/src/actions/dex/getPoolEvents.ts +35 -0
- package/src/actions/dex/getPoolHistoricalData.ts +51 -0
- package/src/actions/dex/getPoolPausedState.ts +40 -0
- package/src/actions/dex/getPoolWithState.ts +24 -0
- package/src/actions/dex/getSubgraphPool.ts +30 -0
- package/src/actions/dex/getTransactionCount.ts +29 -0
- package/src/actions/dex/getVaultPausedState.ts +21 -0
- package/src/actions/enso/bend.ts +143 -0
- package/src/actions/enso/getEnsoUserToken.debug.test.ts +57 -0
- package/src/actions/enso/getEnsoUserToken.ts +133 -0
- package/src/actions/enso/util.ts +60 -0
- package/src/actions/enso/zap.ts +78 -0
- package/src/actions/governance/__tests__/checkProposalField.unit.test.ts +108 -0
- package/src/actions/governance/__tests__/getDecodedFunctionData.integration.test.ts +127 -0
- package/src/actions/governance/__tests__/getQuorum.integration.test.ts +39 -0
- package/src/actions/governance/checkProposalField.ts +211 -0
- package/src/actions/governance/computeActualStatus.ts +154 -0
- package/src/actions/governance/constants.ts +7 -0
- package/src/actions/governance/getAllProposals.ts +75 -0
- package/src/actions/governance/getBodyErrors.ts +28 -0
- package/src/actions/governance/getDecodedFunctionData.ts +170 -0
- package/src/actions/governance/getProposalDetails.ts +40 -0
- package/src/actions/governance/getProposalFromTx.ts +101 -0
- package/src/actions/governance/getProposalParams.ts +247 -0
- package/src/actions/governance/getProposalVotes.ts +20 -0
- package/src/actions/governance/getQuorum.ts +38 -0
- package/src/actions/governance/parseProposalBody.ts +73 -0
- package/src/actions/honey/getChartData.ts +27 -0
- package/src/actions/honey/getCollateralWeights.ts +50 -0
- package/src/actions/honey/getGlobalCapLimit.ts +148 -0
- package/src/actions/honey/getHoneyCollaterals.ts +139 -0
- package/src/actions/honey/getHoneyFees.ts +100 -0
- package/src/actions/honey/getHoneyGlobalData.ts +21 -0
- package/src/actions/honey/getHoneyPausedState.ts +25 -0
- package/src/actions/honey/getHoneyPreview.ts +152 -0
- package/src/actions/honey/getHoneyPythPriceOracle.ts +21 -0
- package/src/actions/honey/getHoneyRootPriceOracle.ts +23 -0
- package/src/actions/honey/getHoneyVaultsBalance.ts +86 -0
- package/src/actions/honey/getPythLatestPrices.ts +54 -0
- package/src/actions/honey/getRelativeCapLimit.ts +83 -0
- package/src/actions/honey/getSharesWithoutFees.ts +65 -0
- package/src/actions/honey/getSwapPayload.ts +128 -0
- package/src/actions/honey/isBadCollateralAsset.ts +77 -0
- package/src/actions/honey/isBasketModeEnabled.ts +47 -0
- package/src/actions/honey/tests/pyth.integration.test.ts +63 -0
- package/src/actions/index.ts +105 -0
- package/src/actions/misc/getBlockTimestamp.ts +41 -0
- package/src/actions/pol/__tests__/getAllValidators.integration.test.ts +55 -0
- package/src/actions/pol/__tests__/getValidator.integration.test.ts +32 -0
- package/src/actions/pol/__tests__/rewardVaults.integration.test.ts +34 -0
- package/src/actions/pol/getBGTGlobalInfo.ts +43 -0
- package/src/actions/pol/getBgtAprSimulation.ts +207 -0
- package/src/actions/pol/getBgtAprSimultaion.unit.test.ts +297 -0
- package/src/actions/pol/getBgtTokenTotalBoosts.ts +30 -0
- package/src/actions/pol/getBgtTokenTotalSupply.ts +29 -0
- package/src/actions/pol/getBlockTime.ts +43 -0
- package/src/actions/pol/getGlobalCuttingBoard.ts +25 -0
- package/src/actions/pol/getGlobalData.ts +74 -0
- package/src/actions/pol/getIncentiveFeeClaimStats.ts +43 -0
- package/src/actions/pol/getMarkets.ts +36 -0
- package/src/actions/pol/getRewardProofsByValidator.ts +49 -0
- package/src/actions/pol/getRewardTokenToBeraRate.ts +30 -0
- package/src/actions/pol/getRewardVault.ts +54 -0
- package/src/actions/pol/getRewardVaultBeaconImplementation.integration.test.ts +18 -0
- package/src/actions/pol/getRewardVaultBeaconImplementation.ts +35 -0
- package/src/actions/pol/getRewardVaultDurationConstants.integration.test.ts +24 -0
- package/src/actions/pol/getRewardVaultDurationConstants.ts +45 -0
- package/src/actions/pol/getRewardVaultFromToken.ts +30 -0
- package/src/actions/pol/getRewardVaultIncentives.ts +122 -0
- package/src/actions/pol/getRewardVaultRewards.ts +109 -0
- package/src/actions/pol/getRewardVaultStakingToken.ts +19 -0
- package/src/actions/pol/getRewardVaults.ts +106 -0
- package/src/actions/pol/getSWBeraVaultMetadata.ts +166 -0
- package/src/actions/pol/getSWBeraWithdrawal.ts +165 -0
- package/src/actions/pol/getStakeWithdrawalCooldown.ts +21 -0
- package/src/actions/pol/getStakedBeraAPR.ts +56 -0
- package/src/actions/pol/getStakedBeraSnapshots.ts +48 -0
- package/src/actions/pol/getStakingTokenInformation.ts +60 -0
- package/src/actions/pol/getUserClaimableIncentives.ts +40 -0
- package/src/actions/pol/getUserVaultInfo.ts +52 -0
- package/src/actions/pol/getUserVaults.ts +185 -0
- package/src/actions/pol/getUserVaultsBalance.ts +54 -0
- package/src/actions/pol/getUserVaultsReward.ts +32 -0
- package/src/actions/pol/getVaultHistory.ts +43 -0
- package/src/actions/pol/getVaultValidators.ts +31 -0
- package/src/actions/pol/getVaultsSupply.ts +28 -0
- package/src/actions/prices/__tests__/prices.integration.test.ts +29 -0
- package/src/actions/prices/getTokenCurrentPrices.ts +79 -0
- package/src/actions/pyth/getHoneyPythFeeds.ts +46 -0
- package/src/actions/pyth/getUpdateFee.ts +27 -0
- package/src/actions/tokens/getAllowances.ts +59 -0
- package/src/actions/tokens/getTokenInformation.ts +57 -0
- package/src/actions/tokens/getTokens.ts +19 -0
- package/src/actions/tokens/getWalletBalances.integration.test.ts +40 -0
- package/src/actions/tokens/getWalletBalances.ts +123 -0
- package/src/actions/transactions/beraWriteContract.integration.test.ts +251 -0
- package/src/actions/transactions/beraWriteContract.ts +722 -0
- package/src/actions/validators/getActiveBoostAndCommissionChangeDelay.integration.test.ts +40 -0
- package/src/actions/validators/getActiveBoostAndCommissionChangeDelay.ts +109 -0
- package/src/actions/validators/getAllValidators.ts +33 -0
- package/src/actions/validators/getApiEnrichedAllocation.ts +33 -0
- package/src/actions/validators/getApiValidator.ts +38 -0
- package/src/actions/validators/getBaselineRewardAllocation.ts +26 -0
- package/src/actions/validators/getDailyValidatorBlockStats.ts +37 -0
- package/src/actions/validators/getDefaultRewardAllocation.ts +39 -0
- package/src/actions/validators/getManagedValidatorByAccount.ts +32 -0
- package/src/actions/validators/getStakingPoolBatch.ts +20 -0
- package/src/actions/validators/getUserActiveValidators.ts +101 -0
- package/src/actions/validators/getUserBoosts.ts +28 -0
- package/src/actions/validators/getUserBoostsOnValidator.ts +70 -0
- package/src/actions/validators/getUserStakingPositions.ts +225 -0
- package/src/actions/validators/getValidatorAnalytics.ts +34 -0
- package/src/actions/validators/getValidatorCommission.ts +24 -0
- package/src/actions/validators/getValidatorEstimatedBgtPerYear.ts +25 -0
- package/src/actions/validators/getValidatorOperatorAddress.ts +27 -0
- package/src/actions/validators/getValidatorQueuedCommission.ts +30 -0
- package/src/actions/validators/getValidatorQueuedOperatorAddress.ts +32 -0
- package/src/actions/validators/getValidatorQueuedRewardAllocation.ts +31 -0
- package/src/actions/validators/getValidatorRewardAllocation.ts +158 -0
- package/src/actions/validators/getValidatorRewardAllocatorAddress.ts +38 -0
- package/src/actions/validators/utils/__tests__/validatorUtils.integration.test.ts +36 -0
- package/src/actions/validators/utils/getValidatorBoostApy.ts +59 -0
- package/src/contexts/BeraFlags/BeraFlags.tsx +69 -0
- package/src/contexts/BeraFlags/defaultFlags.ts +42 -0
- package/src/contexts/BexStatusProvider.tsx +125 -0
- package/src/contexts/HoneyConfigProvider.tsx +73 -0
- package/src/contexts/SwrFallback.tsx +34 -0
- package/src/contexts/TokensProvider.tsx +66 -0
- package/src/contexts/berajsProvider/context.tsx +49 -0
- package/src/contexts/berajsProvider/index.ts +2 -0
- package/src/contexts/berajsProvider/useBeraJs.ts +18 -0
- package/src/contexts/block-time-provider.tsx +34 -0
- package/src/contexts/index.ts +14 -0
- package/src/data/contracts.ts +398 -0
- package/src/enum/dex.ts +10 -0
- package/src/enum/index.ts +4 -0
- package/src/enum/polling.ts +8 -0
- package/src/enum/slippage.ts +19 -0
- package/src/enum/txnEnum.ts +101 -0
- package/src/errors/BeraError.ts +202 -0
- package/src/errors/InvalidArgumentError.ts +81 -0
- package/src/errors/NotFoundError.ts +34 -0
- package/src/errors/RequestError.ts +207 -0
- package/src/errors/TransactionFailedError.ts +93 -0
- package/src/errors/assert.ts +144 -0
- package/src/errors/assert.unit.test.ts +110 -0
- package/src/errors/errorMap.ts +1157 -0
- package/src/errors/getErrorMessage.ts +40 -0
- package/src/errors/getRevertReason.integration.test.ts +449 -0
- package/src/errors/getRevertReason.ts +179 -0
- package/src/errors/index.ts +8 -0
- package/src/errors/initBeraError.ts +46 -0
- package/src/errors/parseViemError.ts +239 -0
- package/src/hooks/bend/useGetConvertToAssets.ts +42 -0
- package/src/hooks/dex/useAggregatorsQuotes.ts +502 -0
- package/src/hooks/dex/useAggregatorsRouterFeeBps.ts +34 -0
- package/src/hooks/dex/useAllUserPools.ts +38 -0
- package/src/hooks/dex/useApiPool.ts +53 -0
- package/src/hooks/dex/useBexStatus.ts +1 -0
- package/src/hooks/dex/useCreatePool.ts +437 -0
- package/src/hooks/dex/useExploitedTokens.ts +57 -0
- package/src/hooks/dex/useGlobalLiquidityAndSwapVolume.ts +22 -0
- package/src/hooks/dex/useLiquidityMismatch.ts +195 -0
- package/src/hooks/dex/useLpPosition.ts +115 -0
- package/src/hooks/dex/useMultipleTokenApprovalsWithSlippage.ts +92 -0
- package/src/hooks/dex/useOnChainPoolData.ts +126 -0
- package/src/hooks/dex/usePollPoolCreationRelayerApproval.ts +54 -0
- package/src/hooks/dex/usePollVaultIsPaused.ts +30 -0
- package/src/hooks/dex/usePool.ts +59 -0
- package/src/hooks/dex/usePoolEvents.ts +22 -0
- package/src/hooks/dex/usePoolHistoricalData.ts +44 -0
- package/src/hooks/dex/usePools.ts +83 -0
- package/src/hooks/enso/useBendTransactionRequests.ts +247 -0
- package/src/hooks/enso/useEnsoZap.ts +166 -0
- package/src/hooks/enso/useZapTransactionRequests.ts +81 -0
- package/src/hooks/governance/useCreateProposal.ts +88 -0
- package/src/hooks/governance/useGetPastVotes.ts +63 -0
- package/src/hooks/governance/useHasVoted.ts +38 -0
- package/src/hooks/governance/useIsCanceller.ts +43 -0
- package/src/hooks/governance/usePollAllProposals.ts +232 -0
- package/src/hooks/governance/usePollProposal.ts +96 -0
- package/src/hooks/governance/usePollProposalThreshold.ts +41 -0
- package/src/hooks/governance/usePollProposalVotes.ts +64 -0
- package/src/hooks/governance/usePollUserDelegates.ts +70 -0
- package/src/hooks/governance/useProposalFromTx.ts +37 -0
- package/src/hooks/governance/useProposalSnapshot.ts +44 -0
- package/src/hooks/governance/useProposalState.ts +48 -0
- package/src/hooks/governance/useProposalTimelockState.ts +61 -0
- package/src/hooks/governance/useQuorum.ts +42 -0
- package/src/hooks/honey/useCappedGlobally.ts +92 -0
- package/src/hooks/honey/useCappedRelatively.ts +88 -0
- package/src/hooks/honey/useCollateralWeights.ts +48 -0
- package/src/hooks/honey/useHoneyAlerts.ts +314 -0
- package/src/hooks/honey/useHoneyBalances.ts +79 -0
- package/src/hooks/honey/useHoneyChartData.ts +17 -0
- package/src/hooks/honey/useHoneyGlobalData.ts +22 -0
- package/src/hooks/honey/useHoneySwapState.ts +202 -0
- package/src/hooks/honey/useHoneyVaultsBalance.ts +41 -0
- package/src/hooks/honey/useIsBadCollateralAsset.ts +73 -0
- package/src/hooks/honey/useIsBasketModeEnabled.ts +70 -0
- package/src/hooks/honey/usePythLatestPrices.ts +41 -0
- package/src/hooks/index.ts +124 -0
- package/src/hooks/perps/usePythUpdateFee.ts +43 -0
- package/src/hooks/pol/useBgtAprSimulation.ts +22 -0
- package/src/hooks/pol/useBgtUnstakedBalance.ts +50 -0
- package/src/hooks/pol/useClaimableFees.ts +38 -0
- package/src/hooks/pol/useEarnedStakedBeraVault.ts +59 -0
- package/src/hooks/pol/useHighestVaultsAPR.ts +57 -0
- package/src/hooks/pol/useOnChainRewardVault.ts +114 -0
- package/src/hooks/pol/usePollGlobalData.ts +31 -0
- package/src/hooks/pol/usePollMarkets.ts +32 -0
- package/src/hooks/pol/useQueuedBeraUnlock.ts +70 -0
- package/src/hooks/pol/useRewardTokenToBeraRate.ts +45 -0
- package/src/hooks/pol/useRewardVault.ts +51 -0
- package/src/hooks/pol/useRewardVaultBalanceFromStakingToken.ts +82 -0
- package/src/hooks/pol/useRewardVaultFromToken.ts +58 -0
- package/src/hooks/pol/useRewardVaultIncentives.ts +37 -0
- package/src/hooks/pol/useRewardVaultRewards.ts +37 -0
- package/src/hooks/pol/useRewardVaults.ts +45 -0
- package/src/hooks/pol/useStakedBeraSnapshots.ts +27 -0
- package/src/hooks/pol/useUserVaultInfo.ts +46 -0
- package/src/hooks/pol/useUserVaults.ts +40 -0
- package/src/hooks/pol/useVaultAddress.ts +31 -0
- package/src/hooks/pol/useVaultHistory.ts +29 -0
- package/src/hooks/pol/useVaultValidators.ts +33 -0
- package/src/hooks/tokens/useBeraCurrentPrice.ts +12 -0
- package/src/hooks/tokens/useMultipleTokenInformation.ts +62 -0
- package/src/hooks/tokens/usePollAllowances.ts +60 -0
- package/src/hooks/tokens/usePollBalance.ts +113 -0
- package/src/hooks/tokens/usePollWalletBalances.ts +75 -0
- package/src/hooks/tokens/useStakingTokenInformation.ts +54 -0
- package/src/hooks/tokens/useTokenCurrentPrice.ts +19 -0
- package/src/hooks/tokens/useTokenCurrentPrices.ts +57 -0
- package/src/hooks/tokens/useTokenInformation.ts +59 -0
- package/src/hooks/tokens/useTokens.ts +26 -0
- package/src/hooks/tokens/useTotalSupply.ts +22 -0
- package/src/hooks/transactions/TransactionStoreContext.tsx +59 -0
- package/src/hooks/transactions/transactionStore.ts +275 -0
- package/src/hooks/transactions/transactionStore.unit.test.ts +508 -0
- package/src/hooks/transactions/useAddRecentTransaction.ts +29 -0
- package/src/hooks/transactions/useRecentTransactions.ts +27 -0
- package/src/hooks/useBlockToTimestamp.ts +51 -0
- package/src/hooks/useContractWrite/index.ts +2 -0
- package/src/hooks/useContractWrite/stateReducer.ts +60 -0
- package/src/hooks/useContractWrite/types.ts +88 -0
- package/src/hooks/useContractWrite/useBeraContractWrite.ts +137 -0
- package/src/hooks/useGetVerifiedAbi.ts +47 -0
- package/src/hooks/useHistoryState.ts +64 -0
- package/src/hooks/usePrevious.ts +13 -0
- package/src/hooks/validators/useAllValidators.ts +48 -0
- package/src/hooks/validators/useApiEnrichedAllocation.ts +17 -0
- package/src/hooks/validators/useApiValidator.ts +37 -0
- package/src/hooks/validators/useBaselineRewardAllocation.ts +16 -0
- package/src/hooks/validators/useDailyValidatorBlockStats.ts +35 -0
- package/src/hooks/validators/useDefaultRewardAllocation.ts +32 -0
- package/src/hooks/validators/useManagedValidatorByAccount.ts +40 -0
- package/src/hooks/validators/useManagedValidatorRole.ts +119 -0
- package/src/hooks/validators/useOnChainValidator.ts +66 -0
- package/src/hooks/validators/useStakingPoolBatch.ts +45 -0
- package/src/hooks/validators/useSubgraphUserValidators.ts +36 -0
- package/src/hooks/validators/useUserActiveValidators.ts +44 -0
- package/src/hooks/validators/useUserBoostsOnValidator.ts +45 -0
- package/src/hooks/validators/useUserClaimableIncentives.ts +149 -0
- package/src/hooks/validators/useUserStakingPositions.ts +62 -0
- package/src/hooks/validators/useValidator.ts +83 -0
- package/src/hooks/validators/useValidatorAnalytics.ts +36 -0
- package/src/hooks/validators/useValidatorCommission.ts +36 -0
- package/src/hooks/validators/useValidatorEstimatedBgtPerYear.ts +24 -0
- package/src/hooks/validators/useValidatorQueuedCommission.ts +41 -0
- package/src/hooks/validators/useValidatorQueuedOperatorAddress.ts +39 -0
- package/src/hooks/validators/useValidatorQueuedRewardAllocation.ts +37 -0
- package/src/hooks/validators/useValidatorRewardAllocation.ts +36 -0
- package/src/hooks/validators/validatorRoleManager.ts +0 -0
- package/src/types/bribe-boost.ts +50 -0
- package/src/types/dex.ts +196 -0
- package/src/types/enso.ts +42 -0
- package/src/types/global.ts +230 -0
- package/src/types/governance.ts +174 -0
- package/src/types/honeySwap.ts +35 -0
- package/src/types/index.ts +8 -0
- package/src/types/pol.ts +52 -0
- package/src/types/staking.ts +7 -0
- package/src/utils/beraFetch.ts +55 -0
- package/src/utils/constants.ts +35 -0
- package/src/utils/formatAggregatorsQuotes.ts +57 -0
- package/src/utils/formatAggregatorsQuotes.unit.test.ts +191 -0
- package/src/utils/formatIncentivesTokenMap.ts +19 -0
- package/src/utils/formatInputTokenValue.ts +12 -0
- package/src/utils/formatNumber.ts +225 -0
- package/src/utils/formatNumber.unit.test.ts +245 -0
- package/src/utils/formatTimestamps.ts +155 -0
- package/src/utils/formatTimestamps.unit.test.ts +395 -0
- package/src/utils/formatTokenList.ts +61 -0
- package/src/utils/formatUsd.ts +46 -0
- package/src/utils/getContractName.ts +27 -0
- package/src/utils/getContractName.unit.test.ts +64 -0
- package/src/utils/getErrorResponse.ts +20 -0
- package/src/utils/getHoneySwapMessage.test.ts +116 -0
- package/src/utils/getHoneySwapMessage.ts +70 -0
- package/src/utils/getServerSideClient.ts +49 -0
- package/src/utils/getTestClient.ts +19 -0
- package/src/utils/hasAnyTruthyValues.ts +17 -0
- package/src/utils/index.ts +27 -0
- package/src/utils/isDifferenceExceedingThreshold.ts +13 -0
- package/src/utils/isSubgraphStale.ts +10 -0
- package/src/utils/math.ts +28 -0
- package/src/utils/math.unit.test.ts +49 -0
- package/src/utils/parseBaseArgs.ts +23 -0
- package/src/utils/parseBaseArgs.unit.test.ts +55 -0
- package/src/utils/poolNamings.ts +54 -0
- package/src/utils/pythHoneyUtils.ts +3 -0
- package/src/utils/sentryBeforeSend.ts +52 -0
- package/src/utils/test-utils.ts +2 -0
- package/src/utils/time.ts +106 -0
- package/src/utils/time.unit.test.ts +76 -0
- package/src/utils/tokenWrapping.ts +16 -0
- package/src/utils/tokens.ts +106 -0
- package/src/utils/tokens.unit.test.ts +98 -0
- package/src/utils/truncateHash.ts +20 -0
- package/src/utils/truncateHash.unit.test.ts +19 -0
- package/src/utils/validatorUptimeStatus.ts +30 -0
- package/dist/chunk-3V2MGZRD.mjs +0 -2
- package/dist/chunk-4E5JGLUM.cjs +0 -1
- package/dist/chunk-AHAZC5K3.mjs +0 -1
- package/dist/chunk-ELUMRVNE.mjs +0 -1
- package/dist/chunk-JHCSZSJS.mjs +0 -1
- package/dist/chunk-KIA6GUIN.cjs +0 -1
- package/dist/chunk-LX5CM4Y6.cjs +0 -1
- package/dist/chunk-LZPBQLKP.mjs +0 -3
- package/dist/chunk-M5BKM52U.cjs +0 -1
- package/dist/chunk-MTBICGRP.mjs +0 -1
- package/dist/chunk-WDFIETJS.cjs +0 -2
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { PoolType } from "@berachain-foundation/berancer-sdk";
|
|
3
|
+
import useSWRImmutable from "swr/immutable";
|
|
4
|
+
import {
|
|
5
|
+
type Address,
|
|
6
|
+
formatUnits,
|
|
7
|
+
keccak256,
|
|
8
|
+
parseUnits,
|
|
9
|
+
zeroAddress,
|
|
10
|
+
} from "viem";
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
GetDedupedSubgraphPools,
|
|
14
|
+
type GetDedupedSubgraphPoolsQuery,
|
|
15
|
+
type SubgraphPoolFragment,
|
|
16
|
+
} from "@berachain/graphql/dex/subgraph";
|
|
17
|
+
|
|
18
|
+
import { balancerPoolCreationHelperAbi } from "~/abi/bex/balancerPoolCreationHelper";
|
|
19
|
+
import { getApolloClient } from "~/actions/clients/getApolloClient";
|
|
20
|
+
import { TransactionActionType } from "~/enum/txnEnum";
|
|
21
|
+
import type { IContractWrite, Token, TokenInput } from "~/types";
|
|
22
|
+
import { DEFAULT_METAMASK_GAS_LIMIT } from "~/utils";
|
|
23
|
+
import { parseBaseArgs } from "~/utils/parseBaseArgs";
|
|
24
|
+
import { generatePoolName, generatePoolSymbol } from "~/utils/poolNamings";
|
|
25
|
+
import { isToken } from "~/utils/tokens";
|
|
26
|
+
import { wrapNativeTokens } from "~/utils/tokenWrapping";
|
|
27
|
+
|
|
28
|
+
const DEFAULT_WEIGHTS_DUPLICATION_THRESHOLD = 0.005;
|
|
29
|
+
interface UseCreatePoolProps extends BeraJS.BaseFunctionArgs {
|
|
30
|
+
poolCreateTokens: Token[];
|
|
31
|
+
initialLiquidityTokens: TokenInput[];
|
|
32
|
+
normalizedWeights: bigint[]; // NOTE: if you pass weights that have off-by-1 errors pool create will fail (ex: 0.3 repeating)
|
|
33
|
+
poolType: PoolType;
|
|
34
|
+
swapFee: number;
|
|
35
|
+
owner: string;
|
|
36
|
+
poolSymbol: string;
|
|
37
|
+
poolName: string;
|
|
38
|
+
amplification: number;
|
|
39
|
+
weightsDuplicationThreshold?: number;
|
|
40
|
+
oracles: Oracle[]; // NOTE: the default state for oracles should be 0x0 address for each token with cache duration of ~100
|
|
41
|
+
}
|
|
42
|
+
interface UseCreatePoolReturn {
|
|
43
|
+
generatedPoolName: string;
|
|
44
|
+
generatedPoolSymbol: string;
|
|
45
|
+
isDupePool: boolean;
|
|
46
|
+
dupePool?: SubgraphPoolFragment | null;
|
|
47
|
+
createPoolArgs: any;
|
|
48
|
+
isLoadingPools: boolean;
|
|
49
|
+
errorLoadingPools: boolean;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export enum OracleMode {
|
|
53
|
+
None = "None",
|
|
54
|
+
Custom = "Custom",
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface Oracle {
|
|
58
|
+
mode: OracleMode;
|
|
59
|
+
address: string;
|
|
60
|
+
tokenAddress: string;
|
|
61
|
+
cacheDuration: number;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const createStablePoolArgs = ({
|
|
65
|
+
poolCreationHelper,
|
|
66
|
+
poolCreateTokens,
|
|
67
|
+
initialLiquidityTokens,
|
|
68
|
+
swapFeePercentage,
|
|
69
|
+
salt,
|
|
70
|
+
poolName,
|
|
71
|
+
poolSymbol,
|
|
72
|
+
owner,
|
|
73
|
+
amplification,
|
|
74
|
+
oracles,
|
|
75
|
+
message,
|
|
76
|
+
actionType,
|
|
77
|
+
gasLimit = DEFAULT_METAMASK_GAS_LIMIT,
|
|
78
|
+
}: {
|
|
79
|
+
poolCreationHelper: Address;
|
|
80
|
+
poolCreateTokens: Token[];
|
|
81
|
+
initialLiquidityTokens: TokenInput[];
|
|
82
|
+
swapFeePercentage: bigint;
|
|
83
|
+
salt: string;
|
|
84
|
+
poolName: string;
|
|
85
|
+
poolSymbol: string;
|
|
86
|
+
owner: string;
|
|
87
|
+
amplification: number;
|
|
88
|
+
oracles: Oracle[];
|
|
89
|
+
message: string;
|
|
90
|
+
actionType: TransactionActionType;
|
|
91
|
+
gasLimit?: bigint;
|
|
92
|
+
}) => {
|
|
93
|
+
// Map and sort pool creation token addresses NOTE: we should never see BERA in this array.
|
|
94
|
+
const sortedPoolCreateAddresses = poolCreateTokens
|
|
95
|
+
.map((token) => token.address.toLowerCase())
|
|
96
|
+
.sort((a, b) => (a < b ? -1 : 1));
|
|
97
|
+
|
|
98
|
+
const combinedData = sortedPoolCreateAddresses.map((address) => {
|
|
99
|
+
// Match with initial liquidity tokens
|
|
100
|
+
const liquidityToken = initialLiquidityTokens.find(
|
|
101
|
+
(token) =>
|
|
102
|
+
token.address.toLowerCase() === address ||
|
|
103
|
+
(isToken(address, "WBERA") && isToken(token.address, "BERA")),
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
const amountIn = liquidityToken
|
|
107
|
+
? parseUnits(liquidityToken.amount, liquidityToken.decimals)
|
|
108
|
+
: 0n; // FIXME we need to throw errors from here if zipping fails.
|
|
109
|
+
|
|
110
|
+
// Match with oracles
|
|
111
|
+
const oracle = oracles.find(
|
|
112
|
+
(oracle) => oracle.tokenAddress.toLowerCase() === address.toLowerCase(),
|
|
113
|
+
);
|
|
114
|
+
const rateProvider = oracle ? oracle.address : zeroAddress;
|
|
115
|
+
const cacheDuration = oracle ? BigInt(oracle.cacheDuration) : BigInt(100);
|
|
116
|
+
|
|
117
|
+
return { amountIn, rateProvider, cacheDuration };
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
// Extract results into separate arrays
|
|
121
|
+
const sortedAmountsIn = combinedData.map((data) => data.amountIn);
|
|
122
|
+
const sortedRateProviders = combinedData.map((data) => data.rateProvider);
|
|
123
|
+
const sortedCacheDurations = combinedData.map((data) => data.cacheDuration);
|
|
124
|
+
|
|
125
|
+
// Determine if native token (BERA) is included, and if so calculate its value, that is the value of this tx
|
|
126
|
+
const nativeTokenIndex = initialLiquidityTokens.findIndex((token) =>
|
|
127
|
+
isToken(token.address, "BERA"),
|
|
128
|
+
);
|
|
129
|
+
const value =
|
|
130
|
+
nativeTokenIndex !== -1
|
|
131
|
+
? parseUnits(
|
|
132
|
+
initialLiquidityTokens[nativeTokenIndex].amount,
|
|
133
|
+
initialLiquidityTokens[nativeTokenIndex].decimals,
|
|
134
|
+
)
|
|
135
|
+
: 0n;
|
|
136
|
+
const joinWBERAPoolWithBERA = value > 0n;
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
address: poolCreationHelper,
|
|
140
|
+
abi: balancerPoolCreationHelperAbi,
|
|
141
|
+
functionName: "createAndJoinStablePool",
|
|
142
|
+
params: [
|
|
143
|
+
poolName,
|
|
144
|
+
poolSymbol,
|
|
145
|
+
sortedPoolCreateAddresses,
|
|
146
|
+
BigInt(amplification),
|
|
147
|
+
sortedRateProviders,
|
|
148
|
+
sortedCacheDurations,
|
|
149
|
+
false, // Exempt from yield protocol fee NOTE: this should be false for stable pools if rate providers are 0x0
|
|
150
|
+
swapFeePercentage,
|
|
151
|
+
sortedAmountsIn,
|
|
152
|
+
owner as `0x${string}`,
|
|
153
|
+
salt,
|
|
154
|
+
joinWBERAPoolWithBERA,
|
|
155
|
+
],
|
|
156
|
+
message,
|
|
157
|
+
actionType,
|
|
158
|
+
value,
|
|
159
|
+
gasLimit,
|
|
160
|
+
track: {
|
|
161
|
+
eventName: "hub_pool_create",
|
|
162
|
+
eventData: {
|
|
163
|
+
poolName: poolName,
|
|
164
|
+
poolSymbol: poolSymbol,
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
} as IContractWrite<
|
|
168
|
+
typeof balancerPoolCreationHelperAbi,
|
|
169
|
+
"createAndJoinStablePool"
|
|
170
|
+
>;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
const createWeightedPoolArgs = ({
|
|
174
|
+
poolCreationHelper,
|
|
175
|
+
poolCreateTokens,
|
|
176
|
+
initialLiquidityTokens,
|
|
177
|
+
normalizedWeights,
|
|
178
|
+
swapFeePercentage,
|
|
179
|
+
salt,
|
|
180
|
+
poolName,
|
|
181
|
+
poolSymbol,
|
|
182
|
+
owner,
|
|
183
|
+
message,
|
|
184
|
+
actionType,
|
|
185
|
+
gasLimit = DEFAULT_METAMASK_GAS_LIMIT,
|
|
186
|
+
}: {
|
|
187
|
+
poolCreationHelper: Address;
|
|
188
|
+
poolCreateTokens: Token[];
|
|
189
|
+
initialLiquidityTokens: TokenInput[];
|
|
190
|
+
normalizedWeights: bigint[];
|
|
191
|
+
swapFeePercentage: bigint;
|
|
192
|
+
salt: string;
|
|
193
|
+
poolName: string;
|
|
194
|
+
poolSymbol: string;
|
|
195
|
+
owner: string;
|
|
196
|
+
message: string;
|
|
197
|
+
actionType: TransactionActionType;
|
|
198
|
+
gasLimit?: bigint;
|
|
199
|
+
}) => {
|
|
200
|
+
// When joining weighted pools with BERA, we allow it as a joinPoolToken but never as a createPoolToken.
|
|
201
|
+
const createPoolTokens: string[] = [];
|
|
202
|
+
const joinPoolTokens: string[] = [];
|
|
203
|
+
const sortedWeights: bigint[] = [];
|
|
204
|
+
const sortedAmountsIn: bigint[] = [];
|
|
205
|
+
|
|
206
|
+
poolCreateTokens
|
|
207
|
+
.map((token, index) => {
|
|
208
|
+
return {
|
|
209
|
+
createToken: token.address,
|
|
210
|
+
joinToken: initialLiquidityTokens[index].address, // NOTE: this will allow native token as a join token
|
|
211
|
+
weight: normalizedWeights[index],
|
|
212
|
+
amountIn: parseUnits(
|
|
213
|
+
initialLiquidityTokens[index].amount,
|
|
214
|
+
initialLiquidityTokens[index].decimals,
|
|
215
|
+
),
|
|
216
|
+
};
|
|
217
|
+
})
|
|
218
|
+
.sort((a, b) =>
|
|
219
|
+
a.createToken.toLowerCase() < b.createToken.toLowerCase() ? -1 : 1,
|
|
220
|
+
)
|
|
221
|
+
.forEach((item) => {
|
|
222
|
+
createPoolTokens.push(item.createToken);
|
|
223
|
+
joinPoolTokens.push(item.joinToken);
|
|
224
|
+
sortedWeights.push(item.weight);
|
|
225
|
+
sortedAmountsIn.push(item.amountIn);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
// Determine if native token (BERA) is involved and calculate its value, that is the value of this tx
|
|
229
|
+
const nativeTokenIndex = joinPoolTokens.indexOf(zeroAddress);
|
|
230
|
+
const value =
|
|
231
|
+
nativeTokenIndex !== -1 ? sortedAmountsIn[nativeTokenIndex] : 0n;
|
|
232
|
+
|
|
233
|
+
return {
|
|
234
|
+
address: poolCreationHelper,
|
|
235
|
+
abi: balancerPoolCreationHelperAbi,
|
|
236
|
+
functionName: "createAndJoinWeightedPool",
|
|
237
|
+
params: [
|
|
238
|
+
poolName,
|
|
239
|
+
poolSymbol,
|
|
240
|
+
createPoolTokens,
|
|
241
|
+
joinPoolTokens,
|
|
242
|
+
sortedWeights,
|
|
243
|
+
Array(createPoolTokens.length).fill(zeroAddress),
|
|
244
|
+
swapFeePercentage,
|
|
245
|
+
sortedAmountsIn,
|
|
246
|
+
owner as `0x${string}`,
|
|
247
|
+
salt,
|
|
248
|
+
],
|
|
249
|
+
message,
|
|
250
|
+
actionType,
|
|
251
|
+
value,
|
|
252
|
+
gasLimit,
|
|
253
|
+
track: {
|
|
254
|
+
eventName: "hub_pool_create",
|
|
255
|
+
eventData: {
|
|
256
|
+
poolName: poolName,
|
|
257
|
+
poolSymbol: poolSymbol,
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
} as IContractWrite<
|
|
261
|
+
typeof balancerPoolCreationHelperAbi,
|
|
262
|
+
"createAndJoinWeightedPool"
|
|
263
|
+
>;
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
export const useCreatePool = ({
|
|
267
|
+
poolCreateTokens,
|
|
268
|
+
initialLiquidityTokens,
|
|
269
|
+
normalizedWeights,
|
|
270
|
+
poolType,
|
|
271
|
+
poolName,
|
|
272
|
+
poolSymbol,
|
|
273
|
+
swapFee,
|
|
274
|
+
owner,
|
|
275
|
+
amplification,
|
|
276
|
+
oracles,
|
|
277
|
+
weightsDuplicationThreshold = DEFAULT_WEIGHTS_DUPLICATION_THRESHOLD,
|
|
278
|
+
...baseArgs
|
|
279
|
+
}: UseCreatePoolProps): UseCreatePoolReturn => {
|
|
280
|
+
// 1. identify if the pool is a duplicate
|
|
281
|
+
const {
|
|
282
|
+
data: dupePool,
|
|
283
|
+
error: errorLoadingPools,
|
|
284
|
+
isLoading: isLoadingPools,
|
|
285
|
+
} = useSWRImmutable<SubgraphPoolFragment | null>(
|
|
286
|
+
[
|
|
287
|
+
"useCreatePool__deduped_pool",
|
|
288
|
+
poolCreateTokens,
|
|
289
|
+
poolType,
|
|
290
|
+
normalizedWeights,
|
|
291
|
+
],
|
|
292
|
+
async () => {
|
|
293
|
+
if (poolCreateTokens.length === 0 || !poolType) {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
const bexSubgraphClient = getApolloClient("bex.subgraph", {});
|
|
297
|
+
try {
|
|
298
|
+
// NOTE: it should not be possible for native token to be in poolCreateTokens
|
|
299
|
+
const tokensSorted = wrapNativeTokens(poolCreateTokens)
|
|
300
|
+
.map((token) => token.address.toLowerCase())
|
|
301
|
+
.sort((a, b) => (a.toLowerCase() < b.toLowerCase() ? -1 : 1));
|
|
302
|
+
|
|
303
|
+
// fetch pools of the same type as the one we are creating
|
|
304
|
+
const res = await bexSubgraphClient.query<GetDedupedSubgraphPoolsQuery>(
|
|
305
|
+
{
|
|
306
|
+
query: GetDedupedSubgraphPools,
|
|
307
|
+
variables: {
|
|
308
|
+
tokens: tokensSorted,
|
|
309
|
+
type: poolType,
|
|
310
|
+
},
|
|
311
|
+
},
|
|
312
|
+
);
|
|
313
|
+
|
|
314
|
+
const matchingPools = res.data.pools.filter((pool) => {
|
|
315
|
+
return pool.tokens?.every((token) =>
|
|
316
|
+
poolType === PoolType.Weighted
|
|
317
|
+
? // in weighted pools, a dupe is if tokens and weights match within tolerance FIXME: we aren't getting weighted pools returned here
|
|
318
|
+
tokensSorted.includes(token.address) &&
|
|
319
|
+
Math.abs(
|
|
320
|
+
Number(token.weight) -
|
|
321
|
+
Number(
|
|
322
|
+
formatUnits(
|
|
323
|
+
normalizedWeights[tokensSorted.indexOf(token.address)],
|
|
324
|
+
18,
|
|
325
|
+
),
|
|
326
|
+
),
|
|
327
|
+
) < weightsDuplicationThreshold
|
|
328
|
+
: // in composable pools a dupe is if the tokens match, handling that the LP token is in the tokens list
|
|
329
|
+
tokensSorted.includes(token.address) ||
|
|
330
|
+
token.address === pool.address,
|
|
331
|
+
);
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
return matchingPools?.at(0) ?? null;
|
|
335
|
+
} catch {
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
);
|
|
340
|
+
|
|
341
|
+
// Generated names
|
|
342
|
+
const { generatedPoolName, generatedPoolSymbol } = useMemo(() => {
|
|
343
|
+
if (!poolCreateTokens) {
|
|
344
|
+
return {
|
|
345
|
+
generatedPoolName: "",
|
|
346
|
+
generatedPoolSymbol: "",
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
const generatedPoolName = generatePoolName(poolCreateTokens);
|
|
350
|
+
const generatedPoolSymbol = generatePoolSymbol(
|
|
351
|
+
poolCreateTokens,
|
|
352
|
+
normalizedWeights,
|
|
353
|
+
poolType,
|
|
354
|
+
);
|
|
355
|
+
|
|
356
|
+
return {
|
|
357
|
+
generatedPoolName,
|
|
358
|
+
generatedPoolSymbol,
|
|
359
|
+
};
|
|
360
|
+
}, [poolCreateTokens, normalizedWeights, poolType]);
|
|
361
|
+
|
|
362
|
+
// Pool create tx
|
|
363
|
+
const createPoolArgs = useMemo(() => {
|
|
364
|
+
if (
|
|
365
|
+
!owner ||
|
|
366
|
+
poolName === "" ||
|
|
367
|
+
poolSymbol === "" ||
|
|
368
|
+
poolCreateTokens.length !== initialLiquidityTokens.length ||
|
|
369
|
+
poolCreateTokens.length === 0
|
|
370
|
+
) {
|
|
371
|
+
return null;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
const swapFeePercentage = parseUnits(swapFee.toString(), 16);
|
|
375
|
+
const salt = keccak256(Buffer.from(`${poolName}-${owner}`));
|
|
376
|
+
const { config: chainConfig } = parseBaseArgs(baseArgs);
|
|
377
|
+
|
|
378
|
+
if (poolType === PoolType.Weighted) {
|
|
379
|
+
return createWeightedPoolArgs({
|
|
380
|
+
poolCreationHelper: chainConfig.bex.poolCreationHelper,
|
|
381
|
+
poolCreateTokens,
|
|
382
|
+
initialLiquidityTokens,
|
|
383
|
+
normalizedWeights,
|
|
384
|
+
swapFeePercentage,
|
|
385
|
+
salt,
|
|
386
|
+
poolName,
|
|
387
|
+
poolSymbol,
|
|
388
|
+
owner,
|
|
389
|
+
message: `Create pool ${poolName}`,
|
|
390
|
+
actionType: TransactionActionType.CREATE_POOL,
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
if (
|
|
395
|
+
poolType === PoolType.ComposableStable ||
|
|
396
|
+
poolType === PoolType.MetaStable
|
|
397
|
+
) {
|
|
398
|
+
return createStablePoolArgs({
|
|
399
|
+
poolCreationHelper: chainConfig.bex.poolCreationHelper,
|
|
400
|
+
poolCreateTokens,
|
|
401
|
+
initialLiquidityTokens,
|
|
402
|
+
swapFeePercentage,
|
|
403
|
+
salt,
|
|
404
|
+
poolName,
|
|
405
|
+
poolSymbol,
|
|
406
|
+
owner,
|
|
407
|
+
amplification,
|
|
408
|
+
oracles,
|
|
409
|
+
message: `Create pool ${poolName}`,
|
|
410
|
+
actionType: TransactionActionType.CREATE_POOL,
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
return null;
|
|
415
|
+
}, [
|
|
416
|
+
poolCreateTokens,
|
|
417
|
+
initialLiquidityTokens,
|
|
418
|
+
normalizedWeights,
|
|
419
|
+
poolType,
|
|
420
|
+
swapFee,
|
|
421
|
+
poolName,
|
|
422
|
+
poolSymbol,
|
|
423
|
+
owner,
|
|
424
|
+
amplification,
|
|
425
|
+
oracles,
|
|
426
|
+
]);
|
|
427
|
+
|
|
428
|
+
return {
|
|
429
|
+
generatedPoolName,
|
|
430
|
+
generatedPoolSymbol,
|
|
431
|
+
isDupePool: !!dupePool,
|
|
432
|
+
dupePool,
|
|
433
|
+
createPoolArgs,
|
|
434
|
+
isLoadingPools,
|
|
435
|
+
errorLoadingPools,
|
|
436
|
+
};
|
|
437
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import useSWR from "swr";
|
|
2
|
+
import type { Address } from "viem";
|
|
3
|
+
|
|
4
|
+
import { usePublicClient } from "@berachain/wagmi/hooks";
|
|
5
|
+
|
|
6
|
+
import { getIsTokenExploited } from "~/actions/dex/getIsTokenExploited";
|
|
7
|
+
import { assertPublicClient } from "~/errors/assert";
|
|
8
|
+
import type { Token } from "~/types";
|
|
9
|
+
|
|
10
|
+
export const useExploitedTokensQueryKey = (tokens: Token[] | undefined) => {
|
|
11
|
+
const filteredTokens = tokens?.filter((token) => token.address);
|
|
12
|
+
if (!filteredTokens || filteredTokens.length === 0) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return ["useExploitedTokens", filteredTokens] as const;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* This hook checks if any of provided tokens might have been exploited by frontrunning its deployment.
|
|
19
|
+
*
|
|
20
|
+
* @see {@link getIsTokenExploited} for more details
|
|
21
|
+
* @returns a record of tokens and whether they might have been exploited
|
|
22
|
+
*/
|
|
23
|
+
export const useExploitedTokens = ({
|
|
24
|
+
tokens,
|
|
25
|
+
}: {
|
|
26
|
+
tokens: Token[] | undefined;
|
|
27
|
+
}) => {
|
|
28
|
+
const QUERY_KEY = useExploitedTokensQueryKey(tokens);
|
|
29
|
+
const publicClient = usePublicClient();
|
|
30
|
+
const swrResponse = useSWR(
|
|
31
|
+
publicClient ? QUERY_KEY : null,
|
|
32
|
+
async ([, tokens]) => {
|
|
33
|
+
assertPublicClient(publicClient);
|
|
34
|
+
|
|
35
|
+
const exploitedTokens = await Promise.all(
|
|
36
|
+
tokens.map((token) =>
|
|
37
|
+
getIsTokenExploited({
|
|
38
|
+
token,
|
|
39
|
+
publicClient,
|
|
40
|
+
}),
|
|
41
|
+
),
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
return exploitedTokens.reduce<Record<Address, boolean>>(
|
|
45
|
+
(acc, curr, idx) => {
|
|
46
|
+
if (curr !== undefined) {
|
|
47
|
+
acc[tokens[idx].address] = curr;
|
|
48
|
+
}
|
|
49
|
+
return acc;
|
|
50
|
+
},
|
|
51
|
+
{},
|
|
52
|
+
);
|
|
53
|
+
},
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
return { ...swrResponse, refresh: () => swrResponse.mutate() };
|
|
57
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import useSWR from "swr";
|
|
2
|
+
|
|
3
|
+
import { getGlobalLiquidityAndSwapVolume } from "~/actions/dex/getGlobalLiquidityAndSwapVolume";
|
|
4
|
+
|
|
5
|
+
export const useGlobalLiquidityAndSwapVolume = () => {
|
|
6
|
+
const response = useSWR("useGlobalLiquidityAndSwapVolume", async () =>
|
|
7
|
+
getGlobalLiquidityAndSwapVolume(),
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
...response,
|
|
12
|
+
data: {
|
|
13
|
+
totalLiquidity: Number(
|
|
14
|
+
response.data?.protocolMetricsAggregated.totalLiquidity,
|
|
15
|
+
),
|
|
16
|
+
swapVolume24h: Number(
|
|
17
|
+
response.data?.protocolMetricsAggregated.swapVolume24h,
|
|
18
|
+
),
|
|
19
|
+
},
|
|
20
|
+
refresh: () => response.mutate(),
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import { PoolType } from "@berachain-foundation/berancer-sdk";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
PoolCreationStep,
|
|
6
|
+
type TokenCurrentPriceMap,
|
|
7
|
+
type TokenWithAmount,
|
|
8
|
+
} from "~/types";
|
|
9
|
+
import { wrapNativeTokens } from "~/utils/tokenWrapping";
|
|
10
|
+
import { type Oracle, OracleMode } from "./useCreatePool";
|
|
11
|
+
|
|
12
|
+
const DEFAULT_LIQUIDITY_MISMATCH_TOLERANCE_PERCENT = 0.05; // 5%
|
|
13
|
+
|
|
14
|
+
export type LiquidityMismatchInfo = {
|
|
15
|
+
title: string | null;
|
|
16
|
+
message: string | null;
|
|
17
|
+
suggestWeighted?: boolean;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
interface UseLiquidityMismatchParams {
|
|
21
|
+
currentStep: PoolCreationStep;
|
|
22
|
+
tokenPrices?: TokenCurrentPriceMap;
|
|
23
|
+
isLoadingTokenPrices: boolean;
|
|
24
|
+
tokens: TokenWithAmount[] | null;
|
|
25
|
+
weights: bigint[] | null;
|
|
26
|
+
weightsError: string | null;
|
|
27
|
+
poolType: PoolType;
|
|
28
|
+
liquidityMismatchTolerancePercent?: number;
|
|
29
|
+
oracles: Oracle[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Hook for detecting liquidity mismatches.
|
|
34
|
+
*
|
|
35
|
+
* @param {PoolCreationStep} currentStep - The current step of the pool creation process.
|
|
36
|
+
* @param {Record<string, number>} tokenPrices - The current token prices.
|
|
37
|
+
* @param {boolean} isLoadingTokenPrices - Whether the token prices are still loading.
|
|
38
|
+
* @param {Array<{ address: string, amount: number }>} tokens - The tokens in the pool, including their addresses and amounts.
|
|
39
|
+
* @param {Record<string, number>} weights - The per-token weights in the pool we are creating.
|
|
40
|
+
* @param {string | null} weightsError - An error message for the weights indicating that the weights are invalid.
|
|
41
|
+
* @param {string} poolType - The type of pool being created.
|
|
42
|
+
* @param {number} liquidityMismatchTolerancePercent - The tolerance for liquidity mismatches in percent.
|
|
43
|
+
* @returns {Object} The liquidity mismatch info.
|
|
44
|
+
*/
|
|
45
|
+
export const useLiquidityMismatch = ({
|
|
46
|
+
currentStep,
|
|
47
|
+
tokenPrices,
|
|
48
|
+
isLoadingTokenPrices,
|
|
49
|
+
tokens,
|
|
50
|
+
weights,
|
|
51
|
+
weightsError,
|
|
52
|
+
poolType,
|
|
53
|
+
liquidityMismatchTolerancePercent = DEFAULT_LIQUIDITY_MISMATCH_TOLERANCE_PERCENT,
|
|
54
|
+
oracles,
|
|
55
|
+
}: UseLiquidityMismatchParams): LiquidityMismatchInfo => {
|
|
56
|
+
// NOTE: would be nice to use Maps/Records more in here, as the zipping/unzipping is cumbersome.
|
|
57
|
+
// NOTE: if we pull in string literal for currentStep things would also be a bit clearer in here.
|
|
58
|
+
const [liquidityMismatchInfo, setLiquidityMismatchInfo] =
|
|
59
|
+
useState<LiquidityMismatchInfo>({ title: null, message: null });
|
|
60
|
+
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
// If we are either using custom rate-providing oracles or have incorrect/loading token prices, we cant do validation.
|
|
63
|
+
if (
|
|
64
|
+
!tokenPrices ||
|
|
65
|
+
isLoadingTokenPrices ||
|
|
66
|
+
!tokens ||
|
|
67
|
+
!weights ||
|
|
68
|
+
weightsError ||
|
|
69
|
+
tokens.some((token) => !token.address) ||
|
|
70
|
+
oracles.some((oracle) => oracle.mode === OracleMode.Custom) // Oracles give prices on their own, we dont support that here yet.
|
|
71
|
+
) {
|
|
72
|
+
setLiquidityMismatchInfo({ title: null, message: null });
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Calculate some basic metrics we'll use to determine per-token contributions and model potential losses from arbitrage.
|
|
77
|
+
let totalLiquidityUSD = 0;
|
|
78
|
+
const tokenUSDAmounts: number[] = [];
|
|
79
|
+
const numTokens = tokens.length;
|
|
80
|
+
const wrappedTokens = wrapNativeTokens(tokens);
|
|
81
|
+
const tokenUSDPrices = wrappedTokens.map((token) => {
|
|
82
|
+
const tokenPriceUSD =
|
|
83
|
+
tokenPrices[token.address.toLowerCase()]?.price ?? 0;
|
|
84
|
+
if (!tokenPriceUSD || tokenPriceUSD === 0) {
|
|
85
|
+
tokenUSDAmounts.push(0);
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
const tokenAmountUSD = tokenPriceUSD * Number.parseFloat(token.amount);
|
|
89
|
+
tokenUSDAmounts.push(tokenAmountUSD);
|
|
90
|
+
totalLiquidityUSD += tokenAmountUSD;
|
|
91
|
+
return tokenPriceUSD;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Doesn't matter what step it is, if we have missing token prices for tokens we have selected, we cant issue a real warning.
|
|
95
|
+
if (
|
|
96
|
+
tokenUSDPrices.some((price) => price === null) ||
|
|
97
|
+
tokenUSDPrices.length !== numTokens
|
|
98
|
+
) {
|
|
99
|
+
setLiquidityMismatchInfo({
|
|
100
|
+
title: "Missing token price data",
|
|
101
|
+
message: `One or more token(s) do not have valid market price data. Please verify that token market prices align with the pool
|
|
102
|
+
weightings and your initial liquidity amounts.`,
|
|
103
|
+
});
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Step 1 - During token selection we check for a deviation in the quote prices of the tokens selected (for stable pools).
|
|
108
|
+
if (
|
|
109
|
+
currentStep === PoolCreationStep.SELECT_TOKENS &&
|
|
110
|
+
poolType === PoolType.ComposableStable
|
|
111
|
+
) {
|
|
112
|
+
const normalizedUSDPrices = tokenUSDPrices.map(
|
|
113
|
+
(priceUSD) => priceUSD! / tokenUSDPrices[0]!, // always normalize on the first token's price
|
|
114
|
+
);
|
|
115
|
+
const maxDifference =
|
|
116
|
+
Math.max(...normalizedUSDPrices) - Math.min(...normalizedUSDPrices);
|
|
117
|
+
|
|
118
|
+
if (maxDifference > liquidityMismatchTolerancePercent) {
|
|
119
|
+
setLiquidityMismatchInfo({
|
|
120
|
+
title: "Selected tokens have a significant price deviation",
|
|
121
|
+
message: "Did you mean to create a Weighted pool instead?",
|
|
122
|
+
suggestWeighted: true,
|
|
123
|
+
});
|
|
124
|
+
} else {
|
|
125
|
+
setLiquidityMismatchInfo({ title: null, message: null });
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Validation During Liquidity Input and onwards.
|
|
132
|
+
if (
|
|
133
|
+
totalLiquidityUSD === 0 ||
|
|
134
|
+
tokenUSDAmounts.some((value) => value === 0)
|
|
135
|
+
) {
|
|
136
|
+
// User has not yet entered fully their liquidity values, so return early.
|
|
137
|
+
setLiquidityMismatchInfo({ title: null, message: null });
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Simulate arbitrage for the pool to determine potential losses from arbitrageurs.
|
|
142
|
+
// NOTE: we assume shortfalls and excesses are losses, but in reality the actual losses would be more complex to realise.
|
|
143
|
+
// Balancer does this similarily https://github.com/balancer/frontend-v2/blob/8563b8d33b6bff266148bd48d7ebc89f921374f4/src/components/cards/CreatePool/InitialLiquidity.vue#L75
|
|
144
|
+
let totalLossUSD = 0;
|
|
145
|
+
if (poolType === PoolType.ComposableStable) {
|
|
146
|
+
const expectedPerTokenLiquidityUSD = totalLiquidityUSD / numTokens;
|
|
147
|
+
tokenUSDAmounts.forEach((value) => {
|
|
148
|
+
totalLossUSD += Math.abs(expectedPerTokenLiquidityUSD - value);
|
|
149
|
+
});
|
|
150
|
+
} else if (poolType === PoolType.Weighted) {
|
|
151
|
+
tokenUSDAmounts.forEach((value, index) => {
|
|
152
|
+
const weightProportion = Number(weights[index]) / 1e18;
|
|
153
|
+
const expectedValueUSD = totalLiquidityUSD * weightProportion;
|
|
154
|
+
totalLossUSD += Math.abs(expectedValueUSD - value);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// We'll show a total loss if it's 90% or more
|
|
159
|
+
const isTotalLoss = totalLossUSD >= totalLiquidityUSD * 0.9;
|
|
160
|
+
totalLossUSD = Math.min(totalLossUSD, totalLiquidityUSD);
|
|
161
|
+
const totalLossPercentage = totalLossUSD / totalLiquidityUSD;
|
|
162
|
+
|
|
163
|
+
if (totalLossPercentage > liquidityMismatchTolerancePercent) {
|
|
164
|
+
setLiquidityMismatchInfo({
|
|
165
|
+
// If it's a total loss we dont display a percentage
|
|
166
|
+
title: isTotalLoss
|
|
167
|
+
? "You could lose all of your initial liquidity"
|
|
168
|
+
: `You could lose $${totalLossUSD.toFixed(2)} (~${(
|
|
169
|
+
totalLossPercentage * 100
|
|
170
|
+
).toFixed(2)}%)`,
|
|
171
|
+
message: `Based on the market token prices, the value of tokens does not align with the specified pool weights.
|
|
172
|
+
This discrepancy could expose you to potential losses from arbitrageurs. ${
|
|
173
|
+
poolType === PoolType.ComposableStable
|
|
174
|
+
? "Did you mean to create a Weighted pool instead?"
|
|
175
|
+
: ""
|
|
176
|
+
}`,
|
|
177
|
+
suggestWeighted: poolType === PoolType.ComposableStable,
|
|
178
|
+
});
|
|
179
|
+
} else {
|
|
180
|
+
// All good bb bb
|
|
181
|
+
setLiquidityMismatchInfo({ title: null, message: null });
|
|
182
|
+
}
|
|
183
|
+
}, [
|
|
184
|
+
currentStep,
|
|
185
|
+
tokenPrices,
|
|
186
|
+
isLoadingTokenPrices,
|
|
187
|
+
tokens,
|
|
188
|
+
weights,
|
|
189
|
+
weightsError,
|
|
190
|
+
poolType,
|
|
191
|
+
liquidityMismatchTolerancePercent,
|
|
192
|
+
oracles,
|
|
193
|
+
]);
|
|
194
|
+
return liquidityMismatchInfo;
|
|
195
|
+
};
|