@berachain/berajs 0.1.2 → 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 (453) 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-OS5AJMYJ.cjs.map +1 -0
  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} +19 -28
  90. package/dist/contexts/{index.d.cts → exports.d.ts} +19 -28
  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-9xY2RUGe.d.cts → getValidatorQueuedOperatorAddress-BX35p2Lv.d.ts} +125 -15
  111. package/dist/{getValidatorQueuedOperatorAddress-Ne2zoiiV.d.ts → 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-C-9BV4VB.d.cts → useHoneySwapState-B-vmIP1b.d.cts} +1 -1
  132. package/dist/{useHoneySwapState-CUY5Sm1b.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} +83 -20
  136. package/dist/utils/{index.d.ts → exports.d.ts} +83 -20
  137. package/dist/utils/exports.mjs +2 -0
  138. package/dist/utils/exports.mjs.map +1 -0
  139. package/package.json +16 -17
  140. package/src/abi/{index.ts → exports.ts} +3 -0
  141. package/src/abi/pol/LSTStakerVault.ts +2032 -0
  142. package/src/abi/utils/openChainErrors.ts +71 -30
  143. package/src/abi/utils/thirdwebMinimalAccount.ts +616 -0
  144. package/src/actions/clients/BeraApolloClient.ts +8 -6
  145. package/src/actions/dex/__tests__/aggregators.unit.test.ts +2 -5
  146. package/src/actions/dex/aggregators/base.ts +74 -16
  147. package/src/actions/dex/aggregators/bex.ts +54 -74
  148. package/src/actions/dex/aggregators/bgt.ts +31 -8
  149. package/src/actions/dex/aggregators/{enso.ts → enso/enso.ts} +18 -14
  150. package/src/actions/dex/aggregators/enso/ensoErc4626.debug.test.ts +37 -0
  151. package/src/actions/dex/aggregators/enso/ensoErc4626.ts +176 -0
  152. package/src/actions/dex/aggregators/erc4626.ts +122 -0
  153. package/src/actions/dex/aggregators/fly.ts +59 -53
  154. package/src/actions/dex/aggregators/haiku.ts +52 -54
  155. package/src/actions/dex/aggregators/honey.ts +54 -45
  156. package/src/actions/dex/aggregators/kyberswap.ts +41 -39
  157. package/src/actions/dex/aggregators/oogabooga.ts +47 -46
  158. package/src/actions/dex/aggregators/openOcean.ts +51 -46
  159. package/src/actions/dex/aggregators/wbera.ts +54 -42
  160. package/src/actions/dex/b-sdk.ts +5 -2
  161. package/src/actions/dex/getIsTokenExploited.ts +2 -2
  162. package/src/actions/enso/{zap.ts → getEnsoSwapBundle.ts} +4 -5
  163. package/src/actions/enso/getEnsoUserTokensWithBalances.debug.test.ts +73 -0
  164. package/src/actions/enso/{getEnsoUserToken.ts → getEnsoUserTokensWithBalances.ts} +42 -30
  165. package/src/actions/enso/util.ts +1 -1
  166. package/src/actions/{index.ts → exports.ts} +5 -0
  167. package/src/actions/governance/__tests__/checkProposalField.unit.test.ts +1 -1
  168. package/src/actions/governance/__tests__/getQuorum.integration.test.ts +1 -1
  169. package/src/actions/governance/checkProposalField.ts +1 -1
  170. package/src/actions/governance/computeActualStatus.ts +1 -1
  171. package/src/actions/governance/getBodyErrors.ts +1 -1
  172. package/src/actions/governance/getDecodedFunctionData.ts +1 -4
  173. package/src/actions/governance/getProposalDetails.ts +2 -2
  174. package/src/actions/governance/getProposalFromTx.ts +1 -2
  175. package/src/actions/governance/getProposalParams.ts +7 -8
  176. package/src/actions/governance/getQuorum.ts +1 -2
  177. package/src/actions/honey/getCollateralWeights.ts +1 -1
  178. package/src/actions/honey/getHoneyCollaterals.ts +1 -0
  179. package/src/actions/honey/getHoneyVaultsBalance.ts +51 -55
  180. package/src/actions/honey/getSwapPayload.ts +37 -35
  181. package/src/actions/honey/tests/pyth.integration.test.ts +0 -1
  182. package/src/actions/pol/__tests__/getAllValidators.integration.test.ts +1 -1
  183. package/src/actions/pol/getEarnedStakedBeraVault.ts +31 -0
  184. package/src/actions/pol/getGlobalData.ts +14 -13
  185. package/src/actions/pol/getLSTStakeConfig.ts +67 -0
  186. package/src/actions/pol/getMarkets.ts +1 -1
  187. package/src/actions/pol/getRewardProofsByValidator.ts +1 -1
  188. package/src/actions/pol/getRewardVaultIncentives.ts +3 -5
  189. package/src/actions/pol/getRewardVaults.ts +2 -3
  190. package/src/actions/pol/getSWBeraVaultMetadata.ts +7 -5
  191. package/src/actions/pol/getSWBeraWithdrawal.ts +41 -27
  192. package/src/actions/pol/getStakeWithdrawalCooldown.ts +5 -7
  193. package/src/actions/pol/getStakingDailyAssets.ts +21 -0
  194. package/src/actions/pol/getStakingTokenInformation.ts +3 -4
  195. package/src/actions/pol/getTotalStakedAmount.ts +47 -0
  196. package/src/actions/pol/getUserClaimableIncentives.ts +1 -1
  197. package/src/actions/pol/getUserVaults.ts +8 -6
  198. package/src/actions/pol/getUserVaultsBalance.ts +4 -16
  199. package/src/actions/prices/getTokenCurrentPrices.ts +8 -3
  200. package/src/actions/tokens/getAllowances.ts +68 -41
  201. package/src/actions/tokens/getTokenInformation.ts +4 -1
  202. package/src/actions/tokens/getTokens.ts +1 -1
  203. package/src/actions/tokens/getUnderlyingToken.ts +53 -0
  204. package/src/actions/tokens/getWalletBalances.integration.test.ts +53 -14
  205. package/src/actions/tokens/getWalletBalances.ts +69 -43
  206. package/src/actions/transactions/beraWriteContract.integration.test.ts +18 -6
  207. package/src/actions/transactions/beraWriteContract.ts +3 -3
  208. package/src/actions/validators/getUserActiveValidators.ts +2 -3
  209. package/src/actions/validators/getUserBoostsOnValidator.ts +2 -3
  210. package/src/contexts/BeraFlags/defaultFlags.ts +4 -0
  211. package/src/contexts/SwrFallback.tsx +13 -3
  212. package/src/contexts/TokensProvider.tsx +35 -8
  213. package/src/{hooks/transactions → contexts}/TransactionStoreContext.tsx +32 -4
  214. package/src/contexts/block-time-provider.tsx +1 -1
  215. package/src/contexts/{index.ts → exports.ts} +1 -1
  216. package/src/data/contracts.ts +16 -1
  217. package/src/enum/contracts.ts +13 -0
  218. package/src/enum/dex.ts +29 -0
  219. package/src/enum/{index.ts → exports.ts} +3 -0
  220. package/src/enum/governance.ts +61 -0
  221. package/src/enum/honey.ts +12 -0
  222. package/src/enum/txnEnum.ts +1 -0
  223. package/src/errors/BeraError.ts +50 -11
  224. package/src/errors/BeraMonitoring.ts +66 -0
  225. package/src/errors/BeraTracing.ts +79 -0
  226. package/src/errors/BeraTracing.unit.test.ts +198 -0
  227. package/src/errors/RequestError.ts +2 -2
  228. package/src/errors/assert.ts +4 -2
  229. package/src/errors/assert.unit.test.ts +6 -2
  230. package/src/errors/errorMap.ts +16 -6
  231. package/src/errors/{index.ts → exports.ts} +7 -0
  232. package/src/errors/getErrorMessage.ts +22 -3
  233. package/src/errors/getRevertReason.integration.test.ts +17 -5
  234. package/src/errors/getRevertReason.ts +41 -2
  235. package/src/errors/initBeraError.ts +52 -7
  236. package/src/errors/parseViemError.ts +114 -27
  237. package/src/errors/severity.ts +12 -0
  238. package/src/hooks/bend/useGetConvertToAssets.ts +3 -2
  239. package/src/hooks/dex/useAggregatorsQuotes.ts +126 -365
  240. package/src/hooks/dex/useAllUserPools.ts +1 -1
  241. package/src/hooks/dex/useApiPool.ts +1 -1
  242. package/src/hooks/dex/useCreatePool.ts +6 -5
  243. package/src/hooks/dex/useExploitedTokens.ts +1 -1
  244. package/src/hooks/dex/useLiquidityMismatch.ts +2 -5
  245. package/src/hooks/dex/useLpPosition.ts +21 -20
  246. package/src/hooks/dex/useMultipleTokenApprovalsWithSlippage.ts +40 -29
  247. package/src/hooks/dex/usePollPoolCreationRelayerApproval.ts +1 -1
  248. package/src/hooks/dex/usePoolEvents.ts +1 -1
  249. package/src/hooks/dex/usePools.ts +1 -1
  250. package/src/hooks/dex/usePriceImpact.ts +40 -0
  251. package/src/hooks/dex/useSingleAggregatorQuote.ts +350 -0
  252. package/src/hooks/enso/useBendZapSupply.ts +216 -0
  253. package/src/hooks/enso/useEnsoSwapBundle.ts +107 -0
  254. package/src/hooks/enso/useEnsoUserTokensWithBalances.ts +43 -0
  255. package/src/hooks/enso/useZapStakeBera.ts +113 -0
  256. package/src/hooks/{index.ts → exports.ts} +18 -7
  257. package/src/hooks/governance/useCreateProposal.ts +8 -8
  258. package/src/hooks/governance/usePollAllProposals.ts +1 -1
  259. package/src/hooks/governance/usePollProposal.ts +1 -1
  260. package/src/hooks/governance/usePollProposalThreshold.ts +1 -1
  261. package/src/hooks/governance/usePollUserDelegates.ts +1 -1
  262. package/src/hooks/governance/useProposalState.ts +2 -2
  263. package/src/hooks/honey/useCappedGlobally.ts +2 -1
  264. package/src/hooks/honey/useCappedRelatively.ts +1 -1
  265. package/src/hooks/honey/useCollateralWeights.ts +2 -1
  266. package/src/hooks/honey/useHoneyAlerts.ts +11 -11
  267. package/src/hooks/honey/useHoneyBalances.ts +7 -3
  268. package/src/hooks/honey/useHoneyGlobalData.ts +2 -1
  269. package/src/hooks/honey/useHoneySwapState.ts +2 -1
  270. package/src/hooks/honey/useHoneyVaultsBalance.ts +1 -1
  271. package/src/hooks/honey/useIsBadCollateralAsset.ts +2 -1
  272. package/src/hooks/honey/useIsBasketModeEnabled.ts +1 -1
  273. package/src/hooks/honey/usePythLatestPrices.ts +1 -1
  274. package/src/hooks/pol/useOnChainRewardVault.ts +3 -2
  275. package/src/hooks/pol/usePollGlobalData.ts +1 -1
  276. package/src/hooks/pol/usePollMarkets.ts +1 -1
  277. package/src/hooks/pol/useQueuedBeraUnlock.ts +17 -15
  278. package/src/hooks/pol/useRewardTokenToBeraRate.ts +6 -3
  279. package/src/hooks/pol/useRewardVault.ts +1 -1
  280. package/src/hooks/pol/useRewardVaults.ts +1 -1
  281. package/src/hooks/pol/useSWBeraVaultMetadata.ts +35 -0
  282. package/src/hooks/pol/useStakedAPR.ts +38 -0
  283. package/src/hooks/pol/useStakedData.ts +117 -0
  284. package/src/hooks/pol/useStakedSnapshots.ts +52 -0
  285. package/src/hooks/pol/useTotalStakedAmount.ts +30 -0
  286. package/src/hooks/pol/useUserVaultInfo.ts +1 -1
  287. package/src/hooks/pol/useVaultValidators.ts +1 -1
  288. package/src/hooks/tokens/useMultipleTokenInformation.ts +15 -6
  289. package/src/hooks/tokens/usePollAllowances.ts +15 -19
  290. package/src/hooks/tokens/usePollBalance.ts +8 -4
  291. package/src/hooks/tokens/usePollWalletBalances.ts +14 -11
  292. package/src/hooks/tokens/useStakingTokenInformation.ts +2 -1
  293. package/src/hooks/tokens/useTokenCurrentPrice.ts +4 -2
  294. package/src/hooks/tokens/useTokenCurrentPrices.ts +92 -13
  295. package/src/hooks/tokens/useTokenInformation.ts +11 -6
  296. package/src/hooks/tokens/useTokenPrice.ts +21 -0
  297. package/src/hooks/tokens/useTokenPrices.ts +133 -0
  298. package/src/hooks/tokens/useTokens.ts +1 -0
  299. package/src/hooks/tokens/useUnderlyingAsset.ts +23 -0
  300. package/src/hooks/transactions/transactionStore.ts +86 -65
  301. package/src/hooks/transactions/transactionStore.unit.test.ts +54 -1
  302. package/src/hooks/transactions/useAddRecentTransaction.ts +1 -1
  303. package/src/hooks/transactions/useRecentTransactions.ts +1 -1
  304. package/src/hooks/transactions/useSetTransactionStatus.ts +31 -0
  305. package/src/hooks/useContractWrite/useBeraContractWrite.ts +2 -1
  306. package/src/hooks/validators/useAllValidators.ts +1 -1
  307. package/src/hooks/validators/useApiValidator.ts +1 -1
  308. package/src/hooks/validators/useDailyValidatorBlockStats.ts +1 -1
  309. package/src/hooks/validators/useManagedValidatorByAccount.ts +1 -1
  310. package/src/hooks/validators/useManagedValidatorRole.ts +1 -1
  311. package/src/hooks/validators/useOnChainValidator.ts +1 -1
  312. package/src/hooks/validators/useStakingPoolBatch.ts +1 -1
  313. package/src/hooks/validators/useUserActiveValidators.ts +1 -1
  314. package/src/hooks/validators/useUserBoostsOnValidator.ts +1 -1
  315. package/src/hooks/validators/useUserClaimableIncentives.ts +8 -8
  316. package/src/hooks/validators/useValidator.ts +1 -1
  317. package/src/hooks/validators/useValidatorAnalytics.ts +1 -1
  318. package/src/hooks/validators/useValidatorCommission.ts +1 -1
  319. package/src/hooks/validators/useValidatorQueuedCommission.ts +1 -1
  320. package/src/hooks/validators/useValidatorQueuedOperatorAddress.ts +1 -1
  321. package/src/hooks/validators/useValidatorQueuedRewardAllocation.ts +1 -1
  322. package/src/hooks/validators/useValidatorRewardAllocation.ts +1 -1
  323. package/src/types/{dex.ts → dex.d.ts} +96 -67
  324. package/src/types/{enso.ts → enso.d.ts} +1 -1
  325. package/src/types/exports.ts +8 -0
  326. package/src/types/{global.ts → global.d.ts} +1 -30
  327. package/src/types/{governance.ts → governance.d.ts} +2 -64
  328. package/src/types/{honeySwap.ts → honeySwap.d.ts} +1 -13
  329. package/src/types/{pol.ts → pol.d.ts} +12 -1
  330. package/src/types/staking.d.ts +22 -0
  331. package/src/utils/createEmitter.ts +122 -0
  332. package/src/utils/createEmitter.unit.test.ts +149 -0
  333. package/src/utils/{index.ts → exports.ts} +3 -2
  334. package/src/utils/filter.ts +34 -0
  335. package/src/utils/formatNumber.ts +1 -1
  336. package/src/utils/formatNumber.unit.test.ts +2 -1
  337. package/src/utils/formatTokenList.ts +4 -10
  338. package/src/utils/getHoneySwapMessage.test.ts +1 -2
  339. package/src/utils/getServerSideClient.ts +4 -5
  340. package/src/utils/isDifferenceExceedingThreshold.ts +1 -1
  341. package/src/utils/layerZeroScan.ts +122 -0
  342. package/src/utils/math.ts +1 -1
  343. package/src/utils/parseWhiskToken.ts +15 -0
  344. package/src/utils/poolNamings.ts +1 -1
  345. package/src/utils/tokens.ts +23 -7
  346. package/dist/HoneyConfigProvider-6PXZJMSU.d.cts +0 -562
  347. package/dist/HoneyConfigProvider-CwDFrt02.d.ts +0 -562
  348. package/dist/abi/index.cjs +0 -2
  349. package/dist/abi/index.cjs.map +0 -1
  350. package/dist/abi/index.mjs +0 -2
  351. package/dist/actions/index.cjs +0 -2
  352. package/dist/actions/index.cjs.map +0 -1
  353. package/dist/actions/index.mjs +0 -2
  354. package/dist/aggregatorsRouter-Cny4B_MB.d.cts +0 -593
  355. package/dist/aggregatorsRouter-Cny4B_MB.d.ts +0 -593
  356. package/dist/chunk-22MQVFHP.cjs +0 -2
  357. package/dist/chunk-22MQVFHP.cjs.map +0 -1
  358. package/dist/chunk-3TKSVFZ3.mjs +0 -2
  359. package/dist/chunk-3TKSVFZ3.mjs.map +0 -1
  360. package/dist/chunk-6VF3RF53.cjs +0 -3
  361. package/dist/chunk-6VF3RF53.cjs.map +0 -1
  362. package/dist/chunk-6W22TFYA.mjs +0 -2
  363. package/dist/chunk-6W22TFYA.mjs.map +0 -1
  364. package/dist/chunk-AMRJ4B36.mjs +0 -2
  365. package/dist/chunk-AMRJ4B36.mjs.map +0 -1
  366. package/dist/chunk-DS2ZDVKU.mjs +0 -2
  367. package/dist/chunk-DS2ZDVKU.mjs.map +0 -1
  368. package/dist/chunk-ED43NYSE.cjs +0 -2
  369. package/dist/chunk-ED43NYSE.cjs.map +0 -1
  370. package/dist/chunk-EU4WFADK.cjs +0 -2
  371. package/dist/chunk-EU4WFADK.cjs.map +0 -1
  372. package/dist/chunk-HCTFDGXL.mjs +0 -2
  373. package/dist/chunk-HCTFDGXL.mjs.map +0 -1
  374. package/dist/chunk-IOSYBHKU.mjs +0 -2
  375. package/dist/chunk-IOSYBHKU.mjs.map +0 -1
  376. package/dist/chunk-JMKLDDKY.cjs +0 -2
  377. package/dist/chunk-JMKLDDKY.cjs.map +0 -1
  378. package/dist/chunk-KMKUXP2S.mjs +0 -3
  379. package/dist/chunk-KMKUXP2S.mjs.map +0 -1
  380. package/dist/chunk-OJXJ6CZ4.mjs +0 -4
  381. package/dist/chunk-OJXJ6CZ4.mjs.map +0 -1
  382. package/dist/chunk-PHIOKO3A.mjs +0 -2
  383. package/dist/chunk-PHIOKO3A.mjs.map +0 -1
  384. package/dist/chunk-QCK474XD.cjs +0 -2
  385. package/dist/chunk-QCK474XD.cjs.map +0 -1
  386. package/dist/chunk-REDXXUK7.cjs +0 -2
  387. package/dist/chunk-REDXXUK7.cjs.map +0 -1
  388. package/dist/chunk-S74ZMG2G.cjs +0 -2
  389. package/dist/chunk-S74ZMG2G.cjs.map +0 -1
  390. package/dist/chunk-TOAXF4YW.cjs +0 -2
  391. package/dist/chunk-TOAXF4YW.cjs.map +0 -1
  392. package/dist/chunk-UZ5CB33M.cjs +0 -2
  393. package/dist/chunk-UZ5CB33M.cjs.map +0 -1
  394. package/dist/chunk-VYWYJR63.mjs +0 -2
  395. package/dist/chunk-VYWYJR63.mjs.map +0 -1
  396. package/dist/chunk-XFPTQMAK.cjs +0 -4
  397. package/dist/chunk-XFPTQMAK.cjs.map +0 -1
  398. package/dist/chunk-YK4NINF5.mjs +0 -2
  399. package/dist/chunk-YK4NINF5.mjs.map +0 -1
  400. package/dist/contexts/index.cjs +0 -2
  401. package/dist/contexts/index.cjs.map +0 -1
  402. package/dist/contexts/index.mjs +0 -2
  403. package/dist/contexts/index.mjs.map +0 -1
  404. package/dist/enum/index.cjs +0 -2
  405. package/dist/enum/index.cjs.map +0 -1
  406. package/dist/enum/index.d.cts +0 -31
  407. package/dist/enum/index.d.ts +0 -31
  408. package/dist/enum/index.mjs +0 -2
  409. package/dist/enum/index.mjs.map +0 -1
  410. package/dist/errors/index.cjs +0 -2
  411. package/dist/errors/index.cjs.map +0 -1
  412. package/dist/errors/index.d.cts +0 -204
  413. package/dist/errors/index.d.ts +0 -204
  414. package/dist/errors/index.mjs +0 -2
  415. package/dist/errors/index.mjs.map +0 -1
  416. package/dist/hooks/index.cjs +0 -4
  417. package/dist/hooks/index.cjs.map +0 -1
  418. package/dist/hooks/index.mjs +0 -4
  419. package/dist/hooks/index.mjs.map +0 -1
  420. package/dist/staking-F9Nx9TKD.d.ts +0 -246
  421. package/dist/staking-f4BpYH7l.d.cts +0 -246
  422. package/dist/types/index.cjs +0 -2
  423. package/dist/types/index.cjs.map +0 -1
  424. package/dist/types/index.d.cts +0 -56
  425. package/dist/types/index.d.ts +0 -56
  426. package/dist/types/index.mjs +0 -2
  427. package/dist/types/index.mjs.map +0 -1
  428. package/dist/utils/index.cjs +0 -2
  429. package/dist/utils/index.cjs.map +0 -1
  430. package/dist/utils/index.mjs +0 -2
  431. package/dist/utils/index.mjs.map +0 -1
  432. package/src/actions/dex/getTransactionCount.ts +0 -29
  433. package/src/actions/enso/bend.ts +0 -143
  434. package/src/actions/enso/getEnsoUserToken.debug.test.ts +0 -57
  435. package/src/contexts/berajsProvider/context.tsx +0 -49
  436. package/src/contexts/berajsProvider/index.ts +0 -2
  437. package/src/contexts/berajsProvider/useBeraJs.ts +0 -18
  438. package/src/hooks/dex/usePollVaultIsPaused.ts +0 -30
  439. package/src/hooks/enso/useBendTransactionRequests.ts +0 -247
  440. package/src/hooks/enso/useEnsoZap.ts +0 -166
  441. package/src/hooks/enso/useZapTransactionRequests.ts +0 -81
  442. package/src/hooks/pol/useEarnedStakedBeraVault.ts +0 -59
  443. package/src/hooks/pol/useStakedBeraSnapshots.ts +0 -27
  444. package/src/hooks/validators/validatorRoleManager.ts +0 -0
  445. package/src/types/index.ts +0 -8
  446. package/src/types/staking.ts +0 -7
  447. package/src/utils/formatAggregatorsQuotes.ts +0 -57
  448. package/src/utils/formatAggregatorsQuotes.unit.test.ts +0 -191
  449. package/src/utils/sentryBeforeSend.ts +0 -52
  450. /package/dist/{abi/index.mjs.map → errors/exports.mjs.map} +0 -0
  451. /package/dist/{actions/index.mjs.map → types/exports.mjs.map} +0 -0
  452. /package/src/actions/dex/{__tests__ → aggregators}/haiku.integration.test.ts +0 -0
  453. /package/src/types/{bribe-boost.ts → bribe-boost.d.ts} +0 -0
@@ -1,11 +1,14 @@
1
1
  import useSWRImmutable from "swr/immutable";
2
2
  import { isAddress } from "viem";
3
3
 
4
+ import { defaultChainId } from "@berachain/config/internal";
5
+
4
6
  import { usePublicClient } from "@berachain/wagmi/hooks";
5
7
 
6
8
  import { getTokenInformation } from "~/actions/tokens/getTokenInformation";
7
9
  import { assertPublicClient } from "~/errors/assert";
8
- import type { DefaultHookOptions, DefaultHookReturnType, Token } from "~/types";
10
+ import type { Token } from "~/types/dex";
11
+ import type { DefaultHookOptions, DefaultHookReturnType } from "~/types/global";
9
12
 
10
13
  export type UseMultipleTokenInformationResponse = DefaultHookReturnType<
11
14
  Token[]
@@ -13,21 +16,26 @@ export type UseMultipleTokenInformationResponse = DefaultHookReturnType<
13
16
 
14
17
  export type useMultipleTokenInformationArgs = {
15
18
  addresses: string[] | readonly string[] | undefined;
19
+ chainId?: number;
16
20
  };
17
- export const useMultipleTokenInformation = (
21
+ export function useMultipleTokenInformation(
18
22
  args: useMultipleTokenInformationArgs,
19
23
  options?: DefaultHookOptions,
20
- ): UseMultipleTokenInformationResponse => {
24
+ ): UseMultipleTokenInformationResponse {
21
25
  const publicClient = usePublicClient();
22
26
 
23
27
  const QUERY_KEY =
24
28
  publicClient && args.addresses
25
- ? (["useMultipleTokenInformation", args.addresses] as const)
29
+ ? ([
30
+ "useMultipleTokenInformation",
31
+ args.addresses,
32
+ args.chainId ?? defaultChainId,
33
+ ] as const)
26
34
  : null;
27
35
 
28
36
  const swrResponse = useSWRImmutable<Token[], unknown, typeof QUERY_KEY>(
29
37
  QUERY_KEY,
30
- async ([, addresses]) => {
38
+ async ([, addresses, chainId]) => {
31
39
  // We already checked for publicClient in the QUERY_KEY
32
40
  // so we can safely assume that publicClient is defined
33
41
  // but we need this for correct type inference
@@ -42,6 +50,7 @@ export const useMultipleTokenInformation = (
42
50
  const tk = await getTokenInformation({
43
51
  address: address,
44
52
  publicClient,
53
+ chainId,
45
54
  });
46
55
 
47
56
  if (!tk) {
@@ -59,4 +68,4 @@ export const useMultipleTokenInformation = (
59
68
  ...swrResponse,
60
69
  refresh: () => swrResponse?.mutate?.(),
61
70
  };
62
- };
71
+ }
@@ -1,19 +1,14 @@
1
1
  import useSWR from "swr";
2
2
 
3
- import { useBeraWallet, usePublicClient } from "@berachain/wagmi/hooks";
3
+ import { useBeraWallet, useConfig } from "@berachain/wagmi/hooks";
4
4
 
5
5
  import { getAllowances } from "~/actions/tokens/getAllowances";
6
6
  import { POLLING } from "~/enum/polling";
7
- import type { Token } from "~/types";
8
- import type {
9
- AllowanceToken,
10
- DefaultHookOptions,
11
- DefaultHookReturnType,
12
- } from "~/types/global";
7
+ import type { AllowanceQueryItem, AllowanceToken } from "~/types/dex";
8
+ import type { DefaultHookOptions, DefaultHookReturnType } from "~/types/global";
13
9
 
14
10
  export type UsePollAllowancesArgs = {
15
- spender: string | undefined;
16
- tokens: Token[];
11
+ items: AllowanceQueryItem[];
17
12
  };
18
13
  export interface UsePollAllowancesResponse
19
14
  extends DefaultHookReturnType<AllowanceToken[] | undefined> {}
@@ -24,26 +19,27 @@ export interface UsePollAllowancesResponse
24
19
  *
25
20
  * @param contract the address of the ERC20 token contract
26
21
  * @param tokens the list of tokens to poll allowances for
22
+ * @param chainId the chain ID to check allowances on
27
23
  */
28
- export const usePollAllowances = (
24
+ export function usePollAllowances(
29
25
  args: UsePollAllowancesArgs,
30
26
  options?: DefaultHookOptions,
31
- ): UsePollAllowancesResponse => {
32
- const publicClient = usePublicClient();
27
+ ): UsePollAllowancesResponse {
28
+ const config = useConfig();
29
+
33
30
  const { address: account } = useBeraWallet();
34
31
  const QUERY_KEY =
35
- publicClient && account && args?.tokens && args?.spender
36
- ? (["usePollAllowances", account, args?.tokens, args?.spender] as const)
32
+ config && account && args?.items
33
+ ? (["usePollAllowances", account, args?.items] as const)
37
34
  : null;
38
35
 
39
36
  const swrResponse = useSWR(
40
37
  QUERY_KEY,
41
- async ([, account, tokens, spender]) => {
38
+ async ([, account, items]) => {
42
39
  return getAllowances({
43
- tokens,
40
+ items,
44
41
  account,
45
- spender,
46
- publicClient,
42
+ config,
47
43
  });
48
44
  },
49
45
  {
@@ -57,4 +53,4 @@ export const usePollAllowances = (
57
53
 
58
54
  refresh: () => swrResponse?.mutate?.(),
59
55
  };
60
- };
56
+ }
@@ -14,9 +14,8 @@ import { useBeraWallet, usePublicClient } from "@berachain/wagmi/hooks";
14
14
 
15
15
  import { POLLING } from "~/enum/polling";
16
16
  import { assertPublicClient } from "~/errors/assert";
17
- import type { DefaultHookReturnType } from "~/types";
18
17
  import type { BalanceToken } from "~/types/dex";
19
- import type { DefaultHookOptions } from "~/types/global";
18
+ import type { DefaultHookOptions, DefaultHookReturnType } from "~/types/global";
20
19
  import { beraToken, isToken } from "~/utils/tokens";
21
20
  import { useTokenInformation } from "./useTokenInformation";
22
21
 
@@ -91,8 +90,13 @@ export function usePollBalance(
91
90
  : undefined;
92
91
 
93
92
  const tokenBalance = {
94
- balance: data ?? 0n,
95
- formattedBalance: formattedBalance ?? "0",
93
+ chainId,
94
+ balance: data
95
+ ? {
96
+ raw: data.toString(),
97
+ formatted: formattedBalance ?? "0",
98
+ }
99
+ : { raw: "0", formatted: "0" },
96
100
  address: address as `0x${string}`,
97
101
  decimals: isNativeToken
98
102
  ? beraToken.decimals
@@ -2,17 +2,17 @@ import { useMemo } from "react";
2
2
  import useSWR from "swr";
3
3
  import type { Address } from "viem";
4
4
 
5
- import { useBeraWallet, usePublicClient } from "@berachain/wagmi/hooks";
5
+ import {
6
+ useBeraWallet,
7
+ useConfig,
8
+ usePublicClient,
9
+ } from "@berachain/wagmi/hooks";
6
10
 
7
11
  import { getWalletBalances } from "~/actions/tokens/getWalletBalances";
8
12
  import { POLLING } from "~/enum/polling";
9
13
  import { useTokens } from "~/hooks/tokens/useTokens";
10
- import type {
11
- BalanceToken,
12
- DefaultHookOptions,
13
- DefaultHookReturnType,
14
- Token,
15
- } from "~/types";
14
+ import type { BalanceToken, Token } from "~/types/dex";
15
+ import type { DefaultHookOptions, DefaultHookReturnType } from "~/types/global";
16
16
 
17
17
  export type UsePollWalletBalancesArgs = {
18
18
  /**
@@ -29,10 +29,10 @@ export function usePollWalletBalances(
29
29
  options?: DefaultHookOptions,
30
30
  ): UsePollBalancesResponse {
31
31
  const publicClient = usePublicClient();
32
-
32
+ const wagmiConfig = useConfig();
33
33
  const { address: connectedAccount } = useBeraWallet();
34
34
 
35
- const { tokenList } = useTokens();
35
+ const { tokenList, refresh } = useTokens();
36
36
 
37
37
  const wallet = args?.walletAddress ?? connectedAccount;
38
38
 
@@ -59,7 +59,7 @@ export function usePollWalletBalances(
59
59
  return getWalletBalances({
60
60
  account: wallet,
61
61
  tokenList,
62
- publicClient,
62
+ wagmiConfig,
63
63
  });
64
64
  },
65
65
  {
@@ -70,6 +70,9 @@ export function usePollWalletBalances(
70
70
 
71
71
  return {
72
72
  ...swrResponse,
73
- refresh: () => swrResponse?.mutate?.(),
73
+ refresh: () => {
74
+ swrResponse?.mutate?.();
75
+ refresh();
76
+ },
74
77
  };
75
78
  }
@@ -4,7 +4,8 @@ import { isAddress, zeroAddress } from "viem";
4
4
  import { usePublicClient } from "@berachain/wagmi/hooks";
5
5
 
6
6
  import { getStakingTokenInformation } from "~/actions/pol/getStakingTokenInformation";
7
- import type { DefaultHookOptions, DefaultHookReturnType, Token } from "~/types";
7
+ import type { Token } from "~/types/dex";
8
+ import type { DefaultHookOptions, DefaultHookReturnType } from "~/types/global";
8
9
  import { beraToken, isToken } from "~/utils/tokens";
9
10
 
10
11
  export type UseStakingTokenInformationResponse = DefaultHookReturnType<
@@ -1,11 +1,13 @@
1
- import type { DefaultHookReturnType, TokenPriceInfo } from "~/types";
2
1
  import type { DefaultHookOptions } from "~/types/global";
3
2
  import { useTokenCurrentPrices } from "./useTokenCurrentPrices";
4
3
 
4
+ /**
5
+ * @deprecated use useTokenPrice instead
6
+ */
5
7
  export function useTokenCurrentPrice(
6
8
  { address }: { address: `0x${string}` | undefined },
7
9
  options?: DefaultHookOptions,
8
- ): DefaultHookReturnType<TokenPriceInfo> {
10
+ ) {
9
11
  const swrResponse = useTokenCurrentPrices(
10
12
  {
11
13
  addressIn: address ? [address] : undefined,
@@ -1,13 +1,19 @@
1
+ import { useMemo } from "react";
1
2
  import useSWR from "swr";
2
- import type { Address } from "viem";
3
+ import { type Address, isAddress, zeroAddress } from "viem";
4
+
5
+ import { defaultChainId } from "@berachain/config/internal";
3
6
 
4
7
  import { getTokenCurrentPrices } from "~/actions/prices/getTokenCurrentPrices";
5
8
  import { POLLING } from "~/enum/polling";
6
9
  import { useTokens } from "~/hooks/tokens/useTokens";
7
- import type { TokenCurrentPriceMap } from "~/types";
8
- import type { DefaultHookOptions, DefaultHookReturnType } from "~/types/global";
10
+ import type { TokenCurrentPriceMap, TokenWithPrice } from "~/types/dex";
11
+ import type { DefaultHookOptions } from "~/types/global";
9
12
  import { isToken } from "~/utils/tokens";
10
13
 
14
+ /**
15
+ * @deprecated use useTokenPrices instead that supports multichain tokens
16
+ */
11
17
  export function useTokenCurrentPrices(
12
18
  {
13
19
  addressIn,
@@ -20,19 +26,44 @@ export function useTokenCurrentPrices(
20
26
  revalidateOnFocus: true,
21
27
  },
22
28
  },
23
- ): DefaultHookReturnType<TokenCurrentPriceMap> {
24
- const { tokenList } = useTokens();
29
+ ) {
30
+ const { tokenList, ensoTokens } = useTokens();
31
+
32
+ /**
33
+ * Berachain or Bepolia Tokens. All tokens from other chains are excluded since API doesn't price them.
34
+ */
35
+ const beraAddresses = useMemo<Address[]>(() => {
36
+ const addresses: Address[] = [];
37
+
38
+ if (addressIn) {
39
+ addresses.push(
40
+ ...(addressIn.filter((a): a is Address => isAddress(a)) as Address[]),
41
+ );
42
+ }
43
+ return addresses.map((a) => a.toLowerCase() as Address);
44
+ }, [tokenList]);
45
+
46
+ const hasAddressesNotInTokenList = useMemo(() => {
47
+ const tokenSet = new Set(
48
+ tokenList?.map((token) => token.address.toLowerCase() as Address),
49
+ );
50
+ // Native BERA (zero address) is priced via WBERA in getTokenCurrentPrices.
51
+ // Treat zero address as "known" whenever WBERA exists in token list.
52
+ if (tokenList.some((token) => isToken(token, "WBERA"))) {
53
+ tokenSet.add(zeroAddress);
54
+ }
55
+
56
+ return beraAddresses?.some((a) => !tokenSet.has(a));
57
+ }, [beraAddresses, tokenList]);
25
58
 
26
59
  /**
27
60
  * If no addressIn is provided, use default token list
28
61
  * If all addressIn are in the token list, use default token list
29
62
  * If some addressIn are not in the token list, use addressIn
30
63
  */
31
- const addresses = addressIn?.some(
32
- (a) => tokenList?.findIndex((tk) => isToken(tk, a as Address)) === -1,
33
- )
34
- ? addressIn
35
- : tokenList?.map((token) => token.address);
64
+ const addresses = hasAddressesNotInTokenList
65
+ ? beraAddresses
66
+ : tokenList.map((token) => token.address);
36
67
 
37
68
  const QUERY_KEY =
38
69
  addresses && (options.opts?.isEnabled ?? true)
@@ -42,16 +73,64 @@ export function useTokenCurrentPrices(
42
73
  ] as const)
43
74
  : null;
44
75
 
45
- const swrResponse = useSWR(
76
+ const apiResponse = useSWR(
46
77
  QUERY_KEY,
47
78
  async ([, addresses]) => {
79
+ // this only works for Berachain tokens
48
80
  return getTokenCurrentPrices({ addressIn: addresses });
49
81
  },
50
82
  options.opts,
51
83
  );
52
84
 
85
+ const ensoMatchingPrices = useMemo<TokenCurrentPriceMap>(() => {
86
+ if (!ensoTokens) return {};
87
+
88
+ const ensoPricesMap = new Map<number, Map<Address, TokenWithPrice>>([
89
+ [defaultChainId, new Map()],
90
+ ]);
91
+
92
+ for (const token of ensoTokens) {
93
+ if (token.price === undefined || token.chainId !== defaultChainId)
94
+ continue;
95
+
96
+ ensoPricesMap
97
+ .get(defaultChainId)
98
+ ?.set(token.address.toLowerCase() as Address, {
99
+ ...token,
100
+ price: token.price,
101
+ chainId: defaultChainId,
102
+ });
103
+ }
104
+
105
+ return Object.fromEntries(
106
+ addresses.map((address) => {
107
+ const price = ensoPricesMap.get(defaultChainId)?.get(address)?.price;
108
+
109
+ if (!price) return [null, null];
110
+
111
+ return [
112
+ address.toLowerCase() as Address,
113
+ {
114
+ price,
115
+ chainId: defaultChainId,
116
+ updatedAt: Date.now(),
117
+ },
118
+ ];
119
+ }),
120
+ );
121
+ }, [ensoTokens]);
122
+
123
+ const data = useMemo(
124
+ () => ({
125
+ ...ensoMatchingPrices,
126
+ // in this deprecated hook, we let api override enso prices, since there's no multichain support
127
+ ...apiResponse.data,
128
+ }),
129
+ [ensoMatchingPrices, apiResponse.data],
130
+ );
131
+
53
132
  return {
54
- ...swrResponse,
55
- refresh: () => void swrResponse.mutate(),
133
+ ...apiResponse,
134
+ data,
56
135
  };
57
136
  }
@@ -1,11 +1,14 @@
1
1
  import useSWRImmutable from "swr/immutable";
2
2
  import { isAddress, zeroAddress } from "viem";
3
3
 
4
+ import { defaultChainId } from "@berachain/config/internal";
5
+
4
6
  import { usePublicClient } from "@berachain/wagmi/hooks";
5
7
 
6
8
  import { getTokenInformation } from "~/actions/tokens/getTokenInformation";
7
9
  import { assertPublicClient } from "~/errors/assert";
8
- import type { DefaultHookOptions, DefaultHookReturnType, Token } from "~/types";
10
+ import type { Token } from "~/types/dex";
11
+ import type { DefaultHookOptions, DefaultHookReturnType } from "~/types/global";
9
12
  import { beraToken, isToken } from "~/utils/tokens";
10
13
 
11
14
  export type UseTokenInformationResponse = DefaultHookReturnType<
@@ -14,12 +17,12 @@ export type UseTokenInformationResponse = DefaultHookReturnType<
14
17
 
15
18
  export type UseTokenInformationArgs = {
16
19
  address: string | undefined;
17
- chainId?: number;
20
+ chainId: number;
18
21
  };
19
- export const useTokenInformation = (
22
+ export function useTokenInformation(
20
23
  args: UseTokenInformationArgs,
21
24
  options?: DefaultHookOptions,
22
- ): UseTokenInformationResponse => {
25
+ ): UseTokenInformationResponse {
23
26
  const publicClient = usePublicClient({
24
27
  chainId: args.chainId,
25
28
  });
@@ -29,13 +32,14 @@ export const useTokenInformation = (
29
32
  : null;
30
33
  const swrResponse = useSWRImmutable<Token | undefined, any, typeof QUERY_KEY>(
31
34
  QUERY_KEY,
32
- async ([_, address]) => {
35
+ async ([_, address, chainId = defaultChainId]) => {
33
36
  if (isToken(address, "BERA")) {
34
37
  return {
35
38
  address: zeroAddress,
36
39
  decimals: beraToken.decimals,
37
40
  name: beraToken.name,
38
41
  symbol: beraToken.symbol,
42
+ chainId,
39
43
  } satisfies Token;
40
44
  }
41
45
 
@@ -47,6 +51,7 @@ export const useTokenInformation = (
47
51
  return await getTokenInformation({
48
52
  address,
49
53
  publicClient,
54
+ chainId,
50
55
  });
51
56
  },
52
57
  { ...options?.opts },
@@ -56,4 +61,4 @@ export const useTokenInformation = (
56
61
  ...swrResponse,
57
62
  refresh: () => swrResponse?.mutate?.(),
58
63
  };
59
- };
64
+ }
@@ -0,0 +1,21 @@
1
+ import type { Address } from "viem";
2
+
3
+ import type { DefaultHookOptions } from "~/types/global";
4
+ import { type TokenPriceInput, useTokenPrices } from "./useTokenPrices";
5
+
6
+ export function useTokenPrice(
7
+ { token }: { token: TokenPriceInput | undefined },
8
+ options?: DefaultHookOptions,
9
+ ) {
10
+ const { isLoading, priceMap } = useTokenPrices(
11
+ { tokens: token ? [token] : undefined },
12
+ options,
13
+ );
14
+
15
+ return {
16
+ data: token
17
+ ? priceMap[token.chainId]?.[token.address.toLowerCase() as Address]
18
+ : undefined,
19
+ isLoading,
20
+ };
21
+ }
@@ -0,0 +1,133 @@
1
+ import { useCallback, useMemo } from "react";
2
+ import type { Address } from "viem";
3
+
4
+ import { defaultChainId } from "@berachain/config/internal";
5
+
6
+ import { POLLING } from "~/enum/polling";
7
+ import { useTokens } from "~/hooks/tokens/useTokens";
8
+ import type { Token } from "~/types/dex";
9
+ import type { DefaultHookOptions } from "~/types/global";
10
+ import { useTokenCurrentPrices } from "./useTokenCurrentPrices";
11
+
12
+ export type TokenPriceInput = Pick<Token, "address" | "chainId">;
13
+
14
+ export type TokenPriceOutput = TokenPriceInput & {
15
+ price: number;
16
+ };
17
+ export type TokenPriceMap = Record<number, Record<Address, number>>;
18
+
19
+ export function useTokenPrices(
20
+ {
21
+ tokens,
22
+ }: {
23
+ tokens?: TokenPriceInput[];
24
+ } = {},
25
+ options: DefaultHookOptions = {
26
+ opts: {
27
+ refreshInterval: POLLING.NORMAL,
28
+ revalidateOnFocus: true,
29
+ },
30
+ },
31
+ ) {
32
+ const { ensoTokens } = useTokens();
33
+
34
+ const apiResponse = useTokenCurrentPrices(
35
+ {
36
+ addressIn: tokens
37
+ ?.filter((token) => token.chainId === defaultChainId)
38
+ .map((token) => token.address),
39
+ },
40
+ options,
41
+ );
42
+
43
+ const data = useMemo(() => {
44
+ const prices: TokenPriceOutput[] = [];
45
+
46
+ if (!tokens) {
47
+ return [];
48
+ }
49
+
50
+ const tokenMap = new Map<number, Map<Address, TokenPriceInput>>();
51
+
52
+ for (const token of tokens) {
53
+ const chainId = token.chainId ?? defaultChainId;
54
+ if (!tokenMap.has(chainId)) {
55
+ tokenMap.set(chainId, new Map<Address, TokenPriceInput>());
56
+ }
57
+ tokenMap.get(chainId)?.set(token.address.toLowerCase() as Address, token);
58
+ }
59
+
60
+ if (apiResponse.data) {
61
+ for (const [address, price] of Object.entries(apiResponse.data)) {
62
+ if (
63
+ price &&
64
+ tokenMap
65
+ .get(price.chainId ?? defaultChainId)
66
+ ?.get(address.toLowerCase() as Address) &&
67
+ price.price !== undefined
68
+ ) {
69
+ const token = tokenMap
70
+ .get(price.chainId ?? defaultChainId)
71
+ ?.get(address.toLowerCase() as Address);
72
+
73
+ if (!token) {
74
+ continue;
75
+ }
76
+
77
+ prices.push({
78
+ ...token,
79
+ chainId: price.chainId,
80
+ price: price.price,
81
+ });
82
+ }
83
+ }
84
+ }
85
+
86
+ if (ensoTokens) {
87
+ for (const tk of ensoTokens) {
88
+ if (tk.price !== undefined && tk.chainId !== undefined) {
89
+ prices.push({
90
+ ...tk,
91
+ chainId: tk.chainId,
92
+ price: tk.price,
93
+ });
94
+ }
95
+ }
96
+ }
97
+
98
+ return prices;
99
+ }, [apiResponse.data, ensoTokens, tokens]);
100
+
101
+ const priceMap = useMemo<TokenPriceMap>(() => {
102
+ const map: TokenPriceMap = {};
103
+ for (const item of data) {
104
+ const chainId = item.chainId ?? defaultChainId;
105
+ if (!map[chainId]) {
106
+ map[chainId] = {} as Record<Address, number>;
107
+ }
108
+ map[chainId][item.address.toLowerCase() as Address] = item.price;
109
+ }
110
+
111
+ return map;
112
+ }, [data]);
113
+
114
+ const getTokenPrice = useCallback(
115
+ (token?: TokenPriceInput) => {
116
+ if (!token) return undefined;
117
+ const price =
118
+ priceMap[token.chainId ?? defaultChainId]?.[
119
+ token.address?.toLowerCase() as Address
120
+ ] ?? undefined;
121
+
122
+ return price;
123
+ },
124
+ [priceMap],
125
+ );
126
+
127
+ return {
128
+ isLoading: apiResponse.isLoading,
129
+ data,
130
+ priceMap,
131
+ getTokenPrice,
132
+ };
133
+ }
@@ -6,6 +6,7 @@ import type { FormatTokenListReturnType } from "~/utils/formatTokenList";
6
6
 
7
7
  export function useTokens() {
8
8
  const context = useContext(TokenContext);
9
+
9
10
  if (!context) {
10
11
  throw new BeraError({
11
12
  message: "useTokens must be used within a TokensProvider",
@@ -0,0 +1,23 @@
1
+ import useSWRImmutable from "swr/immutable";
2
+
3
+ import { useConfig } from "@berachain/wagmi/hooks";
4
+
5
+ import { getUnderlyingToken } from "~/actions/tokens/getUnderlyingToken";
6
+ import type { MinimalERC20 } from "~/types/dex";
7
+ import { isToken } from "~/utils/tokens";
8
+
9
+ /**
10
+ * SWR hook that resolves the underlying asset of an ERC4626 vault token.
11
+ * Returns `null` for non-vault tokens. Results are cached immutably since
12
+ * a vault's underlying asset doesn't change.
13
+ */
14
+ export function useUnderlyingAsset({ token }: { token: MinimalERC20 }) {
15
+ const wagmiConfig = useConfig();
16
+
17
+ return useSWRImmutable(
18
+ token && wagmiConfig && !isToken(token, "BERA")
19
+ ? ["useUnderlyingAsset", token]
20
+ : null,
21
+ async ([, token]) => getUnderlyingToken({ token, wagmiConfig }),
22
+ );
23
+ }