@humanode-hyperlane/rebalancer 0.0.0-stage → 27.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,547 @@
1
+ import { AddressZero } from '@ethersproject/constants';
2
+ import { expect } from 'chai';
3
+ import { pino } from 'pino';
4
+ import { Token, TokenStandard, } from '@humanode-hyperlane/sdk';
5
+ import { RebalancerMinAmountType } from '../config/types.js';
6
+ import { extractBridgeConfigs } from '../test/helpers.js';
7
+ import { MinAmountStrategy } from './MinAmountStrategy.js';
8
+ const testLogger = pino({ level: 'silent' });
9
+ describe('MinAmountStrategy', () => {
10
+ let chain1;
11
+ let chain2;
12
+ let chain3;
13
+ const tokensByChainName = {};
14
+ const tokenArgs = {
15
+ name: 'token',
16
+ decimals: 18,
17
+ symbol: 'TOKEN',
18
+ standard: TokenStandard.ERC20,
19
+ addressOrDenom: '',
20
+ };
21
+ const totalCollateral = BigInt(300e18);
22
+ beforeEach(() => {
23
+ chain1 = 'chain1';
24
+ chain2 = 'chain2';
25
+ chain3 = 'chain3';
26
+ tokensByChainName[chain1] = new Token({ ...tokenArgs, chainName: chain1 });
27
+ tokensByChainName[chain2] = new Token({ ...tokenArgs, chainName: chain2 });
28
+ tokensByChainName[chain3] = new Token({ ...tokenArgs, chainName: chain3 });
29
+ });
30
+ describe('constructor', () => {
31
+ it('should throw an error when less than two chains are configured', () => {
32
+ expect(() => new MinAmountStrategy({
33
+ [chain1]: {
34
+ minAmount: {
35
+ min: '100',
36
+ target: '120',
37
+ type: RebalancerMinAmountType.Absolute,
38
+ },
39
+ bridge: AddressZero,
40
+ bridgeLockTime: 1,
41
+ },
42
+ }, tokensByChainName, totalCollateral, testLogger, {})).to.throw('At least two chains must be configured');
43
+ });
44
+ // eslint-disable-next-line jest/expect-expect -- testing constructor doesn't throw
45
+ it('should create a strategy with minAmount and target using absolute values', () => {
46
+ new MinAmountStrategy({
47
+ [chain1]: {
48
+ minAmount: {
49
+ min: '100',
50
+ target: '120',
51
+ type: RebalancerMinAmountType.Absolute,
52
+ },
53
+ bridge: AddressZero,
54
+ bridgeLockTime: 1,
55
+ },
56
+ [chain2]: {
57
+ minAmount: {
58
+ min: '100',
59
+ target: '120',
60
+ type: RebalancerMinAmountType.Absolute,
61
+ },
62
+ bridge: AddressZero,
63
+ bridgeLockTime: 1,
64
+ },
65
+ }, tokensByChainName, totalCollateral, testLogger, {});
66
+ });
67
+ // eslint-disable-next-line jest/expect-expect -- testing constructor doesn't throw
68
+ it('should create a strategy with minAmount and target using relative values', () => {
69
+ new MinAmountStrategy({
70
+ [chain1]: {
71
+ minAmount: {
72
+ min: 0.3,
73
+ target: 0.4,
74
+ type: RebalancerMinAmountType.Relative,
75
+ },
76
+ bridge: AddressZero,
77
+ bridgeLockTime: 1,
78
+ },
79
+ [chain2]: {
80
+ minAmount: {
81
+ min: 0.4,
82
+ target: 0.5,
83
+ type: RebalancerMinAmountType.Relative,
84
+ },
85
+ bridge: AddressZero,
86
+ bridgeLockTime: 1,
87
+ },
88
+ }, tokensByChainName, totalCollateral, testLogger, {});
89
+ });
90
+ it('should throw an error when minAmount is negative', () => {
91
+ expect(() => new MinAmountStrategy({
92
+ [chain1]: {
93
+ minAmount: {
94
+ min: 100,
95
+ target: '120',
96
+ type: RebalancerMinAmountType.Absolute,
97
+ },
98
+ bridge: AddressZero,
99
+ bridgeLockTime: 1,
100
+ },
101
+ [chain2]: {
102
+ minAmount: {
103
+ min: '-10',
104
+ target: '120',
105
+ type: RebalancerMinAmountType.Absolute,
106
+ },
107
+ bridge: AddressZero,
108
+ bridgeLockTime: 1,
109
+ },
110
+ }, tokensByChainName, totalCollateral, testLogger, {})).to.throw('Minimum amount (-10) cannot be negative for chain chain2');
111
+ });
112
+ it('should throw an error when target is less than min', () => {
113
+ expect(() => new MinAmountStrategy({
114
+ [chain1]: {
115
+ minAmount: {
116
+ min: '100',
117
+ target: '80',
118
+ type: RebalancerMinAmountType.Absolute,
119
+ },
120
+ bridge: AddressZero,
121
+ bridgeLockTime: 1,
122
+ },
123
+ [chain2]: {
124
+ minAmount: {
125
+ min: '100',
126
+ target: '120',
127
+ type: RebalancerMinAmountType.Absolute,
128
+ },
129
+ bridge: AddressZero,
130
+ bridgeLockTime: 1,
131
+ },
132
+ }, tokensByChainName, totalCollateral, testLogger, {})).to.throw('Target (80) must be greater than or equal to min (100) for chain chain1');
133
+ });
134
+ it('should throw an error when relative target is less than relative min', () => {
135
+ expect(() => new MinAmountStrategy({
136
+ [chain1]: {
137
+ minAmount: {
138
+ min: 0.5,
139
+ target: 0.4,
140
+ type: RebalancerMinAmountType.Relative,
141
+ },
142
+ bridge: AddressZero,
143
+ bridgeLockTime: 1,
144
+ },
145
+ [chain2]: {
146
+ minAmount: {
147
+ min: 0.3,
148
+ target: 0.5,
149
+ type: RebalancerMinAmountType.Relative,
150
+ },
151
+ bridge: AddressZero,
152
+ bridgeLockTime: 1,
153
+ },
154
+ }, tokensByChainName, totalCollateral, testLogger, {})).to.throw('Target (0.4) must be greater than or equal to min (0.5) for chain chain1');
155
+ });
156
+ it('should throw an error when raw balances chains length does not match configured chains length', () => {
157
+ expect(() => new MinAmountStrategy({
158
+ [chain1]: {
159
+ minAmount: {
160
+ min: '100',
161
+ target: '120',
162
+ type: RebalancerMinAmountType.Absolute,
163
+ },
164
+ bridge: AddressZero,
165
+ bridgeLockTime: 1,
166
+ },
167
+ [chain2]: {
168
+ minAmount: {
169
+ min: '100',
170
+ target: '120',
171
+ type: RebalancerMinAmountType.Absolute,
172
+ },
173
+ bridge: AddressZero,
174
+ bridgeLockTime: 1,
175
+ },
176
+ }, tokensByChainName, totalCollateral, testLogger, {}).getRebalancingRoutes({
177
+ [chain1]: 100n,
178
+ [chain2]: 200n,
179
+ [chain3]: 300n,
180
+ })).to.throw('Config chains do not match raw balances chains length');
181
+ });
182
+ it('should throw an error when a raw balance is missing', () => {
183
+ expect(() => new MinAmountStrategy({
184
+ [chain1]: {
185
+ minAmount: {
186
+ min: '100',
187
+ target: '120',
188
+ type: RebalancerMinAmountType.Absolute,
189
+ },
190
+ bridge: AddressZero,
191
+ bridgeLockTime: 1,
192
+ },
193
+ [chain2]: {
194
+ minAmount: {
195
+ min: '100',
196
+ target: '120',
197
+ type: RebalancerMinAmountType.Absolute,
198
+ },
199
+ bridge: AddressZero,
200
+ bridgeLockTime: 1,
201
+ },
202
+ }, tokensByChainName, totalCollateral, testLogger, {}).getRebalancingRoutes({
203
+ [chain1]: 100n,
204
+ [chain3]: 300n,
205
+ })).to.throw('Raw balance for chain chain2 not found');
206
+ });
207
+ it('should throw an error when a raw balance is negative', () => {
208
+ expect(() => new MinAmountStrategy({
209
+ [chain1]: {
210
+ minAmount: {
211
+ min: '100',
212
+ target: '120',
213
+ type: RebalancerMinAmountType.Absolute,
214
+ },
215
+ bridge: AddressZero,
216
+ bridgeLockTime: 1,
217
+ },
218
+ [chain2]: {
219
+ minAmount: {
220
+ min: '100',
221
+ target: '120',
222
+ type: RebalancerMinAmountType.Absolute,
223
+ },
224
+ bridge: AddressZero,
225
+ bridgeLockTime: 1,
226
+ },
227
+ }, tokensByChainName, totalCollateral, testLogger, {}).getRebalancingRoutes({
228
+ [chain1]: 100n,
229
+ [chain2]: -2n,
230
+ })).to.throw('Raw balance for chain chain2 is negative');
231
+ });
232
+ });
233
+ describe('getRebalancingRoutes', () => {
234
+ it('should return an empty array when all chains have at least the minimum amount', () => {
235
+ const strategy = new MinAmountStrategy({
236
+ [chain1]: {
237
+ minAmount: {
238
+ min: '100',
239
+ target: '120',
240
+ type: RebalancerMinAmountType.Absolute,
241
+ },
242
+ bridge: AddressZero,
243
+ bridgeLockTime: 1,
244
+ },
245
+ [chain2]: {
246
+ minAmount: {
247
+ min: '100',
248
+ target: '120',
249
+ type: RebalancerMinAmountType.Absolute,
250
+ },
251
+ bridge: AddressZero,
252
+ bridgeLockTime: 1,
253
+ },
254
+ }, tokensByChainName, totalCollateral, testLogger, {});
255
+ const rawBalances = {
256
+ [chain1]: BigInt(120e18),
257
+ [chain2]: BigInt(120e18),
258
+ };
259
+ const routes = strategy.getRebalancingRoutes(rawBalances);
260
+ expect(routes).to.be.empty;
261
+ });
262
+ it('should return a single route when a chain is below minimum amount', () => {
263
+ const config = {
264
+ [chain1]: {
265
+ minAmount: {
266
+ min: '100',
267
+ target: '120',
268
+ type: RebalancerMinAmountType.Absolute,
269
+ },
270
+ bridge: AddressZero,
271
+ bridgeLockTime: 1,
272
+ },
273
+ [chain2]: {
274
+ minAmount: {
275
+ min: '100',
276
+ target: '120',
277
+ type: RebalancerMinAmountType.Absolute,
278
+ },
279
+ bridge: AddressZero,
280
+ bridgeLockTime: 1,
281
+ },
282
+ };
283
+ const bridgeConfigs = extractBridgeConfigs(config);
284
+ const strategy = new MinAmountStrategy(config, tokensByChainName, totalCollateral, testLogger, bridgeConfigs);
285
+ const rawBalances = {
286
+ [chain1]: BigInt(50e18),
287
+ [chain2]: BigInt(200e18),
288
+ };
289
+ const routes = strategy.getRebalancingRoutes(rawBalances);
290
+ expect(routes).to.deep.equal([
291
+ {
292
+ origin: chain2,
293
+ destination: chain1,
294
+ amount: BigInt(70e18),
295
+ bridge: AddressZero,
296
+ executionType: 'movableCollateral',
297
+ },
298
+ ]);
299
+ });
300
+ it('should return multiple routes for multiple chains below minimum amount', () => {
301
+ const config = {
302
+ [chain1]: {
303
+ minAmount: {
304
+ min: '80',
305
+ target: '100',
306
+ type: RebalancerMinAmountType.Absolute,
307
+ },
308
+ bridge: AddressZero,
309
+ bridgeLockTime: 1,
310
+ },
311
+ [chain2]: {
312
+ minAmount: {
313
+ min: '80',
314
+ target: '100',
315
+ type: RebalancerMinAmountType.Absolute,
316
+ },
317
+ bridge: AddressZero,
318
+ bridgeLockTime: 1,
319
+ },
320
+ [chain3]: {
321
+ minAmount: {
322
+ min: '80',
323
+ target: '100',
324
+ type: RebalancerMinAmountType.Absolute,
325
+ },
326
+ bridge: AddressZero,
327
+ bridgeLockTime: 1,
328
+ },
329
+ };
330
+ const bridgeConfigs = extractBridgeConfigs(config);
331
+ const strategy = new MinAmountStrategy(config, tokensByChainName, totalCollateral, testLogger, bridgeConfigs);
332
+ const rawBalances = {
333
+ [chain1]: BigInt(50e18),
334
+ [chain2]: BigInt(75e18),
335
+ [chain3]: BigInt(300e18),
336
+ };
337
+ const routes = strategy.getRebalancingRoutes(rawBalances);
338
+ expect(routes).to.deep.equal([
339
+ {
340
+ origin: chain3,
341
+ destination: chain1,
342
+ amount: BigInt(50e18),
343
+ bridge: AddressZero,
344
+ executionType: 'movableCollateral',
345
+ },
346
+ {
347
+ origin: chain3,
348
+ destination: chain2,
349
+ amount: BigInt(25e18),
350
+ bridge: AddressZero,
351
+ executionType: 'movableCollateral',
352
+ },
353
+ ]);
354
+ });
355
+ it('should throw an error when the sum of `target` is greater than the sum of collaterals', () => {
356
+ expect(() => new MinAmountStrategy({
357
+ [chain1]: {
358
+ minAmount: {
359
+ min: '100',
360
+ target: '220',
361
+ type: RebalancerMinAmountType.Absolute,
362
+ },
363
+ bridge: AddressZero,
364
+ bridgeLockTime: 1,
365
+ },
366
+ [chain2]: {
367
+ minAmount: {
368
+ min: '100',
369
+ target: '120',
370
+ type: RebalancerMinAmountType.Absolute,
371
+ },
372
+ bridge: AddressZero,
373
+ bridgeLockTime: 1,
374
+ },
375
+ }, tokensByChainName, totalCollateral, testLogger, {})).to.throw(`Consider reducing the targets as the sum (340) is greater than sum of collaterals (300)`);
376
+ });
377
+ it('should handle case where there is not enough surplus to meet all minimum requirements by scaling down deficits', () => {
378
+ const config = {
379
+ [chain1]: {
380
+ minAmount: {
381
+ min: '100',
382
+ target: '100',
383
+ type: RebalancerMinAmountType.Absolute,
384
+ },
385
+ bridge: AddressZero,
386
+ bridgeLockTime: 1,
387
+ },
388
+ [chain2]: {
389
+ minAmount: {
390
+ min: '100',
391
+ target: '100',
392
+ type: RebalancerMinAmountType.Absolute,
393
+ },
394
+ bridge: AddressZero,
395
+ bridgeLockTime: 1,
396
+ },
397
+ [chain3]: {
398
+ minAmount: {
399
+ min: '100',
400
+ target: '100',
401
+ type: RebalancerMinAmountType.Absolute,
402
+ },
403
+ bridge: AddressZero,
404
+ bridgeLockTime: 1,
405
+ },
406
+ };
407
+ const bridgeConfigs = extractBridgeConfigs(config);
408
+ const strategy = new MinAmountStrategy(config, tokensByChainName, totalCollateral, testLogger, bridgeConfigs);
409
+ const rawBalances = {
410
+ [chain1]: BigInt(50e18),
411
+ [chain2]: BigInt(50e18),
412
+ [chain3]: BigInt(150e18), // Only 50n of surplus, not enough to bring both chains up to minimum
413
+ };
414
+ const routes = strategy.getRebalancingRoutes(rawBalances);
415
+ // It scales down the deficits to prevent sending all surplus to a single chain
416
+ expect(routes.length).to.equal(2);
417
+ expect(routes[0].origin).to.equal(chain3);
418
+ expect(routes[0].destination).to.equal(chain1);
419
+ expect(routes[0].amount).to.equal(BigInt(25e18));
420
+ expect(routes[1].origin).to.equal(chain3);
421
+ expect(routes[1].destination).to.equal(chain2);
422
+ expect(routes[1].amount).to.equal(BigInt(25e18));
423
+ });
424
+ it('should not produce zero-amount routes when scaling causes amounts to round to zero', () => {
425
+ // This test ensures that when deficit scaling produces zero amounts (due to integer division),
426
+ // these zero-amount routes are NOT included in the output.
427
+ // Bug scenario: totalSurplus=1, totalDeficit=3 -> each deficit of 1 scales to (1*1)/3 = 0
428
+ const config = {
429
+ [chain1]: {
430
+ minAmount: {
431
+ min: '90',
432
+ target: '100',
433
+ type: RebalancerMinAmountType.Absolute,
434
+ },
435
+ bridge: AddressZero,
436
+ bridgeLockTime: 1,
437
+ },
438
+ [chain2]: {
439
+ minAmount: {
440
+ min: '90',
441
+ target: '100',
442
+ type: RebalancerMinAmountType.Absolute,
443
+ },
444
+ bridge: AddressZero,
445
+ bridgeLockTime: 1,
446
+ },
447
+ [chain3]: {
448
+ minAmount: {
449
+ min: '90',
450
+ target: '100',
451
+ type: RebalancerMinAmountType.Absolute,
452
+ },
453
+ bridge: AddressZero,
454
+ bridgeLockTime: 1,
455
+ },
456
+ };
457
+ const bridgeConfigs = extractBridgeConfigs(config);
458
+ const strategy = new MinAmountStrategy(config, tokensByChainName, totalCollateral, testLogger, bridgeConfigs);
459
+ // chain1 and chain2 are at 1 token each (far below min 90)
460
+ // chain3 has 91 tokens (surplus of 1 above min)
461
+ // Deficits: chain1 needs 99 (100-1), chain2 needs 99 (100-1), total = 198
462
+ // Surplus: chain3 has 1 (91-90)
463
+ // Scaling: each deficit of 99 becomes (99 * 1) / 198 = 0 (integer division!)
464
+ const rawBalances = {
465
+ [chain1]: BigInt(1e18),
466
+ [chain2]: BigInt(1e18),
467
+ [chain3]: BigInt(91e18),
468
+ };
469
+ const routes = strategy.getRebalancingRoutes(rawBalances);
470
+ // All routes should have non-zero amounts
471
+ // (Chai's greaterThan doesn't support BigInt, so use direct comparison)
472
+ for (const route of routes) {
473
+ expect(route.amount > 0n, `Route amount should be > 0, got ${route.amount}`).to.be.true;
474
+ }
475
+ // The single token of surplus may produce one route (or none if both scale to 0)
476
+ // Either way, no zero-amount routes should exist
477
+ expect(routes.every((r) => r.amount > 0n), 'All routes must have non-zero amounts').to.be.true;
478
+ });
479
+ it('should have no surplus or deficit when all at min', () => {
480
+ const strategy = new MinAmountStrategy({
481
+ [chain1]: {
482
+ minAmount: {
483
+ min: '100',
484
+ target: '100',
485
+ type: RebalancerMinAmountType.Absolute,
486
+ },
487
+ bridge: AddressZero,
488
+ bridgeLockTime: 1,
489
+ },
490
+ [chain2]: {
491
+ minAmount: {
492
+ min: '100',
493
+ target: '100',
494
+ type: RebalancerMinAmountType.Absolute,
495
+ },
496
+ bridge: AddressZero,
497
+ bridgeLockTime: 1,
498
+ },
499
+ }, tokensByChainName, totalCollateral, testLogger, {});
500
+ const rawBalances = {
501
+ [chain1]: BigInt(100e18),
502
+ [chain2]: BigInt(100e18),
503
+ };
504
+ const routes = strategy.getRebalancingRoutes(rawBalances);
505
+ expect(routes).to.be.empty;
506
+ });
507
+ it('should consider the target amount with relative configuration', () => {
508
+ const config = {
509
+ [chain1]: {
510
+ minAmount: {
511
+ min: 0.25,
512
+ target: 0.3,
513
+ type: RebalancerMinAmountType.Relative,
514
+ },
515
+ bridge: AddressZero,
516
+ bridgeLockTime: 1,
517
+ },
518
+ [chain2]: {
519
+ minAmount: {
520
+ min: 0.25,
521
+ target: 0.3,
522
+ type: RebalancerMinAmountType.Relative,
523
+ },
524
+ bridge: AddressZero,
525
+ bridgeLockTime: 1,
526
+ },
527
+ };
528
+ const bridgeConfigs = extractBridgeConfigs(config);
529
+ const strategy = new MinAmountStrategy(config, tokensByChainName, totalCollateral, testLogger, bridgeConfigs);
530
+ const rawBalances = {
531
+ [chain1]: 200n,
532
+ [chain2]: 800n,
533
+ };
534
+ const routes = strategy.getRebalancingRoutes(rawBalances);
535
+ expect(routes).to.deep.equal([
536
+ {
537
+ origin: chain2,
538
+ destination: chain1,
539
+ amount: 100n,
540
+ bridge: AddressZero,
541
+ executionType: 'movableCollateral',
542
+ },
543
+ ]);
544
+ });
545
+ });
546
+ });
547
+ //# sourceMappingURL=MinAmountStrategy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MinAmountStrategy.test.js","sourceRoot":"","sources":["../../src/strategy/MinAmountStrategy.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAGL,KAAK,EACL,aAAa,GACd,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAE7C,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,MAAiB,CAAC;IACtB,IAAI,MAAiB,CAAC;IACtB,IAAI,MAAiB,CAAC;IACtB,MAAM,iBAAiB,GAAoB,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,aAAa,CAAC,KAAK;QAC7B,cAAc,EAAE,EAAE;KACnB,CAAC;IACF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAEvC,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,QAAQ,CAAC;QAClB,MAAM,GAAG,QAAQ,CAAC;QAClB,MAAM,GAAG,QAAQ,CAAC;QAClB,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,CACJ,GAAG,EAAE,CACH,IAAI,iBAAiB,CACnB;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CACJ,CAAC,EAAE,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,mFAAmF;QACnF,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;YAClF,IAAI,iBAAiB,CACnB;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,mFAAmF;QACnF,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;YAClF,IAAI,iBAAiB,CACnB;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,GAAG;wBACR,MAAM,EAAE,GAAG;wBACX,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,GAAG;wBACR,MAAM,EAAE,GAAG;wBACX,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CACJ,GAAG,EAAE,CACH,IAAI,iBAAiB,CACnB;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,GAAG;wBACR,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CACJ,CAAC,EAAE,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,CACJ,GAAG,EAAE,CACH,IAAI,iBAAiB,CACnB;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,IAAI;wBACZ,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CACJ,CAAC,EAAE,CAAC,KAAK,CACR,yEAAyE,CAC1E,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;YAC9E,MAAM,CACJ,GAAG,EAAE,CACH,IAAI,iBAAiB,CACnB;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,GAAG;wBACR,MAAM,EAAE,GAAG;wBACX,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,GAAG;wBACR,MAAM,EAAE,GAAG;wBACX,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CACJ,CAAC,EAAE,CAAC,KAAK,CACR,0EAA0E,CAC3E,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;YACvG,MAAM,CAAC,GAAG,EAAE,CACV,IAAI,iBAAiB,CACnB;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CAAC,oBAAoB,CAAC;gBACrB,CAAC,MAAM,CAAC,EAAE,IAAI;gBACd,CAAC,MAAM,CAAC,EAAE,IAAI;gBACd,CAAC,MAAM,CAAC,EAAE,IAAI;aACf,CAAC,CACH,CAAC,EAAE,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,CAAC,GAAG,EAAE,CACV,IAAI,iBAAiB,CACnB;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CAAC,oBAAoB,CAAC;gBACrB,CAAC,MAAM,CAAC,EAAE,IAAI;gBACd,CAAC,MAAM,CAAC,EAAE,IAAI;aACA,CAAC,CAClB,CAAC,EAAE,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,CAAC,GAAG,EAAE,CACV,IAAI,iBAAiB,CACnB;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CAAC,oBAAoB,CAAC;gBACrB,CAAC,MAAM,CAAC,EAAE,IAAI;gBACd,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;aACd,CAAC,CACH,CAAC,EAAE,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;YACvF,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CACpC;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CAAC;YAEF,MAAM,WAAW,GAAgB;gBAC/B,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;gBACxB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;aACzB,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;YAC3E,MAAM,MAAM,GAAG;gBACb,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,CAAC;YACF,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CACpC,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,CACd,CAAC;YAEF,MAAM,WAAW,GAAG;gBAClB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;gBACvB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;aACzB,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3B;oBACE,MAAM,EAAE,MAAM;oBACd,WAAW,EAAE,MAAM;oBACnB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;oBACrB,MAAM,EAAE,WAAW;oBACnB,aAAa,EAAE,mBAAmB;iBACnC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;YAChF,MAAM,MAAM,GAAG;gBACb,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,IAAI;wBACT,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,IAAI;wBACT,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,IAAI;wBACT,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,CAAC;YACF,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CACpC,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,CACd,CAAC;YAEF,MAAM,WAAW,GAAG;gBAClB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;gBACvB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;gBACvB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;aACzB,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3B;oBACE,MAAM,EAAE,MAAM;oBACd,WAAW,EAAE,MAAM;oBACnB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;oBACrB,MAAM,EAAE,WAAW;oBACnB,aAAa,EAAE,mBAAmB;iBACnC;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,WAAW,EAAE,MAAM;oBACnB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;oBACrB,MAAM,EAAE,WAAW;oBACnB,aAAa,EAAE,mBAAmB;iBACnC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE;YAC/F,MAAM,CACJ,GAAG,EAAE,CACH,IAAI,iBAAiB,CACnB;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CACJ,CAAC,EAAE,CAAC,KAAK,CACR,yFAAyF,CAC1F,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gHAAgH,EAAE,GAAG,EAAE;YACxH,MAAM,MAAM,GAAG;gBACb,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,CAAC;YACF,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CACpC,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,CACd,CAAC;YAEF,MAAM,WAAW,GAAG;gBAClB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;gBACvB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;gBACvB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,qEAAqE;aAChG,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAE1D,+EAA+E;YAC/E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;YAC5F,+FAA+F;YAC/F,2DAA2D;YAC3D,0FAA0F;YAC1F,MAAM,MAAM,GAAG;gBACb,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,IAAI;wBACT,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,IAAI;wBACT,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,IAAI;wBACT,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,CAAC;YACF,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CACpC,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,CACd,CAAC;YAEF,2DAA2D;YAC3D,gDAAgD;YAChD,0EAA0E;YAC1E,gCAAgC;YAChC,6EAA6E;YAC7E,MAAM,WAAW,GAAG;gBAClB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;gBACtB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;gBACtB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;aACxB,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAE1D,0CAA0C;YAC1C,wEAAwE;YACxE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,CACJ,KAAK,CAAC,MAAM,GAAG,EAAE,EACjB,mCAAmC,KAAK,CAAC,MAAM,EAAE,CAClD,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACf,CAAC;YAED,iFAAiF;YACjF,iDAAiD;YACjD,MAAM,CACJ,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,EAClC,uCAAuC,CACxC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CACpC;gBACE,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,KAAK;wBACV,MAAM,EAAE,KAAK;wBACb,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,EACD,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,EAAE,CACH,CAAC;YAEF,MAAM,WAAW,GAAG;gBAClB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;gBACxB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;aACzB,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,MAAM,GAAG;gBACb,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,IAAI;wBACT,MAAM,EAAE,GAAG;wBACX,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;gBACD,CAAC,MAAM,CAAC,EAAE;oBACR,SAAS,EAAE;wBACT,GAAG,EAAE,IAAI;wBACT,MAAM,EAAE,GAAG;wBACX,IAAI,EAAE,uBAAuB,CAAC,QAAQ;qBACvC;oBACD,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,CAAC;iBAClB;aACF,CAAC;YACF,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CACpC,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,CACd,CAAC;YAEF,MAAM,WAAW,GAAgB;gBAC/B,CAAC,MAAM,CAAC,EAAE,IAAI;gBACd,CAAC,MAAM,CAAC,EAAE,IAAI;aACf,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC3B;oBACE,MAAM,EAAE,MAAM;oBACd,WAAW,EAAE,MAAM;oBACnB,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,WAAW;oBACnB,aAAa,EAAE,mBAAmB;iBACnC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type Logger } from 'pino';
2
+ import { type ChainMap, type Token } from '@humanode-hyperlane/sdk';
3
+ import { type StrategyConfig } from '../config/types.js';
4
+ import { type IStrategy } from '../interfaces/IStrategy.js';
5
+ import { type Metrics } from '../metrics/Metrics.js';
6
+ export declare class StrategyFactory {
7
+ /**
8
+ * Creates a strategy from an array of strategy configs.
9
+ * - Single strategy (array with 1 element): Creates that strategy directly
10
+ * - Multiple strategies (array with 2+ elements): Creates CompositeStrategy
11
+ *
12
+ * @param strategyConfigs Array of strategy configurations (always array format)
13
+ * @param tokensByChainName A map of chain->token to ease the lookup of token by chain
14
+ * @param initialTotalCollateral The initial total collateral of the rebalancer
15
+ * @param logger The logger to use for the strategy
16
+ * @param metrics The metrics to use for the strategy
17
+ * @param minAmountsByChain Optional minimum amounts per chain for filtering routes
18
+ * @returns A concrete strategy implementation
19
+ */
20
+ static createStrategy(strategyConfigs: StrategyConfig[], tokensByChainName: ChainMap<Token>, initialTotalCollateral: bigint, logger: Logger, metrics?: Metrics, minAmountsByChain?: ChainMap<bigint>): IStrategy;
21
+ /**
22
+ * Create a single strategy from config.
23
+ */
24
+ private static createSingleStrategy;
25
+ private static extractBridgeConfigs;
26
+ }
27
+ //# sourceMappingURL=StrategyFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StrategyFactory.d.ts","sourceRoot":"","sources":["../../src/strategy/StrategyFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAYrD,qBAAa,eAAe;IAC1B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,cAAc,CACnB,eAAe,EAAE,cAAc,EAAE,EACjC,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,EAClC,sBAAsB,EAAE,MAAM,EAC9B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,EACjB,iBAAiB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GACnC,SAAS;IA+BZ;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA6CnC,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAkCpC"}