@berachain/berajs 0.1.1 → 0.2.0

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.
Files changed (638) hide show
  1. package/dist/{BeraError-D1HS_rbb.d.cts → BeraError-_mQdkanr.d.cts} +35 -10
  2. package/dist/{BeraError-D1HS_rbb.d.ts → BeraError-_mQdkanr.d.ts} +35 -10
  3. package/dist/HoneyConfigProvider-CK6mOKFH.d.ts +390 -0
  4. package/dist/HoneyConfigProvider-Ca3ouozs.d.cts +390 -0
  5. package/dist/{RequestError-D8AE6xnI.d.cts → RequestError-A8XJ6QR9.d.cts} +1 -1
  6. package/dist/{RequestError-m4jxyM7D.d.ts → RequestError-Dk97z8rm.d.ts} +1 -1
  7. package/dist/abi/exports.cjs +2 -0
  8. package/dist/abi/exports.cjs.map +1 -0
  9. package/dist/abi/{index.d.cts → exports.d.cts} +12369 -9122
  10. package/dist/abi/{index.d.ts → exports.d.ts} +12369 -9122
  11. package/dist/abi/exports.mjs +2 -0
  12. package/dist/abi/exports.mjs.map +1 -0
  13. package/dist/actions/exports.cjs +2 -0
  14. package/dist/actions/exports.cjs.map +1 -0
  15. package/dist/actions/{index.d.cts → exports.d.cts} +80 -107
  16. package/dist/actions/{index.d.ts → exports.d.ts} +80 -107
  17. package/dist/actions/exports.mjs +2 -0
  18. package/dist/actions/exports.mjs.map +1 -0
  19. package/dist/chunk-575OK77P.mjs +2 -0
  20. package/dist/chunk-575OK77P.mjs.map +1 -0
  21. package/dist/chunk-7GWTHOLO.mjs +2 -0
  22. package/dist/chunk-7GWTHOLO.mjs.map +1 -0
  23. package/dist/chunk-7SC4VD3U.cjs +2 -0
  24. package/dist/chunk-7SC4VD3U.cjs.map +1 -0
  25. package/dist/chunk-BHNQX4XC.mjs +2 -0
  26. package/dist/chunk-BHNQX4XC.mjs.map +1 -0
  27. package/dist/chunk-BOYZVULX.cjs +2 -0
  28. package/dist/chunk-BOYZVULX.cjs.map +1 -0
  29. package/dist/chunk-C3FHGFLK.mjs +2 -0
  30. package/dist/chunk-C3FHGFLK.mjs.map +1 -0
  31. package/dist/chunk-C3G5KXCH.mjs +2 -0
  32. package/dist/chunk-C3G5KXCH.mjs.map +1 -0
  33. package/dist/chunk-CYKCYPFR.cjs +2 -0
  34. package/dist/chunk-CYKCYPFR.cjs.map +1 -0
  35. package/dist/chunk-F4BKSBEM.mjs +2 -0
  36. package/dist/chunk-F4BKSBEM.mjs.map +1 -0
  37. package/dist/chunk-FL2N3XHK.cjs +2 -0
  38. package/dist/chunk-FL2N3XHK.cjs.map +1 -0
  39. package/dist/chunk-G6NA6NSM.mjs +4 -0
  40. package/dist/chunk-G6NA6NSM.mjs.map +1 -0
  41. package/dist/chunk-H2QSRMVS.mjs +2 -0
  42. package/dist/chunk-H2QSRMVS.mjs.map +1 -0
  43. package/dist/chunk-IJM76AWK.cjs +4 -0
  44. package/dist/chunk-IJM76AWK.cjs.map +1 -0
  45. package/dist/chunk-MTS5SZLA.mjs +2 -0
  46. package/dist/chunk-MTS5SZLA.mjs.map +1 -0
  47. package/dist/chunk-MUNAP5TM.cjs +2 -0
  48. package/dist/chunk-MUNAP5TM.cjs.map +1 -0
  49. package/dist/chunk-NAXAZJJY.mjs +2 -0
  50. package/dist/chunk-NAXAZJJY.mjs.map +1 -0
  51. package/dist/chunk-OGJMSGB2.mjs +2 -0
  52. package/dist/chunk-OGJMSGB2.mjs.map +1 -0
  53. package/dist/chunk-OIYXOKTT.cjs +2 -0
  54. package/dist/chunk-OIYXOKTT.cjs.map +1 -0
  55. package/dist/chunk-OS5AJMYJ.cjs +2 -0
  56. package/dist/{chunk-EODAKI5K.cjs.map → chunk-OS5AJMYJ.cjs.map} +1 -1
  57. package/dist/chunk-Q3SCM6WL.mjs +2 -0
  58. package/dist/chunk-Q3SCM6WL.mjs.map +1 -0
  59. package/dist/chunk-SWMJQOH6.cjs +2 -0
  60. package/dist/chunk-SWMJQOH6.cjs.map +1 -0
  61. package/dist/chunk-TEBJWAVU.mjs +2 -0
  62. package/dist/chunk-TEBJWAVU.mjs.map +1 -0
  63. package/dist/chunk-TJWKS54T.mjs +2 -0
  64. package/dist/chunk-TJWKS54T.mjs.map +1 -0
  65. package/dist/chunk-UQUWMHVF.cjs +2 -0
  66. package/dist/chunk-UQUWMHVF.cjs.map +1 -0
  67. package/dist/chunk-UXUWSRVV.cjs +2 -0
  68. package/dist/chunk-UXUWSRVV.cjs.map +1 -0
  69. package/dist/chunk-VP7XUOSI.cjs +2 -0
  70. package/dist/chunk-VP7XUOSI.cjs.map +1 -0
  71. package/dist/chunk-VXL2ZZ4X.cjs +2 -0
  72. package/dist/chunk-VXL2ZZ4X.cjs.map +1 -0
  73. package/dist/chunk-WRFDB3QJ.cjs +2 -0
  74. package/dist/chunk-WRFDB3QJ.cjs.map +1 -0
  75. package/dist/chunk-WTCBORPB.cjs +2 -0
  76. package/dist/chunk-WTCBORPB.cjs.map +1 -0
  77. package/dist/chunk-XNJLSA6P.cjs +2 -0
  78. package/dist/chunk-XNJLSA6P.cjs.map +1 -0
  79. package/dist/chunk-YQGZMWDT.mjs +2 -0
  80. package/dist/chunk-YQGZMWDT.mjs.map +1 -0
  81. package/dist/chunk-YXLFOEZN.mjs +2 -0
  82. package/dist/chunk-YXLFOEZN.mjs.map +1 -0
  83. package/dist/chunk-ZAKA4TGK.cjs +2 -0
  84. package/dist/chunk-ZAKA4TGK.cjs.map +1 -0
  85. package/dist/chunk-ZQRACIGR.mjs +2 -0
  86. package/dist/chunk-ZQRACIGR.mjs.map +1 -0
  87. package/dist/contexts/exports.cjs +2 -0
  88. package/dist/contexts/exports.cjs.map +1 -0
  89. package/dist/contexts/{index.d.ts → exports.d.cts} +20 -29
  90. package/dist/contexts/{index.d.cts → exports.d.ts} +20 -29
  91. package/dist/contexts/exports.mjs +2 -0
  92. package/dist/contexts/exports.mjs.map +1 -0
  93. package/dist/contracts-CQIPk0Jc.d.cts +74 -0
  94. package/dist/contracts-CQIPk0Jc.d.ts +74 -0
  95. package/dist/{defaultFlags-V-tJs2K8.d.cts → defaultFlags-d0kPbT0i.d.cts} +1 -1
  96. package/dist/{defaultFlags-V-tJs2K8.d.ts → defaultFlags-d0kPbT0i.d.ts} +1 -1
  97. package/dist/dex-C_BB0b0O.d.cts +37 -0
  98. package/dist/dex-C_BB0b0O.d.ts +37 -0
  99. package/dist/enum/exports.cjs +2 -0
  100. package/dist/enum/exports.cjs.map +1 -0
  101. package/dist/enum/exports.d.cts +24 -0
  102. package/dist/enum/exports.d.ts +24 -0
  103. package/dist/enum/exports.mjs +2 -0
  104. package/dist/enum/exports.mjs.map +1 -0
  105. package/dist/errors/exports.cjs +2 -0
  106. package/dist/errors/exports.cjs.map +1 -0
  107. package/dist/errors/exports.d.cts +385 -0
  108. package/dist/errors/exports.d.ts +385 -0
  109. package/dist/errors/exports.mjs +2 -0
  110. package/dist/{getValidatorQueuedOperatorAddress-BhPVMCTj.d.ts → getValidatorQueuedOperatorAddress-BX35p2Lv.d.ts} +125 -15
  111. package/dist/{getValidatorQueuedOperatorAddress-Cmd7rgYK.d.cts → getValidatorQueuedOperatorAddress-It0GsdvQ.d.cts} +125 -15
  112. package/dist/global.d-Ba-NIojH.d.cts +474 -0
  113. package/dist/global.d-By70bEv2.d.ts +474 -0
  114. package/dist/honey-CYm0RWf4.d.cts +14 -0
  115. package/dist/honey-CYm0RWf4.d.ts +14 -0
  116. package/dist/hooks/exports.cjs +4 -0
  117. package/dist/hooks/exports.cjs.map +1 -0
  118. package/dist/hooks/{index.d.cts → exports.d.cts} +223 -173
  119. package/dist/hooks/{index.d.ts → exports.d.ts} +223 -173
  120. package/dist/hooks/exports.mjs +4 -0
  121. package/dist/hooks/exports.mjs.map +1 -0
  122. package/dist/{BexStatusProvider-nS3NcdxI.d.cts → transactionStore-BvStaXf3.d.ts} +41 -1
  123. package/dist/{BexStatusProvider-nS3NcdxI.d.ts → transactionStore-CQrGYSY2.d.cts} +41 -1
  124. package/dist/{txnEnum-BQKDfaeH.d.cts → txnEnum-BYNbCxla.d.cts} +1 -0
  125. package/dist/{txnEnum-BQKDfaeH.d.ts → txnEnum-BYNbCxla.d.ts} +1 -0
  126. package/dist/types/exports.cjs +1 -0
  127. package/dist/types/exports.cjs.map +1 -0
  128. package/dist/types/exports.d.cts +58 -0
  129. package/dist/types/exports.d.ts +58 -0
  130. package/dist/types/exports.mjs +1 -0
  131. package/dist/{useHoneySwapState-DfmXCavx.d.cts → useHoneySwapState-B-vmIP1b.d.cts} +1 -1
  132. package/dist/{useHoneySwapState-AKDZI2MT.d.ts → useHoneySwapState-D1DKG_Of.d.ts} +1 -1
  133. package/dist/utils/exports.cjs +2 -0
  134. package/dist/utils/exports.cjs.map +1 -0
  135. package/dist/utils/{index.d.cts → exports.d.cts} +84 -21
  136. package/dist/utils/{index.d.ts → exports.d.ts} +84 -21
  137. package/dist/utils/exports.mjs +2 -0
  138. package/dist/utils/exports.mjs.map +1 -0
  139. package/package.json +18 -18
  140. package/src/abi/bend/bundler.ts +60 -0
  141. package/src/abi/bend/generalAdapter.ts +362 -0
  142. package/src/abi/bend/metaMorpho.ts +2584 -0
  143. package/src/abi/bend/morpho.ts +444 -0
  144. package/src/abi/bend/morphoVault.ts +1456 -0
  145. package/src/abi/bend/publicAllocator.ts +355 -0
  146. package/src/abi/bex/aggregatorsRouter.ts +492 -0
  147. package/src/abi/bex/balancerComposableStablePoolFactoryV6.ts +283 -0
  148. package/src/abi/bex/balancerPoolCreationHelper.ts +267 -0
  149. package/src/abi/bex/balancerVault.ts +757 -0
  150. package/src/abi/enso/ensoRouterAbi.ts +140 -0
  151. package/src/abi/exports.ts +38 -0
  152. package/src/abi/governance/governance.ts +1016 -0
  153. package/src/abi/governance/governanceTimelock.ts +589 -0
  154. package/src/abi/honey/collateralVault.ts +1144 -0
  155. package/src/abi/honey/honey.ts +563 -0
  156. package/src/abi/honey/honeyFactory.ts +1270 -0
  157. package/src/abi/honey/honeyFactoryReader.ts +894 -0
  158. package/src/abi/honey/honeyRootOracle.ts +492 -0
  159. package/src/abi/honey/pythPriceOracle.ts +619 -0
  160. package/src/abi/honey/pythWrapper.ts +446 -0
  161. package/src/abi/pol/LSTStakerVault.ts +2032 -0
  162. package/src/abi/pol/beaconDeposit.ts +595 -0
  163. package/src/abi/pol/beraChef.ts +1019 -0
  164. package/src/abi/pol/bgt.ts +1008 -0
  165. package/src/abi/pol/bgtIncentiveDistributor.ts +640 -0
  166. package/src/abi/pol/bgtStaker.ts +1034 -0
  167. package/src/abi/pol/rewardAllocationFactory.ts +408 -0
  168. package/src/abi/pol/rewardVault.ts +1928 -0
  169. package/src/abi/pol/rewardVaultFactory.ts +586 -0
  170. package/src/abi/pol/rewardVaultHelper.ts +882 -0
  171. package/src/abi/pol/stakeBeraVault.ts +1116 -0
  172. package/src/abi/pol/stakeBeraVaultWithdrawalRequest.ts +618 -0
  173. package/src/abi/pol/wbera.ts +366 -0
  174. package/src/abi/pyth/pyth.ts +566 -0
  175. package/src/abi/pyth/pythErrors.ts +72 -0
  176. package/src/abi/utils/EIP7702StatelessDelegator.ts +523 -0
  177. package/src/abi/utils/bundler3errors.ts +6 -0
  178. package/src/abi/utils/commonAbiErrors.ts +9 -0
  179. package/src/abi/utils/erc20errors.ts +74 -0
  180. package/src/abi/utils/merkleDistributor.ts +838 -0
  181. package/src/abi/utils/multicall3.ts +242 -0
  182. package/src/abi/utils/openChainErrors.ts +180 -0
  183. package/src/abi/utils/thirdwebMinimalAccount.ts +616 -0
  184. package/src/abi/utils/upgradableBeacon.ts +86 -0
  185. package/src/actions/bend/getConvertToAssets.ts +23 -0
  186. package/src/actions/bend/getMaxDeposit.ts +21 -0
  187. package/src/actions/clients/BeraApolloClient.ts +127 -0
  188. package/src/actions/clients/getApolloClient.ts +109 -0
  189. package/src/actions/clients/getEnsoClient.ts +24 -0
  190. package/src/actions/dex/__tests__/aggregators.unit.test.ts +109 -0
  191. package/src/actions/dex/__tests__/allPools.integration.test.ts +13 -0
  192. package/src/actions/dex/__tests__/getOnChainPool.unit.test.ts +15 -0
  193. package/src/actions/dex/aggregators/base.ts +232 -0
  194. package/src/actions/dex/aggregators/bex.ts +235 -0
  195. package/src/actions/dex/aggregators/bgt.ts +73 -0
  196. package/src/actions/dex/aggregators/enso/enso.ts +117 -0
  197. package/src/actions/dex/aggregators/enso/ensoErc4626.debug.test.ts +37 -0
  198. package/src/actions/dex/aggregators/enso/ensoErc4626.ts +176 -0
  199. package/src/actions/dex/aggregators/erc4626.ts +122 -0
  200. package/src/actions/dex/aggregators/fly.ts +142 -0
  201. package/src/actions/dex/aggregators/haiku.integration.test.ts +40 -0
  202. package/src/actions/dex/aggregators/haiku.ts +169 -0
  203. package/src/actions/dex/aggregators/honey.ts +254 -0
  204. package/src/actions/dex/aggregators/kyberswap.ts +144 -0
  205. package/src/actions/dex/aggregators/oogabooga.ts +111 -0
  206. package/src/actions/dex/aggregators/openOcean.ts +147 -0
  207. package/src/actions/dex/aggregators/wbera.ts +84 -0
  208. package/src/actions/dex/b-sdk.ts +51 -0
  209. package/src/actions/dex/getAllPools.ts +60 -0
  210. package/src/actions/dex/getApiPool.ts +47 -0
  211. package/src/actions/dex/getGlobalLiquidityAndSwapVolume.ts +29 -0
  212. package/src/actions/dex/getIsTokenExploited.ts +63 -0
  213. package/src/actions/dex/getOnChainPool.ts +216 -0
  214. package/src/actions/dex/getPoolEvents.ts +35 -0
  215. package/src/actions/dex/getPoolHistoricalData.ts +51 -0
  216. package/src/actions/dex/getPoolPausedState.ts +40 -0
  217. package/src/actions/dex/getPoolWithState.ts +24 -0
  218. package/src/actions/dex/getSubgraphPool.ts +30 -0
  219. package/src/actions/dex/getVaultPausedState.ts +21 -0
  220. package/src/actions/enso/getEnsoSwapBundle.ts +77 -0
  221. package/src/actions/enso/getEnsoUserTokensWithBalances.debug.test.ts +73 -0
  222. package/src/actions/enso/getEnsoUserTokensWithBalances.ts +145 -0
  223. package/src/actions/enso/util.ts +60 -0
  224. package/src/actions/exports.ts +110 -0
  225. package/src/actions/governance/__tests__/checkProposalField.unit.test.ts +108 -0
  226. package/src/actions/governance/__tests__/getDecodedFunctionData.integration.test.ts +127 -0
  227. package/src/actions/governance/__tests__/getQuorum.integration.test.ts +39 -0
  228. package/src/actions/governance/checkProposalField.ts +211 -0
  229. package/src/actions/governance/computeActualStatus.ts +154 -0
  230. package/src/actions/governance/constants.ts +7 -0
  231. package/src/actions/governance/getAllProposals.ts +75 -0
  232. package/src/actions/governance/getBodyErrors.ts +28 -0
  233. package/src/actions/governance/getDecodedFunctionData.ts +167 -0
  234. package/src/actions/governance/getProposalDetails.ts +40 -0
  235. package/src/actions/governance/getProposalFromTx.ts +100 -0
  236. package/src/actions/governance/getProposalParams.ts +246 -0
  237. package/src/actions/governance/getProposalVotes.ts +20 -0
  238. package/src/actions/governance/getQuorum.ts +37 -0
  239. package/src/actions/governance/parseProposalBody.ts +73 -0
  240. package/src/actions/honey/getChartData.ts +27 -0
  241. package/src/actions/honey/getCollateralWeights.ts +50 -0
  242. package/src/actions/honey/getGlobalCapLimit.ts +148 -0
  243. package/src/actions/honey/getHoneyCollaterals.ts +140 -0
  244. package/src/actions/honey/getHoneyFees.ts +100 -0
  245. package/src/actions/honey/getHoneyGlobalData.ts +21 -0
  246. package/src/actions/honey/getHoneyPausedState.ts +25 -0
  247. package/src/actions/honey/getHoneyPreview.ts +152 -0
  248. package/src/actions/honey/getHoneyPythPriceOracle.ts +21 -0
  249. package/src/actions/honey/getHoneyRootPriceOracle.ts +23 -0
  250. package/src/actions/honey/getHoneyVaultsBalance.ts +82 -0
  251. package/src/actions/honey/getPythLatestPrices.ts +54 -0
  252. package/src/actions/honey/getRelativeCapLimit.ts +83 -0
  253. package/src/actions/honey/getSharesWithoutFees.ts +65 -0
  254. package/src/actions/honey/getSwapPayload.ts +130 -0
  255. package/src/actions/honey/isBadCollateralAsset.ts +77 -0
  256. package/src/actions/honey/isBasketModeEnabled.ts +47 -0
  257. package/src/actions/honey/tests/pyth.integration.test.ts +62 -0
  258. package/src/actions/misc/getBlockTimestamp.ts +41 -0
  259. package/src/actions/pol/__tests__/getAllValidators.integration.test.ts +55 -0
  260. package/src/actions/pol/__tests__/getValidator.integration.test.ts +32 -0
  261. package/src/actions/pol/__tests__/rewardVaults.integration.test.ts +34 -0
  262. package/src/actions/pol/getBGTGlobalInfo.ts +43 -0
  263. package/src/actions/pol/getBgtAprSimulation.ts +207 -0
  264. package/src/actions/pol/getBgtAprSimultaion.unit.test.ts +297 -0
  265. package/src/actions/pol/getBgtTokenTotalBoosts.ts +30 -0
  266. package/src/actions/pol/getBgtTokenTotalSupply.ts +29 -0
  267. package/src/actions/pol/getBlockTime.ts +43 -0
  268. package/src/actions/pol/getEarnedStakedBeraVault.ts +31 -0
  269. package/src/actions/pol/getGlobalCuttingBoard.ts +25 -0
  270. package/src/actions/pol/getGlobalData.ts +75 -0
  271. package/src/actions/pol/getIncentiveFeeClaimStats.ts +43 -0
  272. package/src/actions/pol/getLSTStakeConfig.ts +67 -0
  273. package/src/actions/pol/getMarkets.ts +36 -0
  274. package/src/actions/pol/getRewardProofsByValidator.ts +49 -0
  275. package/src/actions/pol/getRewardTokenToBeraRate.ts +30 -0
  276. package/src/actions/pol/getRewardVault.ts +54 -0
  277. package/src/actions/pol/getRewardVaultBeaconImplementation.integration.test.ts +18 -0
  278. package/src/actions/pol/getRewardVaultBeaconImplementation.ts +35 -0
  279. package/src/actions/pol/getRewardVaultDurationConstants.integration.test.ts +24 -0
  280. package/src/actions/pol/getRewardVaultDurationConstants.ts +45 -0
  281. package/src/actions/pol/getRewardVaultFromToken.ts +30 -0
  282. package/src/actions/pol/getRewardVaultIncentives.ts +120 -0
  283. package/src/actions/pol/getRewardVaultRewards.ts +109 -0
  284. package/src/actions/pol/getRewardVaultStakingToken.ts +19 -0
  285. package/src/actions/pol/getRewardVaults.ts +105 -0
  286. package/src/actions/pol/getSWBeraVaultMetadata.ts +168 -0
  287. package/src/actions/pol/getSWBeraWithdrawal.ts +179 -0
  288. package/src/actions/pol/getStakeWithdrawalCooldown.ts +19 -0
  289. package/src/actions/pol/getStakedBeraAPR.ts +56 -0
  290. package/src/actions/pol/getStakedBeraSnapshots.ts +48 -0
  291. package/src/actions/pol/getStakingDailyAssets.ts +21 -0
  292. package/src/actions/pol/getStakingTokenInformation.ts +59 -0
  293. package/src/actions/pol/getTotalStakedAmount.ts +47 -0
  294. package/src/actions/pol/getUserClaimableIncentives.ts +40 -0
  295. package/src/actions/pol/getUserVaultInfo.ts +52 -0
  296. package/src/actions/pol/getUserVaults.ts +187 -0
  297. package/src/actions/pol/getUserVaultsBalance.ts +42 -0
  298. package/src/actions/pol/getUserVaultsReward.ts +32 -0
  299. package/src/actions/pol/getVaultHistory.ts +43 -0
  300. package/src/actions/pol/getVaultValidators.ts +31 -0
  301. package/src/actions/pol/getVaultsSupply.ts +28 -0
  302. package/src/actions/prices/__tests__/prices.integration.test.ts +29 -0
  303. package/src/actions/prices/getTokenCurrentPrices.ts +84 -0
  304. package/src/actions/pyth/getHoneyPythFeeds.ts +46 -0
  305. package/src/actions/pyth/getUpdateFee.ts +27 -0
  306. package/src/actions/tokens/getAllowances.ts +86 -0
  307. package/src/actions/tokens/getTokenInformation.ts +60 -0
  308. package/src/actions/tokens/getTokens.ts +19 -0
  309. package/src/actions/tokens/getUnderlyingToken.ts +53 -0
  310. package/src/actions/tokens/getWalletBalances.integration.test.ts +79 -0
  311. package/src/actions/tokens/getWalletBalances.ts +149 -0
  312. package/src/actions/transactions/beraWriteContract.integration.test.ts +263 -0
  313. package/src/actions/transactions/beraWriteContract.ts +722 -0
  314. package/src/actions/validators/getActiveBoostAndCommissionChangeDelay.integration.test.ts +40 -0
  315. package/src/actions/validators/getActiveBoostAndCommissionChangeDelay.ts +109 -0
  316. package/src/actions/validators/getAllValidators.ts +33 -0
  317. package/src/actions/validators/getApiEnrichedAllocation.ts +33 -0
  318. package/src/actions/validators/getApiValidator.ts +38 -0
  319. package/src/actions/validators/getBaselineRewardAllocation.ts +26 -0
  320. package/src/actions/validators/getDailyValidatorBlockStats.ts +37 -0
  321. package/src/actions/validators/getDefaultRewardAllocation.ts +39 -0
  322. package/src/actions/validators/getManagedValidatorByAccount.ts +32 -0
  323. package/src/actions/validators/getStakingPoolBatch.ts +20 -0
  324. package/src/actions/validators/getUserActiveValidators.ts +100 -0
  325. package/src/actions/validators/getUserBoosts.ts +28 -0
  326. package/src/actions/validators/getUserBoostsOnValidator.ts +69 -0
  327. package/src/actions/validators/getUserStakingPositions.ts +225 -0
  328. package/src/actions/validators/getValidatorAnalytics.ts +34 -0
  329. package/src/actions/validators/getValidatorCommission.ts +24 -0
  330. package/src/actions/validators/getValidatorEstimatedBgtPerYear.ts +25 -0
  331. package/src/actions/validators/getValidatorOperatorAddress.ts +27 -0
  332. package/src/actions/validators/getValidatorQueuedCommission.ts +30 -0
  333. package/src/actions/validators/getValidatorQueuedOperatorAddress.ts +32 -0
  334. package/src/actions/validators/getValidatorQueuedRewardAllocation.ts +31 -0
  335. package/src/actions/validators/getValidatorRewardAllocation.ts +158 -0
  336. package/src/actions/validators/getValidatorRewardAllocatorAddress.ts +38 -0
  337. package/src/actions/validators/utils/__tests__/validatorUtils.integration.test.ts +36 -0
  338. package/src/actions/validators/utils/getValidatorBoostApy.ts +59 -0
  339. package/src/contexts/BeraFlags/BeraFlags.tsx +69 -0
  340. package/src/contexts/BeraFlags/defaultFlags.ts +46 -0
  341. package/src/contexts/BexStatusProvider.tsx +125 -0
  342. package/src/contexts/HoneyConfigProvider.tsx +73 -0
  343. package/src/contexts/SwrFallback.tsx +44 -0
  344. package/src/contexts/TokensProvider.tsx +93 -0
  345. package/src/contexts/TransactionStoreContext.tsx +87 -0
  346. package/src/contexts/block-time-provider.tsx +34 -0
  347. package/src/contexts/exports.ts +14 -0
  348. package/src/data/contracts.ts +413 -0
  349. package/src/enum/contracts.ts +13 -0
  350. package/src/enum/dex.ts +39 -0
  351. package/src/enum/exports.ts +7 -0
  352. package/src/enum/governance.ts +61 -0
  353. package/src/enum/honey.ts +12 -0
  354. package/src/enum/polling.ts +8 -0
  355. package/src/enum/slippage.ts +19 -0
  356. package/src/enum/txnEnum.ts +102 -0
  357. package/src/errors/BeraError.ts +241 -0
  358. package/src/errors/BeraMonitoring.ts +66 -0
  359. package/src/errors/BeraTracing.ts +79 -0
  360. package/src/errors/BeraTracing.unit.test.ts +198 -0
  361. package/src/errors/InvalidArgumentError.ts +81 -0
  362. package/src/errors/NotFoundError.ts +34 -0
  363. package/src/errors/RequestError.ts +207 -0
  364. package/src/errors/TransactionFailedError.ts +93 -0
  365. package/src/errors/assert.ts +146 -0
  366. package/src/errors/assert.unit.test.ts +114 -0
  367. package/src/errors/errorMap.ts +1167 -0
  368. package/src/errors/exports.ts +15 -0
  369. package/src/errors/getErrorMessage.ts +59 -0
  370. package/src/errors/getRevertReason.integration.test.ts +461 -0
  371. package/src/errors/getRevertReason.ts +218 -0
  372. package/src/errors/initBeraError.ts +91 -0
  373. package/src/errors/parseViemError.ts +326 -0
  374. package/src/errors/severity.ts +12 -0
  375. package/src/hooks/bend/useGetConvertToAssets.ts +43 -0
  376. package/src/hooks/dex/useAggregatorsQuotes.ts +263 -0
  377. package/src/hooks/dex/useAggregatorsRouterFeeBps.ts +34 -0
  378. package/src/hooks/dex/useAllUserPools.ts +38 -0
  379. package/src/hooks/dex/useApiPool.ts +53 -0
  380. package/src/hooks/dex/useBexStatus.ts +1 -0
  381. package/src/hooks/dex/useCreatePool.ts +438 -0
  382. package/src/hooks/dex/useExploitedTokens.ts +57 -0
  383. package/src/hooks/dex/useGlobalLiquidityAndSwapVolume.ts +22 -0
  384. package/src/hooks/dex/useLiquidityMismatch.ts +192 -0
  385. package/src/hooks/dex/useLpPosition.ts +116 -0
  386. package/src/hooks/dex/useMultipleTokenApprovalsWithSlippage.ts +103 -0
  387. package/src/hooks/dex/useOnChainPoolData.ts +126 -0
  388. package/src/hooks/dex/usePollPoolCreationRelayerApproval.ts +54 -0
  389. package/src/hooks/dex/usePool.ts +59 -0
  390. package/src/hooks/dex/usePoolEvents.ts +22 -0
  391. package/src/hooks/dex/usePoolHistoricalData.ts +44 -0
  392. package/src/hooks/dex/usePools.ts +83 -0
  393. package/src/hooks/dex/usePriceImpact.ts +40 -0
  394. package/src/hooks/dex/useSingleAggregatorQuote.ts +350 -0
  395. package/src/hooks/enso/useBendZapSupply.ts +216 -0
  396. package/src/hooks/enso/useEnsoSwapBundle.ts +107 -0
  397. package/src/hooks/enso/useEnsoUserTokensWithBalances.ts +43 -0
  398. package/src/hooks/enso/useZapStakeBera.ts +113 -0
  399. package/src/hooks/exports.ts +135 -0
  400. package/src/hooks/governance/useCreateProposal.ts +88 -0
  401. package/src/hooks/governance/useGetPastVotes.ts +63 -0
  402. package/src/hooks/governance/useHasVoted.ts +38 -0
  403. package/src/hooks/governance/useIsCanceller.ts +43 -0
  404. package/src/hooks/governance/usePollAllProposals.ts +232 -0
  405. package/src/hooks/governance/usePollProposal.ts +96 -0
  406. package/src/hooks/governance/usePollProposalThreshold.ts +41 -0
  407. package/src/hooks/governance/usePollProposalVotes.ts +64 -0
  408. package/src/hooks/governance/usePollUserDelegates.ts +70 -0
  409. package/src/hooks/governance/useProposalFromTx.ts +37 -0
  410. package/src/hooks/governance/useProposalSnapshot.ts +44 -0
  411. package/src/hooks/governance/useProposalState.ts +48 -0
  412. package/src/hooks/governance/useProposalTimelockState.ts +61 -0
  413. package/src/hooks/governance/useQuorum.ts +42 -0
  414. package/src/hooks/honey/useCappedGlobally.ts +93 -0
  415. package/src/hooks/honey/useCappedRelatively.ts +88 -0
  416. package/src/hooks/honey/useCollateralWeights.ts +49 -0
  417. package/src/hooks/honey/useHoneyAlerts.ts +314 -0
  418. package/src/hooks/honey/useHoneyBalances.ts +83 -0
  419. package/src/hooks/honey/useHoneyChartData.ts +17 -0
  420. package/src/hooks/honey/useHoneyGlobalData.ts +23 -0
  421. package/src/hooks/honey/useHoneySwapState.ts +203 -0
  422. package/src/hooks/honey/useHoneyVaultsBalance.ts +41 -0
  423. package/src/hooks/honey/useIsBadCollateralAsset.ts +74 -0
  424. package/src/hooks/honey/useIsBasketModeEnabled.ts +70 -0
  425. package/src/hooks/honey/usePythLatestPrices.ts +41 -0
  426. package/src/hooks/perps/usePythUpdateFee.ts +43 -0
  427. package/src/hooks/pol/useBgtAprSimulation.ts +22 -0
  428. package/src/hooks/pol/useBgtUnstakedBalance.ts +50 -0
  429. package/src/hooks/pol/useClaimableFees.ts +38 -0
  430. package/src/hooks/pol/useHighestVaultsAPR.ts +57 -0
  431. package/src/hooks/pol/useOnChainRewardVault.ts +115 -0
  432. package/src/hooks/pol/usePollGlobalData.ts +31 -0
  433. package/src/hooks/pol/usePollMarkets.ts +32 -0
  434. package/src/hooks/pol/useQueuedBeraUnlock.ts +72 -0
  435. package/src/hooks/pol/useRewardTokenToBeraRate.ts +48 -0
  436. package/src/hooks/pol/useRewardVault.ts +51 -0
  437. package/src/hooks/pol/useRewardVaultBalanceFromStakingToken.ts +82 -0
  438. package/src/hooks/pol/useRewardVaultFromToken.ts +58 -0
  439. package/src/hooks/pol/useRewardVaultIncentives.ts +37 -0
  440. package/src/hooks/pol/useRewardVaultRewards.ts +37 -0
  441. package/src/hooks/pol/useRewardVaults.ts +45 -0
  442. package/src/hooks/pol/useSWBeraVaultMetadata.ts +35 -0
  443. package/src/hooks/pol/useStakedAPR.ts +38 -0
  444. package/src/hooks/pol/useStakedData.ts +117 -0
  445. package/src/hooks/pol/useStakedSnapshots.ts +52 -0
  446. package/src/hooks/pol/useTotalStakedAmount.ts +30 -0
  447. package/src/hooks/pol/useUserVaultInfo.ts +46 -0
  448. package/src/hooks/pol/useUserVaults.ts +40 -0
  449. package/src/hooks/pol/useVaultAddress.ts +31 -0
  450. package/src/hooks/pol/useVaultHistory.ts +29 -0
  451. package/src/hooks/pol/useVaultValidators.ts +33 -0
  452. package/src/hooks/tokens/useBeraCurrentPrice.ts +12 -0
  453. package/src/hooks/tokens/useMultipleTokenInformation.ts +71 -0
  454. package/src/hooks/tokens/usePollAllowances.ts +56 -0
  455. package/src/hooks/tokens/usePollBalance.ts +117 -0
  456. package/src/hooks/tokens/usePollWalletBalances.ts +78 -0
  457. package/src/hooks/tokens/useStakingTokenInformation.ts +55 -0
  458. package/src/hooks/tokens/useTokenCurrentPrice.ts +21 -0
  459. package/src/hooks/tokens/useTokenCurrentPrices.ts +136 -0
  460. package/src/hooks/tokens/useTokenInformation.ts +64 -0
  461. package/src/hooks/tokens/useTokenPrice.ts +21 -0
  462. package/src/hooks/tokens/useTokenPrices.ts +133 -0
  463. package/src/hooks/tokens/useTokens.ts +27 -0
  464. package/src/hooks/tokens/useTotalSupply.ts +22 -0
  465. package/src/hooks/tokens/useUnderlyingAsset.ts +23 -0
  466. package/src/hooks/transactions/transactionStore.ts +296 -0
  467. package/src/hooks/transactions/transactionStore.unit.test.ts +561 -0
  468. package/src/hooks/transactions/useAddRecentTransaction.ts +29 -0
  469. package/src/hooks/transactions/useRecentTransactions.ts +27 -0
  470. package/src/hooks/transactions/useSetTransactionStatus.ts +31 -0
  471. package/src/hooks/useBlockToTimestamp.ts +51 -0
  472. package/src/hooks/useContractWrite/index.ts +2 -0
  473. package/src/hooks/useContractWrite/stateReducer.ts +60 -0
  474. package/src/hooks/useContractWrite/types.ts +88 -0
  475. package/src/hooks/useContractWrite/useBeraContractWrite.ts +138 -0
  476. package/src/hooks/useGetVerifiedAbi.ts +47 -0
  477. package/src/hooks/useHistoryState.ts +64 -0
  478. package/src/hooks/usePrevious.ts +13 -0
  479. package/src/hooks/validators/useAllValidators.ts +48 -0
  480. package/src/hooks/validators/useApiEnrichedAllocation.ts +17 -0
  481. package/src/hooks/validators/useApiValidator.ts +37 -0
  482. package/src/hooks/validators/useBaselineRewardAllocation.ts +16 -0
  483. package/src/hooks/validators/useDailyValidatorBlockStats.ts +35 -0
  484. package/src/hooks/validators/useDefaultRewardAllocation.ts +32 -0
  485. package/src/hooks/validators/useManagedValidatorByAccount.ts +40 -0
  486. package/src/hooks/validators/useManagedValidatorRole.ts +119 -0
  487. package/src/hooks/validators/useOnChainValidator.ts +66 -0
  488. package/src/hooks/validators/useStakingPoolBatch.ts +45 -0
  489. package/src/hooks/validators/useSubgraphUserValidators.ts +36 -0
  490. package/src/hooks/validators/useUserActiveValidators.ts +44 -0
  491. package/src/hooks/validators/useUserBoostsOnValidator.ts +45 -0
  492. package/src/hooks/validators/useUserClaimableIncentives.ts +149 -0
  493. package/src/hooks/validators/useUserStakingPositions.ts +62 -0
  494. package/src/hooks/validators/useValidator.ts +83 -0
  495. package/src/hooks/validators/useValidatorAnalytics.ts +36 -0
  496. package/src/hooks/validators/useValidatorCommission.ts +36 -0
  497. package/src/hooks/validators/useValidatorEstimatedBgtPerYear.ts +24 -0
  498. package/src/hooks/validators/useValidatorQueuedCommission.ts +41 -0
  499. package/src/hooks/validators/useValidatorQueuedOperatorAddress.ts +39 -0
  500. package/src/hooks/validators/useValidatorQueuedRewardAllocation.ts +37 -0
  501. package/src/hooks/validators/useValidatorRewardAllocation.ts +36 -0
  502. package/src/types/bribe-boost.d.ts +50 -0
  503. package/src/types/dex.d.ts +225 -0
  504. package/src/types/enso.d.ts +42 -0
  505. package/src/types/exports.ts +8 -0
  506. package/src/types/global.d.ts +201 -0
  507. package/src/types/governance.d.ts +112 -0
  508. package/src/types/honeySwap.d.ts +23 -0
  509. package/src/types/pol.d.ts +63 -0
  510. package/src/types/staking.d.ts +22 -0
  511. package/src/utils/beraFetch.ts +55 -0
  512. package/src/utils/constants.ts +35 -0
  513. package/src/utils/createEmitter.ts +122 -0
  514. package/src/utils/createEmitter.unit.test.ts +149 -0
  515. package/src/utils/exports.ts +28 -0
  516. package/src/utils/filter.ts +34 -0
  517. package/src/utils/formatIncentivesTokenMap.ts +19 -0
  518. package/src/utils/formatInputTokenValue.ts +12 -0
  519. package/src/utils/formatNumber.ts +225 -0
  520. package/src/utils/formatNumber.unit.test.ts +246 -0
  521. package/src/utils/formatTimestamps.ts +155 -0
  522. package/src/utils/formatTimestamps.unit.test.ts +395 -0
  523. package/src/utils/formatTokenList.ts +55 -0
  524. package/src/utils/formatUsd.ts +46 -0
  525. package/src/utils/getContractName.ts +27 -0
  526. package/src/utils/getContractName.unit.test.ts +64 -0
  527. package/src/utils/getErrorResponse.ts +20 -0
  528. package/src/utils/getHoneySwapMessage.test.ts +115 -0
  529. package/src/utils/getHoneySwapMessage.ts +70 -0
  530. package/src/utils/getServerSideClient.ts +48 -0
  531. package/src/utils/getTestClient.ts +19 -0
  532. package/src/utils/hasAnyTruthyValues.ts +17 -0
  533. package/src/utils/isDifferenceExceedingThreshold.ts +13 -0
  534. package/src/utils/isSubgraphStale.ts +10 -0
  535. package/src/utils/layerZeroScan.ts +122 -0
  536. package/src/utils/math.ts +28 -0
  537. package/src/utils/math.unit.test.ts +49 -0
  538. package/src/utils/parseBaseArgs.ts +23 -0
  539. package/src/utils/parseBaseArgs.unit.test.ts +55 -0
  540. package/src/utils/parseWhiskToken.ts +15 -0
  541. package/src/utils/poolNamings.ts +54 -0
  542. package/src/utils/pythHoneyUtils.ts +3 -0
  543. package/src/utils/test-utils.ts +2 -0
  544. package/src/utils/time.ts +106 -0
  545. package/src/utils/time.unit.test.ts +76 -0
  546. package/src/utils/tokenWrapping.ts +16 -0
  547. package/src/utils/tokens.ts +122 -0
  548. package/src/utils/tokens.unit.test.ts +98 -0
  549. package/src/utils/truncateHash.ts +20 -0
  550. package/src/utils/truncateHash.unit.test.ts +19 -0
  551. package/src/utils/validatorUptimeStatus.ts +30 -0
  552. package/dist/abi/index.cjs +0 -2
  553. package/dist/abi/index.cjs.map +0 -1
  554. package/dist/abi/index.mjs +0 -2
  555. package/dist/actions/index.cjs +0 -2
  556. package/dist/actions/index.cjs.map +0 -1
  557. package/dist/actions/index.mjs +0 -2
  558. package/dist/aggregatorsRouter-Cny4B_MB.d.cts +0 -593
  559. package/dist/aggregatorsRouter-Cny4B_MB.d.ts +0 -593
  560. package/dist/chunk-3WCYP277.mjs +0 -2
  561. package/dist/chunk-3WCYP277.mjs.map +0 -1
  562. package/dist/chunk-5OAABMMU.mjs +0 -2
  563. package/dist/chunk-5OAABMMU.mjs.map +0 -1
  564. package/dist/chunk-6W22TFYA.mjs +0 -2
  565. package/dist/chunk-6W22TFYA.mjs.map +0 -1
  566. package/dist/chunk-DS2ZDVKU.mjs +0 -2
  567. package/dist/chunk-DS2ZDVKU.mjs.map +0 -1
  568. package/dist/chunk-ED43NYSE.cjs +0 -2
  569. package/dist/chunk-ED43NYSE.cjs.map +0 -1
  570. package/dist/chunk-EODAKI5K.cjs +0 -2
  571. package/dist/chunk-GWBENQEV.cjs +0 -4
  572. package/dist/chunk-GWBENQEV.cjs.map +0 -1
  573. package/dist/chunk-GZ5YA2AZ.cjs +0 -3
  574. package/dist/chunk-GZ5YA2AZ.cjs.map +0 -1
  575. package/dist/chunk-HCTFDGXL.mjs +0 -2
  576. package/dist/chunk-HCTFDGXL.mjs.map +0 -1
  577. package/dist/chunk-IOSYBHKU.mjs +0 -2
  578. package/dist/chunk-IOSYBHKU.mjs.map +0 -1
  579. package/dist/chunk-IZDT74H4.mjs +0 -2
  580. package/dist/chunk-IZDT74H4.mjs.map +0 -1
  581. package/dist/chunk-JMKLDDKY.cjs +0 -2
  582. package/dist/chunk-JMKLDDKY.cjs.map +0 -1
  583. package/dist/chunk-M5GUTM7K.mjs +0 -4
  584. package/dist/chunk-M5GUTM7K.mjs.map +0 -1
  585. package/dist/chunk-PHIOKO3A.mjs +0 -2
  586. package/dist/chunk-PHIOKO3A.mjs.map +0 -1
  587. package/dist/chunk-QCK474XD.cjs +0 -2
  588. package/dist/chunk-QCK474XD.cjs.map +0 -1
  589. package/dist/chunk-S74ZMG2G.cjs +0 -2
  590. package/dist/chunk-S74ZMG2G.cjs.map +0 -1
  591. package/dist/chunk-TOAXF4YW.cjs +0 -2
  592. package/dist/chunk-TOAXF4YW.cjs.map +0 -1
  593. package/dist/chunk-UZ5CB33M.cjs +0 -2
  594. package/dist/chunk-UZ5CB33M.cjs.map +0 -1
  595. package/dist/chunk-V3PCHP2D.cjs +0 -2
  596. package/dist/chunk-V3PCHP2D.cjs.map +0 -1
  597. package/dist/chunk-YK4NINF5.mjs +0 -2
  598. package/dist/chunk-YK4NINF5.mjs.map +0 -1
  599. package/dist/chunk-YRJAQDEO.cjs +0 -2
  600. package/dist/chunk-YRJAQDEO.cjs.map +0 -1
  601. package/dist/chunk-ZLCBHOSV.mjs +0 -3
  602. package/dist/chunk-ZLCBHOSV.mjs.map +0 -1
  603. package/dist/contexts/index.cjs +0 -2
  604. package/dist/contexts/index.cjs.map +0 -1
  605. package/dist/contexts/index.mjs +0 -2
  606. package/dist/contexts/index.mjs.map +0 -1
  607. package/dist/dex-BaNHEuck.d.cts +0 -562
  608. package/dist/dex-D6IK-4D9.d.ts +0 -562
  609. package/dist/enum/index.cjs +0 -2
  610. package/dist/enum/index.cjs.map +0 -1
  611. package/dist/enum/index.d.cts +0 -31
  612. package/dist/enum/index.d.ts +0 -31
  613. package/dist/enum/index.mjs +0 -2
  614. package/dist/enum/index.mjs.map +0 -1
  615. package/dist/errors/index.cjs +0 -2
  616. package/dist/errors/index.cjs.map +0 -1
  617. package/dist/errors/index.d.cts +0 -204
  618. package/dist/errors/index.d.ts +0 -204
  619. package/dist/errors/index.mjs +0 -2
  620. package/dist/errors/index.mjs.map +0 -1
  621. package/dist/hooks/index.cjs +0 -4
  622. package/dist/hooks/index.cjs.map +0 -1
  623. package/dist/hooks/index.mjs +0 -4
  624. package/dist/hooks/index.mjs.map +0 -1
  625. package/dist/staking-Bcb8DhoZ.d.cts +0 -246
  626. package/dist/staking-DvJOnMJG.d.ts +0 -246
  627. package/dist/types/index.cjs +0 -2
  628. package/dist/types/index.cjs.map +0 -1
  629. package/dist/types/index.d.cts +0 -56
  630. package/dist/types/index.d.ts +0 -56
  631. package/dist/types/index.mjs +0 -2
  632. package/dist/types/index.mjs.map +0 -1
  633. package/dist/utils/index.cjs +0 -2
  634. package/dist/utils/index.cjs.map +0 -1
  635. package/dist/utils/index.mjs +0 -2
  636. package/dist/utils/index.mjs.map +0 -1
  637. /package/dist/{abi/index.mjs.map → errors/exports.mjs.map} +0 -0
  638. /package/dist/{actions/index.mjs.map → types/exports.mjs.map} +0 -0
@@ -0,0 +1,438 @@
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 { Token, TokenWithAmount } from "~/types/dex";
22
+ import type { IContractWrite } from "~/types/global";
23
+ import { DEFAULT_METAMASK_GAS_LIMIT } from "~/utils/constants";
24
+ import { parseBaseArgs } from "~/utils/parseBaseArgs";
25
+ import { generatePoolName, generatePoolSymbol } from "~/utils/poolNamings";
26
+ import { isToken } from "~/utils/tokens";
27
+ import { wrapNativeTokens } from "~/utils/tokenWrapping";
28
+
29
+ const DEFAULT_WEIGHTS_DUPLICATION_THRESHOLD = 0.005;
30
+ interface UseCreatePoolProps extends BeraJS.BaseFunctionArgs {
31
+ poolCreateTokens: Token[];
32
+ initialLiquidityTokens: TokenWithAmount[];
33
+ normalizedWeights: bigint[]; // NOTE: if you pass weights that have off-by-1 errors pool create will fail (ex: 0.3 repeating)
34
+ poolType: PoolType;
35
+ swapFee: number;
36
+ owner: string;
37
+ poolSymbol: string;
38
+ poolName: string;
39
+ amplification: number;
40
+ weightsDuplicationThreshold?: number;
41
+ oracles: Oracle[]; // NOTE: the default state for oracles should be 0x0 address for each token with cache duration of ~100
42
+ }
43
+ interface UseCreatePoolReturn {
44
+ generatedPoolName: string;
45
+ generatedPoolSymbol: string;
46
+ isDupePool: boolean;
47
+ dupePool?: SubgraphPoolFragment | null;
48
+ createPoolArgs: any;
49
+ isLoadingPools: boolean;
50
+ errorLoadingPools: boolean;
51
+ }
52
+
53
+ export enum OracleMode {
54
+ None = "None",
55
+ Custom = "Custom",
56
+ }
57
+
58
+ export interface Oracle {
59
+ mode: OracleMode;
60
+ address: string;
61
+ tokenAddress: string;
62
+ cacheDuration: number;
63
+ }
64
+
65
+ const createStablePoolArgs = ({
66
+ poolCreationHelper,
67
+ poolCreateTokens,
68
+ initialLiquidityTokens,
69
+ swapFeePercentage,
70
+ salt,
71
+ poolName,
72
+ poolSymbol,
73
+ owner,
74
+ amplification,
75
+ oracles,
76
+ message,
77
+ actionType,
78
+ gasLimit = DEFAULT_METAMASK_GAS_LIMIT,
79
+ }: {
80
+ poolCreationHelper: Address;
81
+ poolCreateTokens: Token[];
82
+ initialLiquidityTokens: TokenWithAmount[];
83
+ swapFeePercentage: bigint;
84
+ salt: string;
85
+ poolName: string;
86
+ poolSymbol: string;
87
+ owner: string;
88
+ amplification: number;
89
+ oracles: Oracle[];
90
+ message: string;
91
+ actionType: TransactionActionType;
92
+ gasLimit?: bigint;
93
+ }) => {
94
+ // Map and sort pool creation token addresses NOTE: we should never see BERA in this array.
95
+ const sortedPoolCreateAddresses = poolCreateTokens
96
+ .map((token) => token.address.toLowerCase())
97
+ .sort((a, b) => (a < b ? -1 : 1));
98
+
99
+ const combinedData = sortedPoolCreateAddresses.map((address) => {
100
+ // Match with initial liquidity tokens
101
+ const liquidityToken = initialLiquidityTokens.find(
102
+ (token) =>
103
+ token.address.toLowerCase() === address ||
104
+ (isToken(address, "WBERA") && isToken(token.address, "BERA")),
105
+ );
106
+
107
+ const amountIn = liquidityToken
108
+ ? parseUnits(liquidityToken.amount, liquidityToken.decimals)
109
+ : 0n; // FIXME we need to throw errors from here if zipping fails.
110
+
111
+ // Match with oracles
112
+ const oracle = oracles.find(
113
+ (oracle) => oracle.tokenAddress.toLowerCase() === address.toLowerCase(),
114
+ );
115
+ const rateProvider = oracle ? oracle.address : zeroAddress;
116
+ const cacheDuration = oracle ? BigInt(oracle.cacheDuration) : BigInt(100);
117
+
118
+ return { amountIn, rateProvider, cacheDuration };
119
+ });
120
+
121
+ // Extract results into separate arrays
122
+ const sortedAmountsIn = combinedData.map((data) => data.amountIn);
123
+ const sortedRateProviders = combinedData.map((data) => data.rateProvider);
124
+ const sortedCacheDurations = combinedData.map((data) => data.cacheDuration);
125
+
126
+ // Determine if native token (BERA) is included, and if so calculate its value, that is the value of this tx
127
+ const nativeTokenIndex = initialLiquidityTokens.findIndex((token) =>
128
+ isToken(token.address, "BERA"),
129
+ );
130
+ const value =
131
+ nativeTokenIndex !== -1
132
+ ? parseUnits(
133
+ initialLiquidityTokens[nativeTokenIndex].amount,
134
+ initialLiquidityTokens[nativeTokenIndex].decimals,
135
+ )
136
+ : 0n;
137
+ const joinWBERAPoolWithBERA = value > 0n;
138
+
139
+ return {
140
+ address: poolCreationHelper,
141
+ abi: balancerPoolCreationHelperAbi,
142
+ functionName: "createAndJoinStablePool",
143
+ params: [
144
+ poolName,
145
+ poolSymbol,
146
+ sortedPoolCreateAddresses,
147
+ BigInt(amplification),
148
+ sortedRateProviders,
149
+ sortedCacheDurations,
150
+ false, // Exempt from yield protocol fee NOTE: this should be false for stable pools if rate providers are 0x0
151
+ swapFeePercentage,
152
+ sortedAmountsIn,
153
+ owner as `0x${string}`,
154
+ salt,
155
+ joinWBERAPoolWithBERA,
156
+ ],
157
+ message,
158
+ actionType,
159
+ value,
160
+ gasLimit,
161
+ track: {
162
+ eventName: "hub_pool_create",
163
+ eventData: {
164
+ poolName: poolName,
165
+ poolSymbol: poolSymbol,
166
+ },
167
+ },
168
+ } as IContractWrite<
169
+ typeof balancerPoolCreationHelperAbi,
170
+ "createAndJoinStablePool"
171
+ >;
172
+ };
173
+
174
+ const createWeightedPoolArgs = ({
175
+ poolCreationHelper,
176
+ poolCreateTokens,
177
+ initialLiquidityTokens,
178
+ normalizedWeights,
179
+ swapFeePercentage,
180
+ salt,
181
+ poolName,
182
+ poolSymbol,
183
+ owner,
184
+ message,
185
+ actionType,
186
+ gasLimit = DEFAULT_METAMASK_GAS_LIMIT,
187
+ }: {
188
+ poolCreationHelper: Address;
189
+ poolCreateTokens: Token[];
190
+ initialLiquidityTokens: TokenWithAmount[];
191
+ normalizedWeights: bigint[];
192
+ swapFeePercentage: bigint;
193
+ salt: string;
194
+ poolName: string;
195
+ poolSymbol: string;
196
+ owner: string;
197
+ message: string;
198
+ actionType: TransactionActionType;
199
+ gasLimit?: bigint;
200
+ }) => {
201
+ // When joining weighted pools with BERA, we allow it as a joinPoolToken but never as a createPoolToken.
202
+ const createPoolTokens: string[] = [];
203
+ const joinPoolTokens: string[] = [];
204
+ const sortedWeights: bigint[] = [];
205
+ const sortedAmountsIn: bigint[] = [];
206
+
207
+ poolCreateTokens
208
+ .map((token, index) => {
209
+ return {
210
+ createToken: token.address,
211
+ joinToken: initialLiquidityTokens[index].address, // NOTE: this will allow native token as a join token
212
+ weight: normalizedWeights[index],
213
+ amountIn: parseUnits(
214
+ initialLiquidityTokens[index].amount,
215
+ initialLiquidityTokens[index].decimals,
216
+ ),
217
+ };
218
+ })
219
+ .sort((a, b) =>
220
+ a.createToken.toLowerCase() < b.createToken.toLowerCase() ? -1 : 1,
221
+ )
222
+ .forEach((item) => {
223
+ createPoolTokens.push(item.createToken);
224
+ joinPoolTokens.push(item.joinToken);
225
+ sortedWeights.push(item.weight);
226
+ sortedAmountsIn.push(item.amountIn);
227
+ });
228
+
229
+ // Determine if native token (BERA) is involved and calculate its value, that is the value of this tx
230
+ const nativeTokenIndex = joinPoolTokens.indexOf(zeroAddress);
231
+ const value =
232
+ nativeTokenIndex !== -1 ? sortedAmountsIn[nativeTokenIndex] : 0n;
233
+
234
+ return {
235
+ address: poolCreationHelper,
236
+ abi: balancerPoolCreationHelperAbi,
237
+ functionName: "createAndJoinWeightedPool",
238
+ params: [
239
+ poolName,
240
+ poolSymbol,
241
+ createPoolTokens,
242
+ joinPoolTokens,
243
+ sortedWeights,
244
+ Array(createPoolTokens.length).fill(zeroAddress),
245
+ swapFeePercentage,
246
+ sortedAmountsIn,
247
+ owner as `0x${string}`,
248
+ salt,
249
+ ],
250
+ message,
251
+ actionType,
252
+ value,
253
+ gasLimit,
254
+ track: {
255
+ eventName: "hub_pool_create",
256
+ eventData: {
257
+ poolName: poolName,
258
+ poolSymbol: poolSymbol,
259
+ },
260
+ },
261
+ } as IContractWrite<
262
+ typeof balancerPoolCreationHelperAbi,
263
+ "createAndJoinWeightedPool"
264
+ >;
265
+ };
266
+
267
+ export const useCreatePool = ({
268
+ poolCreateTokens,
269
+ initialLiquidityTokens,
270
+ normalizedWeights,
271
+ poolType,
272
+ poolName,
273
+ poolSymbol,
274
+ swapFee,
275
+ owner,
276
+ amplification,
277
+ oracles,
278
+ weightsDuplicationThreshold = DEFAULT_WEIGHTS_DUPLICATION_THRESHOLD,
279
+ ...baseArgs
280
+ }: UseCreatePoolProps): UseCreatePoolReturn => {
281
+ // 1. identify if the pool is a duplicate
282
+ const {
283
+ data: dupePool,
284
+ error: errorLoadingPools,
285
+ isLoading: isLoadingPools,
286
+ } = useSWRImmutable<SubgraphPoolFragment | null>(
287
+ [
288
+ "useCreatePool__deduped_pool",
289
+ poolCreateTokens,
290
+ poolType,
291
+ normalizedWeights,
292
+ ],
293
+ async () => {
294
+ if (poolCreateTokens.length === 0 || !poolType) {
295
+ return null;
296
+ }
297
+ const bexSubgraphClient = getApolloClient("bex.subgraph", {});
298
+ try {
299
+ // NOTE: it should not be possible for native token to be in poolCreateTokens
300
+ const tokensSorted = wrapNativeTokens(poolCreateTokens)
301
+ .map((token) => token.address.toLowerCase())
302
+ .sort((a, b) => (a.toLowerCase() < b.toLowerCase() ? -1 : 1));
303
+
304
+ // fetch pools of the same type as the one we are creating
305
+ const res = await bexSubgraphClient.query<GetDedupedSubgraphPoolsQuery>(
306
+ {
307
+ query: GetDedupedSubgraphPools,
308
+ variables: {
309
+ tokens: tokensSorted,
310
+ type: poolType,
311
+ },
312
+ },
313
+ );
314
+
315
+ const matchingPools = res.data.pools.filter((pool) => {
316
+ return pool.tokens?.every((token) =>
317
+ poolType === PoolType.Weighted
318
+ ? // in weighted pools, a dupe is if tokens and weights match within tolerance FIXME: we aren't getting weighted pools returned here
319
+ tokensSorted.includes(token.address) &&
320
+ Math.abs(
321
+ Number(token.weight) -
322
+ Number(
323
+ formatUnits(
324
+ normalizedWeights[tokensSorted.indexOf(token.address)],
325
+ 18,
326
+ ),
327
+ ),
328
+ ) < weightsDuplicationThreshold
329
+ : // in composable pools a dupe is if the tokens match, handling that the LP token is in the tokens list
330
+ tokensSorted.includes(token.address) ||
331
+ token.address === pool.address,
332
+ );
333
+ });
334
+
335
+ return matchingPools?.at(0) ?? null;
336
+ } catch {
337
+ return null;
338
+ }
339
+ },
340
+ );
341
+
342
+ // Generated names
343
+ const { generatedPoolName, generatedPoolSymbol } = useMemo(() => {
344
+ if (!poolCreateTokens) {
345
+ return {
346
+ generatedPoolName: "",
347
+ generatedPoolSymbol: "",
348
+ };
349
+ }
350
+ const generatedPoolName = generatePoolName(poolCreateTokens);
351
+ const generatedPoolSymbol = generatePoolSymbol(
352
+ poolCreateTokens,
353
+ normalizedWeights,
354
+ poolType,
355
+ );
356
+
357
+ return {
358
+ generatedPoolName,
359
+ generatedPoolSymbol,
360
+ };
361
+ }, [poolCreateTokens, normalizedWeights, poolType]);
362
+
363
+ // Pool create tx
364
+ const createPoolArgs = useMemo(() => {
365
+ if (
366
+ !owner ||
367
+ poolName === "" ||
368
+ poolSymbol === "" ||
369
+ poolCreateTokens.length !== initialLiquidityTokens.length ||
370
+ poolCreateTokens.length === 0
371
+ ) {
372
+ return null;
373
+ }
374
+
375
+ const swapFeePercentage = parseUnits(swapFee.toString(), 16);
376
+ const salt = keccak256(Buffer.from(`${poolName}-${owner}`));
377
+ const { config: chainConfig } = parseBaseArgs(baseArgs);
378
+
379
+ if (poolType === PoolType.Weighted) {
380
+ return createWeightedPoolArgs({
381
+ poolCreationHelper: chainConfig.bex.poolCreationHelper,
382
+ poolCreateTokens,
383
+ initialLiquidityTokens,
384
+ normalizedWeights,
385
+ swapFeePercentage,
386
+ salt,
387
+ poolName,
388
+ poolSymbol,
389
+ owner,
390
+ message: `Create pool ${poolName}`,
391
+ actionType: TransactionActionType.CREATE_POOL,
392
+ });
393
+ }
394
+
395
+ if (
396
+ poolType === PoolType.ComposableStable ||
397
+ poolType === PoolType.MetaStable
398
+ ) {
399
+ return createStablePoolArgs({
400
+ poolCreationHelper: chainConfig.bex.poolCreationHelper,
401
+ poolCreateTokens,
402
+ initialLiquidityTokens,
403
+ swapFeePercentage,
404
+ salt,
405
+ poolName,
406
+ poolSymbol,
407
+ owner,
408
+ amplification,
409
+ oracles,
410
+ message: `Create pool ${poolName}`,
411
+ actionType: TransactionActionType.CREATE_POOL,
412
+ });
413
+ }
414
+
415
+ return null;
416
+ }, [
417
+ poolCreateTokens,
418
+ initialLiquidityTokens,
419
+ normalizedWeights,
420
+ poolType,
421
+ swapFee,
422
+ poolName,
423
+ poolSymbol,
424
+ owner,
425
+ amplification,
426
+ oracles,
427
+ ]);
428
+
429
+ return {
430
+ generatedPoolName,
431
+ generatedPoolSymbol,
432
+ isDupePool: !!dupePool,
433
+ dupePool,
434
+ createPoolArgs,
435
+ isLoadingPools,
436
+ errorLoadingPools,
437
+ };
438
+ };
@@ -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/dex";
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,192 @@
1
+ import { useEffect, useState } from "react";
2
+ import { PoolType } from "@berachain-foundation/berancer-sdk";
3
+
4
+ import { PoolCreationStep } from "~/enum/dex";
5
+ import type { TokenCurrentPriceMap, TokenWithAmount } from "~/types/dex";
6
+ import { wrapNativeTokens } from "~/utils/tokenWrapping";
7
+ import { type Oracle, OracleMode } from "./useCreatePool";
8
+
9
+ const DEFAULT_LIQUIDITY_MISMATCH_TOLERANCE_PERCENT = 0.05; // 5%
10
+
11
+ export type LiquidityMismatchInfo = {
12
+ title: string | null;
13
+ message: string | null;
14
+ suggestWeighted?: boolean;
15
+ };
16
+
17
+ interface UseLiquidityMismatchParams {
18
+ currentStep: PoolCreationStep;
19
+ tokenPrices?: TokenCurrentPriceMap;
20
+ isLoadingTokenPrices: boolean;
21
+ tokens: TokenWithAmount[] | null;
22
+ weights: bigint[] | null;
23
+ weightsError: string | null;
24
+ poolType: PoolType;
25
+ liquidityMismatchTolerancePercent?: number;
26
+ oracles: Oracle[];
27
+ }
28
+
29
+ /**
30
+ * Hook for detecting liquidity mismatches.
31
+ *
32
+ * @param {PoolCreationStep} currentStep - The current step of the pool creation process.
33
+ * @param {Record<string, number>} tokenPrices - The current token prices.
34
+ * @param {boolean} isLoadingTokenPrices - Whether the token prices are still loading.
35
+ * @param {Array<{ address: string, amount: number }>} tokens - The tokens in the pool, including their addresses and amounts.
36
+ * @param {Record<string, number>} weights - The per-token weights in the pool we are creating.
37
+ * @param {string | null} weightsError - An error message for the weights indicating that the weights are invalid.
38
+ * @param {string} poolType - The type of pool being created.
39
+ * @param {number} liquidityMismatchTolerancePercent - The tolerance for liquidity mismatches in percent.
40
+ * @returns {Object} The liquidity mismatch info.
41
+ */
42
+ export const useLiquidityMismatch = ({
43
+ currentStep,
44
+ tokenPrices,
45
+ isLoadingTokenPrices,
46
+ tokens,
47
+ weights,
48
+ weightsError,
49
+ poolType,
50
+ liquidityMismatchTolerancePercent = DEFAULT_LIQUIDITY_MISMATCH_TOLERANCE_PERCENT,
51
+ oracles,
52
+ }: UseLiquidityMismatchParams): LiquidityMismatchInfo => {
53
+ // NOTE: would be nice to use Maps/Records more in here, as the zipping/unzipping is cumbersome.
54
+ // NOTE: if we pull in string literal for currentStep things would also be a bit clearer in here.
55
+ const [liquidityMismatchInfo, setLiquidityMismatchInfo] =
56
+ useState<LiquidityMismatchInfo>({ title: null, message: null });
57
+
58
+ useEffect(() => {
59
+ // If we are either using custom rate-providing oracles or have incorrect/loading token prices, we cant do validation.
60
+ if (
61
+ !tokenPrices ||
62
+ isLoadingTokenPrices ||
63
+ !tokens ||
64
+ !weights ||
65
+ weightsError ||
66
+ tokens.some((token) => !token.address) ||
67
+ oracles.some((oracle) => oracle.mode === OracleMode.Custom) // Oracles give prices on their own, we dont support that here yet.
68
+ ) {
69
+ setLiquidityMismatchInfo({ title: null, message: null });
70
+ return;
71
+ }
72
+
73
+ // Calculate some basic metrics we'll use to determine per-token contributions and model potential losses from arbitrage.
74
+ let totalLiquidityUSD = 0;
75
+ const tokenUSDAmounts: number[] = [];
76
+ const numTokens = tokens.length;
77
+ const wrappedTokens = wrapNativeTokens(tokens);
78
+ const tokenUSDPrices = wrappedTokens.map((token) => {
79
+ const tokenPriceUSD =
80
+ tokenPrices[token.address.toLowerCase()]?.price ?? 0;
81
+ if (!tokenPriceUSD || tokenPriceUSD === 0) {
82
+ tokenUSDAmounts.push(0);
83
+ return null;
84
+ }
85
+ const tokenAmountUSD = tokenPriceUSD * Number.parseFloat(token.amount);
86
+ tokenUSDAmounts.push(tokenAmountUSD);
87
+ totalLiquidityUSD += tokenAmountUSD;
88
+ return tokenPriceUSD;
89
+ });
90
+
91
+ // Doesn't matter what step it is, if we have missing token prices for tokens we have selected, we cant issue a real warning.
92
+ if (
93
+ tokenUSDPrices.some((price) => price === null) ||
94
+ tokenUSDPrices.length !== numTokens
95
+ ) {
96
+ setLiquidityMismatchInfo({
97
+ title: "Missing token price data",
98
+ message: `One or more token(s) do not have valid market price data. Please verify that token market prices align with the pool
99
+ weightings and your initial liquidity amounts.`,
100
+ });
101
+ return;
102
+ }
103
+
104
+ // Step 1 - During token selection we check for a deviation in the quote prices of the tokens selected (for stable pools).
105
+ if (
106
+ currentStep === PoolCreationStep.SELECT_TOKENS &&
107
+ poolType === PoolType.ComposableStable
108
+ ) {
109
+ const normalizedUSDPrices = tokenUSDPrices.map(
110
+ (priceUSD) => priceUSD! / tokenUSDPrices[0]!, // always normalize on the first token's price
111
+ );
112
+ const maxDifference =
113
+ Math.max(...normalizedUSDPrices) - Math.min(...normalizedUSDPrices);
114
+
115
+ if (maxDifference > liquidityMismatchTolerancePercent) {
116
+ setLiquidityMismatchInfo({
117
+ title: "Selected tokens have a significant price deviation",
118
+ message: "Did you mean to create a Weighted pool instead?",
119
+ suggestWeighted: true,
120
+ });
121
+ } else {
122
+ setLiquidityMismatchInfo({ title: null, message: null });
123
+ }
124
+
125
+ return;
126
+ }
127
+
128
+ // Validation During Liquidity Input and onwards.
129
+ if (
130
+ totalLiquidityUSD === 0 ||
131
+ tokenUSDAmounts.some((value) => value === 0)
132
+ ) {
133
+ // User has not yet entered fully their liquidity values, so return early.
134
+ setLiquidityMismatchInfo({ title: null, message: null });
135
+ return;
136
+ }
137
+
138
+ // Simulate arbitrage for the pool to determine potential losses from arbitrageurs.
139
+ // NOTE: we assume shortfalls and excesses are losses, but in reality the actual losses would be more complex to realise.
140
+ // Balancer does this similarily https://github.com/balancer/frontend-v2/blob/8563b8d33b6bff266148bd48d7ebc89f921374f4/src/components/cards/CreatePool/InitialLiquidity.vue#L75
141
+ let totalLossUSD = 0;
142
+ if (poolType === PoolType.ComposableStable) {
143
+ const expectedPerTokenLiquidityUSD = totalLiquidityUSD / numTokens;
144
+ tokenUSDAmounts.forEach((value) => {
145
+ totalLossUSD += Math.abs(expectedPerTokenLiquidityUSD - value);
146
+ });
147
+ } else if (poolType === PoolType.Weighted) {
148
+ tokenUSDAmounts.forEach((value, index) => {
149
+ const weightProportion = Number(weights[index]) / 1e18;
150
+ const expectedValueUSD = totalLiquidityUSD * weightProportion;
151
+ totalLossUSD += Math.abs(expectedValueUSD - value);
152
+ });
153
+ }
154
+
155
+ // We'll show a total loss if it's 90% or more
156
+ const isTotalLoss = totalLossUSD >= totalLiquidityUSD * 0.9;
157
+ totalLossUSD = Math.min(totalLossUSD, totalLiquidityUSD);
158
+ const totalLossPercentage = totalLossUSD / totalLiquidityUSD;
159
+
160
+ if (totalLossPercentage > liquidityMismatchTolerancePercent) {
161
+ setLiquidityMismatchInfo({
162
+ // If it's a total loss we dont display a percentage
163
+ title: isTotalLoss
164
+ ? "You could lose all of your initial liquidity"
165
+ : `You could lose $${totalLossUSD.toFixed(2)} (~${(
166
+ totalLossPercentage * 100
167
+ ).toFixed(2)}%)`,
168
+ message: `Based on the market token prices, the value of tokens does not align with the specified pool weights.
169
+ This discrepancy could expose you to potential losses from arbitrageurs. ${
170
+ poolType === PoolType.ComposableStable
171
+ ? "Did you mean to create a Weighted pool instead?"
172
+ : ""
173
+ }`,
174
+ suggestWeighted: poolType === PoolType.ComposableStable,
175
+ });
176
+ } else {
177
+ // All good bb bb
178
+ setLiquidityMismatchInfo({ title: null, message: null });
179
+ }
180
+ }, [
181
+ currentStep,
182
+ tokenPrices,
183
+ isLoadingTokenPrices,
184
+ tokens,
185
+ weights,
186
+ weightsError,
187
+ poolType,
188
+ liquidityMismatchTolerancePercent,
189
+ oracles,
190
+ ]);
191
+ return liquidityMismatchInfo;
192
+ };