@humanode-hyperlane/rebalancer 27.2.2 → 1029.1.1

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 (295) hide show
  1. package/dist/bridges/LiFiBridge.d.ts +3 -3
  2. package/dist/bridges/LiFiBridge.d.ts.map +1 -1
  3. package/dist/bridges/LiFiBridge.js +66 -55
  4. package/dist/bridges/LiFiBridge.js.map +1 -1
  5. package/dist/bridges/LiFiBridge.test.js +213 -0
  6. package/dist/bridges/LiFiBridge.test.js.map +1 -1
  7. package/dist/config/RebalancerConfig.d.ts +4 -3
  8. package/dist/config/RebalancerConfig.d.ts.map +1 -1
  9. package/dist/config/RebalancerConfig.js +7 -5
  10. package/dist/config/RebalancerConfig.js.map +1 -1
  11. package/dist/config/RebalancerConfig.test.js +278 -2
  12. package/dist/config/RebalancerConfig.test.js.map +1 -1
  13. package/dist/config/types.d.ts +707 -2664
  14. package/dist/config/types.d.ts.map +1 -1
  15. package/dist/config/types.js +62 -7
  16. package/dist/config/types.js.map +1 -1
  17. package/dist/core/InventoryRebalancer.d.ts +13 -19
  18. package/dist/core/InventoryRebalancer.d.ts.map +1 -1
  19. package/dist/core/InventoryRebalancer.js +404 -276
  20. package/dist/core/InventoryRebalancer.js.map +1 -1
  21. package/dist/core/InventoryRebalancer.test.js +814 -25
  22. package/dist/core/InventoryRebalancer.test.js.map +1 -1
  23. package/dist/core/Rebalancer.d.ts.map +1 -1
  24. package/dist/core/Rebalancer.js +12 -6
  25. package/dist/core/Rebalancer.js.map +1 -1
  26. package/dist/core/Rebalancer.test.js +51 -0
  27. package/dist/core/Rebalancer.test.js.map +1 -1
  28. package/dist/core/RebalancerOrchestrator.d.ts.map +1 -1
  29. package/dist/core/RebalancerOrchestrator.test.js +0 -1
  30. package/dist/core/RebalancerOrchestrator.test.js.map +1 -1
  31. package/dist/core/RebalancerService.d.ts.map +1 -1
  32. package/dist/core/RebalancerService.js +3 -2
  33. package/dist/core/RebalancerService.js.map +1 -1
  34. package/dist/core/RebalancerService.test.js +24 -0
  35. package/dist/core/RebalancerService.test.js.map +1 -1
  36. package/dist/e2e/fixtures/routes.d.ts +3 -3
  37. package/dist/e2e/fixtures/routes.d.ts.map +1 -1
  38. package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts.map +1 -1
  39. package/dist/e2e/harness/BaseLocalDeploymentManager.js +3 -2
  40. package/dist/e2e/harness/BaseLocalDeploymentManager.js.map +1 -1
  41. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts.map +1 -1
  42. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js.map +1 -1
  43. package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts.map +1 -1
  44. package/dist/e2e/harness/ForkIndexer.d.ts.map +1 -1
  45. package/dist/e2e/harness/ForkIndexer.js.map +1 -1
  46. package/dist/e2e/harness/LocalProvider.d.ts +3 -0
  47. package/dist/e2e/harness/LocalProvider.d.ts.map +1 -0
  48. package/dist/e2e/harness/LocalProvider.js +9 -0
  49. package/dist/e2e/harness/LocalProvider.js.map +1 -0
  50. package/dist/e2e/harness/LocalProvider.test.d.ts +2 -0
  51. package/dist/e2e/harness/LocalProvider.test.d.ts.map +1 -0
  52. package/dist/e2e/harness/LocalProvider.test.js +14 -0
  53. package/dist/e2e/harness/LocalProvider.test.js.map +1 -0
  54. package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts.map +1 -1
  55. package/dist/e2e/harness/MixedLocalDeploymentManager.js.map +1 -1
  56. package/dist/e2e/harness/MockExplorerClient.d.ts.map +1 -1
  57. package/dist/e2e/harness/MockExplorerClient.js.map +1 -1
  58. package/dist/e2e/harness/MockExternalBridge.d.ts.map +1 -1
  59. package/dist/e2e/harness/MockExternalBridge.js.map +1 -1
  60. package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts.map +1 -1
  61. package/dist/e2e/harness/NativeLocalDeploymentManager.js +2 -1
  62. package/dist/e2e/harness/NativeLocalDeploymentManager.js.map +1 -1
  63. package/dist/e2e/harness/SnapshotHelper.d.ts.map +1 -1
  64. package/dist/e2e/harness/SnapshotHelper.js +3 -5
  65. package/dist/e2e/harness/SnapshotHelper.js.map +1 -1
  66. package/dist/e2e/harness/TestHelpers.js +1 -2
  67. package/dist/e2e/harness/TestHelpers.js.map +1 -1
  68. package/dist/e2e/harness/TestRebalancer.d.ts +5 -1
  69. package/dist/e2e/harness/TestRebalancer.d.ts.map +1 -1
  70. package/dist/e2e/harness/TestRebalancer.js +14 -4
  71. package/dist/e2e/harness/TestRebalancer.js.map +1 -1
  72. package/dist/e2e/relayer-denylist.e2e-test.d.ts +2 -0
  73. package/dist/e2e/relayer-denylist.e2e-test.d.ts.map +1 -0
  74. package/dist/e2e/relayer-denylist.e2e-test.js +388 -0
  75. package/dist/e2e/relayer-denylist.e2e-test.js.map +1 -0
  76. package/dist/factories/RebalancerContextFactory.d.ts.map +1 -1
  77. package/dist/factories/RebalancerContextFactory.js +61 -31
  78. package/dist/factories/RebalancerContextFactory.js.map +1 -1
  79. package/dist/factories/RebalancerContextFactory.test.js +336 -5
  80. package/dist/factories/RebalancerContextFactory.test.js.map +1 -1
  81. package/dist/index.d.ts +2 -2
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +1 -1
  84. package/dist/index.js.map +1 -1
  85. package/dist/interfaces/IRebalancer.d.ts +4 -2
  86. package/dist/interfaces/IRebalancer.d.ts.map +1 -1
  87. package/dist/metrics/Metrics.d.ts.map +1 -1
  88. package/dist/metrics/Metrics.js +1 -1
  89. package/dist/metrics/Metrics.js.map +1 -1
  90. package/dist/metrics/PriceGetter.d.ts +1 -0
  91. package/dist/metrics/PriceGetter.d.ts.map +1 -1
  92. package/dist/metrics/PriceGetter.js +14 -4
  93. package/dist/metrics/PriceGetter.js.map +1 -1
  94. package/dist/metrics/PriceGetter.test.d.ts +2 -0
  95. package/dist/metrics/PriceGetter.test.d.ts.map +1 -0
  96. package/dist/metrics/PriceGetter.test.js +84 -0
  97. package/dist/metrics/PriceGetter.test.js.map +1 -0
  98. package/dist/metrics/scripts/metrics.d.ts +4 -4
  99. package/dist/monitor/Monitor.d.ts +1 -0
  100. package/dist/monitor/Monitor.d.ts.map +1 -1
  101. package/dist/monitor/Monitor.js +55 -46
  102. package/dist/monitor/Monitor.js.map +1 -1
  103. package/dist/monitor/Monitor.test.d.ts +2 -0
  104. package/dist/monitor/Monitor.test.d.ts.map +1 -0
  105. package/dist/monitor/Monitor.test.js +346 -0
  106. package/dist/monitor/Monitor.test.js.map +1 -0
  107. package/dist/service.d.ts +1 -1
  108. package/dist/service.d.ts.map +1 -1
  109. package/dist/service.js +9 -5
  110. package/dist/service.js.map +1 -1
  111. package/dist/strategy/BaseStrategy.d.ts.map +1 -1
  112. package/dist/strategy/BaseStrategy.js +13 -11
  113. package/dist/strategy/BaseStrategy.js.map +1 -1
  114. package/dist/strategy/CollateralDeficitStrategy.d.ts.map +1 -1
  115. package/dist/strategy/CollateralDeficitStrategy.js +2 -2
  116. package/dist/strategy/CollateralDeficitStrategy.js.map +1 -1
  117. package/dist/strategy/CompositeStrategy.d.ts.map +1 -1
  118. package/dist/strategy/CompositeStrategy.js.map +1 -1
  119. package/dist/strategy/CompositeStrategy.test.js.map +1 -1
  120. package/dist/strategy/MinAmountStrategy.d.ts +1 -0
  121. package/dist/strategy/MinAmountStrategy.d.ts.map +1 -1
  122. package/dist/strategy/MinAmountStrategy.js +12 -8
  123. package/dist/strategy/MinAmountStrategy.js.map +1 -1
  124. package/dist/strategy/MinAmountStrategy.test.js +189 -2
  125. package/dist/strategy/MinAmountStrategy.test.js.map +1 -1
  126. package/dist/strategy/StrategyFactory.d.ts.map +1 -1
  127. package/dist/strategy/StrategyFactory.js.map +1 -1
  128. package/dist/strategy/WeightedStrategy.d.ts.map +1 -1
  129. package/dist/test/helpers.d.ts +11 -3
  130. package/dist/test/helpers.d.ts.map +1 -1
  131. package/dist/test/helpers.js +9 -11
  132. package/dist/test/helpers.js.map +1 -1
  133. package/dist/test/lifiMocks.d.ts +6 -6
  134. package/dist/test/lifiMocks.d.ts.map +1 -1
  135. package/dist/test/lifiMocks.js +5 -2
  136. package/dist/test/lifiMocks.js.map +1 -1
  137. package/dist/test/pendingTransferMiddlewareMocks.d.ts +17 -0
  138. package/dist/test/pendingTransferMiddlewareMocks.d.ts.map +1 -0
  139. package/dist/test/pendingTransferMiddlewareMocks.js +43 -0
  140. package/dist/test/pendingTransferMiddlewareMocks.js.map +1 -0
  141. package/dist/tracking/ActionTracker.d.ts +4 -0
  142. package/dist/tracking/ActionTracker.d.ts.map +1 -1
  143. package/dist/tracking/ActionTracker.js +76 -9
  144. package/dist/tracking/ActionTracker.js.map +1 -1
  145. package/dist/tracking/ActionTracker.test.js +418 -1
  146. package/dist/tracking/ActionTracker.test.js.map +1 -1
  147. package/dist/tracking/IActionTracker.d.ts +4 -2
  148. package/dist/tracking/IActionTracker.d.ts.map +1 -1
  149. package/dist/tracking/InflightContextAdapter.d.ts.map +1 -1
  150. package/dist/tracking/InflightContextAdapter.js.map +1 -1
  151. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.d.ts +64 -0
  152. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.d.ts.map +1 -0
  153. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.js +474 -0
  154. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.js.map +1 -0
  155. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.d.ts +2 -0
  156. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.d.ts.map +1 -0
  157. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.js +1168 -0
  158. package/dist/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.js.map +1 -0
  159. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.d.ts +61 -0
  160. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.d.ts.map +1 -0
  161. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.js +160 -0
  162. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.js.map +1 -0
  163. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.d.ts +2 -0
  164. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.d.ts.map +1 -0
  165. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.js +369 -0
  166. package/dist/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.js.map +1 -0
  167. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.d.ts +60 -0
  168. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.d.ts.map +1 -0
  169. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.js +288 -0
  170. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.js.map +1 -0
  171. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.d.ts +2 -0
  172. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.d.ts.map +1 -0
  173. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.js +606 -0
  174. package/dist/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.js.map +1 -0
  175. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.d.ts +25 -0
  176. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.d.ts.map +1 -0
  177. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.js +41 -0
  178. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.js.map +1 -0
  179. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.d.ts +2 -0
  180. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.d.ts.map +1 -0
  181. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.js +141 -0
  182. package/dist/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.js.map +1 -0
  183. package/dist/tracking/pendingTransferMiddlewares/matchBody.d.ts +12 -0
  184. package/dist/tracking/pendingTransferMiddlewares/matchBody.d.ts.map +1 -0
  185. package/dist/tracking/pendingTransferMiddlewares/matchBody.js +29 -0
  186. package/dist/tracking/pendingTransferMiddlewares/matchBody.js.map +1 -0
  187. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.d.ts +59 -0
  188. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.d.ts.map +1 -0
  189. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.js +661 -0
  190. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.js.map +1 -0
  191. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.d.ts +2 -0
  192. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.d.ts.map +1 -0
  193. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.js +1093 -0
  194. package/dist/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.js.map +1 -0
  195. package/dist/tracking/pendingTransferMiddlewares/types.d.ts +2 -0
  196. package/dist/tracking/pendingTransferMiddlewares/types.d.ts.map +1 -0
  197. package/dist/tracking/pendingTransferMiddlewares/types.js +4 -0
  198. package/dist/tracking/pendingTransferMiddlewares/types.js.map +1 -0
  199. package/dist/tracking/store/InMemoryStore.d.ts.map +1 -1
  200. package/dist/utils/ExplorerClient.d.ts +1 -0
  201. package/dist/utils/ExplorerClient.d.ts.map +1 -1
  202. package/dist/utils/ExplorerClient.js +8 -3
  203. package/dist/utils/ExplorerClient.js.map +1 -1
  204. package/dist/utils/ExplorerClient.test.js +25 -0
  205. package/dist/utils/ExplorerClient.test.js.map +1 -1
  206. package/dist/utils/balanceUtils.d.ts +7 -1
  207. package/dist/utils/balanceUtils.d.ts.map +1 -1
  208. package/dist/utils/balanceUtils.js +39 -1
  209. package/dist/utils/balanceUtils.js.map +1 -1
  210. package/dist/utils/balanceUtils.test.js +55 -1
  211. package/dist/utils/balanceUtils.test.js.map +1 -1
  212. package/dist/utils/blockTag.d.ts +5 -4
  213. package/dist/utils/blockTag.d.ts.map +1 -1
  214. package/dist/utils/blockTag.js +26 -10
  215. package/dist/utils/blockTag.js.map +1 -1
  216. package/dist/utils/blockTag.test.d.ts +2 -0
  217. package/dist/utils/blockTag.test.d.ts.map +1 -0
  218. package/dist/utils/blockTag.test.js +132 -0
  219. package/dist/utils/blockTag.test.js.map +1 -0
  220. package/dist/utils/bridgeUtils.js.map +1 -1
  221. package/dist/utils/errors.d.ts.map +1 -1
  222. package/dist/utils/gasEstimation.d.ts +2 -1
  223. package/dist/utils/gasEstimation.d.ts.map +1 -1
  224. package/dist/utils/gasEstimation.js +16 -13
  225. package/dist/utils/gasEstimation.js.map +1 -1
  226. package/dist/utils/gasEstimation.test.d.ts +2 -0
  227. package/dist/utils/gasEstimation.test.d.ts.map +1 -0
  228. package/dist/utils/gasEstimation.test.js +104 -0
  229. package/dist/utils/gasEstimation.test.js.map +1 -0
  230. package/dist/utils/tokenUtils.d.ts.map +1 -1
  231. package/dist/utils/tokenUtils.js +5 -2
  232. package/dist/utils/tokenUtils.js.map +1 -1
  233. package/package.json +23 -22
  234. package/src/bridges/LiFiBridge.test.ts +270 -0
  235. package/src/bridges/LiFiBridge.ts +90 -71
  236. package/src/config/RebalancerConfig.test.ts +315 -1
  237. package/src/config/RebalancerConfig.ts +6 -3
  238. package/src/config/types.ts +98 -8
  239. package/src/core/InventoryRebalancer.test.ts +1092 -38
  240. package/src/core/InventoryRebalancer.ts +584 -351
  241. package/src/core/Rebalancer.test.ts +84 -0
  242. package/src/core/Rebalancer.ts +22 -6
  243. package/src/core/RebalancerOrchestrator.test.ts +0 -1
  244. package/src/core/RebalancerService.test.ts +35 -0
  245. package/src/core/RebalancerService.ts +3 -2
  246. package/src/e2e/harness/BaseLocalDeploymentManager.ts +3 -1
  247. package/src/e2e/harness/LocalProvider.test.ts +16 -0
  248. package/src/e2e/harness/LocalProvider.ts +10 -0
  249. package/src/e2e/harness/NativeLocalDeploymentManager.ts +2 -1
  250. package/src/e2e/harness/SnapshotHelper.ts +2 -5
  251. package/src/e2e/harness/TestHelpers.ts +3 -3
  252. package/src/e2e/harness/TestRebalancer.ts +21 -1
  253. package/src/e2e/relayer-denylist.e2e-test.ts +558 -0
  254. package/src/factories/RebalancerContextFactory.test.ts +489 -8
  255. package/src/factories/RebalancerContextFactory.ts +86 -36
  256. package/src/index.ts +2 -0
  257. package/src/interfaces/IRebalancer.ts +4 -1
  258. package/src/metrics/Metrics.ts +1 -0
  259. package/src/metrics/PriceGetter.test.ts +113 -0
  260. package/src/metrics/PriceGetter.ts +18 -3
  261. package/src/monitor/Monitor.test.ts +408 -0
  262. package/src/monitor/Monitor.ts +123 -97
  263. package/src/service.ts +14 -8
  264. package/src/strategy/BaseStrategy.ts +18 -15
  265. package/src/strategy/CollateralDeficitStrategy.ts +4 -3
  266. package/src/strategy/MinAmountStrategy.test.ts +238 -2
  267. package/src/strategy/MinAmountStrategy.ts +29 -17
  268. package/src/test/helpers.ts +13 -12
  269. package/src/test/lifiMocks.ts +5 -2
  270. package/src/test/pendingTransferMiddlewareMocks.ts +65 -0
  271. package/src/tracking/ActionTracker.test.ts +635 -3
  272. package/src/tracking/ActionTracker.ts +92 -12
  273. package/src/tracking/IActionTracker.ts +4 -2
  274. package/src/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.test.ts +1693 -0
  275. package/src/tracking/pendingTransferMiddlewares/BlacklistIsmMiddleware.ts +784 -0
  276. package/src/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.test.ts +554 -0
  277. package/src/tracking/pendingTransferMiddlewares/PendingTransferMiddleware.ts +233 -0
  278. package/src/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.test.ts +894 -0
  279. package/src/tracking/pendingTransferMiddlewares/RelayerDenylistMiddleware.ts +404 -0
  280. package/src/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.test.ts +205 -0
  281. package/src/tracking/pendingTransferMiddlewares/buildPendingTransferMiddlewares.ts +89 -0
  282. package/src/tracking/pendingTransferMiddlewares/fixtures/mainnet-denylist.json +3556 -0
  283. package/src/tracking/pendingTransferMiddlewares/matchBody.ts +43 -0
  284. package/src/tracking/pendingTransferMiddlewares/relayerDenylistRules.test.ts +1220 -0
  285. package/src/tracking/pendingTransferMiddlewares/relayerDenylistRules.ts +934 -0
  286. package/src/tracking/pendingTransferMiddlewares/types.ts +3 -0
  287. package/src/utils/ExplorerClient.test.ts +42 -0
  288. package/src/utils/ExplorerClient.ts +14 -3
  289. package/src/utils/balanceUtils.test.ts +87 -1
  290. package/src/utils/balanceUtils.ts +73 -2
  291. package/src/utils/blockTag.test.ts +173 -0
  292. package/src/utils/blockTag.ts +35 -15
  293. package/src/utils/gasEstimation.test.ts +192 -0
  294. package/src/utils/gasEstimation.ts +17 -11
  295. package/src/utils/tokenUtils.ts +5 -2
@@ -0,0 +1,132 @@
1
+ import chai, { expect } from 'chai';
2
+ import chaiAsPromised from 'chai-as-promised';
3
+ import { providers } from 'ethers';
4
+ import { pino } from 'pino';
5
+ import Sinon from 'sinon';
6
+ import { EthJsonRpcBlockParameterTag, MultiProtocolProvider, } from '@humanode-hyperlane/sdk';
7
+ import { ProtocolType } from '@humanode-hyperlane/utils';
8
+ import { getConfirmedBlockTag } from './blockTag.js';
9
+ chai.use(chaiAsPromised);
10
+ const tronMetadata = {
11
+ protocol: ProtocolType.Tron,
12
+ name: 'tron',
13
+ chainId: 728126428,
14
+ domainId: 728126428,
15
+ rpcUrls: [{ http: 'http://unused' }],
16
+ blocks: { reorgPeriod: 20, confirmations: 1 },
17
+ };
18
+ const logger = pino({ level: 'silent' });
19
+ describe('getConfirmedBlockTag', () => {
20
+ let mpp;
21
+ let provider;
22
+ beforeEach(() => {
23
+ mpp = Sinon.createStubInstance(MultiProtocolProvider);
24
+ provider = Sinon.createStubInstance(providers.JsonRpcProvider);
25
+ mpp.getChainMetadata.returns(tronMetadata);
26
+ mpp.getEthersV5Provider.returns(provider);
27
+ provider.send.resolves('0x64');
28
+ });
29
+ afterEach(() => {
30
+ Sinon.restore();
31
+ });
32
+ it('returns a confirmed block number for a numeric Tron reorg period', async () => {
33
+ expect(await getConfirmedBlockTag(mpp, 'tron')).to.equal(80);
34
+ });
35
+ it('clamps a confirmed block number to zero', async () => {
36
+ provider.send.resolves('0x0a');
37
+ expect(await getConfirmedBlockTag(mpp, 'tron')).to.equal(0);
38
+ });
39
+ it('uses the default numeric reorg period for Tron', async () => {
40
+ mpp.getChainMetadata.returns({ ...tronMetadata, blocks: undefined });
41
+ expect(await getConfirmedBlockTag(mpp, 'tron')).to.equal(68);
42
+ });
43
+ it('returns undefined for a non-EVM-like chain without querying blocks', async () => {
44
+ mpp.getChainMetadata.returns({
45
+ ...tronMetadata,
46
+ protocol: ProtocolType.Sealevel,
47
+ name: 'solana',
48
+ });
49
+ expect(await getConfirmedBlockTag(mpp, 'solana')).to.equal(undefined);
50
+ expect(mpp.getEthersV5Provider.notCalled).to.equal(true);
51
+ });
52
+ it('preserves the optional Tron tag for unsupported named reorg periods', async () => {
53
+ const warn = Sinon.stub(logger, 'warn');
54
+ mpp.getChainMetadata.returns({
55
+ ...tronMetadata,
56
+ blocks: {
57
+ reorgPeriod: EthJsonRpcBlockParameterTag.Finalized,
58
+ confirmations: 1,
59
+ },
60
+ });
61
+ expect(await getConfirmedBlockTag(mpp, 'tron', logger)).to.equal(undefined);
62
+ expect(mpp.getEthersV5Provider.notCalled).to.equal(true);
63
+ expect(warn.calledOnce).to.equal(true);
64
+ expect(warn.firstCall.args[1]).to.include('Tron does not support named block tags');
65
+ });
66
+ it('propagates failed numeric Tron block reads', async () => {
67
+ const failure = new Error('block unavailable');
68
+ const warn = Sinon.stub(logger, 'warn');
69
+ provider.send.rejects(failure);
70
+ await expect(getConfirmedBlockTag(mpp, 'tron', logger)).to.be.rejectedWith(failure);
71
+ expect(warn.calledOnce).to.equal(true);
72
+ expect(warn.firstCall.args[1]).to.equal('Failed to get confirmed block');
73
+ });
74
+ it('propagates provider lookup failures in numeric Tron mode', async () => {
75
+ const failure = new Error('provider unavailable');
76
+ mpp.getEthersV5Provider.throws(failure);
77
+ await expect(getConfirmedBlockTag(mpp, 'tron')).to.be.rejectedWith(failure);
78
+ });
79
+ for (const invalidResponse of [
80
+ undefined,
81
+ null,
82
+ 100,
83
+ '100',
84
+ '0x',
85
+ '0xgg',
86
+ '0x10000000000000000',
87
+ `0x${'f'.repeat(300)}`,
88
+ ]) {
89
+ it(`rejects an invalid Tron block response (${typeof invalidResponse}): ${String(invalidResponse).slice(0, 32)}`, async () => {
90
+ provider.send.resolves(invalidResponse);
91
+ await expect(getConfirmedBlockTag(mpp, 'tron')).to.be.rejectedWith('Invalid');
92
+ });
93
+ }
94
+ it('rejects an invalid numeric block from a non-JSON-RPC provider', async () => {
95
+ const fallbackProvider = Sinon.createStubInstance(providers.BaseProvider);
96
+ fallbackProvider.getBlockNumber.resolves(Number.NaN);
97
+ mpp.getEthersV5Provider.returns(fallbackProvider);
98
+ await expect(getConfirmedBlockTag(mpp, 'tron')).to.be.rejectedWith('Invalid block number for tron: NaN');
99
+ });
100
+ it('preserves undefined on an Ethereum lookup failure', async () => {
101
+ mpp.getChainMetadata.returns({
102
+ ...tronMetadata,
103
+ protocol: ProtocolType.Ethereum,
104
+ name: 'ethereum',
105
+ });
106
+ provider.send.rejects(new Error('block unavailable'));
107
+ expect(await getConfirmedBlockTag(mpp, 'ethereum')).to.equal(undefined);
108
+ });
109
+ it('preserves Ethereum named block tags', async () => {
110
+ mpp.getChainMetadata.returns({
111
+ ...tronMetadata,
112
+ protocol: ProtocolType.Ethereum,
113
+ name: 'ethereum',
114
+ blocks: {
115
+ reorgPeriod: EthJsonRpcBlockParameterTag.Finalized,
116
+ confirmations: 1,
117
+ },
118
+ });
119
+ expect(await getConfirmedBlockTag(mpp, 'ethereum')).to.equal(EthJsonRpcBlockParameterTag.Finalized);
120
+ expect(mpp.getEthersV5Provider.notCalled).to.equal(true);
121
+ });
122
+ it('preserves undefined on metadata lookup failures', async () => {
123
+ const failure = new Error('metadata unavailable');
124
+ mpp.getChainMetadata.throws(failure);
125
+ const warn = Sinon.stub(logger, 'warn');
126
+ expect(await getConfirmedBlockTag(mpp, 'tron', logger)).to.equal(undefined);
127
+ expect(warn.calledOnce).to.equal(true);
128
+ expect(warn.firstCall.args[1]).to.equal('Failed to get confirmed block');
129
+ expect(mpp.getEthersV5Provider.notCalled).to.equal(true);
130
+ });
131
+ });
132
+ //# sourceMappingURL=blockTag.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockTag.test.js","sourceRoot":"","sources":["../../src/utils/blockTag.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bridgeUtils.js","sourceRoot":"","sources":["../../src/utils/bridgeUtils.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,yBAAyB,CACvC,MAAoB;IAEpB,OAAO,MAAM,CAAC,aAAa,KAAK,mBAAmB,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAoB;IAEpB,OAAO,MAAM,CAAC,aAAa,KAAK,WAAW,CAAC;AAC9C,CAAC;AAMD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA2C,EAC3C,SAAoB,EACpB,OAAkB;IAElB,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,sBAAsB,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;IAE9D,8FAA8F;IAC9F,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,UAAU,CAAC;IAElD,6DAA6D;IAC7D,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,sBAAsB,EAAkB,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAA0B,EAC1B,MAAiB,EACjB,WAAsB,EACtB,MAAc;IAEd,QAAQ,YAAY,CAAC,aAAa,EAAE,CAAC;QACnC,KAAK,WAAW;YACd,OAAO;gBACL,MAAM;gBACN,WAAW;gBACX,MAAM;gBACN,aAAa,EAAE,WAAW;gBAC1B,cAAc,EAAE,YAAY,CAAC,cAAc;aAC5C,CAAC;QACJ,KAAK,mBAAmB;YACtB,OAAO;gBACL,MAAM;gBACN,WAAW;gBACX,MAAM;gBACN,aAAa,EAAE,mBAAmB;gBAClC,MAAM,EAAE,YAAY,CAAC,MAAM;aAC5B,CAAC;QACJ,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,YAAY,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,2BAA4B,WAA4B,CAAC,aAAa,EAAE,CACzE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"bridgeUtils.js","sourceRoot":"","sources":["../../src/utils/bridgeUtils.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,yBAAyB,CACvC,MAAoB;IAEpB,OAAO,MAAM,CAAC,aAAa,KAAK,mBAAmB,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAoB;IAEpB,OAAO,MAAM,CAAC,aAAa,KAAK,WAAW,CAAC;AAC9C,CAAC;AAMD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA2C,EAC3C,SAAoB,EACpB,OAAkB;IAElB,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,sBAAsB,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;IAE9D,8FAA8F;IAC9F,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,UAAU,CAAC;IAElD,6DAA6D;IAC7D,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,sBAAsB,EAAkB,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAA0B,EAC1B,MAAiB,EACjB,WAAsB,EACtB,MAAc;IAEd,QAAQ,YAAY,CAAC,aAAa,EAAE,CAAC;QACnC,KAAK,WAAW;YACd,OAAO;gBACL,MAAM;gBACN,WAAW;gBACX,MAAM;gBACN,aAAa,EAAE,WAAW;gBAC1B,cAAc,EAAE,YAAY,CAAC,cAAc;aAC5C,CAAC;QACJ,KAAK,mBAAmB;YACtB,OAAO;gBACL,MAAM;gBACN,WAAW;gBACX,MAAM;gBACN,aAAa,EAAE,mBAAmB;gBAClC,MAAM,EAAE,YAAY,CAAC,MAAM;aAC5B,CAAC;QACJ,SAAS,CAAC;YACR,MAAM,WAAW,GAAU,YAAY,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,2BAA4B,WAA4B,CAAC,aAAa,EAAE,CACzE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAG3C"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAEzC;CACF"}
@@ -42,9 +42,10 @@ export interface TransferCostEstimate {
42
42
  * @param getTokenForChain - Function to get token for a chain
43
43
  * @param inventorySigner - Address of the inventory signer
44
44
  * @param logger - Logger instance
45
+ * @param providedGasQuote - Quote already obtained for this exact transfer-cost calculation
45
46
  * @returns Estimated gas limit for the transaction
46
47
  */
47
- export declare function estimateTransferRemoteGas(originChain: ChainName, destinationChain: ChainName, amount: bigint, multiProvider: MultiProvider, warpCoreMultiProvider: any, getTokenForChain: (chain: ChainName) => Token | undefined, inventorySigner: string, logger: Logger): Promise<bigint>;
48
+ export declare function estimateTransferRemoteGas(originChain: ChainName, destinationChain: ChainName, amount: bigint, multiProvider: MultiProvider, warpCoreMultiProvider: any, getTokenForChain: (chain: ChainName) => Token | undefined, inventorySigner: string, logger: Logger, providedGasQuote?: InterchainGasQuote): Promise<bigint>;
48
49
  /**
49
50
  * Calculate all transfer costs for a transferRemote operation.
50
51
  * Consolidates IGP costs, gas costs, and derived values (max transferable, min viable).
@@ -1 +1 @@
1
- {"version":3,"file":"gasEstimation.d.ts","sourceRoot":"","sources":["../../src/utils/gasEstimation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,aAAa,EACd,MAAM,yBAAyB,CAAC;AAOjC;;;GAGG;AACH,eAAO,MAAM,kCAAkC,UAAW,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,yFAAyF;IACzF,eAAe,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,SAAS,EACtB,gBAAgB,EAAE,SAAS,EAC3B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,qBAAqB,EAAE,GAAG,EAC1B,gBAAgB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,KAAK,GAAG,SAAS,EACzD,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAoEjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,SAAS,EACtB,gBAAgB,EAAE,SAAS,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,aAAa,EAC5B,qBAAqB,EAAE,GAAG,EAC1B,gBAAgB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,KAAK,GAAG,SAAS,EACzD,eAAe,EAAE,MAAM,EACvB,qBAAqB,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,EAC3D,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC,CAuI/B"}
1
+ {"version":3,"file":"gasEstimation.d.ts","sourceRoot":"","sources":["../../src/utils/gasEstimation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,aAAa,EACd,MAAM,yBAAyB,CAAC;AAOjC;;;GAGG;AACH,eAAO,MAAM,kCAAkC,UAAW,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,yFAAyF;IACzF,eAAe,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,SAAS,EACtB,gBAAgB,EAAE,SAAS,EAC3B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,qBAAqB,EAAE,GAAG,EAC1B,gBAAgB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,KAAK,GAAG,SAAS,EACzD,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,kBAAkB,GACpC,OAAO,CAAC,MAAM,CAAC,CAuEjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,SAAS,EACtB,gBAAgB,EAAE,SAAS,EAC3B,kBAAkB,EAAE,MAAM,EAC1B,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,aAAa,EAC5B,qBAAqB,EAAE,GAAG,EAC1B,gBAAgB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,KAAK,GAAG,SAAS,EACzD,eAAe,EAAE,MAAM,EACvB,qBAAqB,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,EAC3D,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC,CAwI/B"}
@@ -1,5 +1,5 @@
1
1
  import { BigNumber } from 'ethers';
2
- import { addBufferToGasLimit, isZeroishAddress, ProtocolType, } from '@humanode-hyperlane/utils';
2
+ import { addBufferToGasLimit, isEVMLike, isZeroishAddress, } from '@humanode-hyperlane/utils';
3
3
  /**
4
4
  * Fallback gas limit for transferRemote when eth_estimateGas fails.
5
5
  * Conservative estimate for cross-chain token transfers.
@@ -22,9 +22,10 @@ export const MIN_VIABLE_COST_MULTIPLIER = 2n;
22
22
  * @param getTokenForChain - Function to get token for a chain
23
23
  * @param inventorySigner - Address of the inventory signer
24
24
  * @param logger - Logger instance
25
+ * @param providedGasQuote - Quote already obtained for this exact transfer-cost calculation
25
26
  * @returns Estimated gas limit for the transaction
26
27
  */
27
- export async function estimateTransferRemoteGas(originChain, destinationChain, amount, multiProvider, warpCoreMultiProvider, getTokenForChain, inventorySigner, logger) {
28
+ export async function estimateTransferRemoteGas(originChain, destinationChain, amount, multiProvider, warpCoreMultiProvider, getTokenForChain, inventorySigner, logger, providedGasQuote) {
28
29
  const originToken = getTokenForChain(originChain);
29
30
  if (!originToken) {
30
31
  logger.warn({ originChain }, 'No token found for origin chain, using fallback gas limit');
@@ -33,13 +34,15 @@ export async function estimateTransferRemoteGas(originChain, destinationChain, a
33
34
  try {
34
35
  const destinationDomain = multiProvider.getDomainId(destinationChain);
35
36
  const adapter = originToken.getHypAdapter(warpCoreMultiProvider);
36
- // Quote the IGP gas first (needed for the full transaction)
37
- const gasQuote = await adapter.quoteTransferRemoteGas({
38
- destination: destinationDomain,
39
- sender: inventorySigner,
40
- recipient: inventorySigner,
41
- amount,
42
- });
37
+ // Reuse the quote from this cost calculation when supplied; standalone
38
+ // estimation still obtains a fresh quote for its own transfer parameters.
39
+ const gasQuote = providedGasQuote ??
40
+ (await adapter.quoteTransferRemoteGas({
41
+ destination: destinationDomain,
42
+ sender: inventorySigner,
43
+ recipient: inventorySigner,
44
+ amount,
45
+ }));
43
46
  // Populate with minimal amount for gas estimation
44
47
  // Gas cost is independent of transfer size (just a require check in _transferFromSender),
45
48
  // and using minimal amount prevents eth_estimateGas from failing when account balance < requested amount
@@ -129,13 +132,13 @@ export async function calculateTransferCosts(originChain, destinationChain, avai
129
132
  isZeroishAddress(gasQuote.tokenFeeQuote.addressOrDenom)
130
133
  ? (gasQuote.tokenFeeQuote?.amount ?? 0n)
131
134
  : 0n;
132
- // Skip gas estimation for non-EVM chains (e.g., Solana).
135
+ // Skip gas estimation for non-EVM-like chains (e.g., Solana).
133
136
  // Non-EVM chains have negligible base fees (~5000 lamports ~$0.0001 on Solana)
134
137
  // compared to EVM gas costs ($0.50-$50/tx). The IGP (Interchain Gas Paymaster)
135
138
  // reservation dominates the cost, not chain-specific gas. Thus gasCost=0 is a
136
- // safe approximation for non-EVM origin chains.
139
+ // safe approximation for non-EVM-like origin chains.
137
140
  const originProtocol = multiProvider.getProtocol(originChain);
138
- if (originProtocol !== ProtocolType.Ethereum) {
141
+ if (!isEVMLike(originProtocol)) {
139
142
  const totalCost = igpCost + tokenFeeCost;
140
143
  let maxTransferable;
141
144
  if (availableInventory <= totalCost) {
@@ -160,7 +163,7 @@ export async function calculateTransferCosts(originChain, destinationChain, avai
160
163
  };
161
164
  }
162
165
  // Estimate gas with buffer
163
- const estimatedGasLimit = await estimateTransferRemoteGas(originChain, destinationChain, requestedAmount, multiProvider, warpCoreMultiProvider, getTokenForChain, inventorySigner, logger);
166
+ const estimatedGasLimit = await estimateTransferRemoteGas(originChain, destinationChain, requestedAmount, multiProvider, warpCoreMultiProvider, getTokenForChain, inventorySigner, logger, gasQuote);
164
167
  const bufferedGasLimit = addBufferToGasLimit(BigNumber.from(estimatedGasLimit.toString()));
165
168
  // Get gas price and calculate cost
166
169
  const provider = multiProvider.getProvider(originChain);
@@ -1 +1 @@
1
- {"version":3,"file":"gasEstimation.js","sourceRoot":"","sources":["../../src/utils/gasEstimation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gasEstimation.js","sourceRoot":"","sources":["../../src/utils/gasEstimation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gasEstimation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gasEstimation.test.d.ts","sourceRoot":"","sources":["../../src/utils/gasEstimation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,104 @@
1
+ import { expect } from 'chai';
2
+ import { BigNumber } from 'ethers';
3
+ import { pino } from 'pino';
4
+ import Sinon from 'sinon';
5
+ import { TokenStandard } from '@humanode-hyperlane/sdk';
6
+ import { ProtocolType } from '@humanode-hyperlane/utils';
7
+ import { calculateTransferCosts, estimateTransferRemoteGas, } from './gasEstimation.js';
8
+ const testLogger = pino({ level: 'silent' });
9
+ describe('calculateTransferCosts — Tron vs Sealevel protocol path', () => {
10
+ afterEach(() => {
11
+ Sinon.restore();
12
+ });
13
+ function createMockDeps(protocol) {
14
+ const mockAdapter = {
15
+ quoteTransferRemoteGas: Sinon.stub().resolves({
16
+ igpQuote: { amount: 1000n },
17
+ tokenFeeQuote: { amount: 0n, addressOrDenom: '' },
18
+ }),
19
+ populateTransferRemoteTx: Sinon.stub().resolves({
20
+ to: '0xRouter',
21
+ data: '0x',
22
+ value: 1000n,
23
+ }),
24
+ };
25
+ const mockToken = {
26
+ standard: TokenStandard.EvmHypNative, // Native so we reach the isEVMLike check
27
+ getHypAdapter: Sinon.stub().returns(mockAdapter),
28
+ };
29
+ const mockProvider = {
30
+ estimateGas: Sinon.stub().resolves(BigNumber.from(200000)),
31
+ getFeeData: Sinon.stub().resolves({
32
+ maxFeePerGas: BigNumber.from(10000000000n),
33
+ gasPrice: BigNumber.from(10000000000n),
34
+ }),
35
+ };
36
+ const multiProvider = {
37
+ getDomainId: Sinon.stub().returns(42161),
38
+ getProtocol: Sinon.stub().returns(protocol),
39
+ getProvider: Sinon.stub().returns(mockProvider),
40
+ };
41
+ const getTokenForChain = Sinon.stub().returns(mockToken);
42
+ const isNativeTokenStandard = Sinon.stub().returns(true);
43
+ return {
44
+ multiProvider,
45
+ getTokenForChain,
46
+ isNativeTokenStandard,
47
+ mockAdapter,
48
+ mockProvider,
49
+ };
50
+ }
51
+ it('uses one quote consistently for EVM-native reservation and estimation', async () => {
52
+ const { multiProvider, getTokenForChain, isNativeTokenStandard, mockAdapter, } = createMockDeps(ProtocolType.Ethereum);
53
+ mockAdapter.quoteTransferRemoteGas
54
+ .onSecondCall()
55
+ .rejects(new Error('duplicate quote'));
56
+ const result = await calculateTransferCosts('ethereum', 'arbitrum', 3000000000000000n, 3000000000000000n, multiProvider, {}, getTokenForChain, '0xInventorySigner', isNativeTokenStandard, testLogger);
57
+ expect(mockAdapter.quoteTransferRemoteGas.callCount).to.equal(1);
58
+ expect(mockAdapter.populateTransferRemoteTx.firstCall.args[0].interchainGas).to.equal(result.gasQuote);
59
+ expect(result.igpCost).to.equal(1000n);
60
+ expect(result.gasCost).to.equal(2200000000000000n);
61
+ expect(result.totalCost).to.equal(2200000000001000n);
62
+ expect(result.maxTransferable).to.equal(799999999999000n);
63
+ expect(result.minViableTransfer).to.equal(4400000000002000n);
64
+ });
65
+ it('retains the fallback gas reserve when estimation fails', async () => {
66
+ const { multiProvider, getTokenForChain, isNativeTokenStandard, mockAdapter, mockProvider, } = createMockDeps(ProtocolType.Ethereum);
67
+ mockProvider.estimateGas.rejects(new Error('estimate unavailable'));
68
+ const result = await calculateTransferCosts('ethereum', 'arbitrum', 10000000000000000n, 5000000000000000n, multiProvider, {}, getTokenForChain, '0xInventorySigner', isNativeTokenStandard, testLogger);
69
+ expect(mockAdapter.quoteTransferRemoteGas.callCount).to.equal(1);
70
+ expect(result.gasCost).to.equal(3300000000000000n);
71
+ expect(result.igpCost).to.equal(1000n);
72
+ });
73
+ it('still obtains a quote for standalone gas estimation', async () => {
74
+ const { multiProvider, getTokenForChain, mockAdapter } = createMockDeps(ProtocolType.Ethereum);
75
+ const estimate = await estimateTransferRemoteGas('ethereum', 'arbitrum', 100n, multiProvider, {}, getTokenForChain, '0xInventorySigner', testLogger);
76
+ expect(estimate).to.equal(200000n);
77
+ expect(mockAdapter.quoteTransferRemoteGas.callCount).to.equal(1);
78
+ expect(mockAdapter.quoteTransferRemoteGas.firstCall.args[0]).to.deep.equal({
79
+ destination: 42161,
80
+ sender: '0xInventorySigner',
81
+ recipient: '0xInventorySigner',
82
+ amount: 100n,
83
+ });
84
+ });
85
+ it('Tron origin (EVM-like) produces non-zero gasCost for native tokens', async () => {
86
+ const { multiProvider, getTokenForChain, isNativeTokenStandard } = createMockDeps(ProtocolType.Tron);
87
+ const result = await calculateTransferCosts('tron', 'arbitrum', 10000000000000000000n, // 10 ETH available
88
+ 1000000000000000000n, // 1 ETH requested
89
+ multiProvider, {}, // warpCoreMultiProvider
90
+ getTokenForChain, '0xInventorySigner', isNativeTokenStandard, testLogger);
91
+ // Tron is EVM-like — gas estimation runs, producing gasCost > 0
92
+ expect(result.gasCost > 0n).to.be.true;
93
+ expect(result.igpCost).to.equal(1000n);
94
+ expect(result.maxTransferable > 0n).to.be.true;
95
+ });
96
+ it('Sealevel origin (non-EVM) returns gasCost = 0 for native tokens', async () => {
97
+ const { multiProvider, getTokenForChain, isNativeTokenStandard } = createMockDeps(ProtocolType.Sealevel);
98
+ const result = await calculateTransferCosts('solana', 'arbitrum', 200000000000n, 100000000000n, multiProvider, {}, getTokenForChain, '0xInventorySigner', isNativeTokenStandard, testLogger);
99
+ // Sealevel is non-EVM — gasCost is 0 (skips gas estimation)
100
+ expect(result.gasCost).to.equal(0n);
101
+ expect(result.igpCost).to.equal(1000n);
102
+ });
103
+ });
104
+ //# sourceMappingURL=gasEstimation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gasEstimation.test.js","sourceRoot":"","sources":["../../src/utils/gasEstimation.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tokenUtils.d.ts","sourceRoot":"","sources":["../../src/utils/tokenUtils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAEL,KAAK,KAAK,EACV,aAAa,EACd,MAAM,yBAAyB,CAAC;AAkBjC;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAEtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2CAA2C,CACzD,KAAK,EAAE,KAAK,GACX,OAAO,CAKT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,kBAAkB,EACtC,qBAAqB,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,MAAM,GAC1D,MAAM,CAaR"}
1
+ {"version":3,"file":"tokenUtils.d.ts","sourceRoot":"","sources":["../../src/utils/tokenUtils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAEL,KAAK,KAAK,EACV,aAAa,EACd,MAAM,yBAAyB,CAAC;AAqBjC;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAEtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2CAA2C,CACzD,KAAK,EAAE,KAAK,GACX,OAAO,CAKT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,kBAAkB,EACtC,qBAAqB,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,MAAM,GAC1D,MAAM,CAaR"}
@@ -5,14 +5,17 @@ const REBALANCEABLE_TOKEN_COLLATERALIZED_STANDARDS = new Set([
5
5
  TokenStandard.EvmHypNative,
6
6
  TokenStandard.SealevelHypCollateral,
7
7
  TokenStandard.SealevelHypNative,
8
+ TokenStandard.TronHypCollateral,
9
+ TokenStandard.TronHypNative,
8
10
  ]);
9
- // SDK-backed native token standard check scoped to EVM and Sealevel only (2-protocol scope).
11
+ // SDK-backed native token standard check scoped to EVM, Sealevel, and Tron (3-protocol scope).
10
12
  // NOTE: We intentionally do NOT use the full PROTOCOL_TO_HYP_NATIVE_STANDARD map (all 7 protocols)
11
- // because the rebalancer only supports EVM and Sealevel native token bridging.
13
+ // because the rebalancer only supports EVM, Sealevel, and Tron native token bridging.
12
14
  // Expanding this would change gas reservation behavior for other protocols.
13
15
  const REBALANCER_NATIVE_STANDARDS = new Set([
14
16
  PROTOCOL_TO_HYP_NATIVE_STANDARD[ProtocolType.Ethereum],
15
17
  PROTOCOL_TO_HYP_NATIVE_STANDARD[ProtocolType.Sealevel],
18
+ PROTOCOL_TO_HYP_NATIVE_STANDARD[ProtocolType.Tron],
16
19
  ]);
17
20
  /**
18
21
  * Check if a token's balance is the same as native gas balance.
@@ -1 +1 @@
1
- {"version":3,"file":"tokenUtils.js","sourceRoot":"","sources":["../../src/utils/tokenUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAIjE,OAAO,EACL,+BAA+B,EAE/B,aAAa,GACd,MAAM,yBAAyB,CAAC;AAEjC,MAAM,4CAA4C,GAAG,IAAI,GAAG,CAAgB;IAC1E,aAAa,CAAC,gBAAgB;IAC9B,aAAa,CAAC,YAAY;IAC1B,aAAa,CAAC,qBAAqB;IACnC,aAAa,CAAC,iBAAiB;CAChC,CAAC,CAAC;AAEH,6FAA6F;AAC7F,mGAAmG;AACnG,+EAA+E;AAC/E,4EAA4E;AAC5E,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC;IAC1C,+BAA+B,CAAC,YAAY,CAAC,QAAQ,CAAC;IACtD,+BAA+B,CAAC,YAAY,CAAC,QAAQ,CAAC;CACvD,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAuB;IAC3D,OAAO,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,2CAA2C,CACzD,KAAY;IAEZ,OAAO,CACL,KAAK,CAAC,gBAAgB,EAAE;QACxB,4CAA4C,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CACjE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,6BAA6B,CAC3C,KAAY,EACZ,kBAAsC,EACtC,qBAA2D;IAE3D,IAAI,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,KAAK,CAAC,wBAAwB;QAAE,OAAO,KAAK,CAAC,wBAAwB,CAAC;IAE1E,MAAM,CACJ,CAAC,4CAA4C,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EACjE,gEAAgE,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,QAAQ,GAAG,CACtG,CAAC;IAEF,OAAO,KAAK,CAAC,cAAc,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"tokenUtils.js","sourceRoot":"","sources":["../../src/utils/tokenUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAIjE,OAAO,EACL,+BAA+B,EAE/B,aAAa,GACd,MAAM,yBAAyB,CAAC;AAEjC,MAAM,4CAA4C,GAAG,IAAI,GAAG,CAAgB;IAC1E,aAAa,CAAC,gBAAgB;IAC9B,aAAa,CAAC,YAAY;IAC1B,aAAa,CAAC,qBAAqB;IACnC,aAAa,CAAC,iBAAiB;IAC/B,aAAa,CAAC,iBAAiB;IAC/B,aAAa,CAAC,aAAa;CAC5B,CAAC,CAAC;AAEH,+FAA+F;AAC/F,mGAAmG;AACnG,sFAAsF;AACtF,4EAA4E;AAC5E,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC;IAC1C,+BAA+B,CAAC,YAAY,CAAC,QAAQ,CAAC;IACtD,+BAA+B,CAAC,YAAY,CAAC,QAAQ,CAAC;IACtD,+BAA+B,CAAC,YAAY,CAAC,IAAI,CAAC;CACnD,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAuB;IAC3D,OAAO,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,2CAA2C,CACzD,KAAY;IAEZ,OAAO,CACL,KAAK,CAAC,gBAAgB,EAAE;QACxB,4CAA4C,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CACjE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,6BAA6B,CAC3C,KAAY,EACZ,kBAAsC,EACtC,qBAA2D;IAE3D,IAAI,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,KAAK,CAAC,wBAAwB;QAAE,OAAO,KAAK,CAAC,wBAAwB,CAAC;IAE1E,MAAM,CACJ,CAAC,4CAA4C,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EACjE,gEAAgE,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,QAAQ,GAAG,CACtG,CAAC;IAEF,OAAO,KAAK,CAAC,cAAc,CAAC;AAC9B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@humanode-hyperlane/rebalancer",
3
- "version": "27.2.2",
3
+ "version": "1029.1.1",
4
4
  "description": "Hyperlane Warp Route Collateral Rebalancer Service",
5
5
  "keywords": [
6
6
  "blockchain",
@@ -12,7 +12,10 @@
12
12
  ],
13
13
  "license": "Apache-2.0",
14
14
  "author": "Abacus Works, Inc.",
15
- "repository": "https://github.com/humanode-network/hyperlane-monorepo",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/humanode-network/hyperlane-monorepo"
18
+ },
16
19
  "bin": {
17
20
  "hyperlane-rebalancer": "./dist/service.js"
18
21
  },
@@ -24,53 +27,51 @@
24
27
  "main": "./dist/index.js",
25
28
  "types": "./dist/index.d.ts",
26
29
  "dependencies": {
27
- "@google-cloud/pino-logging-gcp-config": "^1.3.0",
28
- "@humanode-hyperlane/registry": "23.12.0",
30
+ "@google-cloud/pino-logging-gcp-config": "^1.3.5",
31
+ "@humanode-hyperlane/core": "1012.3.0",
32
+ "@humanode-hyperlane/metrics": "1001.0.6",
33
+ "@humanode-hyperlane/provider-sdk": "1011.0.3",
34
+ "@humanode-hyperlane/registry": "1026.3.1",
35
+ "@humanode-hyperlane/sdk": "1045.2.1",
36
+ "@humanode-hyperlane/utils": "1045.2.0",
29
37
  "@inquirer/prompts": "3.3.2",
30
38
  "@inquirer/select": "^1.0.0",
31
39
  "@lifi/sdk": "^3.15.4",
32
- "@solana/web3.js": "^1.98.4",
40
+ "@solana/web3.js": "^1.99.0",
33
41
  "bignumber.js": "^9.1.1",
34
42
  "bs58": "^6.0.0",
35
43
  "ethers": "^5.8.0",
36
- "express": "^5.1.0",
37
44
  "pino": "^8.19.0",
38
45
  "pino-pretty": "^13.0.0",
39
46
  "prom-client": "^14.0.1",
47
+ "re2js": "2.9.1",
40
48
  "uuid": "^10.0.0",
41
49
  "viem": "^2.21.45",
42
50
  "yaml": "2.4.5",
43
- "zod": "^3.21.2",
44
- "zod-validation-error": "^3.3.0",
45
- "@humanode-hyperlane/core": "11.2.0",
46
- "@humanode-hyperlane/metrics": "0.2.8",
47
- "@humanode-hyperlane/provider-sdk": "4.2.3",
48
- "@humanode-hyperlane/sdk": "30.0.0",
49
- "@humanode-hyperlane/utils": "30.0.0"
51
+ "zod": "^4.5.4"
50
52
  },
51
53
  "devDependencies": {
52
54
  "@ethersproject/constants": "*",
55
+ "@humanode-hyperlane/relayer": "1004.1.1",
56
+ "@humanode-hyperlane/tsconfig": "^45.2.0",
53
57
  "@types/chai": "^4.3.11",
54
58
  "@types/chai-as-promised": "^8",
55
- "@types/express": "^5.0.3",
56
59
  "@types/mocha": "^10.0.1",
57
- "@types/node": "^24.10.9",
60
+ "@types/node": "^26.1.2",
58
61
  "@types/sinon": "^17.0.1",
59
62
  "@types/uuid": "^10.0.0",
60
63
  "@vercel/ncc": "^0.38.3",
61
64
  "chai": "^4.5.0",
62
65
  "chai-as-promised": "^8.0.1",
63
- "mocha": "^11.5.0",
64
- "oxfmt": "^0.42.0",
66
+ "mocha": "^11.7.6",
67
+ "oxfmt": "^0.62.0",
65
68
  "sinon": "^13.0.2",
66
69
  "testcontainers": "11.12.0",
67
- "tsx": "^4.19.1",
68
- "typescript": "6.0.2",
69
- "@humanode-hyperlane/relayer": "1.1.15",
70
- "@humanode-hyperlane/tsconfig": "^30.0.0"
70
+ "tsx": "^4.23.1",
71
+ "typescript": "npm:@typescript/typescript6@6.0.2"
71
72
  },
72
73
  "engines": {
73
- "node": ">=18"
74
+ "node": ">=22"
74
75
  },
75
76
  "scripts": {
76
77
  "build": "tsc",