@humanode-hyperlane/rebalancer 0.0.0-stage → 27.2.2-humanode.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 (439) hide show
  1. package/LICENSE.md +193 -0
  2. package/README.md +297 -2
  3. package/dist/bridges/LiFiBridge.d.ts +93 -0
  4. package/dist/bridges/LiFiBridge.d.ts.map +1 -0
  5. package/dist/bridges/LiFiBridge.js +527 -0
  6. package/dist/bridges/LiFiBridge.js.map +1 -0
  7. package/dist/bridges/LiFiBridge.test.d.ts +2 -0
  8. package/dist/bridges/LiFiBridge.test.d.ts.map +1 -0
  9. package/dist/bridges/LiFiBridge.test.js +504 -0
  10. package/dist/bridges/LiFiBridge.test.js.map +1 -0
  11. package/dist/config/RebalancerConfig.d.ts +20 -0
  12. package/dist/config/RebalancerConfig.d.ts.map +1 -0
  13. package/dist/config/RebalancerConfig.js +35 -0
  14. package/dist/config/RebalancerConfig.js.map +1 -0
  15. package/dist/config/RebalancerConfig.test.d.ts +2 -0
  16. package/dist/config/RebalancerConfig.test.d.ts.map +1 -0
  17. package/dist/config/RebalancerConfig.test.js +798 -0
  18. package/dist/config/RebalancerConfig.test.js.map +1 -0
  19. package/dist/config/types.d.ts +3008 -0
  20. package/dist/config/types.d.ts.map +1 -0
  21. package/dist/config/types.js +451 -0
  22. package/dist/config/types.js.map +1 -0
  23. package/dist/core/InventoryRebalancer.d.ts +201 -0
  24. package/dist/core/InventoryRebalancer.d.ts.map +1 -0
  25. package/dist/core/InventoryRebalancer.js +994 -0
  26. package/dist/core/InventoryRebalancer.js.map +1 -0
  27. package/dist/core/InventoryRebalancer.test.d.ts +2 -0
  28. package/dist/core/InventoryRebalancer.test.d.ts.map +1 -0
  29. package/dist/core/InventoryRebalancer.test.js +1511 -0
  30. package/dist/core/InventoryRebalancer.test.js.map +1 -0
  31. package/dist/core/Rebalancer.d.ts +37 -0
  32. package/dist/core/Rebalancer.d.ts.map +1 -0
  33. package/dist/core/Rebalancer.js +433 -0
  34. package/dist/core/Rebalancer.js.map +1 -0
  35. package/dist/core/Rebalancer.test.d.ts +2 -0
  36. package/dist/core/Rebalancer.test.d.ts.map +1 -0
  37. package/dist/core/Rebalancer.test.js +424 -0
  38. package/dist/core/Rebalancer.test.js.map +1 -0
  39. package/dist/core/RebalancerOrchestrator.d.ts +56 -0
  40. package/dist/core/RebalancerOrchestrator.d.ts.map +1 -0
  41. package/dist/core/RebalancerOrchestrator.js +154 -0
  42. package/dist/core/RebalancerOrchestrator.js.map +1 -0
  43. package/dist/core/RebalancerOrchestrator.test.d.ts +2 -0
  44. package/dist/core/RebalancerOrchestrator.test.d.ts.map +1 -0
  45. package/dist/core/RebalancerOrchestrator.test.js +721 -0
  46. package/dist/core/RebalancerOrchestrator.test.js.map +1 -0
  47. package/dist/core/RebalancerService.d.ts +127 -0
  48. package/dist/core/RebalancerService.d.ts.map +1 -0
  49. package/dist/core/RebalancerService.js +270 -0
  50. package/dist/core/RebalancerService.js.map +1 -0
  51. package/dist/core/RebalancerService.test.d.ts +2 -0
  52. package/dist/core/RebalancerService.test.d.ts.map +1 -0
  53. package/dist/core/RebalancerService.test.js +777 -0
  54. package/dist/core/RebalancerService.test.js.map +1 -0
  55. package/dist/e2e/collateral-deficit.e2e-test.d.ts +2 -0
  56. package/dist/e2e/collateral-deficit.e2e-test.d.ts.map +1 -0
  57. package/dist/e2e/collateral-deficit.e2e-test.js +227 -0
  58. package/dist/e2e/collateral-deficit.e2e-test.js.map +1 -0
  59. package/dist/e2e/composite.e2e-test.d.ts +2 -0
  60. package/dist/e2e/composite.e2e-test.d.ts.map +1 -0
  61. package/dist/e2e/composite.e2e-test.js +666 -0
  62. package/dist/e2e/composite.e2e-test.js.map +1 -0
  63. package/dist/e2e/fixtures/routes.d.ts +89 -0
  64. package/dist/e2e/fixtures/routes.d.ts.map +1 -0
  65. package/dist/e2e/fixtures/routes.js +420 -0
  66. package/dist/e2e/fixtures/routes.js.map +1 -0
  67. package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts +38 -0
  68. package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts.map +1 -0
  69. package/dist/e2e/harness/BaseLocalDeploymentManager.js +144 -0
  70. package/dist/e2e/harness/BaseLocalDeploymentManager.js.map +1 -0
  71. package/dist/e2e/harness/BridgeSetup.d.ts +11 -0
  72. package/dist/e2e/harness/BridgeSetup.d.ts.map +1 -0
  73. package/dist/e2e/harness/BridgeSetup.js +50 -0
  74. package/dist/e2e/harness/BridgeSetup.js.map +1 -0
  75. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts +13 -0
  76. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts.map +1 -0
  77. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js +105 -0
  78. package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js.map +1 -0
  79. package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts +11 -0
  80. package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts.map +1 -0
  81. package/dist/e2e/harness/Erc20LocalDeploymentManager.js +105 -0
  82. package/dist/e2e/harness/Erc20LocalDeploymentManager.js.map +1 -0
  83. package/dist/e2e/harness/ForkIndexer.d.ts +23 -0
  84. package/dist/e2e/harness/ForkIndexer.d.ts.map +1 -0
  85. package/dist/e2e/harness/ForkIndexer.js +127 -0
  86. package/dist/e2e/harness/ForkIndexer.js.map +1 -0
  87. package/dist/e2e/harness/ForkIndexer.test.d.ts +2 -0
  88. package/dist/e2e/harness/ForkIndexer.test.d.ts.map +1 -0
  89. package/dist/e2e/harness/ForkIndexer.test.js +257 -0
  90. package/dist/e2e/harness/ForkIndexer.test.js.map +1 -0
  91. package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts +21 -0
  92. package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts.map +1 -0
  93. package/dist/e2e/harness/MixedLocalDeploymentManager.js +115 -0
  94. package/dist/e2e/harness/MixedLocalDeploymentManager.js.map +1 -0
  95. package/dist/e2e/harness/MockExplorerClient.d.ts +23 -0
  96. package/dist/e2e/harness/MockExplorerClient.d.ts.map +1 -0
  97. package/dist/e2e/harness/MockExplorerClient.js +57 -0
  98. package/dist/e2e/harness/MockExplorerClient.js.map +1 -0
  99. package/dist/e2e/harness/MockExternalBridge.d.ts +32 -0
  100. package/dist/e2e/harness/MockExternalBridge.d.ts.map +1 -0
  101. package/dist/e2e/harness/MockExternalBridge.js +247 -0
  102. package/dist/e2e/harness/MockExternalBridge.js.map +1 -0
  103. package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts +13 -0
  104. package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts.map +1 -0
  105. package/dist/e2e/harness/NativeLocalDeploymentManager.js +91 -0
  106. package/dist/e2e/harness/NativeLocalDeploymentManager.js.map +1 -0
  107. package/dist/e2e/harness/SnapshotHelper.d.ts +13 -0
  108. package/dist/e2e/harness/SnapshotHelper.d.ts.map +1 -0
  109. package/dist/e2e/harness/SnapshotHelper.js +36 -0
  110. package/dist/e2e/harness/SnapshotHelper.js.map +1 -0
  111. package/dist/e2e/harness/TestHelpers.d.ts +25 -0
  112. package/dist/e2e/harness/TestHelpers.d.ts.map +1 -0
  113. package/dist/e2e/harness/TestHelpers.js +103 -0
  114. package/dist/e2e/harness/TestHelpers.js.map +1 -0
  115. package/dist/e2e/harness/TestRebalancer.d.ts +85 -0
  116. package/dist/e2e/harness/TestRebalancer.d.ts.map +1 -0
  117. package/dist/e2e/harness/TestRebalancer.js +427 -0
  118. package/dist/e2e/harness/TestRebalancer.js.map +1 -0
  119. package/dist/e2e/harness/TransferHelper.d.ts +34 -0
  120. package/dist/e2e/harness/TransferHelper.d.ts.map +1 -0
  121. package/dist/e2e/harness/TransferHelper.js +93 -0
  122. package/dist/e2e/harness/TransferHelper.js.map +1 -0
  123. package/dist/e2e/inventory-erc20-minAmount.e2e-test.d.ts +2 -0
  124. package/dist/e2e/inventory-erc20-minAmount.e2e-test.d.ts.map +1 -0
  125. package/dist/e2e/inventory-erc20-minAmount.e2e-test.js +411 -0
  126. package/dist/e2e/inventory-erc20-minAmount.e2e-test.js.map +1 -0
  127. package/dist/e2e/inventory-erc20-weighted.e2e-test.d.ts +2 -0
  128. package/dist/e2e/inventory-erc20-weighted.e2e-test.d.ts.map +1 -0
  129. package/dist/e2e/inventory-erc20-weighted.e2e-test.js +408 -0
  130. package/dist/e2e/inventory-erc20-weighted.e2e-test.js.map +1 -0
  131. package/dist/e2e/inventory-minAmount.e2e-test.d.ts +2 -0
  132. package/dist/e2e/inventory-minAmount.e2e-test.d.ts.map +1 -0
  133. package/dist/e2e/inventory-minAmount.e2e-test.js +411 -0
  134. package/dist/e2e/inventory-minAmount.e2e-test.js.map +1 -0
  135. package/dist/e2e/inventory-weighted.e2e-test.d.ts +2 -0
  136. package/dist/e2e/inventory-weighted.e2e-test.d.ts.map +1 -0
  137. package/dist/e2e/inventory-weighted.e2e-test.js +409 -0
  138. package/dist/e2e/inventory-weighted.e2e-test.js.map +1 -0
  139. package/dist/e2e/minAmount.e2e-test.d.ts +2 -0
  140. package/dist/e2e/minAmount.e2e-test.d.ts.map +1 -0
  141. package/dist/e2e/minAmount.e2e-test.js +203 -0
  142. package/dist/e2e/minAmount.e2e-test.js.map +1 -0
  143. package/dist/e2e/mixed-weighted.e2e-test.d.ts +2 -0
  144. package/dist/e2e/mixed-weighted.e2e-test.d.ts.map +1 -0
  145. package/dist/e2e/mixed-weighted.e2e-test.js +189 -0
  146. package/dist/e2e/mixed-weighted.e2e-test.js.map +1 -0
  147. package/dist/e2e/weighted.e2e-test.d.ts +2 -0
  148. package/dist/e2e/weighted.e2e-test.d.ts.map +1 -0
  149. package/dist/e2e/weighted.e2e-test.js +198 -0
  150. package/dist/e2e/weighted.e2e-test.js.map +1 -0
  151. package/dist/factories/RebalancerContextFactory.d.ts +89 -0
  152. package/dist/factories/RebalancerContextFactory.d.ts.map +1 -0
  153. package/dist/factories/RebalancerContextFactory.js +420 -0
  154. package/dist/factories/RebalancerContextFactory.js.map +1 -0
  155. package/dist/factories/RebalancerContextFactory.test.d.ts +2 -0
  156. package/dist/factories/RebalancerContextFactory.test.d.ts.map +1 -0
  157. package/dist/factories/RebalancerContextFactory.test.js +270 -0
  158. package/dist/factories/RebalancerContextFactory.test.js.map +1 -0
  159. package/dist/index.d.ts +37 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +37 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/interfaces/IExternalBridge.d.ts +103 -0
  164. package/dist/interfaces/IExternalBridge.d.ts.map +1 -0
  165. package/dist/interfaces/IExternalBridge.js +2 -0
  166. package/dist/interfaces/IExternalBridge.js.map +1 -0
  167. package/dist/interfaces/IMetrics.d.ts +5 -0
  168. package/dist/interfaces/IMetrics.d.ts.map +1 -0
  169. package/dist/interfaces/IMetrics.js +2 -0
  170. package/dist/interfaces/IMetrics.js.map +1 -0
  171. package/dist/interfaces/IMonitor.d.ts +50 -0
  172. package/dist/interfaces/IMonitor.d.ts.map +1 -0
  173. package/dist/interfaces/IMonitor.js +14 -0
  174. package/dist/interfaces/IMonitor.js.map +1 -0
  175. package/dist/interfaces/IRebalancer.d.ts +31 -0
  176. package/dist/interfaces/IRebalancer.d.ts.map +1 -0
  177. package/dist/interfaces/IRebalancer.js +2 -0
  178. package/dist/interfaces/IRebalancer.js.map +1 -0
  179. package/dist/interfaces/IStrategy.d.ts +60 -0
  180. package/dist/interfaces/IStrategy.d.ts.map +1 -0
  181. package/dist/interfaces/IStrategy.js +13 -0
  182. package/dist/interfaces/IStrategy.js.map +1 -0
  183. package/dist/metrics/Metrics.d.ts +25 -0
  184. package/dist/metrics/Metrics.d.ts.map +1 -0
  185. package/dist/metrics/Metrics.js +164 -0
  186. package/dist/metrics/Metrics.js.map +1 -0
  187. package/dist/metrics/PriceGetter.d.ts +10 -0
  188. package/dist/metrics/PriceGetter.d.ts.map +1 -0
  189. package/dist/metrics/PriceGetter.js +41 -0
  190. package/dist/metrics/PriceGetter.js.map +1 -0
  191. package/dist/metrics/scripts/metrics.d.ts +28 -0
  192. package/dist/metrics/scripts/metrics.d.ts.map +1 -0
  193. package/dist/metrics/scripts/metrics.js +61 -0
  194. package/dist/metrics/scripts/metrics.js.map +1 -0
  195. package/dist/monitor/Monitor.d.ts +40 -0
  196. package/dist/monitor/Monitor.d.ts.map +1 -0
  197. package/dist/monitor/Monitor.js +211 -0
  198. package/dist/monitor/Monitor.js.map +1 -0
  199. package/dist/service.d.ts +3 -0
  200. package/dist/service.d.ts.map +1 -0
  201. package/dist/service.js +205 -0
  202. package/dist/service.js.map +1 -0
  203. package/dist/strategy/BaseStrategy.d.ts +86 -0
  204. package/dist/strategy/BaseStrategy.d.ts.map +1 -0
  205. package/dist/strategy/BaseStrategy.js +342 -0
  206. package/dist/strategy/BaseStrategy.js.map +1 -0
  207. package/dist/strategy/CollateralDeficitStrategy.d.ts +65 -0
  208. package/dist/strategy/CollateralDeficitStrategy.d.ts.map +1 -0
  209. package/dist/strategy/CollateralDeficitStrategy.js +253 -0
  210. package/dist/strategy/CollateralDeficitStrategy.js.map +1 -0
  211. package/dist/strategy/CollateralDeficitStrategy.test.d.ts +2 -0
  212. package/dist/strategy/CollateralDeficitStrategy.test.d.ts.map +1 -0
  213. package/dist/strategy/CollateralDeficitStrategy.test.js +497 -0
  214. package/dist/strategy/CollateralDeficitStrategy.test.js.map +1 -0
  215. package/dist/strategy/CompositeStrategy.d.ts +18 -0
  216. package/dist/strategy/CompositeStrategy.d.ts.map +1 -0
  217. package/dist/strategy/CompositeStrategy.js +63 -0
  218. package/dist/strategy/CompositeStrategy.js.map +1 -0
  219. package/dist/strategy/CompositeStrategy.test.d.ts +2 -0
  220. package/dist/strategy/CompositeStrategy.test.d.ts.map +1 -0
  221. package/dist/strategy/CompositeStrategy.test.js +278 -0
  222. package/dist/strategy/CompositeStrategy.test.js.map +1 -0
  223. package/dist/strategy/MinAmountStrategy.d.ts +35 -0
  224. package/dist/strategy/MinAmountStrategy.d.ts.map +1 -0
  225. package/dist/strategy/MinAmountStrategy.js +112 -0
  226. package/dist/strategy/MinAmountStrategy.js.map +1 -0
  227. package/dist/strategy/MinAmountStrategy.test.d.ts +2 -0
  228. package/dist/strategy/MinAmountStrategy.test.d.ts.map +1 -0
  229. package/dist/strategy/MinAmountStrategy.test.js +547 -0
  230. package/dist/strategy/MinAmountStrategy.test.js.map +1 -0
  231. package/dist/strategy/StrategyFactory.d.ts +27 -0
  232. package/dist/strategy/StrategyFactory.d.ts.map +1 -0
  233. package/dist/strategy/StrategyFactory.js +79 -0
  234. package/dist/strategy/StrategyFactory.js.map +1 -0
  235. package/dist/strategy/StrategyFactory.test.d.ts +2 -0
  236. package/dist/strategy/StrategyFactory.test.d.ts.map +1 -0
  237. package/dist/strategy/StrategyFactory.test.js +81 -0
  238. package/dist/strategy/StrategyFactory.test.js.map +1 -0
  239. package/dist/strategy/WeightedStrategy.d.ts +32 -0
  240. package/dist/strategy/WeightedStrategy.d.ts.map +1 -0
  241. package/dist/strategy/WeightedStrategy.js +73 -0
  242. package/dist/strategy/WeightedStrategy.js.map +1 -0
  243. package/dist/strategy/WeightedStrategy.test.d.ts +2 -0
  244. package/dist/strategy/WeightedStrategy.test.d.ts.map +1 -0
  245. package/dist/strategy/WeightedStrategy.test.js +403 -0
  246. package/dist/strategy/WeightedStrategy.test.js.map +1 -0
  247. package/dist/strategy/index.d.ts +7 -0
  248. package/dist/strategy/index.d.ts.map +1 -0
  249. package/dist/strategy/index.js +7 -0
  250. package/dist/strategy/index.js.map +1 -0
  251. package/dist/test/helpers.d.ts +99 -0
  252. package/dist/test/helpers.d.ts.map +1 -0
  253. package/dist/test/helpers.js +311 -0
  254. package/dist/test/helpers.js.map +1 -0
  255. package/dist/test/lifiMocks.d.ts +52 -0
  256. package/dist/test/lifiMocks.d.ts.map +1 -0
  257. package/dist/test/lifiMocks.js +160 -0
  258. package/dist/test/lifiMocks.js.map +1 -0
  259. package/dist/tracking/ActionTracker.d.ts +90 -0
  260. package/dist/tracking/ActionTracker.d.ts.map +1 -0
  261. package/dist/tracking/ActionTracker.js +678 -0
  262. package/dist/tracking/ActionTracker.js.map +1 -0
  263. package/dist/tracking/ActionTracker.test.d.ts +2 -0
  264. package/dist/tracking/ActionTracker.test.d.ts.map +1 -0
  265. package/dist/tracking/ActionTracker.test.js +1351 -0
  266. package/dist/tracking/ActionTracker.test.js.map +1 -0
  267. package/dist/tracking/IActionTracker.d.ts +157 -0
  268. package/dist/tracking/IActionTracker.d.ts.map +1 -0
  269. package/dist/tracking/IActionTracker.js +2 -0
  270. package/dist/tracking/IActionTracker.js.map +1 -0
  271. package/dist/tracking/InflightContextAdapter.d.ts +18 -0
  272. package/dist/tracking/InflightContextAdapter.d.ts.map +1 -0
  273. package/dist/tracking/InflightContextAdapter.js +52 -0
  274. package/dist/tracking/InflightContextAdapter.js.map +1 -0
  275. package/dist/tracking/InflightContextAdapter.test.d.ts +2 -0
  276. package/dist/tracking/InflightContextAdapter.test.d.ts.map +1 -0
  277. package/dist/tracking/InflightContextAdapter.test.js +175 -0
  278. package/dist/tracking/InflightContextAdapter.test.js.map +1 -0
  279. package/dist/tracking/store/IStore.d.ts +41 -0
  280. package/dist/tracking/store/IStore.d.ts.map +1 -0
  281. package/dist/tracking/store/IStore.js +2 -0
  282. package/dist/tracking/store/IStore.js.map +1 -0
  283. package/dist/tracking/store/InMemoryStore.d.ts +21 -0
  284. package/dist/tracking/store/InMemoryStore.d.ts.map +1 -0
  285. package/dist/tracking/store/InMemoryStore.js +40 -0
  286. package/dist/tracking/store/InMemoryStore.js.map +1 -0
  287. package/dist/tracking/store/InMemoryStore.test.d.ts +2 -0
  288. package/dist/tracking/store/InMemoryStore.test.d.ts.map +1 -0
  289. package/dist/tracking/store/InMemoryStore.test.js +290 -0
  290. package/dist/tracking/store/InMemoryStore.test.js.map +1 -0
  291. package/dist/tracking/store/index.d.ts +3 -0
  292. package/dist/tracking/store/index.d.ts.map +1 -0
  293. package/dist/tracking/store/index.js +2 -0
  294. package/dist/tracking/store/index.js.map +1 -0
  295. package/dist/tracking/types.d.ts +77 -0
  296. package/dist/tracking/types.d.ts.map +1 -0
  297. package/dist/tracking/types.js +2 -0
  298. package/dist/tracking/types.js.map +1 -0
  299. package/dist/utils/ExplorerClient.d.ts +68 -0
  300. package/dist/utils/ExplorerClient.d.ts.map +1 -0
  301. package/dist/utils/ExplorerClient.js +324 -0
  302. package/dist/utils/ExplorerClient.js.map +1 -0
  303. package/dist/utils/ExplorerClient.test.d.ts +2 -0
  304. package/dist/utils/ExplorerClient.test.d.ts.map +1 -0
  305. package/dist/utils/ExplorerClient.test.js +261 -0
  306. package/dist/utils/ExplorerClient.test.js.map +1 -0
  307. package/dist/utils/balanceUtils.d.ts +12 -0
  308. package/dist/utils/balanceUtils.d.ts.map +1 -0
  309. package/dist/utils/balanceUtils.js +40 -0
  310. package/dist/utils/balanceUtils.js.map +1 -0
  311. package/dist/utils/balanceUtils.test.d.ts +2 -0
  312. package/dist/utils/balanceUtils.test.d.ts.map +1 -0
  313. package/dist/utils/balanceUtils.test.js +55 -0
  314. package/dist/utils/balanceUtils.test.js.map +1 -0
  315. package/dist/utils/blockTag.d.ts +14 -0
  316. package/dist/utils/blockTag.d.ts.map +1 -0
  317. package/dist/utils/blockTag.js +46 -0
  318. package/dist/utils/blockTag.js.map +1 -0
  319. package/dist/utils/bridgeUtils.d.ts +40 -0
  320. package/dist/utils/bridgeUtils.d.ts.map +1 -0
  321. package/dist/utils/bridgeUtils.js +54 -0
  322. package/dist/utils/bridgeUtils.js.map +1 -0
  323. package/dist/utils/bridgeUtils.test.d.ts +2 -0
  324. package/dist/utils/bridgeUtils.test.d.ts.map +1 -0
  325. package/dist/utils/bridgeUtils.test.js +163 -0
  326. package/dist/utils/bridgeUtils.test.js.map +1 -0
  327. package/dist/utils/errors.d.ts +4 -0
  328. package/dist/utils/errors.d.ts.map +1 -0
  329. package/dist/utils/errors.js +6 -0
  330. package/dist/utils/errors.js.map +1 -0
  331. package/dist/utils/gasEstimation.d.ts +65 -0
  332. package/dist/utils/gasEstimation.d.ts.map +1 -0
  333. package/dist/utils/gasEstimation.js +206 -0
  334. package/dist/utils/gasEstimation.js.map +1 -0
  335. package/dist/utils/solanaKeyParser.d.ts +10 -0
  336. package/dist/utils/solanaKeyParser.d.ts.map +1 -0
  337. package/dist/utils/solanaKeyParser.js +87 -0
  338. package/dist/utils/solanaKeyParser.js.map +1 -0
  339. package/dist/utils/solanaKeyParser.test.d.ts +2 -0
  340. package/dist/utils/solanaKeyParser.test.d.ts.map +1 -0
  341. package/dist/utils/solanaKeyParser.test.js +71 -0
  342. package/dist/utils/solanaKeyParser.test.js.map +1 -0
  343. package/dist/utils/tokenUtils.d.ts +38 -0
  344. package/dist/utils/tokenUtils.d.ts.map +1 -0
  345. package/dist/utils/tokenUtils.js +65 -0
  346. package/dist/utils/tokenUtils.js.map +1 -0
  347. package/dist/utils/transactionUtils.d.ts +22 -0
  348. package/dist/utils/transactionUtils.d.ts.map +1 -0
  349. package/dist/utils/transactionUtils.js +26 -0
  350. package/dist/utils/transactionUtils.js.map +1 -0
  351. package/package.json +87 -3
  352. package/src/bridges/LiFiBridge.test.ts +615 -0
  353. package/src/bridges/LiFiBridge.ts +731 -0
  354. package/src/config/RebalancerConfig.test.ts +921 -0
  355. package/src/config/RebalancerConfig.ts +63 -0
  356. package/src/config/types.ts +613 -0
  357. package/src/core/InventoryRebalancer.test.ts +1858 -0
  358. package/src/core/InventoryRebalancer.ts +1455 -0
  359. package/src/core/Rebalancer.test.ts +686 -0
  360. package/src/core/Rebalancer.ts +686 -0
  361. package/src/core/RebalancerOrchestrator.test.ts +871 -0
  362. package/src/core/RebalancerOrchestrator.ts +273 -0
  363. package/src/core/RebalancerService.test.ts +1094 -0
  364. package/src/core/RebalancerService.ts +412 -0
  365. package/src/e2e/E2E_TEST_CONVENTIONS.md +222 -0
  366. package/src/e2e/collateral-deficit.e2e-test.ts +403 -0
  367. package/src/e2e/composite.e2e-test.ts +1008 -0
  368. package/src/e2e/fixtures/routes.ts +532 -0
  369. package/src/e2e/harness/BaseLocalDeploymentManager.ts +246 -0
  370. package/src/e2e/harness/BridgeSetup.ts +95 -0
  371. package/src/e2e/harness/Erc20InventoryLocalDeploymentManager.ts +183 -0
  372. package/src/e2e/harness/Erc20LocalDeploymentManager.ts +190 -0
  373. package/src/e2e/harness/ForkIndexer.test.ts +448 -0
  374. package/src/e2e/harness/ForkIndexer.ts +183 -0
  375. package/src/e2e/harness/MixedLocalDeploymentManager.ts +196 -0
  376. package/src/e2e/harness/MockExplorerClient.ts +94 -0
  377. package/src/e2e/harness/MockExternalBridge.ts +411 -0
  378. package/src/e2e/harness/NativeLocalDeploymentManager.ts +138 -0
  379. package/src/e2e/harness/SnapshotHelper.ts +56 -0
  380. package/src/e2e/harness/TestHelpers.ts +169 -0
  381. package/src/e2e/harness/TestRebalancer.ts +758 -0
  382. package/src/e2e/harness/TransferHelper.ts +188 -0
  383. package/src/e2e/inventory-erc20-minAmount.e2e-test.ts +735 -0
  384. package/src/e2e/inventory-erc20-weighted.e2e-test.ts +733 -0
  385. package/src/e2e/inventory-minAmount.e2e-test.ts +734 -0
  386. package/src/e2e/inventory-weighted.e2e-test.ts +734 -0
  387. package/src/e2e/minAmount.e2e-test.ts +313 -0
  388. package/src/e2e/mixed-weighted.e2e-test.ts +267 -0
  389. package/src/e2e/weighted.e2e-test.ts +304 -0
  390. package/src/factories/RebalancerContextFactory.test.ts +394 -0
  391. package/src/factories/RebalancerContextFactory.ts +771 -0
  392. package/src/index.ts +125 -0
  393. package/src/interfaces/IExternalBridge.ts +117 -0
  394. package/src/interfaces/IMetrics.ts +5 -0
  395. package/src/interfaces/IMonitor.ts +71 -0
  396. package/src/interfaces/IRebalancer.ts +57 -0
  397. package/src/interfaces/IStrategy.ts +81 -0
  398. package/src/metrics/Metrics.ts +335 -0
  399. package/src/metrics/PriceGetter.ts +74 -0
  400. package/src/metrics/scripts/metrics.ts +139 -0
  401. package/src/monitor/Monitor.ts +324 -0
  402. package/src/service.ts +285 -0
  403. package/src/strategy/BaseStrategy.ts +553 -0
  404. package/src/strategy/CollateralDeficitStrategy.test.ts +728 -0
  405. package/src/strategy/CollateralDeficitStrategy.ts +421 -0
  406. package/src/strategy/CompositeStrategy.test.ts +418 -0
  407. package/src/strategy/CompositeStrategy.ts +102 -0
  408. package/src/strategy/MinAmountStrategy.test.ts +732 -0
  409. package/src/strategy/MinAmountStrategy.ts +200 -0
  410. package/src/strategy/StrategyFactory.test.ts +108 -0
  411. package/src/strategy/StrategyFactory.ts +157 -0
  412. package/src/strategy/WeightedStrategy.test.ts +529 -0
  413. package/src/strategy/WeightedStrategy.ts +126 -0
  414. package/src/strategy/index.ts +6 -0
  415. package/src/test/helpers.ts +477 -0
  416. package/src/test/lifiMocks.ts +211 -0
  417. package/src/tracking/ActionTracker.test.ts +1625 -0
  418. package/src/tracking/ActionTracker.ts +1019 -0
  419. package/src/tracking/IActionTracker.ts +213 -0
  420. package/src/tracking/InflightContextAdapter.test.ts +206 -0
  421. package/src/tracking/InflightContextAdapter.ts +75 -0
  422. package/src/tracking/store/IStore.ts +48 -0
  423. package/src/tracking/store/InMemoryStore.test.ts +338 -0
  424. package/src/tracking/store/InMemoryStore.ts +59 -0
  425. package/src/tracking/store/index.ts +2 -0
  426. package/src/tracking/types.ts +118 -0
  427. package/src/utils/ExplorerClient.test.ts +386 -0
  428. package/src/utils/ExplorerClient.ts +439 -0
  429. package/src/utils/balanceUtils.test.ts +79 -0
  430. package/src/utils/balanceUtils.ts +65 -0
  431. package/src/utils/blockTag.ts +68 -0
  432. package/src/utils/bridgeUtils.test.ts +193 -0
  433. package/src/utils/bridgeUtils.ts +101 -0
  434. package/src/utils/errors.ts +5 -0
  435. package/src/utils/gasEstimation.ts +306 -0
  436. package/src/utils/solanaKeyParser.test.ts +103 -0
  437. package/src/utils/solanaKeyParser.ts +117 -0
  438. package/src/utils/tokenUtils.ts +89 -0
  439. package/src/utils/transactionUtils.ts +41 -0
@@ -0,0 +1,40 @@
1
+ import { isCollateralizedTokenEligibleForRebalancing } from './tokenUtils.js';
2
+ /**
3
+ * Returns the raw balances required by the strategies from the monitor event
4
+ * @param chains - The chains that should be included in the raw balances (e.g. the chains in the rebalancer config)
5
+ * @param event - The monitor event to extract the raw balances from
6
+ * @returns An object mapping chain names to their raw balances.
7
+ */
8
+ export function getRawBalances(chains, event, logger) {
9
+ const balances = {};
10
+ const chainSet = new Set(chains);
11
+ for (const tokenInfo of event.tokensInfo) {
12
+ const { token, bridgedSupply } = tokenInfo;
13
+ // Ignore tokens that are not in the provided chains list
14
+ if (!chainSet.has(token.chainName)) {
15
+ logger.debug({
16
+ context: getRawBalances.name,
17
+ chain: token.chainName,
18
+ tokenSymbol: token.symbol,
19
+ tokenAddress: token.addressOrDenom,
20
+ }, 'Skipping token: not in configured chains list');
21
+ continue;
22
+ }
23
+ // Ignore tokens that are not collateralized or are otherwise ineligible
24
+ if (!isCollateralizedTokenEligibleForRebalancing(token)) {
25
+ logger.debug({
26
+ context: getRawBalances.name,
27
+ chain: token.chainName,
28
+ tokenSymbol: token.symbol,
29
+ tokenAddress: token.addressOrDenom,
30
+ }, 'Skipping token: not collateralized or ineligible for rebalancing');
31
+ continue;
32
+ }
33
+ if (bridgedSupply === undefined) {
34
+ throw new Error(`bridgedSupply should not be undefined for collateralized token ${token.addressOrDenom}`);
35
+ }
36
+ balances[token.chainName] = bridgedSupply;
37
+ }
38
+ return balances;
39
+ }
40
+ //# sourceMappingURL=balanceUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balanceUtils.js","sourceRoot":"","sources":["../../src/utils/balanceUtils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,2CAA2C,EAAE,MAAM,iBAAiB,CAAC;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAmB,EACnB,KAAmB,EACnB,MAAc;IAEd,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAEjC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;QAE3C,yDAAyD;QACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,KAAK,CACV;gBACE,OAAO,EAAE,cAAc,CAAC,IAAI;gBAC5B,KAAK,EAAE,KAAK,CAAC,SAAS;gBACtB,WAAW,EAAE,KAAK,CAAC,MAAM;gBACzB,YAAY,EAAE,KAAK,CAAC,cAAc;aACnC,EACD,+CAA+C,CAChD,CAAC;YACF,SAAS;QACX,CAAC;QAED,wEAAwE;QACxE,IAAI,CAAC,2CAA2C,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC,KAAK,CACV;gBACE,OAAO,EAAE,cAAc,CAAC,IAAI;gBAC5B,KAAK,EAAE,KAAK,CAAC,SAAS;gBACtB,WAAW,EAAE,KAAK,CAAC,MAAM;gBACzB,YAAY,EAAE,KAAK,CAAC,cAAc;aACnC,EACD,kEAAkE,CACnE,CAAC;YACF,SAAS;QACX,CAAC;QAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,kEAAkE,KAAK,CAAC,cAAc,EAAE,CACzF,CAAC;QACJ,CAAC;QAED,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC;IAC5C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=balanceUtils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balanceUtils.test.d.ts","sourceRoot":"","sources":["../../src/utils/balanceUtils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ import { expect } from 'chai';
2
+ import { pino } from 'pino';
3
+ import sinon from 'sinon';
4
+ import { TokenStandard, } from '@humanode-hyperlane/sdk';
5
+ import { getRawBalances } from './balanceUtils.js';
6
+ const testLogger = pino({ level: 'silent' });
7
+ describe('getRawBalances', () => {
8
+ let chains;
9
+ let token;
10
+ let tokenBridgedSupply;
11
+ let event;
12
+ beforeEach(() => {
13
+ chains = ['mainnet'];
14
+ token = {
15
+ chainName: 'mainnet',
16
+ addressOrDenom: '0xAddress',
17
+ isCollateralized: sinon.stub().returns(true),
18
+ standard: TokenStandard.EvmHypCollateral,
19
+ };
20
+ tokenBridgedSupply = 100n;
21
+ event = {
22
+ tokensInfo: [
23
+ {
24
+ token,
25
+ bridgedSupply: tokenBridgedSupply,
26
+ },
27
+ ],
28
+ confirmedBlockTags: { mainnet: 1000 },
29
+ };
30
+ });
31
+ it('should return the bridged supply for the token (EvmHypCollateral)', () => {
32
+ expect(getRawBalances(chains, event, testLogger)).to.deep.equal({
33
+ mainnet: tokenBridgedSupply,
34
+ });
35
+ });
36
+ it('should return the bridged supply for the token (EvmHypNative)', () => {
37
+ token.standard = TokenStandard.EvmHypNative;
38
+ expect(getRawBalances(chains, event, testLogger)).to.deep.equal({
39
+ mainnet: tokenBridgedSupply,
40
+ });
41
+ });
42
+ it('should ignore non supported token standards', () => {
43
+ token.standard = TokenStandard.EvmHypOwnerCollateral;
44
+ expect(getRawBalances(chains, event, testLogger)).to.deep.equal({});
45
+ });
46
+ it('should ignore tokens that are not in the chains list', () => {
47
+ chains = [];
48
+ expect(getRawBalances(chains, event, testLogger)).to.deep.equal({});
49
+ });
50
+ it('should throw if the bridged supply is undefined', () => {
51
+ delete event.tokensInfo[0].bridgedSupply;
52
+ expect(() => getRawBalances(chains, event, testLogger)).to.throw('bridgedSupply should not be undefined for collateralized token 0xAddress');
53
+ });
54
+ });
55
+ //# sourceMappingURL=balanceUtils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balanceUtils.test.js","sourceRoot":"","sources":["../../src/utils/balanceUtils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAGL,aAAa,GACd,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAE7C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,MAAmB,CAAC;IACxB,IAAI,KAAY,CAAC;IACjB,IAAI,kBAA0B,CAAC;IAC/B,IAAI,KAAmB,CAAC;IAExB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC;QAErB,KAAK,GAAG;YACN,SAAS,EAAE,SAAS;YACpB,cAAc,EAAE,WAAW;YAC3B,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YAC5C,QAAQ,EAAE,aAAa,CAAC,gBAAgB;SACrB,CAAC;QAEtB,kBAAkB,GAAG,IAAI,CAAC;QAE1B,KAAK,GAAG;YACN,UAAU,EAAE;gBACV;oBACE,KAAK;oBACL,aAAa,EAAE,kBAAkB;iBAClC;aACF;YACD,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SACtC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC9D,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC;QAE5C,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC9D,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC;QAErD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,GAAG,EAAE,CAAC;QAEZ,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAEzC,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC9D,0EAA0E,CAC3E,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Logger } from 'pino';
2
+ import { MultiProtocolProvider } from '@humanode-hyperlane/sdk';
3
+ import type { ConfirmedBlockTag } from '../interfaces/IMonitor.js';
4
+ /**
5
+ * Get the confirmed block tag for a chain, accounting for reorg period.
6
+ * Returns a block number that is safe from reorgs, or a named tag like 'finalized'.
7
+ *
8
+ * @param multiProvider - MultiProtocolProvider instance
9
+ * @param chainName - Name of the chain
10
+ * @param logger - Optional logger for warnings
11
+ * @returns Confirmed block tag (number, named tag, or undefined on error)
12
+ */
13
+ export declare function getConfirmedBlockTag(multiProvider: MultiProtocolProvider, chainName: string, logger?: Logger): Promise<ConfirmedBlockTag>;
14
+ //# sourceMappingURL=blockTag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockTag.d.ts","sourceRoot":"","sources":["../../src/utils/blockTag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAInC,OAAO,EAEL,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,qBAAqB,EACpC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CA2C5B"}
@@ -0,0 +1,46 @@
1
+ import { providers } from 'ethers';
2
+ import { ProtocolType } from '@humanode-hyperlane/utils';
3
+ /**
4
+ * Get the confirmed block tag for a chain, accounting for reorg period.
5
+ * Returns a block number that is safe from reorgs, or a named tag like 'finalized'.
6
+ *
7
+ * @param multiProvider - MultiProtocolProvider instance
8
+ * @param chainName - Name of the chain
9
+ * @param logger - Optional logger for warnings
10
+ * @returns Confirmed block tag (number, named tag, or undefined on error)
11
+ */
12
+ export async function getConfirmedBlockTag(multiProvider, chainName, logger) {
13
+ try {
14
+ const metadata = multiProvider.getChainMetadata(chainName);
15
+ // Only EVM chains support block tag queries
16
+ if (metadata.protocol !== ProtocolType.Ethereum) {
17
+ return undefined;
18
+ }
19
+ const reorgPeriod = metadata.blocks?.reorgPeriod ?? 32;
20
+ if (typeof reorgPeriod === 'string') {
21
+ return reorgPeriod;
22
+ }
23
+ const provider = multiProvider.getEthersV5Provider(chainName);
24
+ let latestBlock;
25
+ if (provider instanceof providers.JsonRpcProvider) {
26
+ const latestBlockHex = await provider.send('eth_blockNumber', []);
27
+ if (typeof latestBlockHex !== 'string' ||
28
+ !/^0x[0-9a-fA-F]+$/.test(latestBlockHex)) {
29
+ throw new Error(`Invalid eth_blockNumber response for ${chainName}: ${latestBlockHex}`);
30
+ }
31
+ latestBlock = parseInt(latestBlockHex, 16);
32
+ if (!Number.isFinite(latestBlock)) {
33
+ throw new Error(`Parsed block number is not finite for ${chainName}: ${latestBlockHex}`);
34
+ }
35
+ }
36
+ else {
37
+ latestBlock = await provider.getBlockNumber();
38
+ }
39
+ return Math.max(0, latestBlock - reorgPeriod);
40
+ }
41
+ catch (error) {
42
+ logger?.warn({ chain: chainName, error: error.message }, 'Failed to get confirmed block, using latest');
43
+ return undefined;
44
+ }
45
+ }
46
+ //# sourceMappingURL=blockTag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockTag.js","sourceRoot":"","sources":["../../src/utils/blockTag.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAMnC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAAoC,EACpC,SAAiB,EACjB,MAAe;IAEf,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAE3D,4CAA4C;QAC5C,IAAI,QAAQ,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ,EAAE,CAAC;YAChD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC;QACvD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,WAA0C,CAAC;QACpD,CAAC;QAED,MAAM,QAAQ,GAAG,aAAa,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,WAAmB,CAAC;QACxB,IAAI,QAAQ,YAAY,SAAS,CAAC,eAAe,EAAE,CAAC;YAClD,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;YAClE,IACE,OAAO,cAAc,KAAK,QAAQ;gBAClC,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,EACxC,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,wCAAwC,SAAS,KAAK,cAAc,EAAE,CACvE,CAAC;YACJ,CAAC;YACD,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CACb,yCAAyC,SAAS,KAAK,cAAc,EAAE,CACxE,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,IAAI,CACV,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAG,KAAe,CAAC,OAAO,EAAE,EACrD,6CAA6C,CAC9C,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { ChainMap, ChainName } from '@humanode-hyperlane/sdk';
2
+ import type { Address } from '@humanode-hyperlane/utils';
3
+ import type { ExternalBridgeType } from '../config/types.js';
4
+ import type { StrategyRoute } from '../interfaces/IStrategy.js';
5
+ type BaseBridgeConfig = {
6
+ bridgeMinAcceptedAmount?: string | number;
7
+ };
8
+ export type MovableCollateralBridgeConfig = BaseBridgeConfig & {
9
+ executionType: 'movableCollateral';
10
+ bridge: Address;
11
+ };
12
+ export type InventoryBridgeConfig = BaseBridgeConfig & {
13
+ executionType: 'inventory';
14
+ externalBridge: ExternalBridgeType;
15
+ };
16
+ export type BridgeConfig = MovableCollateralBridgeConfig | InventoryBridgeConfig;
17
+ export declare function isMovableCollateralConfig(config: BridgeConfig): config is MovableCollateralBridgeConfig;
18
+ export declare function isInventoryConfig(config: BridgeConfig): config is InventoryBridgeConfig;
19
+ export type BridgeConfigWithOverride = BridgeConfig & {
20
+ override?: ChainMap<Partial<BridgeConfig>>;
21
+ };
22
+ /**
23
+ * Gets the bridge configuration for a specific chain pair, applying any overrides
24
+ * @param bridges The map of bridge configurations by chain
25
+ * @param fromChain The source chain
26
+ * @param toChain The destination chain
27
+ * @returns The bridge configuration with any overrides applied
28
+ */
29
+ export declare function getBridgeConfig(bridges: ChainMap<BridgeConfigWithOverride>, fromChain: ChainName, toChain: ChainName): BridgeConfig;
30
+ /**
31
+ * Creates a StrategyRoute from a BridgeConfig with exhaustive type checking
32
+ * @param bridgeConfig The bridge configuration
33
+ * @param origin The origin chain
34
+ * @param destination The destination chain
35
+ * @param amount The amount to transfer
36
+ * @returns A StrategyRoute with the appropriate execution type
37
+ */
38
+ export declare function createStrategyRoute(bridgeConfig: BridgeConfig, origin: ChainName, destination: ChainName, amount: bigint): StrategyRoute;
39
+ export {};
40
+ //# sourceMappingURL=bridgeUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridgeUtils.d.ts","sourceRoot":"","sources":["../../src/utils/bridgeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,KAAK,gBAAgB,GAAG;IACtB,uBAAuB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,gBAAgB,GAAG;IAC7D,aAAa,EAAE,mBAAmB,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG;IACrD,aAAa,EAAE,WAAW,CAAC;IAC3B,cAAc,EAAE,kBAAkB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB,6BAA6B,GAC7B,qBAAqB,CAAC;AAE1B,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,GACnB,MAAM,IAAI,6BAA6B,CAEzC;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,GACnB,MAAM,IAAI,qBAAqB,CAEjC;AAED,MAAM,MAAM,wBAAwB,GAAG,YAAY,GAAG;IACpD,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;CAC5C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAC3C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,SAAS,GACjB,YAAY,CASd;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,SAAS,EACtB,MAAM,EAAE,MAAM,GACb,aAAa,CAyBf"}
@@ -0,0 +1,54 @@
1
+ export function isMovableCollateralConfig(config) {
2
+ return config.executionType === 'movableCollateral';
3
+ }
4
+ export function isInventoryConfig(config) {
5
+ return config.executionType === 'inventory';
6
+ }
7
+ /**
8
+ * Gets the bridge configuration for a specific chain pair, applying any overrides
9
+ * @param bridges The map of bridge configurations by chain
10
+ * @param fromChain The source chain
11
+ * @param toChain The destination chain
12
+ * @returns The bridge configuration with any overrides applied
13
+ */
14
+ export function getBridgeConfig(bridges, fromChain, toChain) {
15
+ const fromConfig = bridges[fromChain];
16
+ const routeSpecificOverrides = fromConfig.override?.[toChain];
17
+ // Create a new object with the properties from bridgeConfig, excluding the overrides property
18
+ const { override: _, ...baseConfig } = fromConfig;
19
+ // Return a new object with the base config and any overrides
20
+ return { ...baseConfig, ...routeSpecificOverrides };
21
+ }
22
+ /**
23
+ * Creates a StrategyRoute from a BridgeConfig with exhaustive type checking
24
+ * @param bridgeConfig The bridge configuration
25
+ * @param origin The origin chain
26
+ * @param destination The destination chain
27
+ * @param amount The amount to transfer
28
+ * @returns A StrategyRoute with the appropriate execution type
29
+ */
30
+ export function createStrategyRoute(bridgeConfig, origin, destination, amount) {
31
+ switch (bridgeConfig.executionType) {
32
+ case 'inventory':
33
+ return {
34
+ origin,
35
+ destination,
36
+ amount,
37
+ executionType: 'inventory',
38
+ externalBridge: bridgeConfig.externalBridge,
39
+ };
40
+ case 'movableCollateral':
41
+ return {
42
+ origin,
43
+ destination,
44
+ amount,
45
+ executionType: 'movableCollateral',
46
+ bridge: bridgeConfig.bridge,
47
+ };
48
+ default: {
49
+ const _exhaustive = bridgeConfig;
50
+ throw new Error(`Unknown execution type: ${_exhaustive.executionType}`);
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=bridgeUtils.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bridgeUtils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridgeUtils.test.d.ts","sourceRoot":"","sources":["../../src/utils/bridgeUtils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,163 @@
1
+ import assert from 'node:assert';
2
+ import { expect } from 'chai';
3
+ import { ExecutionType, ExternalBridgeType } from '../config/types.js';
4
+ import { getBridgeConfig, isInventoryConfig, isMovableCollateralConfig, } from './bridgeUtils.js';
5
+ describe('bridgeConfig', () => {
6
+ it('should return the base bridge config when no overrides exist', () => {
7
+ const bridges = {
8
+ chain1: {
9
+ executionType: 'movableCollateral',
10
+ bridge: '0x1234567890123456789012345678901234567890',
11
+ bridgeMinAcceptedAmount: 1000,
12
+ },
13
+ chain2: {
14
+ executionType: 'movableCollateral',
15
+ bridge: '0x0987654321098765432109876543210987654321',
16
+ bridgeMinAcceptedAmount: 2000,
17
+ },
18
+ };
19
+ const result = getBridgeConfig(bridges, 'chain1', 'chain2');
20
+ expect(result).to.deep.equal({
21
+ executionType: 'movableCollateral',
22
+ bridge: '0x1234567890123456789012345678901234567890',
23
+ bridgeMinAcceptedAmount: 1000,
24
+ });
25
+ });
26
+ it('should merge base config with overrides when they exist', () => {
27
+ const bridges = {
28
+ chain1: {
29
+ executionType: 'movableCollateral',
30
+ bridge: '0x1234567890123456789012345678901234567890',
31
+ bridgeMinAcceptedAmount: 1000,
32
+ override: {
33
+ chain2: {
34
+ bridgeMinAcceptedAmount: 5000,
35
+ },
36
+ },
37
+ },
38
+ chain2: {
39
+ executionType: 'movableCollateral',
40
+ bridge: '0x0987654321098765432109876543210987654321',
41
+ bridgeMinAcceptedAmount: 2000,
42
+ },
43
+ };
44
+ const result = getBridgeConfig(bridges, 'chain1', 'chain2');
45
+ expect(result).to.deep.equal({
46
+ executionType: 'movableCollateral',
47
+ bridge: '0x1234567890123456789012345678901234567890',
48
+ bridgeMinAcceptedAmount: 5000,
49
+ });
50
+ });
51
+ it('should handle overrides that change the bridge address', () => {
52
+ const bridges = {
53
+ chain1: {
54
+ executionType: 'movableCollateral',
55
+ bridge: '0x1234567890123456789012345678901234567890',
56
+ bridgeMinAcceptedAmount: 1000,
57
+ override: {
58
+ chain2: {
59
+ bridge: '0xABCDEF0123456789ABCDEF0123456789ABCDEF01',
60
+ },
61
+ },
62
+ },
63
+ chain2: {
64
+ executionType: 'movableCollateral',
65
+ bridge: '0x0987654321098765432109876543210987654321',
66
+ bridgeMinAcceptedAmount: 2000,
67
+ },
68
+ };
69
+ const result = getBridgeConfig(bridges, 'chain1', 'chain2');
70
+ expect(result).to.deep.equal({
71
+ executionType: 'movableCollateral',
72
+ bridge: '0xABCDEF0123456789ABCDEF0123456789ABCDEF01',
73
+ bridgeMinAcceptedAmount: 1000,
74
+ });
75
+ });
76
+ it('should apply override with executionType: inventory', () => {
77
+ const bridges = {
78
+ chain1: {
79
+ executionType: ExecutionType.MovableCollateral,
80
+ bridge: '0x1234567890123456789012345678901234567890',
81
+ bridgeMinAcceptedAmount: 1000,
82
+ override: {
83
+ chain2: {
84
+ executionType: ExecutionType.Inventory,
85
+ externalBridge: ExternalBridgeType.LiFi,
86
+ },
87
+ },
88
+ },
89
+ chain2: {
90
+ executionType: ExecutionType.MovableCollateral,
91
+ bridge: '0x0987654321098765432109876543210987654321',
92
+ bridgeMinAcceptedAmount: 2000,
93
+ },
94
+ };
95
+ const result = getBridgeConfig(bridges, 'chain1', 'chain2');
96
+ expect(result.executionType).to.equal(ExecutionType.Inventory);
97
+ assert(isInventoryConfig(result));
98
+ expect(result.externalBridge).to.equal(ExternalBridgeType.LiFi);
99
+ expect(result.bridgeMinAcceptedAmount).to.equal(1000);
100
+ });
101
+ it('should apply override with executionType: inventory and externalBridge', () => {
102
+ const bridges = {
103
+ chain1: {
104
+ executionType: ExecutionType.MovableCollateral,
105
+ bridge: '0x1234567890123456789012345678901234567890',
106
+ override: {
107
+ chain2: {
108
+ executionType: ExecutionType.Inventory,
109
+ externalBridge: ExternalBridgeType.LiFi,
110
+ },
111
+ },
112
+ },
113
+ chain2: {
114
+ executionType: ExecutionType.MovableCollateral,
115
+ bridge: '0x0987654321098765432109876543210987654321',
116
+ },
117
+ };
118
+ const result = getBridgeConfig(bridges, 'chain1', 'chain2');
119
+ expect(result.executionType).to.equal(ExecutionType.Inventory);
120
+ assert(isInventoryConfig(result));
121
+ expect(result.externalBridge).to.equal(ExternalBridgeType.LiFi);
122
+ });
123
+ it('should allow override to change executionType from movableCollateral to inventory', () => {
124
+ const bridges = {
125
+ chain1: {
126
+ executionType: ExecutionType.MovableCollateral,
127
+ bridge: '0x1234567890123456789012345678901234567890',
128
+ override: {
129
+ chain2: {
130
+ executionType: ExecutionType.Inventory,
131
+ externalBridge: ExternalBridgeType.LiFi,
132
+ },
133
+ },
134
+ },
135
+ chain2: {
136
+ executionType: ExecutionType.MovableCollateral,
137
+ bridge: '0x0987654321098765432109876543210987654321',
138
+ },
139
+ };
140
+ const result = getBridgeConfig(bridges, 'chain1', 'chain2');
141
+ // Override should win: executionType should be inventory, not movableCollateral
142
+ expect(result.executionType).to.equal(ExecutionType.Inventory);
143
+ assert(isInventoryConfig(result));
144
+ expect(result.externalBridge).to.equal(ExternalBridgeType.LiFi);
145
+ });
146
+ it('should preserve base chain executionType when no override exists', () => {
147
+ const bridges = {
148
+ chain1: {
149
+ executionType: ExecutionType.MovableCollateral,
150
+ bridge: '0x1234567890123456789012345678901234567890',
151
+ },
152
+ chain2: {
153
+ executionType: ExecutionType.MovableCollateral,
154
+ bridge: '0x0987654321098765432109876543210987654321',
155
+ },
156
+ };
157
+ const result = getBridgeConfig(bridges, 'chain1', 'chain2');
158
+ expect(result.executionType).to.equal(ExecutionType.MovableCollateral);
159
+ assert(isMovableCollateralConfig(result));
160
+ expect(result.bridge).to.equal('0x1234567890123456789012345678901234567890');
161
+ });
162
+ });
163
+ //# sourceMappingURL=bridgeUtils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridgeUtils.test.js","sourceRoot":"","sources":["../../src/utils/bridgeUtils.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare class WrappedError extends Error {
2
+ constructor(message: string, cause?: Error);
3
+ }
4
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,6 @@
1
+ export class WrappedError extends Error {
2
+ constructor(message, cause) {
3
+ super(message, cause ? { cause } : undefined);
4
+ }
5
+ }
6
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe,EAAE,KAAa;QACxC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;CACF"}
@@ -0,0 +1,65 @@
1
+ import type { Logger } from 'pino';
2
+ import { type ChainName, type InterchainGasQuote, type MultiProvider, type Token, TokenStandard } from '@humanode-hyperlane/sdk';
3
+ /**
4
+ * Fallback gas limit for transferRemote when eth_estimateGas fails.
5
+ * Conservative estimate for cross-chain token transfers.
6
+ */
7
+ export declare const FALLBACK_TRANSFER_REMOTE_GAS_LIMIT = 300000n;
8
+ /**
9
+ * Cost multiplier for minimum viable transfer.
10
+ * A transfer must be worth at least this multiple of its cost to be worthwhile.
11
+ */
12
+ export declare const MIN_VIABLE_COST_MULTIPLIER = 2n;
13
+ /**
14
+ * Transfer cost estimate for native token transfers.
15
+ * Contains all cost components needed for transfer decisions.
16
+ */
17
+ export interface TransferCostEstimate {
18
+ /** IGP cost for the Hyperlane message */
19
+ igpCost: bigint;
20
+ /** Estimated gas cost for the transferRemote transaction (with buffer) */
21
+ gasCost: bigint;
22
+ /** Token fee cost (native denom only) */
23
+ tokenFeeCost: bigint;
24
+ /** Total cost = igpCost + gasCost + tokenFeeCost */
25
+ totalCost: bigint;
26
+ /** Maximum transferable amount after reserving costs (availableInventory - totalCost) */
27
+ maxTransferable: bigint;
28
+ /** Minimum viable transfer (totalCost * MIN_VIABLE_COST_MULTIPLIER) */
29
+ minViableTransfer: bigint;
30
+ /** Gas quote from adapter (for passing to executeTransferRemote) */
31
+ gasQuote?: InterchainGasQuote;
32
+ }
33
+ /**
34
+ * Estimate gas for a transferRemote transaction using eth_estimateGas.
35
+ * Falls back to conservative estimate if estimation fails.
36
+ *
37
+ * @param originChain - Chain where transferRemote will be called
38
+ * @param destinationChain - Chain where the Hyperlane message goes
39
+ * @param amount - Amount to transfer
40
+ * @param multiProvider - MultiProvider for chain access
41
+ * @param warpCoreMultiProvider - MultiProvider from WarpCore for adapter access
42
+ * @param getTokenForChain - Function to get token for a chain
43
+ * @param inventorySigner - Address of the inventory signer
44
+ * @param logger - Logger instance
45
+ * @returns Estimated gas limit for the transaction
46
+ */
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
+ /**
49
+ * Calculate all transfer costs for a transferRemote operation.
50
+ * Consolidates IGP costs, gas costs, and derived values (max transferable, min viable).
51
+ *
52
+ * @param originChain - Chain to transfer from (where transferRemote is called)
53
+ * @param destinationChain - Chain to transfer to (Hyperlane message destination)
54
+ * @param availableInventory - Available token balance on origin chain
55
+ * @param requestedAmount - Requested transfer amount
56
+ * @param multiProvider - MultiProvider for chain access
57
+ * @param warpCoreMultiProvider - MultiProvider from WarpCore for adapter access
58
+ * @param getTokenForChain - Function to get token for a chain
59
+ * @param inventorySigner - Address of the inventory signer
60
+ * @param isNativeTokenStandard - Function to check if token standard is native
61
+ * @param logger - Logger instance
62
+ * @returns Cost estimate with all components and derived values
63
+ */
64
+ export declare function calculateTransferCosts(originChain: ChainName, destinationChain: ChainName, availableInventory: bigint, requestedAmount: bigint, multiProvider: MultiProvider, warpCoreMultiProvider: any, getTokenForChain: (chain: ChainName) => Token | undefined, inventorySigner: string, isNativeTokenStandard: (standard: TokenStandard) => boolean, logger: Logger): Promise<TransferCostEstimate>;
65
+ //# sourceMappingURL=gasEstimation.d.ts.map
@@ -0,0 +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"}