@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.
Files changed (502) hide show
  1. package/dist/{dex-jD95agMv.d.cts → HoneyConfigProvider-6PXZJMSU.d.cts} +172 -172
  2. package/dist/{dex-CxzGqVLe.d.ts → HoneyConfigProvider-CwDFrt02.d.ts} +172 -172
  3. package/dist/abi/index.cjs +2 -1
  4. package/dist/abi/index.cjs.map +1 -0
  5. package/dist/abi/index.mjs +2 -1
  6. package/dist/abi/index.mjs.map +1 -0
  7. package/dist/actions/index.cjs +2 -1
  8. package/dist/actions/index.cjs.map +1 -0
  9. package/dist/actions/index.d.cts +8 -8
  10. package/dist/actions/index.d.ts +8 -8
  11. package/dist/actions/index.mjs +2 -1
  12. package/dist/actions/index.mjs.map +1 -0
  13. package/dist/chunk-22MQVFHP.cjs +2 -0
  14. package/dist/chunk-22MQVFHP.cjs.map +1 -0
  15. package/dist/chunk-3TKSVFZ3.mjs +2 -0
  16. package/dist/chunk-3TKSVFZ3.mjs.map +1 -0
  17. package/dist/chunk-6VF3RF53.cjs +3 -0
  18. package/dist/chunk-6VF3RF53.cjs.map +1 -0
  19. package/dist/{chunk-2422CKAT.mjs → chunk-6W22TFYA.mjs} +2 -1
  20. package/dist/chunk-6W22TFYA.mjs.map +1 -0
  21. package/dist/chunk-AMRJ4B36.mjs +2 -0
  22. package/dist/chunk-AMRJ4B36.mjs.map +1 -0
  23. package/dist/{chunk-4IBBLGNS.mjs → chunk-DS2ZDVKU.mjs} +1 -0
  24. package/dist/chunk-DS2ZDVKU.mjs.map +1 -0
  25. package/dist/{chunk-B47PDJZM.cjs → chunk-ED43NYSE.cjs} +2 -1
  26. package/dist/chunk-ED43NYSE.cjs.map +1 -0
  27. package/dist/chunk-EU4WFADK.cjs +2 -0
  28. package/dist/chunk-EU4WFADK.cjs.map +1 -0
  29. package/dist/{chunk-ASRHUDAH.mjs → chunk-HCTFDGXL.mjs} +1 -0
  30. package/dist/chunk-HCTFDGXL.mjs.map +1 -0
  31. package/dist/{chunk-K4NZIO2Z.mjs → chunk-IOSYBHKU.mjs} +1 -0
  32. package/dist/chunk-IOSYBHKU.mjs.map +1 -0
  33. package/dist/{chunk-4GY57XKG.cjs → chunk-JMKLDDKY.cjs} +1 -0
  34. package/dist/chunk-JMKLDDKY.cjs.map +1 -0
  35. package/dist/chunk-KMKUXP2S.mjs +3 -0
  36. package/dist/chunk-KMKUXP2S.mjs.map +1 -0
  37. package/dist/chunk-OJXJ6CZ4.mjs +4 -0
  38. package/dist/chunk-OJXJ6CZ4.mjs.map +1 -0
  39. package/dist/{chunk-VA37UBED.mjs → chunk-PHIOKO3A.mjs} +2 -1
  40. package/dist/chunk-PHIOKO3A.mjs.map +1 -0
  41. package/dist/{chunk-IKAE7CQU.cjs → chunk-QCK474XD.cjs} +1 -0
  42. package/dist/chunk-QCK474XD.cjs.map +1 -0
  43. package/dist/chunk-REDXXUK7.cjs +2 -0
  44. package/dist/chunk-REDXXUK7.cjs.map +1 -0
  45. package/dist/{chunk-K2FCHQHA.cjs → chunk-S74ZMG2G.cjs} +2 -1
  46. package/dist/chunk-S74ZMG2G.cjs.map +1 -0
  47. package/dist/{chunk-NOV7UCGA.cjs → chunk-TOAXF4YW.cjs} +1 -0
  48. package/dist/chunk-TOAXF4YW.cjs.map +1 -0
  49. package/dist/chunk-UZ5CB33M.cjs +2 -0
  50. package/dist/chunk-UZ5CB33M.cjs.map +1 -0
  51. package/dist/chunk-VYWYJR63.mjs +2 -0
  52. package/dist/chunk-VYWYJR63.mjs.map +1 -0
  53. package/dist/{chunk-WZLPSG5R.cjs → chunk-XFPTQMAK.cjs} +3 -2
  54. package/dist/chunk-XFPTQMAK.cjs.map +1 -0
  55. package/dist/chunk-YK4NINF5.mjs +2 -0
  56. package/dist/chunk-YK4NINF5.mjs.map +1 -0
  57. package/dist/contexts/index.cjs +2 -1
  58. package/dist/contexts/index.cjs.map +1 -0
  59. package/dist/contexts/index.d.cts +7 -5
  60. package/dist/contexts/index.d.ts +7 -5
  61. package/dist/contexts/index.mjs +2 -1
  62. package/dist/contexts/index.mjs.map +1 -0
  63. package/dist/enum/index.cjs +2 -1
  64. package/dist/enum/index.cjs.map +1 -0
  65. package/dist/enum/index.d.cts +1 -1
  66. package/dist/enum/index.d.ts +1 -1
  67. package/dist/enum/index.mjs +2 -1
  68. package/dist/enum/index.mjs.map +1 -0
  69. package/dist/errors/index.cjs +2 -1
  70. package/dist/errors/index.cjs.map +1 -0
  71. package/dist/errors/index.d.cts +1 -1
  72. package/dist/errors/index.d.ts +1 -1
  73. package/dist/errors/index.mjs +2 -1
  74. package/dist/errors/index.mjs.map +1 -0
  75. package/dist/{getValidatorQueuedOperatorAddress-9jSXlAse.d.ts → getValidatorQueuedOperatorAddress-9xY2RUGe.d.cts} +2 -2
  76. package/dist/{getValidatorQueuedOperatorAddress-BCYlvah3.d.cts → getValidatorQueuedOperatorAddress-Ne2zoiiV.d.ts} +2 -2
  77. package/dist/hooks/index.cjs +3 -2
  78. package/dist/hooks/index.cjs.map +1 -0
  79. package/dist/hooks/index.d.cts +9 -9
  80. package/dist/hooks/index.d.ts +9 -9
  81. package/dist/hooks/index.mjs +3 -2
  82. package/dist/hooks/index.mjs.map +1 -0
  83. package/dist/{staking-Bw46L2PT.d.ts → staking-F9Nx9TKD.d.ts} +1 -1
  84. package/dist/{staking-BxYDlMtj.d.cts → staking-f4BpYH7l.d.cts} +1 -1
  85. package/dist/{txnEnum-Diichv9Z.d.cts → txnEnum-BQKDfaeH.d.cts} +1 -0
  86. package/dist/{txnEnum-Diichv9Z.d.ts → txnEnum-BQKDfaeH.d.ts} +1 -0
  87. package/dist/types/index.cjs +2 -1
  88. package/dist/types/index.cjs.map +1 -0
  89. package/dist/types/index.d.cts +5 -5
  90. package/dist/types/index.d.ts +5 -5
  91. package/dist/types/index.mjs +2 -1
  92. package/dist/types/index.mjs.map +1 -0
  93. package/dist/{useHoneySwapState-YfMSTWY3.d.cts → useHoneySwapState-C-9BV4VB.d.cts} +1 -1
  94. package/dist/{useHoneySwapState-CD8v6y1k.d.ts → useHoneySwapState-CUY5Sm1b.d.ts} +1 -1
  95. package/dist/utils/index.cjs +2 -1
  96. package/dist/utils/index.cjs.map +1 -0
  97. package/dist/utils/index.d.cts +5 -5
  98. package/dist/utils/index.d.ts +5 -5
  99. package/dist/utils/index.mjs +2 -1
  100. package/dist/utils/index.mjs.map +1 -0
  101. package/package.json +4 -3
  102. package/src/abi/bend/bundler.ts +60 -0
  103. package/src/abi/bend/generalAdapter.ts +362 -0
  104. package/src/abi/bend/metaMorpho.ts +2584 -0
  105. package/src/abi/bend/morpho.ts +444 -0
  106. package/src/abi/bend/morphoVault.ts +1456 -0
  107. package/src/abi/bend/publicAllocator.ts +355 -0
  108. package/src/abi/bex/aggregatorsRouter.ts +492 -0
  109. package/src/abi/bex/balancerComposableStablePoolFactoryV6.ts +283 -0
  110. package/src/abi/bex/balancerPoolCreationHelper.ts +267 -0
  111. package/src/abi/bex/balancerVault.ts +757 -0
  112. package/src/abi/enso/ensoRouterAbi.ts +140 -0
  113. package/src/abi/governance/governance.ts +1016 -0
  114. package/src/abi/governance/governanceTimelock.ts +589 -0
  115. package/src/abi/honey/collateralVault.ts +1144 -0
  116. package/src/abi/honey/honey.ts +563 -0
  117. package/src/abi/honey/honeyFactory.ts +1270 -0
  118. package/src/abi/honey/honeyFactoryReader.ts +894 -0
  119. package/src/abi/honey/honeyRootOracle.ts +492 -0
  120. package/src/abi/honey/pythPriceOracle.ts +619 -0
  121. package/src/abi/honey/pythWrapper.ts +446 -0
  122. package/src/abi/index.ts +35 -0
  123. package/src/abi/pol/beaconDeposit.ts +595 -0
  124. package/src/abi/pol/beraChef.ts +1019 -0
  125. package/src/abi/pol/bgt.ts +1008 -0
  126. package/src/abi/pol/bgtIncentiveDistributor.ts +640 -0
  127. package/src/abi/pol/bgtStaker.ts +1034 -0
  128. package/src/abi/pol/rewardAllocationFactory.ts +408 -0
  129. package/src/abi/pol/rewardVault.ts +1928 -0
  130. package/src/abi/pol/rewardVaultFactory.ts +586 -0
  131. package/src/abi/pol/rewardVaultHelper.ts +882 -0
  132. package/src/abi/pol/stakeBeraVault.ts +1116 -0
  133. package/src/abi/pol/stakeBeraVaultWithdrawalRequest.ts +618 -0
  134. package/src/abi/pol/wbera.ts +366 -0
  135. package/src/abi/pyth/pyth.ts +566 -0
  136. package/src/abi/pyth/pythErrors.ts +72 -0
  137. package/src/abi/utils/EIP7702StatelessDelegator.ts +523 -0
  138. package/src/abi/utils/bundler3errors.ts +6 -0
  139. package/src/abi/utils/commonAbiErrors.ts +9 -0
  140. package/src/abi/utils/erc20errors.ts +74 -0
  141. package/src/abi/utils/merkleDistributor.ts +838 -0
  142. package/src/abi/utils/multicall3.ts +242 -0
  143. package/src/abi/utils/openChainErrors.ts +139 -0
  144. package/src/abi/utils/upgradableBeacon.ts +86 -0
  145. package/src/actions/bend/getConvertToAssets.ts +23 -0
  146. package/src/actions/bend/getMaxDeposit.ts +21 -0
  147. package/src/actions/clients/BeraApolloClient.ts +125 -0
  148. package/src/actions/clients/getApolloClient.ts +109 -0
  149. package/src/actions/clients/getEnsoClient.ts +24 -0
  150. package/src/actions/dex/__tests__/aggregators.unit.test.ts +112 -0
  151. package/src/actions/dex/__tests__/allPools.integration.test.ts +13 -0
  152. package/src/actions/dex/__tests__/getOnChainPool.unit.test.ts +15 -0
  153. package/src/actions/dex/__tests__/haiku.integration.test.ts +40 -0
  154. package/src/actions/dex/aggregators/base.ts +174 -0
  155. package/src/actions/dex/aggregators/bex.ts +255 -0
  156. package/src/actions/dex/aggregators/bgt.ts +50 -0
  157. package/src/actions/dex/aggregators/enso.ts +113 -0
  158. package/src/actions/dex/aggregators/fly.ts +136 -0
  159. package/src/actions/dex/aggregators/haiku.ts +171 -0
  160. package/src/actions/dex/aggregators/honey.ts +245 -0
  161. package/src/actions/dex/aggregators/kyberswap.ts +142 -0
  162. package/src/actions/dex/aggregators/oogabooga.ts +110 -0
  163. package/src/actions/dex/aggregators/openOcean.ts +142 -0
  164. package/src/actions/dex/aggregators/wbera.ts +72 -0
  165. package/src/actions/dex/b-sdk.ts +48 -0
  166. package/src/actions/dex/getAllPools.ts +60 -0
  167. package/src/actions/dex/getApiPool.ts +47 -0
  168. package/src/actions/dex/getGlobalLiquidityAndSwapVolume.ts +29 -0
  169. package/src/actions/dex/getIsTokenExploited.ts +63 -0
  170. package/src/actions/dex/getOnChainPool.ts +216 -0
  171. package/src/actions/dex/getPoolEvents.ts +35 -0
  172. package/src/actions/dex/getPoolHistoricalData.ts +51 -0
  173. package/src/actions/dex/getPoolPausedState.ts +40 -0
  174. package/src/actions/dex/getPoolWithState.ts +24 -0
  175. package/src/actions/dex/getSubgraphPool.ts +30 -0
  176. package/src/actions/dex/getTransactionCount.ts +29 -0
  177. package/src/actions/dex/getVaultPausedState.ts +21 -0
  178. package/src/actions/enso/bend.ts +143 -0
  179. package/src/actions/enso/getEnsoUserToken.debug.test.ts +57 -0
  180. package/src/actions/enso/getEnsoUserToken.ts +133 -0
  181. package/src/actions/enso/util.ts +60 -0
  182. package/src/actions/enso/zap.ts +78 -0
  183. package/src/actions/governance/__tests__/checkProposalField.unit.test.ts +108 -0
  184. package/src/actions/governance/__tests__/getDecodedFunctionData.integration.test.ts +127 -0
  185. package/src/actions/governance/__tests__/getQuorum.integration.test.ts +39 -0
  186. package/src/actions/governance/checkProposalField.ts +211 -0
  187. package/src/actions/governance/computeActualStatus.ts +154 -0
  188. package/src/actions/governance/constants.ts +7 -0
  189. package/src/actions/governance/getAllProposals.ts +75 -0
  190. package/src/actions/governance/getBodyErrors.ts +28 -0
  191. package/src/actions/governance/getDecodedFunctionData.ts +170 -0
  192. package/src/actions/governance/getProposalDetails.ts +40 -0
  193. package/src/actions/governance/getProposalFromTx.ts +101 -0
  194. package/src/actions/governance/getProposalParams.ts +247 -0
  195. package/src/actions/governance/getProposalVotes.ts +20 -0
  196. package/src/actions/governance/getQuorum.ts +38 -0
  197. package/src/actions/governance/parseProposalBody.ts +73 -0
  198. package/src/actions/honey/getChartData.ts +27 -0
  199. package/src/actions/honey/getCollateralWeights.ts +50 -0
  200. package/src/actions/honey/getGlobalCapLimit.ts +148 -0
  201. package/src/actions/honey/getHoneyCollaterals.ts +139 -0
  202. package/src/actions/honey/getHoneyFees.ts +100 -0
  203. package/src/actions/honey/getHoneyGlobalData.ts +21 -0
  204. package/src/actions/honey/getHoneyPausedState.ts +25 -0
  205. package/src/actions/honey/getHoneyPreview.ts +152 -0
  206. package/src/actions/honey/getHoneyPythPriceOracle.ts +21 -0
  207. package/src/actions/honey/getHoneyRootPriceOracle.ts +23 -0
  208. package/src/actions/honey/getHoneyVaultsBalance.ts +86 -0
  209. package/src/actions/honey/getPythLatestPrices.ts +54 -0
  210. package/src/actions/honey/getRelativeCapLimit.ts +83 -0
  211. package/src/actions/honey/getSharesWithoutFees.ts +65 -0
  212. package/src/actions/honey/getSwapPayload.ts +128 -0
  213. package/src/actions/honey/isBadCollateralAsset.ts +77 -0
  214. package/src/actions/honey/isBasketModeEnabled.ts +47 -0
  215. package/src/actions/honey/tests/pyth.integration.test.ts +63 -0
  216. package/src/actions/index.ts +105 -0
  217. package/src/actions/misc/getBlockTimestamp.ts +41 -0
  218. package/src/actions/pol/__tests__/getAllValidators.integration.test.ts +55 -0
  219. package/src/actions/pol/__tests__/getValidator.integration.test.ts +32 -0
  220. package/src/actions/pol/__tests__/rewardVaults.integration.test.ts +34 -0
  221. package/src/actions/pol/getBGTGlobalInfo.ts +43 -0
  222. package/src/actions/pol/getBgtAprSimulation.ts +207 -0
  223. package/src/actions/pol/getBgtAprSimultaion.unit.test.ts +297 -0
  224. package/src/actions/pol/getBgtTokenTotalBoosts.ts +30 -0
  225. package/src/actions/pol/getBgtTokenTotalSupply.ts +29 -0
  226. package/src/actions/pol/getBlockTime.ts +43 -0
  227. package/src/actions/pol/getGlobalCuttingBoard.ts +25 -0
  228. package/src/actions/pol/getGlobalData.ts +74 -0
  229. package/src/actions/pol/getIncentiveFeeClaimStats.ts +43 -0
  230. package/src/actions/pol/getMarkets.ts +36 -0
  231. package/src/actions/pol/getRewardProofsByValidator.ts +49 -0
  232. package/src/actions/pol/getRewardTokenToBeraRate.ts +30 -0
  233. package/src/actions/pol/getRewardVault.ts +54 -0
  234. package/src/actions/pol/getRewardVaultBeaconImplementation.integration.test.ts +18 -0
  235. package/src/actions/pol/getRewardVaultBeaconImplementation.ts +35 -0
  236. package/src/actions/pol/getRewardVaultDurationConstants.integration.test.ts +24 -0
  237. package/src/actions/pol/getRewardVaultDurationConstants.ts +45 -0
  238. package/src/actions/pol/getRewardVaultFromToken.ts +30 -0
  239. package/src/actions/pol/getRewardVaultIncentives.ts +122 -0
  240. package/src/actions/pol/getRewardVaultRewards.ts +109 -0
  241. package/src/actions/pol/getRewardVaultStakingToken.ts +19 -0
  242. package/src/actions/pol/getRewardVaults.ts +106 -0
  243. package/src/actions/pol/getSWBeraVaultMetadata.ts +166 -0
  244. package/src/actions/pol/getSWBeraWithdrawal.ts +165 -0
  245. package/src/actions/pol/getStakeWithdrawalCooldown.ts +21 -0
  246. package/src/actions/pol/getStakedBeraAPR.ts +56 -0
  247. package/src/actions/pol/getStakedBeraSnapshots.ts +48 -0
  248. package/src/actions/pol/getStakingTokenInformation.ts +60 -0
  249. package/src/actions/pol/getUserClaimableIncentives.ts +40 -0
  250. package/src/actions/pol/getUserVaultInfo.ts +52 -0
  251. package/src/actions/pol/getUserVaults.ts +185 -0
  252. package/src/actions/pol/getUserVaultsBalance.ts +54 -0
  253. package/src/actions/pol/getUserVaultsReward.ts +32 -0
  254. package/src/actions/pol/getVaultHistory.ts +43 -0
  255. package/src/actions/pol/getVaultValidators.ts +31 -0
  256. package/src/actions/pol/getVaultsSupply.ts +28 -0
  257. package/src/actions/prices/__tests__/prices.integration.test.ts +29 -0
  258. package/src/actions/prices/getTokenCurrentPrices.ts +79 -0
  259. package/src/actions/pyth/getHoneyPythFeeds.ts +46 -0
  260. package/src/actions/pyth/getUpdateFee.ts +27 -0
  261. package/src/actions/tokens/getAllowances.ts +59 -0
  262. package/src/actions/tokens/getTokenInformation.ts +57 -0
  263. package/src/actions/tokens/getTokens.ts +19 -0
  264. package/src/actions/tokens/getWalletBalances.integration.test.ts +40 -0
  265. package/src/actions/tokens/getWalletBalances.ts +123 -0
  266. package/src/actions/transactions/beraWriteContract.integration.test.ts +251 -0
  267. package/src/actions/transactions/beraWriteContract.ts +722 -0
  268. package/src/actions/validators/getActiveBoostAndCommissionChangeDelay.integration.test.ts +40 -0
  269. package/src/actions/validators/getActiveBoostAndCommissionChangeDelay.ts +109 -0
  270. package/src/actions/validators/getAllValidators.ts +33 -0
  271. package/src/actions/validators/getApiEnrichedAllocation.ts +33 -0
  272. package/src/actions/validators/getApiValidator.ts +38 -0
  273. package/src/actions/validators/getBaselineRewardAllocation.ts +26 -0
  274. package/src/actions/validators/getDailyValidatorBlockStats.ts +37 -0
  275. package/src/actions/validators/getDefaultRewardAllocation.ts +39 -0
  276. package/src/actions/validators/getManagedValidatorByAccount.ts +32 -0
  277. package/src/actions/validators/getStakingPoolBatch.ts +20 -0
  278. package/src/actions/validators/getUserActiveValidators.ts +101 -0
  279. package/src/actions/validators/getUserBoosts.ts +28 -0
  280. package/src/actions/validators/getUserBoostsOnValidator.ts +70 -0
  281. package/src/actions/validators/getUserStakingPositions.ts +225 -0
  282. package/src/actions/validators/getValidatorAnalytics.ts +34 -0
  283. package/src/actions/validators/getValidatorCommission.ts +24 -0
  284. package/src/actions/validators/getValidatorEstimatedBgtPerYear.ts +25 -0
  285. package/src/actions/validators/getValidatorOperatorAddress.ts +27 -0
  286. package/src/actions/validators/getValidatorQueuedCommission.ts +30 -0
  287. package/src/actions/validators/getValidatorQueuedOperatorAddress.ts +32 -0
  288. package/src/actions/validators/getValidatorQueuedRewardAllocation.ts +31 -0
  289. package/src/actions/validators/getValidatorRewardAllocation.ts +158 -0
  290. package/src/actions/validators/getValidatorRewardAllocatorAddress.ts +38 -0
  291. package/src/actions/validators/utils/__tests__/validatorUtils.integration.test.ts +36 -0
  292. package/src/actions/validators/utils/getValidatorBoostApy.ts +59 -0
  293. package/src/contexts/BeraFlags/BeraFlags.tsx +69 -0
  294. package/src/contexts/BeraFlags/defaultFlags.ts +42 -0
  295. package/src/contexts/BexStatusProvider.tsx +125 -0
  296. package/src/contexts/HoneyConfigProvider.tsx +73 -0
  297. package/src/contexts/SwrFallback.tsx +34 -0
  298. package/src/contexts/TokensProvider.tsx +66 -0
  299. package/src/contexts/berajsProvider/context.tsx +49 -0
  300. package/src/contexts/berajsProvider/index.ts +2 -0
  301. package/src/contexts/berajsProvider/useBeraJs.ts +18 -0
  302. package/src/contexts/block-time-provider.tsx +34 -0
  303. package/src/contexts/index.ts +14 -0
  304. package/src/data/contracts.ts +398 -0
  305. package/src/enum/dex.ts +10 -0
  306. package/src/enum/index.ts +4 -0
  307. package/src/enum/polling.ts +8 -0
  308. package/src/enum/slippage.ts +19 -0
  309. package/src/enum/txnEnum.ts +101 -0
  310. package/src/errors/BeraError.ts +202 -0
  311. package/src/errors/InvalidArgumentError.ts +81 -0
  312. package/src/errors/NotFoundError.ts +34 -0
  313. package/src/errors/RequestError.ts +207 -0
  314. package/src/errors/TransactionFailedError.ts +93 -0
  315. package/src/errors/assert.ts +144 -0
  316. package/src/errors/assert.unit.test.ts +110 -0
  317. package/src/errors/errorMap.ts +1157 -0
  318. package/src/errors/getErrorMessage.ts +40 -0
  319. package/src/errors/getRevertReason.integration.test.ts +449 -0
  320. package/src/errors/getRevertReason.ts +179 -0
  321. package/src/errors/index.ts +8 -0
  322. package/src/errors/initBeraError.ts +46 -0
  323. package/src/errors/parseViemError.ts +239 -0
  324. package/src/hooks/bend/useGetConvertToAssets.ts +42 -0
  325. package/src/hooks/dex/useAggregatorsQuotes.ts +502 -0
  326. package/src/hooks/dex/useAggregatorsRouterFeeBps.ts +34 -0
  327. package/src/hooks/dex/useAllUserPools.ts +38 -0
  328. package/src/hooks/dex/useApiPool.ts +53 -0
  329. package/src/hooks/dex/useBexStatus.ts +1 -0
  330. package/src/hooks/dex/useCreatePool.ts +437 -0
  331. package/src/hooks/dex/useExploitedTokens.ts +57 -0
  332. package/src/hooks/dex/useGlobalLiquidityAndSwapVolume.ts +22 -0
  333. package/src/hooks/dex/useLiquidityMismatch.ts +195 -0
  334. package/src/hooks/dex/useLpPosition.ts +115 -0
  335. package/src/hooks/dex/useMultipleTokenApprovalsWithSlippage.ts +92 -0
  336. package/src/hooks/dex/useOnChainPoolData.ts +126 -0
  337. package/src/hooks/dex/usePollPoolCreationRelayerApproval.ts +54 -0
  338. package/src/hooks/dex/usePollVaultIsPaused.ts +30 -0
  339. package/src/hooks/dex/usePool.ts +59 -0
  340. package/src/hooks/dex/usePoolEvents.ts +22 -0
  341. package/src/hooks/dex/usePoolHistoricalData.ts +44 -0
  342. package/src/hooks/dex/usePools.ts +83 -0
  343. package/src/hooks/enso/useBendTransactionRequests.ts +247 -0
  344. package/src/hooks/enso/useEnsoZap.ts +166 -0
  345. package/src/hooks/enso/useZapTransactionRequests.ts +81 -0
  346. package/src/hooks/governance/useCreateProposal.ts +88 -0
  347. package/src/hooks/governance/useGetPastVotes.ts +63 -0
  348. package/src/hooks/governance/useHasVoted.ts +38 -0
  349. package/src/hooks/governance/useIsCanceller.ts +43 -0
  350. package/src/hooks/governance/usePollAllProposals.ts +232 -0
  351. package/src/hooks/governance/usePollProposal.ts +96 -0
  352. package/src/hooks/governance/usePollProposalThreshold.ts +41 -0
  353. package/src/hooks/governance/usePollProposalVotes.ts +64 -0
  354. package/src/hooks/governance/usePollUserDelegates.ts +70 -0
  355. package/src/hooks/governance/useProposalFromTx.ts +37 -0
  356. package/src/hooks/governance/useProposalSnapshot.ts +44 -0
  357. package/src/hooks/governance/useProposalState.ts +48 -0
  358. package/src/hooks/governance/useProposalTimelockState.ts +61 -0
  359. package/src/hooks/governance/useQuorum.ts +42 -0
  360. package/src/hooks/honey/useCappedGlobally.ts +92 -0
  361. package/src/hooks/honey/useCappedRelatively.ts +88 -0
  362. package/src/hooks/honey/useCollateralWeights.ts +48 -0
  363. package/src/hooks/honey/useHoneyAlerts.ts +314 -0
  364. package/src/hooks/honey/useHoneyBalances.ts +79 -0
  365. package/src/hooks/honey/useHoneyChartData.ts +17 -0
  366. package/src/hooks/honey/useHoneyGlobalData.ts +22 -0
  367. package/src/hooks/honey/useHoneySwapState.ts +202 -0
  368. package/src/hooks/honey/useHoneyVaultsBalance.ts +41 -0
  369. package/src/hooks/honey/useIsBadCollateralAsset.ts +73 -0
  370. package/src/hooks/honey/useIsBasketModeEnabled.ts +70 -0
  371. package/src/hooks/honey/usePythLatestPrices.ts +41 -0
  372. package/src/hooks/index.ts +124 -0
  373. package/src/hooks/perps/usePythUpdateFee.ts +43 -0
  374. package/src/hooks/pol/useBgtAprSimulation.ts +22 -0
  375. package/src/hooks/pol/useBgtUnstakedBalance.ts +50 -0
  376. package/src/hooks/pol/useClaimableFees.ts +38 -0
  377. package/src/hooks/pol/useEarnedStakedBeraVault.ts +59 -0
  378. package/src/hooks/pol/useHighestVaultsAPR.ts +57 -0
  379. package/src/hooks/pol/useOnChainRewardVault.ts +114 -0
  380. package/src/hooks/pol/usePollGlobalData.ts +31 -0
  381. package/src/hooks/pol/usePollMarkets.ts +32 -0
  382. package/src/hooks/pol/useQueuedBeraUnlock.ts +70 -0
  383. package/src/hooks/pol/useRewardTokenToBeraRate.ts +45 -0
  384. package/src/hooks/pol/useRewardVault.ts +51 -0
  385. package/src/hooks/pol/useRewardVaultBalanceFromStakingToken.ts +82 -0
  386. package/src/hooks/pol/useRewardVaultFromToken.ts +58 -0
  387. package/src/hooks/pol/useRewardVaultIncentives.ts +37 -0
  388. package/src/hooks/pol/useRewardVaultRewards.ts +37 -0
  389. package/src/hooks/pol/useRewardVaults.ts +45 -0
  390. package/src/hooks/pol/useStakedBeraSnapshots.ts +27 -0
  391. package/src/hooks/pol/useUserVaultInfo.ts +46 -0
  392. package/src/hooks/pol/useUserVaults.ts +40 -0
  393. package/src/hooks/pol/useVaultAddress.ts +31 -0
  394. package/src/hooks/pol/useVaultHistory.ts +29 -0
  395. package/src/hooks/pol/useVaultValidators.ts +33 -0
  396. package/src/hooks/tokens/useBeraCurrentPrice.ts +12 -0
  397. package/src/hooks/tokens/useMultipleTokenInformation.ts +62 -0
  398. package/src/hooks/tokens/usePollAllowances.ts +60 -0
  399. package/src/hooks/tokens/usePollBalance.ts +113 -0
  400. package/src/hooks/tokens/usePollWalletBalances.ts +75 -0
  401. package/src/hooks/tokens/useStakingTokenInformation.ts +54 -0
  402. package/src/hooks/tokens/useTokenCurrentPrice.ts +19 -0
  403. package/src/hooks/tokens/useTokenCurrentPrices.ts +57 -0
  404. package/src/hooks/tokens/useTokenInformation.ts +59 -0
  405. package/src/hooks/tokens/useTokens.ts +26 -0
  406. package/src/hooks/tokens/useTotalSupply.ts +22 -0
  407. package/src/hooks/transactions/TransactionStoreContext.tsx +59 -0
  408. package/src/hooks/transactions/transactionStore.ts +275 -0
  409. package/src/hooks/transactions/transactionStore.unit.test.ts +508 -0
  410. package/src/hooks/transactions/useAddRecentTransaction.ts +29 -0
  411. package/src/hooks/transactions/useRecentTransactions.ts +27 -0
  412. package/src/hooks/useBlockToTimestamp.ts +51 -0
  413. package/src/hooks/useContractWrite/index.ts +2 -0
  414. package/src/hooks/useContractWrite/stateReducer.ts +60 -0
  415. package/src/hooks/useContractWrite/types.ts +88 -0
  416. package/src/hooks/useContractWrite/useBeraContractWrite.ts +137 -0
  417. package/src/hooks/useGetVerifiedAbi.ts +47 -0
  418. package/src/hooks/useHistoryState.ts +64 -0
  419. package/src/hooks/usePrevious.ts +13 -0
  420. package/src/hooks/validators/useAllValidators.ts +48 -0
  421. package/src/hooks/validators/useApiEnrichedAllocation.ts +17 -0
  422. package/src/hooks/validators/useApiValidator.ts +37 -0
  423. package/src/hooks/validators/useBaselineRewardAllocation.ts +16 -0
  424. package/src/hooks/validators/useDailyValidatorBlockStats.ts +35 -0
  425. package/src/hooks/validators/useDefaultRewardAllocation.ts +32 -0
  426. package/src/hooks/validators/useManagedValidatorByAccount.ts +40 -0
  427. package/src/hooks/validators/useManagedValidatorRole.ts +119 -0
  428. package/src/hooks/validators/useOnChainValidator.ts +66 -0
  429. package/src/hooks/validators/useStakingPoolBatch.ts +45 -0
  430. package/src/hooks/validators/useSubgraphUserValidators.ts +36 -0
  431. package/src/hooks/validators/useUserActiveValidators.ts +44 -0
  432. package/src/hooks/validators/useUserBoostsOnValidator.ts +45 -0
  433. package/src/hooks/validators/useUserClaimableIncentives.ts +149 -0
  434. package/src/hooks/validators/useUserStakingPositions.ts +62 -0
  435. package/src/hooks/validators/useValidator.ts +83 -0
  436. package/src/hooks/validators/useValidatorAnalytics.ts +36 -0
  437. package/src/hooks/validators/useValidatorCommission.ts +36 -0
  438. package/src/hooks/validators/useValidatorEstimatedBgtPerYear.ts +24 -0
  439. package/src/hooks/validators/useValidatorQueuedCommission.ts +41 -0
  440. package/src/hooks/validators/useValidatorQueuedOperatorAddress.ts +39 -0
  441. package/src/hooks/validators/useValidatorQueuedRewardAllocation.ts +37 -0
  442. package/src/hooks/validators/useValidatorRewardAllocation.ts +36 -0
  443. package/src/hooks/validators/validatorRoleManager.ts +0 -0
  444. package/src/types/bribe-boost.ts +50 -0
  445. package/src/types/dex.ts +196 -0
  446. package/src/types/enso.ts +42 -0
  447. package/src/types/global.ts +230 -0
  448. package/src/types/governance.ts +174 -0
  449. package/src/types/honeySwap.ts +35 -0
  450. package/src/types/index.ts +8 -0
  451. package/src/types/pol.ts +52 -0
  452. package/src/types/staking.ts +7 -0
  453. package/src/utils/beraFetch.ts +55 -0
  454. package/src/utils/constants.ts +35 -0
  455. package/src/utils/formatAggregatorsQuotes.ts +57 -0
  456. package/src/utils/formatAggregatorsQuotes.unit.test.ts +191 -0
  457. package/src/utils/formatIncentivesTokenMap.ts +19 -0
  458. package/src/utils/formatInputTokenValue.ts +12 -0
  459. package/src/utils/formatNumber.ts +225 -0
  460. package/src/utils/formatNumber.unit.test.ts +245 -0
  461. package/src/utils/formatTimestamps.ts +155 -0
  462. package/src/utils/formatTimestamps.unit.test.ts +395 -0
  463. package/src/utils/formatTokenList.ts +61 -0
  464. package/src/utils/formatUsd.ts +46 -0
  465. package/src/utils/getContractName.ts +27 -0
  466. package/src/utils/getContractName.unit.test.ts +64 -0
  467. package/src/utils/getErrorResponse.ts +20 -0
  468. package/src/utils/getHoneySwapMessage.test.ts +116 -0
  469. package/src/utils/getHoneySwapMessage.ts +70 -0
  470. package/src/utils/getServerSideClient.ts +49 -0
  471. package/src/utils/getTestClient.ts +19 -0
  472. package/src/utils/hasAnyTruthyValues.ts +17 -0
  473. package/src/utils/index.ts +27 -0
  474. package/src/utils/isDifferenceExceedingThreshold.ts +13 -0
  475. package/src/utils/isSubgraphStale.ts +10 -0
  476. package/src/utils/math.ts +28 -0
  477. package/src/utils/math.unit.test.ts +49 -0
  478. package/src/utils/parseBaseArgs.ts +23 -0
  479. package/src/utils/parseBaseArgs.unit.test.ts +55 -0
  480. package/src/utils/poolNamings.ts +54 -0
  481. package/src/utils/pythHoneyUtils.ts +3 -0
  482. package/src/utils/sentryBeforeSend.ts +52 -0
  483. package/src/utils/test-utils.ts +2 -0
  484. package/src/utils/time.ts +106 -0
  485. package/src/utils/time.unit.test.ts +76 -0
  486. package/src/utils/tokenWrapping.ts +16 -0
  487. package/src/utils/tokens.ts +106 -0
  488. package/src/utils/tokens.unit.test.ts +98 -0
  489. package/src/utils/truncateHash.ts +20 -0
  490. package/src/utils/truncateHash.unit.test.ts +19 -0
  491. package/src/utils/validatorUptimeStatus.ts +30 -0
  492. package/dist/chunk-3V2MGZRD.mjs +0 -2
  493. package/dist/chunk-4E5JGLUM.cjs +0 -1
  494. package/dist/chunk-AHAZC5K3.mjs +0 -1
  495. package/dist/chunk-ELUMRVNE.mjs +0 -1
  496. package/dist/chunk-JHCSZSJS.mjs +0 -1
  497. package/dist/chunk-KIA6GUIN.cjs +0 -1
  498. package/dist/chunk-LX5CM4Y6.cjs +0 -1
  499. package/dist/chunk-LZPBQLKP.mjs +0 -3
  500. package/dist/chunk-M5BKM52U.cjs +0 -1
  501. package/dist/chunk-MTBICGRP.mjs +0 -1
  502. 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
+ };