@across-protocol/sdk 4.1.63-beta.3 → 4.1.64-alpha.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 (510) hide show
  1. package/dist/cjs/arch/evm/SpokeUtils.d.ts +1 -1
  2. package/dist/cjs/arch/evm/SpokeUtils.js +5 -6
  3. package/dist/cjs/arch/evm/SpokeUtils.js.map +1 -1
  4. package/dist/cjs/arch/evm/index.d.ts +0 -1
  5. package/dist/cjs/arch/evm/index.js +0 -1
  6. package/dist/cjs/arch/evm/index.js.map +1 -1
  7. package/dist/cjs/arch/svm/index.d.ts +1 -5
  8. package/dist/cjs/arch/svm/index.js +2 -6
  9. package/dist/cjs/arch/svm/index.js.map +1 -1
  10. package/dist/cjs/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.d.ts +1 -1
  11. package/dist/cjs/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js +7 -7
  12. package/dist/cjs/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js.map +1 -1
  13. package/dist/cjs/clients/BaseAbstractClient.d.ts +5 -6
  14. package/dist/cjs/clients/BaseAbstractClient.js +19 -30
  15. package/dist/cjs/clients/BaseAbstractClient.js.map +1 -1
  16. package/dist/cjs/clients/BundleDataClient/BundleDataClient.js +11 -15
  17. package/dist/cjs/clients/BundleDataClient/BundleDataClient.js.map +1 -1
  18. package/dist/cjs/clients/BundleDataClient/utils/PoolRebalanceUtils.js +1 -1
  19. package/dist/cjs/clients/BundleDataClient/utils/PoolRebalanceUtils.js.map +1 -1
  20. package/dist/cjs/clients/BundleDataClient/utils/SuperstructUtils.d.ts +114 -114
  21. package/dist/cjs/clients/HubPoolClient.d.ts +3 -4
  22. package/dist/cjs/clients/HubPoolClient.js +17 -18
  23. package/dist/cjs/clients/HubPoolClient.js.map +1 -1
  24. package/dist/cjs/clients/SpokePoolClient/EVMSpokePoolClient.d.ts +3 -3
  25. package/dist/cjs/clients/SpokePoolClient/EVMSpokePoolClient.js +20 -23
  26. package/dist/cjs/clients/SpokePoolClient/EVMSpokePoolClient.js.map +1 -1
  27. package/dist/cjs/clients/SpokePoolClient/SpokePoolClient.d.ts +5 -5
  28. package/dist/cjs/clients/SpokePoolClient/SpokePoolClient.js +57 -54
  29. package/dist/cjs/clients/SpokePoolClient/SpokePoolClient.js.map +1 -1
  30. package/dist/cjs/clients/SpokePoolClient/index.d.ts +0 -3
  31. package/dist/cjs/clients/SpokePoolClient/index.js +1 -8
  32. package/dist/cjs/clients/SpokePoolClient/index.js.map +1 -1
  33. package/dist/cjs/clients/index.d.ts +1 -1
  34. package/dist/cjs/clients/index.js +1 -2
  35. package/dist/cjs/clients/index.js.map +1 -1
  36. package/dist/cjs/clients/mocks/MockConfigStoreClient.d.ts +1 -1
  37. package/dist/cjs/clients/mocks/MockConfigStoreClient.js +2 -2
  38. package/dist/cjs/clients/mocks/MockConfigStoreClient.js.map +1 -1
  39. package/dist/cjs/clients/mocks/MockHubPoolClient.js +2 -2
  40. package/dist/cjs/clients/mocks/MockHubPoolClient.js.map +1 -1
  41. package/dist/cjs/clients/mocks/MockSpokePoolClient.js +4 -7
  42. package/dist/cjs/clients/mocks/MockSpokePoolClient.js.map +1 -1
  43. package/dist/cjs/clients/mocks/index.d.ts +0 -2
  44. package/dist/cjs/clients/mocks/index.js +0 -2
  45. package/dist/cjs/clients/mocks/index.js.map +1 -1
  46. package/dist/cjs/constants.d.ts +0 -1
  47. package/dist/cjs/constants.js +1 -2
  48. package/dist/cjs/constants.js.map +1 -1
  49. package/dist/cjs/gasPriceOracle/adapters/arbitrum.d.ts +2 -2
  50. package/dist/cjs/gasPriceOracle/adapters/arbitrum.js.map +1 -1
  51. package/dist/cjs/gasPriceOracle/adapters/ethereum.d.ts +4 -4
  52. package/dist/cjs/gasPriceOracle/adapters/ethereum.js.map +1 -1
  53. package/dist/cjs/gasPriceOracle/adapters/linea-viem.js +2 -3
  54. package/dist/cjs/gasPriceOracle/adapters/linea-viem.js.map +1 -1
  55. package/dist/cjs/gasPriceOracle/adapters/polygon.d.ts +3 -3
  56. package/dist/cjs/gasPriceOracle/index.d.ts +1 -1
  57. package/dist/cjs/gasPriceOracle/oracle.d.ts +3 -4
  58. package/dist/cjs/gasPriceOracle/oracle.js +9 -16
  59. package/dist/cjs/gasPriceOracle/oracle.js.map +1 -1
  60. package/dist/cjs/gasPriceOracle/types.d.ts +1 -6
  61. package/dist/cjs/index.d.ts +1 -0
  62. package/dist/cjs/index.js +2 -1
  63. package/dist/cjs/index.js.map +1 -1
  64. package/dist/cjs/interfaces/SpokePool.d.ts +0 -13
  65. package/dist/cjs/interfaces/SpokePool.js.map +1 -1
  66. package/dist/cjs/providers/index.d.ts +1 -1
  67. package/dist/cjs/providers/index.js +2 -1
  68. package/dist/cjs/providers/index.js.map +1 -1
  69. package/dist/cjs/providers/{mocks/mockEthersProvider.js → mockProvider.js} +2 -2
  70. package/dist/cjs/providers/mockProvider.js.map +1 -0
  71. package/dist/cjs/relayFeeCalculator/chain-queries/baseQuery.d.ts +1 -1
  72. package/dist/cjs/relayFeeCalculator/chain-queries/baseQuery.js +8 -10
  73. package/dist/cjs/relayFeeCalculator/chain-queries/baseQuery.js.map +1 -1
  74. package/dist/cjs/relayFeeCalculator/chain-queries/factory.d.ts +2 -4
  75. package/dist/cjs/relayFeeCalculator/chain-queries/factory.js +2 -8
  76. package/dist/cjs/relayFeeCalculator/chain-queries/factory.js.map +1 -1
  77. package/dist/cjs/relayFeeCalculator/chain-queries/index.d.ts +0 -1
  78. package/dist/cjs/relayFeeCalculator/chain-queries/index.js +0 -1
  79. package/dist/cjs/relayFeeCalculator/chain-queries/index.js.map +1 -1
  80. package/dist/cjs/relayFeeCalculator/relayFeeCalculator.d.ts +0 -2
  81. package/dist/cjs/relayFeeCalculator/relayFeeCalculator.js +4 -10
  82. package/dist/cjs/relayFeeCalculator/relayFeeCalculator.js.map +1 -1
  83. package/dist/cjs/svm/eventsClient.d.ts +15 -0
  84. package/dist/cjs/svm/eventsClient.js +157 -0
  85. package/dist/cjs/svm/eventsClient.js.map +1 -0
  86. package/dist/cjs/svm/index.d.ts +3 -0
  87. package/dist/cjs/svm/index.js +8 -0
  88. package/dist/cjs/svm/index.js.map +1 -0
  89. package/dist/cjs/{arch/svm → svm}/types.d.ts +4 -9
  90. package/dist/cjs/svm/types.js.map +1 -0
  91. package/dist/cjs/svm/utils/events.d.ts +8 -0
  92. package/dist/cjs/svm/utils/events.js +47 -0
  93. package/dist/cjs/svm/utils/events.js.map +1 -0
  94. package/dist/cjs/svm/utils/helpers.d.ts +2 -0
  95. package/dist/cjs/svm/utils/helpers.js +19 -0
  96. package/dist/cjs/svm/utils/helpers.js.map +1 -0
  97. package/dist/cjs/svm/utils/index.d.ts +1 -0
  98. package/dist/cjs/svm/utils/index.js +5 -0
  99. package/dist/cjs/svm/utils/index.js.map +1 -0
  100. package/dist/cjs/utils/AddressUtils.d.ts +3 -9
  101. package/dist/cjs/utils/AddressUtils.js +6 -36
  102. package/dist/cjs/utils/AddressUtils.js.map +1 -1
  103. package/dist/cjs/utils/ArrayUtils.d.ts +0 -1
  104. package/dist/cjs/utils/ArrayUtils.js +1 -6
  105. package/dist/cjs/utils/ArrayUtils.js.map +1 -1
  106. package/dist/cjs/utils/BlockUtils.d.ts +27 -2
  107. package/dist/cjs/utils/BlockUtils.js +208 -2
  108. package/dist/cjs/utils/BlockUtils.js.map +1 -1
  109. package/dist/cjs/utils/EventUtils.d.ts +4 -4
  110. package/dist/cjs/utils/EventUtils.js +4 -7
  111. package/dist/cjs/utils/EventUtils.js.map +1 -1
  112. package/dist/cjs/utils/JSONUtils.js +0 -3
  113. package/dist/cjs/utils/JSONUtils.js.map +1 -1
  114. package/dist/cjs/utils/SpokeUtils.js +0 -5
  115. package/dist/cjs/utils/SpokeUtils.js.map +1 -1
  116. package/dist/cjs/utils/index.d.ts +0 -1
  117. package/dist/cjs/utils/index.js +0 -1
  118. package/dist/cjs/utils/index.js.map +1 -1
  119. package/dist/esm/arch/evm/SpokeUtils.d.ts +1 -1
  120. package/dist/esm/arch/evm/SpokeUtils.js +5 -6
  121. package/dist/esm/arch/evm/SpokeUtils.js.map +1 -1
  122. package/dist/esm/arch/evm/index.d.ts +0 -1
  123. package/dist/esm/arch/evm/index.js +0 -1
  124. package/dist/esm/arch/evm/index.js.map +1 -1
  125. package/dist/esm/arch/svm/index.d.ts +1 -5
  126. package/dist/esm/arch/svm/index.js +1 -5
  127. package/dist/esm/arch/svm/index.js.map +1 -1
  128. package/dist/esm/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.d.ts +1 -1
  129. package/dist/esm/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js +7 -7
  130. package/dist/esm/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.js.map +1 -1
  131. package/dist/esm/clients/BaseAbstractClient.d.ts +5 -6
  132. package/dist/esm/clients/BaseAbstractClient.js +19 -30
  133. package/dist/esm/clients/BaseAbstractClient.js.map +1 -1
  134. package/dist/esm/clients/BundleDataClient/BundleDataClient.js +14 -17
  135. package/dist/esm/clients/BundleDataClient/BundleDataClient.js.map +1 -1
  136. package/dist/esm/clients/BundleDataClient/utils/PoolRebalanceUtils.js +1 -1
  137. package/dist/esm/clients/BundleDataClient/utils/PoolRebalanceUtils.js.map +1 -1
  138. package/dist/esm/clients/BundleDataClient/utils/SuperstructUtils.d.ts +114 -114
  139. package/dist/esm/clients/HubPoolClient.d.ts +3 -4
  140. package/dist/esm/clients/HubPoolClient.js +18 -19
  141. package/dist/esm/clients/HubPoolClient.js.map +1 -1
  142. package/dist/esm/clients/SpokePoolClient/EVMSpokePoolClient.d.ts +3 -3
  143. package/dist/esm/clients/SpokePoolClient/EVMSpokePoolClient.js +20 -23
  144. package/dist/esm/clients/SpokePoolClient/EVMSpokePoolClient.js.map +1 -1
  145. package/dist/esm/clients/SpokePoolClient/SpokePoolClient.d.ts +7 -7
  146. package/dist/esm/clients/SpokePoolClient/SpokePoolClient.js +59 -57
  147. package/dist/esm/clients/SpokePoolClient/SpokePoolClient.js.map +1 -1
  148. package/dist/esm/clients/SpokePoolClient/index.d.ts +0 -8
  149. package/dist/esm/clients/SpokePoolClient/index.js +0 -10
  150. package/dist/esm/clients/SpokePoolClient/index.js.map +1 -1
  151. package/dist/esm/clients/index.d.ts +1 -1
  152. package/dist/esm/clients/index.js +1 -1
  153. package/dist/esm/clients/index.js.map +1 -1
  154. package/dist/esm/clients/mocks/MockConfigStoreClient.d.ts +1 -1
  155. package/dist/esm/clients/mocks/MockConfigStoreClient.js +2 -2
  156. package/dist/esm/clients/mocks/MockConfigStoreClient.js.map +1 -1
  157. package/dist/esm/clients/mocks/MockHubPoolClient.js +2 -2
  158. package/dist/esm/clients/mocks/MockHubPoolClient.js.map +1 -1
  159. package/dist/esm/clients/mocks/MockSpokePoolClient.js +5 -8
  160. package/dist/esm/clients/mocks/MockSpokePoolClient.js.map +1 -1
  161. package/dist/esm/clients/mocks/index.d.ts +0 -2
  162. package/dist/esm/clients/mocks/index.js +0 -2
  163. package/dist/esm/clients/mocks/index.js.map +1 -1
  164. package/dist/esm/constants.d.ts +0 -1
  165. package/dist/esm/constants.js +0 -1
  166. package/dist/esm/constants.js.map +1 -1
  167. package/dist/esm/gasPriceOracle/adapters/arbitrum.d.ts +2 -2
  168. package/dist/esm/gasPriceOracle/adapters/arbitrum.js.map +1 -1
  169. package/dist/esm/gasPriceOracle/adapters/ethereum.d.ts +4 -4
  170. package/dist/esm/gasPriceOracle/adapters/ethereum.js.map +1 -1
  171. package/dist/esm/gasPriceOracle/adapters/linea-viem.js +2 -3
  172. package/dist/esm/gasPriceOracle/adapters/linea-viem.js.map +1 -1
  173. package/dist/esm/gasPriceOracle/adapters/polygon.d.ts +4 -4
  174. package/dist/esm/gasPriceOracle/adapters/polygon.js +1 -1
  175. package/dist/esm/gasPriceOracle/index.d.ts +1 -1
  176. package/dist/esm/gasPriceOracle/oracle.d.ts +3 -4
  177. package/dist/esm/gasPriceOracle/oracle.js +9 -18
  178. package/dist/esm/gasPriceOracle/oracle.js.map +1 -1
  179. package/dist/esm/gasPriceOracle/types.d.ts +1 -6
  180. package/dist/esm/index.d.ts +1 -0
  181. package/dist/esm/index.js +2 -0
  182. package/dist/esm/index.js.map +1 -1
  183. package/dist/esm/interfaces/SpokePool.d.ts +0 -13
  184. package/dist/esm/interfaces/SpokePool.js.map +1 -1
  185. package/dist/esm/providers/index.d.ts +1 -1
  186. package/dist/esm/providers/index.js +2 -1
  187. package/dist/esm/providers/index.js.map +1 -1
  188. package/dist/esm/providers/{mocks/mockEthersProvider.js → mockProvider.js} +2 -2
  189. package/dist/esm/providers/mockProvider.js.map +1 -0
  190. package/dist/esm/relayFeeCalculator/chain-queries/baseQuery.d.ts +1 -1
  191. package/dist/esm/relayFeeCalculator/chain-queries/baseQuery.js +8 -10
  192. package/dist/esm/relayFeeCalculator/chain-queries/baseQuery.js.map +1 -1
  193. package/dist/esm/relayFeeCalculator/chain-queries/factory.d.ts +2 -4
  194. package/dist/esm/relayFeeCalculator/chain-queries/factory.js +5 -11
  195. package/dist/esm/relayFeeCalculator/chain-queries/factory.js.map +1 -1
  196. package/dist/esm/relayFeeCalculator/chain-queries/index.d.ts +0 -1
  197. package/dist/esm/relayFeeCalculator/chain-queries/index.js +0 -1
  198. package/dist/esm/relayFeeCalculator/chain-queries/index.js.map +1 -1
  199. package/dist/esm/relayFeeCalculator/relayFeeCalculator.d.ts +1 -12
  200. package/dist/esm/relayFeeCalculator/relayFeeCalculator.js +5 -10
  201. package/dist/esm/relayFeeCalculator/relayFeeCalculator.js.map +1 -1
  202. package/dist/esm/svm/eventsClient.d.ts +51 -0
  203. package/dist/esm/svm/eventsClient.js +195 -0
  204. package/dist/esm/svm/eventsClient.js.map +1 -0
  205. package/dist/esm/svm/index.d.ts +3 -0
  206. package/dist/esm/svm/index.js +5 -0
  207. package/dist/esm/svm/index.js.map +1 -0
  208. package/dist/esm/{arch/svm → svm}/types.d.ts +4 -9
  209. package/dist/esm/svm/types.js.map +1 -0
  210. package/dist/esm/svm/utils/events.d.ts +17 -0
  211. package/dist/esm/svm/utils/events.js +55 -0
  212. package/dist/esm/svm/utils/events.js.map +1 -0
  213. package/dist/esm/svm/utils/helpers.d.ts +5 -0
  214. package/dist/esm/svm/utils/helpers.js +18 -0
  215. package/dist/esm/svm/utils/helpers.js.map +1 -0
  216. package/dist/esm/svm/utils/index.d.ts +1 -0
  217. package/dist/esm/svm/utils/index.js +2 -0
  218. package/dist/esm/svm/utils/index.js.map +1 -0
  219. package/dist/esm/utils/AddressUtils.d.ts +3 -9
  220. package/dist/esm/utils/AddressUtils.js +6 -41
  221. package/dist/esm/utils/AddressUtils.js.map +1 -1
  222. package/dist/esm/utils/ArrayUtils.d.ts +0 -6
  223. package/dist/esm/utils/ArrayUtils.js +0 -9
  224. package/dist/esm/utils/ArrayUtils.js.map +1 -1
  225. package/dist/esm/utils/BlockUtils.d.ts +36 -2
  226. package/dist/esm/utils/BlockUtils.js +243 -2
  227. package/dist/esm/utils/BlockUtils.js.map +1 -1
  228. package/dist/esm/utils/EventUtils.d.ts +4 -4
  229. package/dist/esm/utils/EventUtils.js +4 -7
  230. package/dist/esm/utils/EventUtils.js.map +1 -1
  231. package/dist/esm/utils/JSONUtils.js +0 -3
  232. package/dist/esm/utils/JSONUtils.js.map +1 -1
  233. package/dist/esm/utils/SpokeUtils.js +0 -5
  234. package/dist/esm/utils/SpokeUtils.js.map +1 -1
  235. package/dist/esm/utils/index.d.ts +0 -1
  236. package/dist/esm/utils/index.js +0 -1
  237. package/dist/esm/utils/index.js.map +1 -1
  238. package/dist/types/arch/evm/SpokeUtils.d.ts +1 -1
  239. package/dist/types/arch/evm/SpokeUtils.d.ts.map +1 -1
  240. package/dist/types/arch/evm/index.d.ts +0 -1
  241. package/dist/types/arch/evm/index.d.ts.map +1 -1
  242. package/dist/types/arch/svm/index.d.ts +1 -5
  243. package/dist/types/arch/svm/index.d.ts.map +1 -1
  244. package/dist/types/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.d.ts +1 -1
  245. package/dist/types/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.d.ts.map +1 -1
  246. package/dist/types/clients/BaseAbstractClient.d.ts +5 -6
  247. package/dist/types/clients/BaseAbstractClient.d.ts.map +1 -1
  248. package/dist/types/clients/BundleDataClient/BundleDataClient.d.ts.map +1 -1
  249. package/dist/types/clients/BundleDataClient/utils/SuperstructUtils.d.ts +114 -114
  250. package/dist/types/clients/HubPoolClient.d.ts +3 -4
  251. package/dist/types/clients/HubPoolClient.d.ts.map +1 -1
  252. package/dist/types/clients/SpokePoolClient/EVMSpokePoolClient.d.ts +3 -3
  253. package/dist/types/clients/SpokePoolClient/EVMSpokePoolClient.d.ts.map +1 -1
  254. package/dist/types/clients/SpokePoolClient/SpokePoolClient.d.ts +7 -7
  255. package/dist/types/clients/SpokePoolClient/SpokePoolClient.d.ts.map +1 -1
  256. package/dist/types/clients/SpokePoolClient/index.d.ts +0 -8
  257. package/dist/types/clients/SpokePoolClient/index.d.ts.map +1 -1
  258. package/dist/types/clients/index.d.ts +1 -1
  259. package/dist/types/clients/index.d.ts.map +1 -1
  260. package/dist/types/clients/mocks/MockConfigStoreClient.d.ts +1 -1
  261. package/dist/types/clients/mocks/MockConfigStoreClient.d.ts.map +1 -1
  262. package/dist/types/clients/mocks/MockSpokePoolClient.d.ts.map +1 -1
  263. package/dist/types/clients/mocks/index.d.ts +0 -2
  264. package/dist/types/clients/mocks/index.d.ts.map +1 -1
  265. package/dist/types/constants.d.ts +0 -1
  266. package/dist/types/constants.d.ts.map +1 -1
  267. package/dist/types/gasPriceOracle/adapters/arbitrum.d.ts +2 -2
  268. package/dist/types/gasPriceOracle/adapters/arbitrum.d.ts.map +1 -1
  269. package/dist/types/gasPriceOracle/adapters/ethereum.d.ts +4 -4
  270. package/dist/types/gasPriceOracle/adapters/ethereum.d.ts.map +1 -1
  271. package/dist/types/gasPriceOracle/adapters/linea-viem.d.ts.map +1 -1
  272. package/dist/types/gasPriceOracle/adapters/polygon.d.ts +4 -4
  273. package/dist/types/gasPriceOracle/adapters/polygon.d.ts.map +1 -1
  274. package/dist/types/gasPriceOracle/index.d.ts +1 -1
  275. package/dist/types/gasPriceOracle/index.d.ts.map +1 -1
  276. package/dist/types/gasPriceOracle/oracle.d.ts +3 -4
  277. package/dist/types/gasPriceOracle/oracle.d.ts.map +1 -1
  278. package/dist/types/gasPriceOracle/types.d.ts +1 -6
  279. package/dist/types/gasPriceOracle/types.d.ts.map +1 -1
  280. package/dist/types/index.d.ts +1 -0
  281. package/dist/types/index.d.ts.map +1 -1
  282. package/dist/types/interfaces/SpokePool.d.ts +0 -13
  283. package/dist/types/interfaces/SpokePool.d.ts.map +1 -1
  284. package/dist/types/providers/index.d.ts +1 -1
  285. package/dist/types/providers/index.d.ts.map +1 -1
  286. package/dist/types/providers/{mocks/mockEthersProvider.d.ts → mockProvider.d.ts} +1 -1
  287. package/dist/types/providers/mockProvider.d.ts.map +1 -0
  288. package/dist/types/relayFeeCalculator/chain-queries/baseQuery.d.ts +1 -1
  289. package/dist/types/relayFeeCalculator/chain-queries/baseQuery.d.ts.map +1 -1
  290. package/dist/types/relayFeeCalculator/chain-queries/factory.d.ts +2 -4
  291. package/dist/types/relayFeeCalculator/chain-queries/factory.d.ts.map +1 -1
  292. package/dist/types/relayFeeCalculator/chain-queries/index.d.ts +0 -1
  293. package/dist/types/relayFeeCalculator/chain-queries/index.d.ts.map +1 -1
  294. package/dist/types/relayFeeCalculator/relayFeeCalculator.d.ts +1 -12
  295. package/dist/types/relayFeeCalculator/relayFeeCalculator.d.ts.map +1 -1
  296. package/dist/types/svm/eventsClient.d.ts +52 -0
  297. package/dist/types/svm/eventsClient.d.ts.map +1 -0
  298. package/dist/types/svm/index.d.ts +4 -0
  299. package/dist/types/svm/index.d.ts.map +1 -0
  300. package/dist/types/{arch/svm → svm}/types.d.ts +4 -9
  301. package/dist/types/svm/types.d.ts.map +1 -0
  302. package/dist/types/svm/utils/events.d.ts +18 -0
  303. package/dist/types/svm/utils/events.d.ts.map +1 -0
  304. package/dist/types/svm/utils/helpers.d.ts +6 -0
  305. package/dist/types/svm/utils/helpers.d.ts.map +1 -0
  306. package/dist/types/svm/utils/index.d.ts +2 -0
  307. package/dist/types/svm/utils/index.d.ts.map +1 -0
  308. package/dist/types/utils/AddressUtils.d.ts +3 -9
  309. package/dist/types/utils/AddressUtils.d.ts.map +1 -1
  310. package/dist/types/utils/ArrayUtils.d.ts +0 -6
  311. package/dist/types/utils/ArrayUtils.d.ts.map +1 -1
  312. package/dist/types/utils/BlockUtils.d.ts +36 -2
  313. package/dist/types/utils/BlockUtils.d.ts.map +1 -1
  314. package/dist/types/utils/EventUtils.d.ts +4 -4
  315. package/dist/types/utils/EventUtils.d.ts.map +1 -1
  316. package/dist/types/utils/JSONUtils.d.ts.map +1 -1
  317. package/dist/types/utils/SpokeUtils.d.ts.map +1 -1
  318. package/dist/types/utils/index.d.ts +0 -1
  319. package/dist/types/utils/index.d.ts.map +1 -1
  320. package/package.json +1 -3
  321. package/src/arch/evm/SpokeUtils.ts +5 -5
  322. package/src/arch/evm/index.ts +0 -1
  323. package/src/arch/svm/index.ts +1 -5
  324. package/src/clients/AcrossConfigStoreClient/AcrossConfigStoreClient.ts +7 -7
  325. package/src/clients/BaseAbstractClient.ts +13 -20
  326. package/src/clients/BundleDataClient/BundleDataClient.ts +19 -28
  327. package/src/clients/BundleDataClient/utils/PoolRebalanceUtils.ts +1 -1
  328. package/src/clients/HubPoolClient.ts +19 -19
  329. package/src/clients/SpokePoolClient/EVMSpokePoolClient.ts +21 -23
  330. package/src/clients/SpokePoolClient/SpokePoolClient.ts +59 -50
  331. package/src/clients/SpokePoolClient/index.ts +0 -11
  332. package/src/clients/index.ts +1 -1
  333. package/src/clients/mocks/MockConfigStoreClient.ts +2 -2
  334. package/src/clients/mocks/MockHubPoolClient.ts +2 -2
  335. package/src/clients/mocks/MockSpokePoolClient.ts +4 -9
  336. package/src/clients/mocks/index.ts +0 -2
  337. package/src/constants.ts +0 -1
  338. package/src/gasPriceOracle/adapters/arbitrum.ts +2 -5
  339. package/src/gasPriceOracle/adapters/ethereum.ts +4 -7
  340. package/src/gasPriceOracle/adapters/linea-viem.ts +1 -3
  341. package/src/gasPriceOracle/adapters/polygon.ts +6 -6
  342. package/src/gasPriceOracle/index.ts +1 -1
  343. package/src/gasPriceOracle/oracle.ts +4 -20
  344. package/src/gasPriceOracle/types.ts +1 -7
  345. package/src/index.ts +1 -0
  346. package/src/interfaces/SpokePool.ts +0 -14
  347. package/src/providers/index.ts +1 -1
  348. package/src/providers/{mocks/mockEthersProvider.ts → mockProvider.ts} +1 -1
  349. package/src/relayFeeCalculator/chain-queries/baseQuery.ts +9 -11
  350. package/src/relayFeeCalculator/chain-queries/factory.ts +8 -24
  351. package/src/relayFeeCalculator/chain-queries/index.ts +0 -1
  352. package/src/relayFeeCalculator/relayFeeCalculator.ts +4 -16
  353. package/src/svm/eventsClient.ts +199 -0
  354. package/src/svm/index.ts +3 -0
  355. package/src/{arch/svm → svm}/types.ts +4 -21
  356. package/src/svm/utils/events.ts +58 -0
  357. package/src/svm/utils/helpers.ts +9 -0
  358. package/src/svm/utils/index.ts +1 -0
  359. package/src/utils/AddressUtils.ts +6 -49
  360. package/src/utils/ArrayUtils.ts +0 -12
  361. package/src/utils/BlockUtils.ts +215 -5
  362. package/src/utils/EventUtils.ts +11 -11
  363. package/src/utils/JSONUtils.ts +0 -2
  364. package/src/utils/SpokeUtils.ts +3 -7
  365. package/src/utils/index.ts +0 -1
  366. package/dist/cjs/arch/evm/BlockUtils.d.ts +0 -15
  367. package/dist/cjs/arch/evm/BlockUtils.js +0 -218
  368. package/dist/cjs/arch/evm/BlockUtils.js.map +0 -1
  369. package/dist/cjs/arch/svm/SpokeUtils.d.ts +0 -21
  370. package/dist/cjs/arch/svm/SpokeUtils.js +0 -454
  371. package/dist/cjs/arch/svm/SpokeUtils.js.map +0 -1
  372. package/dist/cjs/arch/svm/constants.d.ts +0 -2
  373. package/dist/cjs/arch/svm/constants.js +0 -7
  374. package/dist/cjs/arch/svm/constants.js.map +0 -1
  375. package/dist/cjs/arch/svm/eventsClient.d.ts +0 -26
  376. package/dist/cjs/arch/svm/eventsClient.js +0 -253
  377. package/dist/cjs/arch/svm/eventsClient.js.map +0 -1
  378. package/dist/cjs/arch/svm/types.js.map +0 -1
  379. package/dist/cjs/arch/svm/utils.d.ts +0 -18
  380. package/dist/cjs/arch/svm/utils.js +0 -212
  381. package/dist/cjs/arch/svm/utils.js.map +0 -1
  382. package/dist/cjs/clients/SpokePoolClient/SVMSpokePoolClient.d.ts +0 -23
  383. package/dist/cjs/clients/SpokePoolClient/SVMSpokePoolClient.js +0 -172
  384. package/dist/cjs/clients/SpokePoolClient/SVMSpokePoolClient.js.map +0 -1
  385. package/dist/cjs/clients/mocks/MockSvmCpiEventsClient.d.ts +0 -33
  386. package/dist/cjs/clients/mocks/MockSvmCpiEventsClient.js +0 -184
  387. package/dist/cjs/clients/mocks/MockSvmCpiEventsClient.js.map +0 -1
  388. package/dist/cjs/clients/mocks/MockSvmSpokePoolClient.d.ts +0 -30
  389. package/dist/cjs/clients/mocks/MockSvmSpokePoolClient.js +0 -90
  390. package/dist/cjs/clients/mocks/MockSvmSpokePoolClient.js.map +0 -1
  391. package/dist/cjs/gasPriceOracle/adapters/solana.d.ts +0 -4
  392. package/dist/cjs/gasPriceOracle/adapters/solana.js +0 -43
  393. package/dist/cjs/gasPriceOracle/adapters/solana.js.map +0 -1
  394. package/dist/cjs/providers/mocks/MockCachedSolanaRpcFactory.d.ts +0 -5
  395. package/dist/cjs/providers/mocks/MockCachedSolanaRpcFactory.js +0 -21
  396. package/dist/cjs/providers/mocks/MockCachedSolanaRpcFactory.js.map +0 -1
  397. package/dist/cjs/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts +0 -5
  398. package/dist/cjs/providers/mocks/MockRateLimitedSolanaRpcFactory.js +0 -20
  399. package/dist/cjs/providers/mocks/MockRateLimitedSolanaRpcFactory.js.map +0 -1
  400. package/dist/cjs/providers/mocks/MockSolanaRpcFactory.d.ts +0 -13
  401. package/dist/cjs/providers/mocks/MockSolanaRpcFactory.js +0 -76
  402. package/dist/cjs/providers/mocks/MockSolanaRpcFactory.js.map +0 -1
  403. package/dist/cjs/providers/mocks/index.d.ts +0 -4
  404. package/dist/cjs/providers/mocks/index.js +0 -8
  405. package/dist/cjs/providers/mocks/index.js.map +0 -1
  406. package/dist/cjs/providers/mocks/mockEthersProvider.js.map +0 -1
  407. package/dist/cjs/relayFeeCalculator/chain-queries/svmQuery.d.ts +0 -37
  408. package/dist/cjs/relayFeeCalculator/chain-queries/svmQuery.js +0 -171
  409. package/dist/cjs/relayFeeCalculator/chain-queries/svmQuery.js.map +0 -1
  410. package/dist/cjs/utils/BlockFinder.d.ts +0 -22
  411. package/dist/cjs/utils/BlockFinder.js +0 -10
  412. package/dist/cjs/utils/BlockFinder.js.map +0 -1
  413. package/dist/esm/arch/evm/BlockUtils.d.ts +0 -24
  414. package/dist/esm/arch/evm/BlockUtils.js +0 -250
  415. package/dist/esm/arch/evm/BlockUtils.js.map +0 -1
  416. package/dist/esm/arch/svm/SpokeUtils.d.ts +0 -129
  417. package/dist/esm/arch/svm/SpokeUtils.js +0 -576
  418. package/dist/esm/arch/svm/SpokeUtils.js.map +0 -1
  419. package/dist/esm/arch/svm/constants.d.ts +0 -2
  420. package/dist/esm/arch/svm/constants.js +0 -3
  421. package/dist/esm/arch/svm/constants.js.map +0 -1
  422. package/dist/esm/arch/svm/eventsClient.d.ts +0 -87
  423. package/dist/esm/arch/svm/eventsClient.js +0 -316
  424. package/dist/esm/arch/svm/eventsClient.js.map +0 -1
  425. package/dist/esm/arch/svm/types.js.map +0 -1
  426. package/dist/esm/arch/svm/utils.d.ts +0 -63
  427. package/dist/esm/arch/svm/utils.js +0 -258
  428. package/dist/esm/arch/svm/utils.js.map +0 -1
  429. package/dist/esm/clients/SpokePoolClient/SVMSpokePoolClient.d.ts +0 -66
  430. package/dist/esm/clients/SpokePoolClient/SVMSpokePoolClient.js +0 -225
  431. package/dist/esm/clients/SpokePoolClient/SVMSpokePoolClient.js.map +0 -1
  432. package/dist/esm/clients/mocks/MockSvmCpiEventsClient.d.ts +0 -33
  433. package/dist/esm/clients/mocks/MockSvmCpiEventsClient.js +0 -183
  434. package/dist/esm/clients/mocks/MockSvmCpiEventsClient.js.map +0 -1
  435. package/dist/esm/clients/mocks/MockSvmSpokePoolClient.d.ts +0 -30
  436. package/dist/esm/clients/mocks/MockSvmSpokePoolClient.js +0 -89
  437. package/dist/esm/clients/mocks/MockSvmSpokePoolClient.js.map +0 -1
  438. package/dist/esm/gasPriceOracle/adapters/solana.d.ts +0 -8
  439. package/dist/esm/gasPriceOracle/adapters/solana.js +0 -43
  440. package/dist/esm/gasPriceOracle/adapters/solana.js.map +0 -1
  441. package/dist/esm/providers/mocks/MockCachedSolanaRpcFactory.d.ts +0 -5
  442. package/dist/esm/providers/mocks/MockCachedSolanaRpcFactory.js +0 -19
  443. package/dist/esm/providers/mocks/MockCachedSolanaRpcFactory.js.map +0 -1
  444. package/dist/esm/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts +0 -5
  445. package/dist/esm/providers/mocks/MockRateLimitedSolanaRpcFactory.js +0 -18
  446. package/dist/esm/providers/mocks/MockRateLimitedSolanaRpcFactory.js.map +0 -1
  447. package/dist/esm/providers/mocks/MockSolanaRpcFactory.d.ts +0 -13
  448. package/dist/esm/providers/mocks/MockSolanaRpcFactory.js +0 -74
  449. package/dist/esm/providers/mocks/MockSolanaRpcFactory.js.map +0 -1
  450. package/dist/esm/providers/mocks/index.d.ts +0 -4
  451. package/dist/esm/providers/mocks/index.js +0 -5
  452. package/dist/esm/providers/mocks/index.js.map +0 -1
  453. package/dist/esm/providers/mocks/mockEthersProvider.js.map +0 -1
  454. package/dist/esm/relayFeeCalculator/chain-queries/svmQuery.d.ts +0 -84
  455. package/dist/esm/relayFeeCalculator/chain-queries/svmQuery.js +0 -216
  456. package/dist/esm/relayFeeCalculator/chain-queries/svmQuery.js.map +0 -1
  457. package/dist/esm/utils/BlockFinder.d.ts +0 -22
  458. package/dist/esm/utils/BlockFinder.js +0 -7
  459. package/dist/esm/utils/BlockFinder.js.map +0 -1
  460. package/dist/types/arch/evm/BlockUtils.d.ts +0 -25
  461. package/dist/types/arch/evm/BlockUtils.d.ts.map +0 -1
  462. package/dist/types/arch/svm/SpokeUtils.d.ts +0 -130
  463. package/dist/types/arch/svm/SpokeUtils.d.ts.map +0 -1
  464. package/dist/types/arch/svm/constants.d.ts +0 -3
  465. package/dist/types/arch/svm/constants.d.ts.map +0 -1
  466. package/dist/types/arch/svm/eventsClient.d.ts +0 -88
  467. package/dist/types/arch/svm/eventsClient.d.ts.map +0 -1
  468. package/dist/types/arch/svm/types.d.ts.map +0 -1
  469. package/dist/types/arch/svm/utils.d.ts +0 -64
  470. package/dist/types/arch/svm/utils.d.ts.map +0 -1
  471. package/dist/types/clients/SpokePoolClient/SVMSpokePoolClient.d.ts +0 -67
  472. package/dist/types/clients/SpokePoolClient/SVMSpokePoolClient.d.ts.map +0 -1
  473. package/dist/types/clients/mocks/MockSvmCpiEventsClient.d.ts +0 -34
  474. package/dist/types/clients/mocks/MockSvmCpiEventsClient.d.ts.map +0 -1
  475. package/dist/types/clients/mocks/MockSvmSpokePoolClient.d.ts +0 -31
  476. package/dist/types/clients/mocks/MockSvmSpokePoolClient.d.ts.map +0 -1
  477. package/dist/types/gasPriceOracle/adapters/solana.d.ts +0 -9
  478. package/dist/types/gasPriceOracle/adapters/solana.d.ts.map +0 -1
  479. package/dist/types/providers/mocks/MockCachedSolanaRpcFactory.d.ts +0 -6
  480. package/dist/types/providers/mocks/MockCachedSolanaRpcFactory.d.ts.map +0 -1
  481. package/dist/types/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts +0 -6
  482. package/dist/types/providers/mocks/MockRateLimitedSolanaRpcFactory.d.ts.map +0 -1
  483. package/dist/types/providers/mocks/MockSolanaRpcFactory.d.ts +0 -14
  484. package/dist/types/providers/mocks/MockSolanaRpcFactory.d.ts.map +0 -1
  485. package/dist/types/providers/mocks/index.d.ts +0 -5
  486. package/dist/types/providers/mocks/index.d.ts.map +0 -1
  487. package/dist/types/providers/mocks/mockEthersProvider.d.ts.map +0 -1
  488. package/dist/types/relayFeeCalculator/chain-queries/svmQuery.d.ts +0 -85
  489. package/dist/types/relayFeeCalculator/chain-queries/svmQuery.d.ts.map +0 -1
  490. package/dist/types/utils/BlockFinder.d.ts +0 -23
  491. package/dist/types/utils/BlockFinder.d.ts.map +0 -1
  492. package/src/arch/evm/BlockUtils.ts +0 -209
  493. package/src/arch/svm/SpokeUtils.ts +0 -596
  494. package/src/arch/svm/constants.ts +0 -2
  495. package/src/arch/svm/eventsClient.ts +0 -342
  496. package/src/arch/svm/utils.ts +0 -233
  497. package/src/clients/SpokePoolClient/SVMSpokePoolClient.ts +0 -268
  498. package/src/clients/mocks/MockSvmCpiEventsClient.ts +0 -226
  499. package/src/clients/mocks/MockSvmSpokePoolClient.ts +0 -119
  500. package/src/gasPriceOracle/adapters/solana.ts +0 -45
  501. package/src/providers/mocks/MockCachedSolanaRpcFactory.ts +0 -15
  502. package/src/providers/mocks/MockRateLimitedSolanaRpcFactory.ts +0 -14
  503. package/src/providers/mocks/MockSolanaRpcFactory.ts +0 -55
  504. package/src/providers/mocks/index.ts +0 -4
  505. package/src/relayFeeCalculator/chain-queries/svmQuery.ts +0 -225
  506. package/src/utils/BlockFinder.ts +0 -26
  507. /package/dist/cjs/providers/{mocks/mockEthersProvider.d.ts → mockProvider.d.ts} +0 -0
  508. /package/dist/cjs/{arch/svm → svm}/types.js +0 -0
  509. /package/dist/esm/providers/{mocks/mockEthersProvider.d.ts → mockProvider.d.ts} +0 -0
  510. /package/dist/esm/{arch/svm → svm}/types.js +0 -0
@@ -1,6 +1,5 @@
1
1
  import { providers, utils } from "ethers";
2
2
  import bs58 from "bs58";
3
- import { Address as V2Address } from "@solana/kit";
4
3
  import { BigNumber, chainIsEvm } from "./";
5
4
 
6
5
  /**
@@ -78,9 +77,9 @@ export function isValidEvmAddress(address: string): boolean {
78
77
  * @returns a child `Address` type most fitting for the chain ID.
79
78
  * @todo: Change this to `toAddress` once we remove the other `toAddress` function.
80
79
  */
81
- export function toAddressType(address: string): Address | EvmAddress | SvmAddress {
80
+ export function toAddressType(address: string, chainId: number): Address | EvmAddress | SvmAddress {
82
81
  try {
83
- if (utils.isHexString(address)) {
82
+ if (chainIsEvm(chainId)) {
84
83
  return EvmAddress.from(address);
85
84
  }
86
85
  return SvmAddress.from(address);
@@ -147,11 +146,6 @@ export class Address {
147
146
  return this.toBytes32();
148
147
  }
149
148
 
150
- // Converts the address to a Buffer type.
151
- toBuffer(): Buffer {
152
- return Buffer.from(this.rawAddress);
153
- }
154
-
155
149
  // Implements `Hexable` for `Address`. Needed for encoding purposes. This class is treated by default as a bytes32 primitive type, but can change for subclasses.
156
150
  toHexString(): string {
157
151
  return this.toBytes32();
@@ -191,16 +185,6 @@ export class Address {
191
185
  return utils.stripZeros(this.rawAddress).length === 0;
192
186
  }
193
187
 
194
- // Forces `rawAddress` to become an SvmAddress type. This will only throw if `rawAddress.length > 32`.
195
- forceSvmAddress(): SvmAddress {
196
- return SvmAddress.from(this.toBase58());
197
- }
198
-
199
- // Forces `rawAddress` to become an EvmAddress type. This will throw if `rawAddress.length > 20`.
200
- forceEvmAddress(): EvmAddress {
201
- return EvmAddress.from(this.toEvmAddress());
202
- }
203
-
204
188
  // Checks if the other address is equivalent to this address.
205
189
  eq(other: Address): boolean {
206
190
  return this.toString() === other.toString();
@@ -239,20 +223,8 @@ export class EvmAddress extends Address {
239
223
  }
240
224
 
241
225
  // Constructs a new EvmAddress type.
242
- static from(address: string, encoding: "base16" | "base58" = "base16"): EvmAddress {
243
- if (encoding === "base16") {
244
- return new this(utils.arrayify(address));
245
- }
246
-
247
- const decodedAddress = bs58.decode(address);
248
- const padding = decodedAddress.subarray(0, 12);
249
- const evmAddress = decodedAddress.subarray(12);
250
-
251
- if (padding.length !== 12 || utils.stripZeros(padding).length !== 0 || evmAddress.length !== 20) {
252
- throw new Error(`Not a valid base58-encoded EVM address: ${address}`);
253
- }
254
-
255
- return new this(evmAddress);
226
+ static from(hexString: string): EvmAddress {
227
+ return new this(utils.arrayify(hexString));
256
228
  }
257
229
  }
258
230
 
@@ -269,27 +241,12 @@ export class SvmAddress extends Address {
269
241
  return this.toBase58();
270
242
  }
271
243
 
272
- // Small utility to convert an SvmAddress to a Solana Kit branded type.
273
- toV2Address(): V2Address<string> {
274
- return this.toBase58() as V2Address<string>;
275
- }
276
-
277
- // Forces an SvmAddress to an EVM address string by truncating the leading 12 bytes.
278
244
  override toEvmAddress(): string {
279
245
  return toAddress(`0x${this.toBytes32().slice(-40)}`);
280
246
  }
281
247
 
282
248
  // Constructs a new SvmAddress type.
283
- static from(address: string, encoding: "base58" | "base16" = "base58"): SvmAddress {
284
- if (encoding === "base58") {
285
- return new this(bs58.decode(address));
286
- }
287
-
288
- const decodedAddress = utils.arrayify(address);
289
- if (decodedAddress.length !== 32) {
290
- throw new Error(`Not a valid base16-encoded SVM address: ${address}`);
291
- }
292
-
293
- return new this(decodedAddress);
249
+ static from(bs58Address: string): SvmAddress {
250
+ return new this(bs58.decode(bs58Address));
294
251
  }
295
252
  }
@@ -168,15 +168,3 @@ export function includesAsync<T>(
168
168
  export function isArrayOf<T>(array: unknown, predicate: (value: unknown) => value is T): array is T[] {
169
169
  return Array.isArray(array) && array.every(predicate);
170
170
  }
171
-
172
- /**
173
- * Checks if a value is a Uint8Array.
174
- * @param value The value to check.
175
- * @returns True if the value is a Uint8Array, false otherwise.
176
- */
177
- export function isUint8Array(value: unknown): value is Uint8Array {
178
- return (
179
- Array.isArray(value) &&
180
- value.every((item) => typeof item === "number" && Number.isInteger(item) && item >= 0 && item < 256)
181
- );
182
- }
@@ -1,9 +1,219 @@
1
+ import assert from "assert";
2
+ import type { Block, Provider } from "@ethersproject/abstract-provider";
3
+ import { clamp, sortedIndexBy } from "lodash";
4
+ import { chainIsOPStack, getNetworkName } from "./NetworkUtils";
1
5
  import { isDefined } from "./TypeGuards";
2
6
  import { getCurrentTime } from "./TimeUtils";
3
7
  import { CachingMechanismInterface } from "../interfaces";
4
8
  import { shouldCache } from "./CachingUtils";
5
- import { BlockFinderHints, BlockFinder, Block } from "./BlockFinder";
6
- import { DEFAULT_CACHING_SAFE_LAG } from "../constants";
9
+ import { CHAIN_IDs, DEFAULT_CACHING_SAFE_LAG } from "../constants";
10
+
11
+ type Opts = {
12
+ highBlock?: number;
13
+ highBlockOffset?: number;
14
+ blockRange?: number;
15
+ };
16
+
17
+ type BlockTimeAverage = {
18
+ average: number;
19
+ blockRange: number;
20
+ timestamp: number;
21
+ };
22
+
23
+ // Archive requests typically commence at 128 blocks past the head of the chain.
24
+ // Round down to 120 blocks to avoid slipping into archive territory.
25
+ const defaultBlockRange = 120;
26
+
27
+ // Default offset to the high block number. This is subtracted from the block number of the high block
28
+ // when it is queried from the network, rather than having been specified by the caller. This is useful
29
+ // since the supplied Provider instance may be backed by multiple RPC providers, which can lead to some
30
+ // providers running slower than others and taking time to synchronise on the latest block.
31
+ const defaultHighBlockOffset = 10;
32
+
33
+ // Retain computations for 15 minutes.
34
+ const cacheTTL = 60 * 15;
35
+ const now = getCurrentTime(); // Seed the cache with initial values.
36
+ const blockTimes: { [chainId: number]: BlockTimeAverage } = {
37
+ [CHAIN_IDs.INK]: { average: 1, timestamp: now, blockRange: 1 },
38
+ [CHAIN_IDs.LINEA]: { average: 3, timestamp: now, blockRange: 1 },
39
+ [CHAIN_IDs.MAINNET]: { average: 12.5, timestamp: now, blockRange: 1 },
40
+ [CHAIN_IDs.OPTIMISM]: { average: 2, timestamp: now, blockRange: 1 },
41
+ [CHAIN_IDs.UNICHAIN]: { average: 1, timestamp: now, blockRange: 1 },
42
+ };
43
+
44
+ /**
45
+ * @description Compute the average block time over a block range.
46
+ * @returns Average number of seconds per block.
47
+ */
48
+ export async function averageBlockTime(
49
+ provider: Provider,
50
+ { highBlock, highBlockOffset, blockRange }: Opts = {}
51
+ ): Promise<Pick<BlockTimeAverage, "average" | "blockRange">> {
52
+ // Does not block for StaticJsonRpcProvider.
53
+ const { chainId } = await provider.getNetwork();
54
+
55
+ // OP stack chains inherit Optimism block times, but can be overridden.
56
+ const cache = blockTimes[chainId] ?? (chainIsOPStack(chainId) ? blockTimes[CHAIN_IDs.OPTIMISM] : undefined);
57
+
58
+ const now = getCurrentTime();
59
+ if (isDefined(cache) && now < cache.timestamp + cacheTTL) {
60
+ return { average: cache.average, blockRange: cache.blockRange };
61
+ }
62
+
63
+ // If the caller was not specific about highBlock, resolve it via the RPC provider. Subtract an offset
64
+ // to account for various RPC provider sync issues that might occur when querting the latest block.
65
+ if (!isDefined(highBlock)) {
66
+ highBlock = await provider.getBlockNumber();
67
+ highBlock -= highBlockOffset ?? defaultHighBlockOffset;
68
+ }
69
+ blockRange ??= defaultBlockRange;
70
+
71
+ const earliestBlockNumber = highBlock - blockRange;
72
+ const [firstBlock, lastBlock] = await Promise.all([
73
+ provider.getBlock(earliestBlockNumber),
74
+ provider.getBlock(highBlock),
75
+ ]);
76
+ [firstBlock, lastBlock].forEach((block: Block | undefined) => {
77
+ if (!isDefined(block?.timestamp)) {
78
+ const network = getNetworkName(chainId);
79
+ const blockNumber = block === firstBlock ? earliestBlockNumber : highBlock;
80
+ throw new Error(`BlockFinder: Failed to fetch block ${blockNumber} on ${network}`);
81
+ }
82
+ });
83
+
84
+ const average = (lastBlock.timestamp - firstBlock.timestamp) / blockRange;
85
+ blockTimes[chainId] = { timestamp: now, average, blockRange };
86
+
87
+ return { average, blockRange };
88
+ }
89
+
90
+ async function estimateBlocksElapsed(seconds: number, cushionPercentage = 0.0, provider: Provider): Promise<number> {
91
+ const cushionMultiplier = cushionPercentage + 1.0;
92
+ const { average } = await averageBlockTime(provider);
93
+ return Math.floor((seconds * cushionMultiplier) / average);
94
+ }
95
+
96
+ export type BlockFinderHints = {
97
+ lowBlock?: number;
98
+ highBlock?: number;
99
+ };
100
+
101
+ export class BlockFinder {
102
+ constructor(
103
+ private readonly provider: Provider,
104
+ private readonly blocks: Block[] = []
105
+ ) {}
106
+
107
+ /**
108
+ * @notice Gets the latest block whose timestamp is <= the provided timestamp.
109
+ * @param number Timestamp timestamp to search.
110
+ * @param hints Optional low and high block to bound the search space.
111
+ */
112
+ public async getBlockForTimestamp(timestamp: number | string, hints: BlockFinderHints = {}): Promise<Block> {
113
+ timestamp = Number(timestamp);
114
+ assert(timestamp !== undefined && timestamp !== null, "timestamp must be provided");
115
+ // If the last block we have stored is too early, grab the latest block.
116
+ if (this.blocks.length === 0 || this.blocks[this.blocks.length - 1].timestamp < timestamp) {
117
+ const block = await this.getLatestBlock();
118
+ if (timestamp >= block.timestamp) return block;
119
+ }
120
+
121
+ // Prime the BlockFinder cache with any supplied hints.
122
+ // If the hint is accurate, then this will bypass the subsequent estimation.
123
+ await Promise.all(
124
+ Object.values(hints)
125
+ .filter((blockNumber) => isDefined(blockNumber))
126
+ .map((blockNumber) => this.getBlock(blockNumber))
127
+ );
128
+
129
+ // Check the first block. If it's greater than our timestamp, we need to find an earlier block.
130
+ if (this.blocks[0].timestamp > timestamp) {
131
+ const initialBlock = this.blocks[0];
132
+ // We use a 2x cushion to reduce the number of iterations in the following loop and increase the chance
133
+ // that the first block we find sets a floor for the target timestamp. The loop converges on the correct block
134
+ // slower than the following incremental search performed by `findBlock`, so we want to minimize the number of
135
+ // loop iterations in favor of searching more blocks over the `findBlock` search.
136
+ const cushion = 1;
137
+ const incrementDistance = Math.max(
138
+ // Ensure the increment block distance is _at least_ a single block to prevent an infinite loop.
139
+ await estimateBlocksElapsed(initialBlock.timestamp - timestamp, cushion, this.provider),
140
+ 1
141
+ );
142
+
143
+ // Search backwards by a constant increment until we find a block before the timestamp or hit block 0.
144
+ for (let multiplier = 1; ; multiplier++) {
145
+ const distance = multiplier * incrementDistance;
146
+ const blockNumber = Math.max(0, initialBlock.number - distance);
147
+ const block = await this.getBlock(blockNumber);
148
+ if (block.timestamp <= timestamp) break; // Found an earlier block.
149
+ assert(blockNumber > 0, "timestamp is before block 0"); // Block 0 was not earlier than this timestamp. The row.
150
+ }
151
+ }
152
+
153
+ // Find the index where the block would be inserted and use that as the end block (since it is >= the timestamp).
154
+ const index = sortedIndexBy(this.blocks, { timestamp } as Block, "timestamp");
155
+ return this.findBlock(this.blocks[index - 1], this.blocks[index], timestamp);
156
+ }
157
+
158
+ // Grabs the most recent block and caches it.
159
+ private async getLatestBlock() {
160
+ const block = await this.provider.getBlock("latest");
161
+ const index = sortedIndexBy(this.blocks, block, "number");
162
+ if (this.blocks[index]?.number !== block.number) this.blocks.splice(index, 0, block);
163
+ return this.blocks[index];
164
+ }
165
+
166
+ // Grabs the block for a particular number and caches it.
167
+ private async getBlock(number: number) {
168
+ let index = sortedIndexBy(this.blocks, { number } as Block, "number");
169
+ if (this.blocks[index]?.number === number) return this.blocks[index]; // Return early if block already exists.
170
+ const block = await this.provider.getBlock(number);
171
+
172
+ // Recompute the index after the async call since the state of this.blocks could have changed!
173
+ index = sortedIndexBy(this.blocks, { number } as Block, "number");
174
+
175
+ // Rerun this check to avoid duplicate insertion.
176
+ if (this.blocks[index]?.number === number) return this.blocks[index];
177
+ this.blocks.splice(index, 0, block); // A simple insert at index.
178
+ return block;
179
+ }
180
+
181
+ // Return the latest block, between startBlock and endBlock, whose timestamp is <= timestamp.
182
+ // Effectively, this is an interpolation search algorithm to minimize block requests.
183
+ // Note: startBlock and endBlock _must_ be different blocks.
184
+ private async findBlock(_startBlock: Block, _endBlock: Block, timestamp: number): Promise<Block> {
185
+ const [startBlock, endBlock] = [_startBlock, _endBlock];
186
+ // In the case of equality, the endBlock is expected to be passed as the one whose timestamp === the requested
187
+ // timestamp.
188
+ if (endBlock.timestamp === timestamp) return endBlock;
189
+
190
+ // If there's no equality, but the blocks are adjacent, return the startBlock, since we want the returned block's
191
+ // timestamp to be <= the requested timestamp.
192
+ if (endBlock.number === startBlock.number + 1) return startBlock;
193
+
194
+ assert(endBlock.number !== startBlock.number, "startBlock cannot equal endBlock");
195
+ assert(
196
+ timestamp < endBlock.timestamp && timestamp > startBlock.timestamp,
197
+ "timestamp not in between start and end blocks"
198
+ );
199
+
200
+ // Interpolating the timestamp we're searching for to block numbers.
201
+ const totalTimeDifference = endBlock.timestamp - startBlock.timestamp;
202
+ const totalBlockDistance = endBlock.number - startBlock.number;
203
+ const blockPercentile = (timestamp - startBlock.timestamp) / totalTimeDifference;
204
+ const estimatedBlock = startBlock.number + Math.round(blockPercentile * totalBlockDistance);
205
+
206
+ // Clamp ensures the estimated block is strictly greater than the start block and strictly less than the end block.
207
+ const newBlock = await this.getBlock(clamp(estimatedBlock, startBlock.number + 1, endBlock.number - 1));
208
+
209
+ // Depending on whether the new block is below or above the timestamp, narrow the search space accordingly.
210
+ if (newBlock.timestamp < timestamp) {
211
+ return this.findBlock(newBlock, endBlock, timestamp);
212
+ } else {
213
+ return this.findBlock(startBlock, newBlock, timestamp);
214
+ }
215
+ }
216
+ }
7
217
 
8
218
  /**
9
219
  * @notice Get the block number for a given timestamp fresh from on-chain data if not found in redis cache.
@@ -14,16 +224,16 @@ import { DEFAULT_CACHING_SAFE_LAG } from "../constants";
14
224
  * or loading from cache. This is useful for testing primarily.
15
225
  * @returns Block number for the requested timestamp.
16
226
  */
17
- export async function getCachedBlockForTimestamp<TBlock extends Block>(
227
+ export async function getCachedBlockForTimestamp(
18
228
  chainId: number,
19
229
  timestamp: number,
20
- blockFinder: BlockFinder<TBlock>,
230
+ blockFinder: BlockFinder,
21
231
  cache?: CachingMechanismInterface,
22
232
  hints?: BlockFinderHints
23
233
  ): Promise<number> {
24
234
  // Resolve a convenience function to directly compute what we're
25
235
  // looking for.
26
- const resolver = async () => (await blockFinder.getBlockForTimestamp(timestamp, hints || {})).number;
236
+ const resolver = async () => (await blockFinder.getBlockForTimestamp(timestamp, hints)).number;
27
237
 
28
238
  // If no redis client, then request block from blockFinder.
29
239
  if (!isDefined(cache)) {
@@ -99,9 +99,9 @@ export function spreadEvent(args: Result | Record<string, unknown>): { [key: str
99
99
  }
100
100
 
101
101
  export interface EventSearchConfig {
102
- from: number;
103
- to: number;
104
- maxLookBack?: number;
102
+ fromBlock: number;
103
+ toBlock: number;
104
+ maxBlockLookBack?: number;
105
105
  }
106
106
 
107
107
  export const eventToLog = (event: Event): Log => ({ ...event, event: event.event!, args: spreadEvent(event.args!) });
@@ -113,8 +113,8 @@ export async function paginatedEventQuery(
113
113
  retryCount = 0
114
114
  ): Promise<Log[]> {
115
115
  // If the max block look back is set to 0 then we dont need to do any pagination and can query over the whole range.
116
- if (searchConfig.maxLookBack === 0) {
117
- const events = await contract.queryFilter(filter, searchConfig.from, searchConfig.to);
116
+ if (searchConfig.maxBlockLookBack === 0) {
117
+ const events = await contract.queryFilter(filter, searchConfig.fromBlock, searchConfig.toBlock);
118
118
  return events.map(eventToLog);
119
119
  }
120
120
 
@@ -132,7 +132,7 @@ export async function paginatedEventQuery(
132
132
  )
133
133
  .flat()
134
134
  // Filter events by block number because ranges can include blocks that are outside the range specified for caching reasons.
135
- .filter((event) => event.blockNumber >= searchConfig.from && event.blockNumber <= searchConfig.to)
135
+ .filter((event) => event.blockNumber >= searchConfig.fromBlock && event.blockNumber <= searchConfig.toBlock)
136
136
  .map(eventToLog)
137
137
  );
138
138
  } catch (error) {
@@ -159,11 +159,11 @@ export async function paginatedEventQuery(
159
159
  * input range, but can include blocks outside of the desired range, so results should be filtered. Results
160
160
  * are ordered from smallest to largest.
161
161
  */
162
- export function getPaginatedBlockRanges({ from, to, maxLookBack }: EventSearchConfig): [number, number][] {
163
- const fromBlock = from;
164
- const toBlock = to;
165
- const maxBlockLookBack = maxLookBack;
166
-
162
+ export function getPaginatedBlockRanges({
163
+ fromBlock,
164
+ toBlock,
165
+ maxBlockLookBack,
166
+ }: EventSearchConfig): [number, number][] {
167
167
  // If the maxBlockLookBack is undefined, we can look back as far as we like. Just return the entire range.
168
168
  if (maxBlockLookBack === undefined) {
169
169
  return [[fromBlock, toBlock]];
@@ -33,8 +33,6 @@ export function stringifyJSONWithNumericString(obj: unknown): string {
33
33
  return JSON.stringify(obj, (_key, value) => {
34
34
  if (typeof value === "object" && value !== null && value.type === "BigNumber") {
35
35
  return BigNumber.from(value).toString();
36
- } else if (typeof value === "bigint" && value !== null) {
37
- return value.toString();
38
36
  }
39
37
  return value;
40
38
  });
@@ -1,11 +1,9 @@
1
- import { encodeAbiParameters, Hex, keccak256 } from "viem";
1
+ import { encodeAbiParameters, keccak256 } from "viem";
2
2
  import { MAX_SAFE_DEPOSIT_ID, ZERO_ADDRESS, ZERO_BYTES } from "../constants";
3
3
  import { Deposit, RelayData } from "../interfaces";
4
4
  import { toBytes32 } from "./AddressUtils";
5
5
  import { BigNumber } from "./BigNumberUtils";
6
6
  import { isMessageEmpty } from "./DepositUtils";
7
- import { chainIsSvm } from "./NetworkUtils";
8
- import { svm } from "../arch";
9
7
 
10
8
  /**
11
9
  * Produce the RelayData for a Deposit.
@@ -65,9 +63,7 @@ export function getRelayDataHash(relayData: RelayData, destinationChainId: numbe
65
63
  outputToken: toBytes32(relayData.outputToken),
66
64
  exclusiveRelayer: toBytes32(relayData.exclusiveRelayer),
67
65
  };
68
- if (chainIsSvm(destinationChainId)) {
69
- return svm.getRelayDataHash(_relayData, destinationChainId);
70
- }
66
+
71
67
  return keccak256(encodeAbiParameters(abi, [_relayData, destinationChainId]));
72
68
  }
73
69
 
@@ -91,5 +87,5 @@ export function isZeroAddress(address: string): boolean {
91
87
  }
92
88
 
93
89
  export function getMessageHash(message: string): string {
94
- return isMessageEmpty(message) ? ZERO_BYTES : keccak256(message as Hex);
90
+ return isMessageEmpty(message) ? ZERO_BYTES : keccak256(message as "0x{string}");
95
91
  }
@@ -2,7 +2,6 @@ export * from "./common";
2
2
  export * from "./abi";
3
3
  export * from "./ArrayUtils";
4
4
  export * from "./BlockUtils";
5
- export * from "./BlockFinder";
6
5
  export * from "./EventUtils";
7
6
  export * from "./ObjectUtils";
8
7
  export * from "./TimeUtils";
@@ -1,15 +0,0 @@
1
- import { Provider, Block as EthersBlock } from "@ethersproject/abstract-provider";
2
- import { BlockFinder, type Block, type BlockFinderOpts as Opts, type BlockTimeAverage, type BlockFinderHints } from "../../utils/BlockFinder";
3
- interface EVMBlock extends Block, EthersBlock {
4
- }
5
- export declare function averageBlockTime(provider: Provider, { highBlock, highBlockOffset, blockRange }?: Opts): Promise<Pick<BlockTimeAverage, "average" | "blockRange">>;
6
- export declare class EVMBlockFinder extends BlockFinder<EVMBlock> {
7
- private readonly provider;
8
- private readonly blocks;
9
- constructor(provider: Provider, blocks?: EVMBlock[]);
10
- getBlockForTimestamp(timestamp: number | string, hints?: BlockFinderHints): Promise<EVMBlock>;
11
- private getLatestBlock;
12
- private getBlock;
13
- private findBlock;
14
- }
15
- export {};