@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.
- package/LICENSE.md +193 -0
- package/README.md +297 -2
- package/dist/bridges/LiFiBridge.d.ts +93 -0
- package/dist/bridges/LiFiBridge.d.ts.map +1 -0
- package/dist/bridges/LiFiBridge.js +527 -0
- package/dist/bridges/LiFiBridge.js.map +1 -0
- package/dist/bridges/LiFiBridge.test.d.ts +2 -0
- package/dist/bridges/LiFiBridge.test.d.ts.map +1 -0
- package/dist/bridges/LiFiBridge.test.js +504 -0
- package/dist/bridges/LiFiBridge.test.js.map +1 -0
- package/dist/config/RebalancerConfig.d.ts +20 -0
- package/dist/config/RebalancerConfig.d.ts.map +1 -0
- package/dist/config/RebalancerConfig.js +35 -0
- package/dist/config/RebalancerConfig.js.map +1 -0
- package/dist/config/RebalancerConfig.test.d.ts +2 -0
- package/dist/config/RebalancerConfig.test.d.ts.map +1 -0
- package/dist/config/RebalancerConfig.test.js +798 -0
- package/dist/config/RebalancerConfig.test.js.map +1 -0
- package/dist/config/types.d.ts +3008 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +451 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/InventoryRebalancer.d.ts +201 -0
- package/dist/core/InventoryRebalancer.d.ts.map +1 -0
- package/dist/core/InventoryRebalancer.js +994 -0
- package/dist/core/InventoryRebalancer.js.map +1 -0
- package/dist/core/InventoryRebalancer.test.d.ts +2 -0
- package/dist/core/InventoryRebalancer.test.d.ts.map +1 -0
- package/dist/core/InventoryRebalancer.test.js +1511 -0
- package/dist/core/InventoryRebalancer.test.js.map +1 -0
- package/dist/core/Rebalancer.d.ts +37 -0
- package/dist/core/Rebalancer.d.ts.map +1 -0
- package/dist/core/Rebalancer.js +433 -0
- package/dist/core/Rebalancer.js.map +1 -0
- package/dist/core/Rebalancer.test.d.ts +2 -0
- package/dist/core/Rebalancer.test.d.ts.map +1 -0
- package/dist/core/Rebalancer.test.js +424 -0
- package/dist/core/Rebalancer.test.js.map +1 -0
- package/dist/core/RebalancerOrchestrator.d.ts +56 -0
- package/dist/core/RebalancerOrchestrator.d.ts.map +1 -0
- package/dist/core/RebalancerOrchestrator.js +154 -0
- package/dist/core/RebalancerOrchestrator.js.map +1 -0
- package/dist/core/RebalancerOrchestrator.test.d.ts +2 -0
- package/dist/core/RebalancerOrchestrator.test.d.ts.map +1 -0
- package/dist/core/RebalancerOrchestrator.test.js +721 -0
- package/dist/core/RebalancerOrchestrator.test.js.map +1 -0
- package/dist/core/RebalancerService.d.ts +127 -0
- package/dist/core/RebalancerService.d.ts.map +1 -0
- package/dist/core/RebalancerService.js +270 -0
- package/dist/core/RebalancerService.js.map +1 -0
- package/dist/core/RebalancerService.test.d.ts +2 -0
- package/dist/core/RebalancerService.test.d.ts.map +1 -0
- package/dist/core/RebalancerService.test.js +777 -0
- package/dist/core/RebalancerService.test.js.map +1 -0
- package/dist/e2e/collateral-deficit.e2e-test.d.ts +2 -0
- package/dist/e2e/collateral-deficit.e2e-test.d.ts.map +1 -0
- package/dist/e2e/collateral-deficit.e2e-test.js +227 -0
- package/dist/e2e/collateral-deficit.e2e-test.js.map +1 -0
- package/dist/e2e/composite.e2e-test.d.ts +2 -0
- package/dist/e2e/composite.e2e-test.d.ts.map +1 -0
- package/dist/e2e/composite.e2e-test.js +666 -0
- package/dist/e2e/composite.e2e-test.js.map +1 -0
- package/dist/e2e/fixtures/routes.d.ts +89 -0
- package/dist/e2e/fixtures/routes.d.ts.map +1 -0
- package/dist/e2e/fixtures/routes.js +420 -0
- package/dist/e2e/fixtures/routes.js.map +1 -0
- package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts +38 -0
- package/dist/e2e/harness/BaseLocalDeploymentManager.d.ts.map +1 -0
- package/dist/e2e/harness/BaseLocalDeploymentManager.js +144 -0
- package/dist/e2e/harness/BaseLocalDeploymentManager.js.map +1 -0
- package/dist/e2e/harness/BridgeSetup.d.ts +11 -0
- package/dist/e2e/harness/BridgeSetup.d.ts.map +1 -0
- package/dist/e2e/harness/BridgeSetup.js +50 -0
- package/dist/e2e/harness/BridgeSetup.js.map +1 -0
- package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts +13 -0
- package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.d.ts.map +1 -0
- package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js +105 -0
- package/dist/e2e/harness/Erc20InventoryLocalDeploymentManager.js.map +1 -0
- package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts +11 -0
- package/dist/e2e/harness/Erc20LocalDeploymentManager.d.ts.map +1 -0
- package/dist/e2e/harness/Erc20LocalDeploymentManager.js +105 -0
- package/dist/e2e/harness/Erc20LocalDeploymentManager.js.map +1 -0
- package/dist/e2e/harness/ForkIndexer.d.ts +23 -0
- package/dist/e2e/harness/ForkIndexer.d.ts.map +1 -0
- package/dist/e2e/harness/ForkIndexer.js +127 -0
- package/dist/e2e/harness/ForkIndexer.js.map +1 -0
- package/dist/e2e/harness/ForkIndexer.test.d.ts +2 -0
- package/dist/e2e/harness/ForkIndexer.test.d.ts.map +1 -0
- package/dist/e2e/harness/ForkIndexer.test.js +257 -0
- package/dist/e2e/harness/ForkIndexer.test.js.map +1 -0
- package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts +21 -0
- package/dist/e2e/harness/MixedLocalDeploymentManager.d.ts.map +1 -0
- package/dist/e2e/harness/MixedLocalDeploymentManager.js +115 -0
- package/dist/e2e/harness/MixedLocalDeploymentManager.js.map +1 -0
- package/dist/e2e/harness/MockExplorerClient.d.ts +23 -0
- package/dist/e2e/harness/MockExplorerClient.d.ts.map +1 -0
- package/dist/e2e/harness/MockExplorerClient.js +57 -0
- package/dist/e2e/harness/MockExplorerClient.js.map +1 -0
- package/dist/e2e/harness/MockExternalBridge.d.ts +32 -0
- package/dist/e2e/harness/MockExternalBridge.d.ts.map +1 -0
- package/dist/e2e/harness/MockExternalBridge.js +247 -0
- package/dist/e2e/harness/MockExternalBridge.js.map +1 -0
- package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts +13 -0
- package/dist/e2e/harness/NativeLocalDeploymentManager.d.ts.map +1 -0
- package/dist/e2e/harness/NativeLocalDeploymentManager.js +91 -0
- package/dist/e2e/harness/NativeLocalDeploymentManager.js.map +1 -0
- package/dist/e2e/harness/SnapshotHelper.d.ts +13 -0
- package/dist/e2e/harness/SnapshotHelper.d.ts.map +1 -0
- package/dist/e2e/harness/SnapshotHelper.js +36 -0
- package/dist/e2e/harness/SnapshotHelper.js.map +1 -0
- package/dist/e2e/harness/TestHelpers.d.ts +25 -0
- package/dist/e2e/harness/TestHelpers.d.ts.map +1 -0
- package/dist/e2e/harness/TestHelpers.js +103 -0
- package/dist/e2e/harness/TestHelpers.js.map +1 -0
- package/dist/e2e/harness/TestRebalancer.d.ts +85 -0
- package/dist/e2e/harness/TestRebalancer.d.ts.map +1 -0
- package/dist/e2e/harness/TestRebalancer.js +427 -0
- package/dist/e2e/harness/TestRebalancer.js.map +1 -0
- package/dist/e2e/harness/TransferHelper.d.ts +34 -0
- package/dist/e2e/harness/TransferHelper.d.ts.map +1 -0
- package/dist/e2e/harness/TransferHelper.js +93 -0
- package/dist/e2e/harness/TransferHelper.js.map +1 -0
- package/dist/e2e/inventory-erc20-minAmount.e2e-test.d.ts +2 -0
- package/dist/e2e/inventory-erc20-minAmount.e2e-test.d.ts.map +1 -0
- package/dist/e2e/inventory-erc20-minAmount.e2e-test.js +411 -0
- package/dist/e2e/inventory-erc20-minAmount.e2e-test.js.map +1 -0
- package/dist/e2e/inventory-erc20-weighted.e2e-test.d.ts +2 -0
- package/dist/e2e/inventory-erc20-weighted.e2e-test.d.ts.map +1 -0
- package/dist/e2e/inventory-erc20-weighted.e2e-test.js +408 -0
- package/dist/e2e/inventory-erc20-weighted.e2e-test.js.map +1 -0
- package/dist/e2e/inventory-minAmount.e2e-test.d.ts +2 -0
- package/dist/e2e/inventory-minAmount.e2e-test.d.ts.map +1 -0
- package/dist/e2e/inventory-minAmount.e2e-test.js +411 -0
- package/dist/e2e/inventory-minAmount.e2e-test.js.map +1 -0
- package/dist/e2e/inventory-weighted.e2e-test.d.ts +2 -0
- package/dist/e2e/inventory-weighted.e2e-test.d.ts.map +1 -0
- package/dist/e2e/inventory-weighted.e2e-test.js +409 -0
- package/dist/e2e/inventory-weighted.e2e-test.js.map +1 -0
- package/dist/e2e/minAmount.e2e-test.d.ts +2 -0
- package/dist/e2e/minAmount.e2e-test.d.ts.map +1 -0
- package/dist/e2e/minAmount.e2e-test.js +203 -0
- package/dist/e2e/minAmount.e2e-test.js.map +1 -0
- package/dist/e2e/mixed-weighted.e2e-test.d.ts +2 -0
- package/dist/e2e/mixed-weighted.e2e-test.d.ts.map +1 -0
- package/dist/e2e/mixed-weighted.e2e-test.js +189 -0
- package/dist/e2e/mixed-weighted.e2e-test.js.map +1 -0
- package/dist/e2e/weighted.e2e-test.d.ts +2 -0
- package/dist/e2e/weighted.e2e-test.d.ts.map +1 -0
- package/dist/e2e/weighted.e2e-test.js +198 -0
- package/dist/e2e/weighted.e2e-test.js.map +1 -0
- package/dist/factories/RebalancerContextFactory.d.ts +89 -0
- package/dist/factories/RebalancerContextFactory.d.ts.map +1 -0
- package/dist/factories/RebalancerContextFactory.js +420 -0
- package/dist/factories/RebalancerContextFactory.js.map +1 -0
- package/dist/factories/RebalancerContextFactory.test.d.ts +2 -0
- package/dist/factories/RebalancerContextFactory.test.d.ts.map +1 -0
- package/dist/factories/RebalancerContextFactory.test.js +270 -0
- package/dist/factories/RebalancerContextFactory.test.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/IExternalBridge.d.ts +103 -0
- package/dist/interfaces/IExternalBridge.d.ts.map +1 -0
- package/dist/interfaces/IExternalBridge.js +2 -0
- package/dist/interfaces/IExternalBridge.js.map +1 -0
- package/dist/interfaces/IMetrics.d.ts +5 -0
- package/dist/interfaces/IMetrics.d.ts.map +1 -0
- package/dist/interfaces/IMetrics.js +2 -0
- package/dist/interfaces/IMetrics.js.map +1 -0
- package/dist/interfaces/IMonitor.d.ts +50 -0
- package/dist/interfaces/IMonitor.d.ts.map +1 -0
- package/dist/interfaces/IMonitor.js +14 -0
- package/dist/interfaces/IMonitor.js.map +1 -0
- package/dist/interfaces/IRebalancer.d.ts +31 -0
- package/dist/interfaces/IRebalancer.d.ts.map +1 -0
- package/dist/interfaces/IRebalancer.js +2 -0
- package/dist/interfaces/IRebalancer.js.map +1 -0
- package/dist/interfaces/IStrategy.d.ts +60 -0
- package/dist/interfaces/IStrategy.d.ts.map +1 -0
- package/dist/interfaces/IStrategy.js +13 -0
- package/dist/interfaces/IStrategy.js.map +1 -0
- package/dist/metrics/Metrics.d.ts +25 -0
- package/dist/metrics/Metrics.d.ts.map +1 -0
- package/dist/metrics/Metrics.js +164 -0
- package/dist/metrics/Metrics.js.map +1 -0
- package/dist/metrics/PriceGetter.d.ts +10 -0
- package/dist/metrics/PriceGetter.d.ts.map +1 -0
- package/dist/metrics/PriceGetter.js +41 -0
- package/dist/metrics/PriceGetter.js.map +1 -0
- package/dist/metrics/scripts/metrics.d.ts +28 -0
- package/dist/metrics/scripts/metrics.d.ts.map +1 -0
- package/dist/metrics/scripts/metrics.js +61 -0
- package/dist/metrics/scripts/metrics.js.map +1 -0
- package/dist/monitor/Monitor.d.ts +40 -0
- package/dist/monitor/Monitor.d.ts.map +1 -0
- package/dist/monitor/Monitor.js +211 -0
- package/dist/monitor/Monitor.js.map +1 -0
- package/dist/service.d.ts +3 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +205 -0
- package/dist/service.js.map +1 -0
- package/dist/strategy/BaseStrategy.d.ts +86 -0
- package/dist/strategy/BaseStrategy.d.ts.map +1 -0
- package/dist/strategy/BaseStrategy.js +342 -0
- package/dist/strategy/BaseStrategy.js.map +1 -0
- package/dist/strategy/CollateralDeficitStrategy.d.ts +65 -0
- package/dist/strategy/CollateralDeficitStrategy.d.ts.map +1 -0
- package/dist/strategy/CollateralDeficitStrategy.js +253 -0
- package/dist/strategy/CollateralDeficitStrategy.js.map +1 -0
- package/dist/strategy/CollateralDeficitStrategy.test.d.ts +2 -0
- package/dist/strategy/CollateralDeficitStrategy.test.d.ts.map +1 -0
- package/dist/strategy/CollateralDeficitStrategy.test.js +497 -0
- package/dist/strategy/CollateralDeficitStrategy.test.js.map +1 -0
- package/dist/strategy/CompositeStrategy.d.ts +18 -0
- package/dist/strategy/CompositeStrategy.d.ts.map +1 -0
- package/dist/strategy/CompositeStrategy.js +63 -0
- package/dist/strategy/CompositeStrategy.js.map +1 -0
- package/dist/strategy/CompositeStrategy.test.d.ts +2 -0
- package/dist/strategy/CompositeStrategy.test.d.ts.map +1 -0
- package/dist/strategy/CompositeStrategy.test.js +278 -0
- package/dist/strategy/CompositeStrategy.test.js.map +1 -0
- package/dist/strategy/MinAmountStrategy.d.ts +35 -0
- package/dist/strategy/MinAmountStrategy.d.ts.map +1 -0
- package/dist/strategy/MinAmountStrategy.js +112 -0
- package/dist/strategy/MinAmountStrategy.js.map +1 -0
- package/dist/strategy/MinAmountStrategy.test.d.ts +2 -0
- package/dist/strategy/MinAmountStrategy.test.d.ts.map +1 -0
- package/dist/strategy/MinAmountStrategy.test.js +547 -0
- package/dist/strategy/MinAmountStrategy.test.js.map +1 -0
- package/dist/strategy/StrategyFactory.d.ts +27 -0
- package/dist/strategy/StrategyFactory.d.ts.map +1 -0
- package/dist/strategy/StrategyFactory.js +79 -0
- package/dist/strategy/StrategyFactory.js.map +1 -0
- package/dist/strategy/StrategyFactory.test.d.ts +2 -0
- package/dist/strategy/StrategyFactory.test.d.ts.map +1 -0
- package/dist/strategy/StrategyFactory.test.js +81 -0
- package/dist/strategy/StrategyFactory.test.js.map +1 -0
- package/dist/strategy/WeightedStrategy.d.ts +32 -0
- package/dist/strategy/WeightedStrategy.d.ts.map +1 -0
- package/dist/strategy/WeightedStrategy.js +73 -0
- package/dist/strategy/WeightedStrategy.js.map +1 -0
- package/dist/strategy/WeightedStrategy.test.d.ts +2 -0
- package/dist/strategy/WeightedStrategy.test.d.ts.map +1 -0
- package/dist/strategy/WeightedStrategy.test.js +403 -0
- package/dist/strategy/WeightedStrategy.test.js.map +1 -0
- package/dist/strategy/index.d.ts +7 -0
- package/dist/strategy/index.d.ts.map +1 -0
- package/dist/strategy/index.js +7 -0
- package/dist/strategy/index.js.map +1 -0
- package/dist/test/helpers.d.ts +99 -0
- package/dist/test/helpers.d.ts.map +1 -0
- package/dist/test/helpers.js +311 -0
- package/dist/test/helpers.js.map +1 -0
- package/dist/test/lifiMocks.d.ts +52 -0
- package/dist/test/lifiMocks.d.ts.map +1 -0
- package/dist/test/lifiMocks.js +160 -0
- package/dist/test/lifiMocks.js.map +1 -0
- package/dist/tracking/ActionTracker.d.ts +90 -0
- package/dist/tracking/ActionTracker.d.ts.map +1 -0
- package/dist/tracking/ActionTracker.js +678 -0
- package/dist/tracking/ActionTracker.js.map +1 -0
- package/dist/tracking/ActionTracker.test.d.ts +2 -0
- package/dist/tracking/ActionTracker.test.d.ts.map +1 -0
- package/dist/tracking/ActionTracker.test.js +1351 -0
- package/dist/tracking/ActionTracker.test.js.map +1 -0
- package/dist/tracking/IActionTracker.d.ts +157 -0
- package/dist/tracking/IActionTracker.d.ts.map +1 -0
- package/dist/tracking/IActionTracker.js +2 -0
- package/dist/tracking/IActionTracker.js.map +1 -0
- package/dist/tracking/InflightContextAdapter.d.ts +18 -0
- package/dist/tracking/InflightContextAdapter.d.ts.map +1 -0
- package/dist/tracking/InflightContextAdapter.js +52 -0
- package/dist/tracking/InflightContextAdapter.js.map +1 -0
- package/dist/tracking/InflightContextAdapter.test.d.ts +2 -0
- package/dist/tracking/InflightContextAdapter.test.d.ts.map +1 -0
- package/dist/tracking/InflightContextAdapter.test.js +175 -0
- package/dist/tracking/InflightContextAdapter.test.js.map +1 -0
- package/dist/tracking/store/IStore.d.ts +41 -0
- package/dist/tracking/store/IStore.d.ts.map +1 -0
- package/dist/tracking/store/IStore.js +2 -0
- package/dist/tracking/store/IStore.js.map +1 -0
- package/dist/tracking/store/InMemoryStore.d.ts +21 -0
- package/dist/tracking/store/InMemoryStore.d.ts.map +1 -0
- package/dist/tracking/store/InMemoryStore.js +40 -0
- package/dist/tracking/store/InMemoryStore.js.map +1 -0
- package/dist/tracking/store/InMemoryStore.test.d.ts +2 -0
- package/dist/tracking/store/InMemoryStore.test.d.ts.map +1 -0
- package/dist/tracking/store/InMemoryStore.test.js +290 -0
- package/dist/tracking/store/InMemoryStore.test.js.map +1 -0
- package/dist/tracking/store/index.d.ts +3 -0
- package/dist/tracking/store/index.d.ts.map +1 -0
- package/dist/tracking/store/index.js +2 -0
- package/dist/tracking/store/index.js.map +1 -0
- package/dist/tracking/types.d.ts +77 -0
- package/dist/tracking/types.d.ts.map +1 -0
- package/dist/tracking/types.js +2 -0
- package/dist/tracking/types.js.map +1 -0
- package/dist/utils/ExplorerClient.d.ts +68 -0
- package/dist/utils/ExplorerClient.d.ts.map +1 -0
- package/dist/utils/ExplorerClient.js +324 -0
- package/dist/utils/ExplorerClient.js.map +1 -0
- package/dist/utils/ExplorerClient.test.d.ts +2 -0
- package/dist/utils/ExplorerClient.test.d.ts.map +1 -0
- package/dist/utils/ExplorerClient.test.js +261 -0
- package/dist/utils/ExplorerClient.test.js.map +1 -0
- package/dist/utils/balanceUtils.d.ts +12 -0
- package/dist/utils/balanceUtils.d.ts.map +1 -0
- package/dist/utils/balanceUtils.js +40 -0
- package/dist/utils/balanceUtils.js.map +1 -0
- package/dist/utils/balanceUtils.test.d.ts +2 -0
- package/dist/utils/balanceUtils.test.d.ts.map +1 -0
- package/dist/utils/balanceUtils.test.js +55 -0
- package/dist/utils/balanceUtils.test.js.map +1 -0
- package/dist/utils/blockTag.d.ts +14 -0
- package/dist/utils/blockTag.d.ts.map +1 -0
- package/dist/utils/blockTag.js +46 -0
- package/dist/utils/blockTag.js.map +1 -0
- package/dist/utils/bridgeUtils.d.ts +40 -0
- package/dist/utils/bridgeUtils.d.ts.map +1 -0
- package/dist/utils/bridgeUtils.js +54 -0
- package/dist/utils/bridgeUtils.js.map +1 -0
- package/dist/utils/bridgeUtils.test.d.ts +2 -0
- package/dist/utils/bridgeUtils.test.d.ts.map +1 -0
- package/dist/utils/bridgeUtils.test.js +163 -0
- package/dist/utils/bridgeUtils.test.js.map +1 -0
- package/dist/utils/errors.d.ts +4 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +6 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gasEstimation.d.ts +65 -0
- package/dist/utils/gasEstimation.d.ts.map +1 -0
- package/dist/utils/gasEstimation.js +206 -0
- package/dist/utils/gasEstimation.js.map +1 -0
- package/dist/utils/solanaKeyParser.d.ts +10 -0
- package/dist/utils/solanaKeyParser.d.ts.map +1 -0
- package/dist/utils/solanaKeyParser.js +87 -0
- package/dist/utils/solanaKeyParser.js.map +1 -0
- package/dist/utils/solanaKeyParser.test.d.ts +2 -0
- package/dist/utils/solanaKeyParser.test.d.ts.map +1 -0
- package/dist/utils/solanaKeyParser.test.js +71 -0
- package/dist/utils/solanaKeyParser.test.js.map +1 -0
- package/dist/utils/tokenUtils.d.ts +38 -0
- package/dist/utils/tokenUtils.d.ts.map +1 -0
- package/dist/utils/tokenUtils.js +65 -0
- package/dist/utils/tokenUtils.js.map +1 -0
- package/dist/utils/transactionUtils.d.ts +22 -0
- package/dist/utils/transactionUtils.d.ts.map +1 -0
- package/dist/utils/transactionUtils.js +26 -0
- package/dist/utils/transactionUtils.js.map +1 -0
- package/package.json +87 -3
- package/src/bridges/LiFiBridge.test.ts +615 -0
- package/src/bridges/LiFiBridge.ts +731 -0
- package/src/config/RebalancerConfig.test.ts +921 -0
- package/src/config/RebalancerConfig.ts +63 -0
- package/src/config/types.ts +613 -0
- package/src/core/InventoryRebalancer.test.ts +1858 -0
- package/src/core/InventoryRebalancer.ts +1455 -0
- package/src/core/Rebalancer.test.ts +686 -0
- package/src/core/Rebalancer.ts +686 -0
- package/src/core/RebalancerOrchestrator.test.ts +871 -0
- package/src/core/RebalancerOrchestrator.ts +273 -0
- package/src/core/RebalancerService.test.ts +1094 -0
- package/src/core/RebalancerService.ts +412 -0
- package/src/e2e/E2E_TEST_CONVENTIONS.md +222 -0
- package/src/e2e/collateral-deficit.e2e-test.ts +403 -0
- package/src/e2e/composite.e2e-test.ts +1008 -0
- package/src/e2e/fixtures/routes.ts +532 -0
- package/src/e2e/harness/BaseLocalDeploymentManager.ts +246 -0
- package/src/e2e/harness/BridgeSetup.ts +95 -0
- package/src/e2e/harness/Erc20InventoryLocalDeploymentManager.ts +183 -0
- package/src/e2e/harness/Erc20LocalDeploymentManager.ts +190 -0
- package/src/e2e/harness/ForkIndexer.test.ts +448 -0
- package/src/e2e/harness/ForkIndexer.ts +183 -0
- package/src/e2e/harness/MixedLocalDeploymentManager.ts +196 -0
- package/src/e2e/harness/MockExplorerClient.ts +94 -0
- package/src/e2e/harness/MockExternalBridge.ts +411 -0
- package/src/e2e/harness/NativeLocalDeploymentManager.ts +138 -0
- package/src/e2e/harness/SnapshotHelper.ts +56 -0
- package/src/e2e/harness/TestHelpers.ts +169 -0
- package/src/e2e/harness/TestRebalancer.ts +758 -0
- package/src/e2e/harness/TransferHelper.ts +188 -0
- package/src/e2e/inventory-erc20-minAmount.e2e-test.ts +735 -0
- package/src/e2e/inventory-erc20-weighted.e2e-test.ts +733 -0
- package/src/e2e/inventory-minAmount.e2e-test.ts +734 -0
- package/src/e2e/inventory-weighted.e2e-test.ts +734 -0
- package/src/e2e/minAmount.e2e-test.ts +313 -0
- package/src/e2e/mixed-weighted.e2e-test.ts +267 -0
- package/src/e2e/weighted.e2e-test.ts +304 -0
- package/src/factories/RebalancerContextFactory.test.ts +394 -0
- package/src/factories/RebalancerContextFactory.ts +771 -0
- package/src/index.ts +125 -0
- package/src/interfaces/IExternalBridge.ts +117 -0
- package/src/interfaces/IMetrics.ts +5 -0
- package/src/interfaces/IMonitor.ts +71 -0
- package/src/interfaces/IRebalancer.ts +57 -0
- package/src/interfaces/IStrategy.ts +81 -0
- package/src/metrics/Metrics.ts +335 -0
- package/src/metrics/PriceGetter.ts +74 -0
- package/src/metrics/scripts/metrics.ts +139 -0
- package/src/monitor/Monitor.ts +324 -0
- package/src/service.ts +285 -0
- package/src/strategy/BaseStrategy.ts +553 -0
- package/src/strategy/CollateralDeficitStrategy.test.ts +728 -0
- package/src/strategy/CollateralDeficitStrategy.ts +421 -0
- package/src/strategy/CompositeStrategy.test.ts +418 -0
- package/src/strategy/CompositeStrategy.ts +102 -0
- package/src/strategy/MinAmountStrategy.test.ts +732 -0
- package/src/strategy/MinAmountStrategy.ts +200 -0
- package/src/strategy/StrategyFactory.test.ts +108 -0
- package/src/strategy/StrategyFactory.ts +157 -0
- package/src/strategy/WeightedStrategy.test.ts +529 -0
- package/src/strategy/WeightedStrategy.ts +126 -0
- package/src/strategy/index.ts +6 -0
- package/src/test/helpers.ts +477 -0
- package/src/test/lifiMocks.ts +211 -0
- package/src/tracking/ActionTracker.test.ts +1625 -0
- package/src/tracking/ActionTracker.ts +1019 -0
- package/src/tracking/IActionTracker.ts +213 -0
- package/src/tracking/InflightContextAdapter.test.ts +206 -0
- package/src/tracking/InflightContextAdapter.ts +75 -0
- package/src/tracking/store/IStore.ts +48 -0
- package/src/tracking/store/InMemoryStore.test.ts +338 -0
- package/src/tracking/store/InMemoryStore.ts +59 -0
- package/src/tracking/store/index.ts +2 -0
- package/src/tracking/types.ts +118 -0
- package/src/utils/ExplorerClient.test.ts +386 -0
- package/src/utils/ExplorerClient.ts +439 -0
- package/src/utils/balanceUtils.test.ts +79 -0
- package/src/utils/balanceUtils.ts +65 -0
- package/src/utils/blockTag.ts +68 -0
- package/src/utils/bridgeUtils.test.ts +193 -0
- package/src/utils/bridgeUtils.ts +101 -0
- package/src/utils/errors.ts +5 -0
- package/src/utils/gasEstimation.ts +306 -0
- package/src/utils/solanaKeyParser.test.ts +103 -0
- package/src/utils/solanaKeyParser.ts +117 -0
- package/src/utils/tokenUtils.ts +89 -0
- package/src/utils/transactionUtils.ts +41 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @humanode-hyperlane/rebalancer
|
|
3
|
+
*
|
|
4
|
+
* Hyperlane Warp Route Collateral Rebalancer
|
|
5
|
+
*
|
|
6
|
+
* This package provides functionality for automatically rebalancing collateral
|
|
7
|
+
* across Hyperlane warp routes to maintain optimal token distribution.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// Core service
|
|
11
|
+
export { RebalancerService } from './core/RebalancerService.js';
|
|
12
|
+
export type {
|
|
13
|
+
RebalancerServiceConfig,
|
|
14
|
+
ManualRebalanceRequest,
|
|
15
|
+
} from './core/RebalancerService.js';
|
|
16
|
+
|
|
17
|
+
// Core rebalancing logic
|
|
18
|
+
export { Rebalancer } from './core/Rebalancer.js';
|
|
19
|
+
|
|
20
|
+
// Configuration
|
|
21
|
+
export { RebalancerConfig } from './config/RebalancerConfig.js';
|
|
22
|
+
export {
|
|
23
|
+
DEFAULT_INTENT_TTL_MS,
|
|
24
|
+
DEFAULT_INTENT_TTL_S,
|
|
25
|
+
getStrategyChainConfig,
|
|
26
|
+
getStrategyChainNames,
|
|
27
|
+
RebalancerBaseChainConfigSchema,
|
|
28
|
+
RebalancerConfigSchema,
|
|
29
|
+
RebalancerMinAmountConfigSchema,
|
|
30
|
+
RebalancerMinAmountType,
|
|
31
|
+
RebalancerStrategyOptions,
|
|
32
|
+
RebalancerStrategySchema,
|
|
33
|
+
RebalancerWeightedChainConfigSchema,
|
|
34
|
+
StrategyConfigSchema,
|
|
35
|
+
} from './config/types.js';
|
|
36
|
+
export type {
|
|
37
|
+
MinAmountStrategyConfig,
|
|
38
|
+
RebalancerConfig as RebalancerConfigType,
|
|
39
|
+
RebalancerConfigFileInput,
|
|
40
|
+
RebalancerMinAmountChainConfig,
|
|
41
|
+
RebalancerWeightedChainConfig,
|
|
42
|
+
StrategyConfig,
|
|
43
|
+
WeightedStrategyConfig,
|
|
44
|
+
} from './config/types.js';
|
|
45
|
+
|
|
46
|
+
// Strategy
|
|
47
|
+
export { BaseStrategy } from './strategy/BaseStrategy.js';
|
|
48
|
+
export { CompositeStrategy } from './strategy/CompositeStrategy.js';
|
|
49
|
+
export { WeightedStrategy } from './strategy/WeightedStrategy.js';
|
|
50
|
+
export { MinAmountStrategy } from './strategy/MinAmountStrategy.js';
|
|
51
|
+
export { StrategyFactory } from './strategy/StrategyFactory.js';
|
|
52
|
+
|
|
53
|
+
// Monitor
|
|
54
|
+
export { Monitor } from './monitor/Monitor.js';
|
|
55
|
+
|
|
56
|
+
// Metrics
|
|
57
|
+
export { Metrics } from './metrics/Metrics.js';
|
|
58
|
+
export { PriceGetter } from './metrics/PriceGetter.js';
|
|
59
|
+
|
|
60
|
+
// Interfaces
|
|
61
|
+
export type {
|
|
62
|
+
ExecutionResult,
|
|
63
|
+
IInventoryRebalancer,
|
|
64
|
+
IMovableCollateralRebalancer,
|
|
65
|
+
IRebalancer,
|
|
66
|
+
InventoryExecutionResult,
|
|
67
|
+
MovableCollateralExecutionResult,
|
|
68
|
+
PreparedTransaction,
|
|
69
|
+
RebalancerType,
|
|
70
|
+
} from './interfaces/IRebalancer.js';
|
|
71
|
+
export type {
|
|
72
|
+
IStrategy,
|
|
73
|
+
InflightContext,
|
|
74
|
+
InventoryRoute,
|
|
75
|
+
MovableCollateralRoute,
|
|
76
|
+
RawBalances,
|
|
77
|
+
Route,
|
|
78
|
+
StrategyRoute,
|
|
79
|
+
} from './interfaces/IStrategy.js';
|
|
80
|
+
export type {
|
|
81
|
+
ConfirmedBlockTag,
|
|
82
|
+
ConfirmedBlockTags,
|
|
83
|
+
IMonitor,
|
|
84
|
+
} from './interfaces/IMonitor.js';
|
|
85
|
+
export {
|
|
86
|
+
MonitorEventType,
|
|
87
|
+
MonitorEvent,
|
|
88
|
+
MonitorPollingError,
|
|
89
|
+
MonitorStartError,
|
|
90
|
+
} from './interfaces/IMonitor.js';
|
|
91
|
+
export type { IMetrics } from './interfaces/IMetrics.js';
|
|
92
|
+
|
|
93
|
+
// Utils
|
|
94
|
+
export {
|
|
95
|
+
getBridgeConfig,
|
|
96
|
+
isMovableCollateralConfig,
|
|
97
|
+
isInventoryConfig,
|
|
98
|
+
} from './utils/bridgeUtils.js';
|
|
99
|
+
export type {
|
|
100
|
+
BridgeConfigWithOverride,
|
|
101
|
+
BridgeConfig,
|
|
102
|
+
MovableCollateralBridgeConfig,
|
|
103
|
+
InventoryBridgeConfig,
|
|
104
|
+
} from './utils/bridgeUtils.js';
|
|
105
|
+
export { getRawBalances } from './utils/balanceUtils.js';
|
|
106
|
+
export { isCollateralizedTokenEligibleForRebalancing } from './utils/tokenUtils.js';
|
|
107
|
+
export { ExplorerClient } from './utils/ExplorerClient.js';
|
|
108
|
+
|
|
109
|
+
// Tracking
|
|
110
|
+
export { InflightContextAdapter } from './tracking/InflightContextAdapter.js';
|
|
111
|
+
export type {
|
|
112
|
+
IActionTracker,
|
|
113
|
+
CreateRebalanceIntentParams,
|
|
114
|
+
CreateRebalanceActionParams,
|
|
115
|
+
} from './tracking/IActionTracker.js';
|
|
116
|
+
export type {
|
|
117
|
+
Transfer,
|
|
118
|
+
RebalanceIntent,
|
|
119
|
+
RebalanceAction,
|
|
120
|
+
ActionType,
|
|
121
|
+
PartialInventoryIntent,
|
|
122
|
+
} from './tracking/types.js';
|
|
123
|
+
|
|
124
|
+
// Factory
|
|
125
|
+
export { RebalancerContextFactory } from './factories/RebalancerContextFactory.js';
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { Logger } from 'pino';
|
|
2
|
+
|
|
3
|
+
import type { ChainMap, ChainMetadata } from '@humanode-hyperlane/sdk';
|
|
4
|
+
import { ProtocolType } from '@humanode-hyperlane/utils';
|
|
5
|
+
|
|
6
|
+
import type { ExternalBridgeType } from '../config/types.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Configuration for an external bridge.
|
|
10
|
+
*/
|
|
11
|
+
export interface ExternalBridgeConfig {
|
|
12
|
+
integrator: string; // Required: dApp/company name for bridge integration
|
|
13
|
+
apiKey?: string; // Optional: API key for higher rate limits
|
|
14
|
+
defaultSlippage?: number; // Default slippage tolerance (e.g., 0.005 = 0.5%)
|
|
15
|
+
chainMetadata?: ChainMap<ChainMetadata>; // Optional: chain metadata for resolving RPC URLs by chainId
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Parameters for requesting a bridge quote.
|
|
20
|
+
* Either fromAmount OR toAmount must be provided (mutually exclusive).
|
|
21
|
+
* - fromAmount: "I'm sending X, what do I get?" (standard quote)
|
|
22
|
+
* - toAmount: "I want X on destination, how much do I send?" (reverse quote)
|
|
23
|
+
*/
|
|
24
|
+
export interface BridgeQuoteParams {
|
|
25
|
+
fromChain: number; // Source chain ID
|
|
26
|
+
toChain: number; // Destination chain ID
|
|
27
|
+
fromToken: string; // Source token address
|
|
28
|
+
toToken: string; // Destination token address
|
|
29
|
+
fromAmount?: bigint; // Amount to send (in token decimals) - use for "I'm sending X"
|
|
30
|
+
toAmount?: bigint; // Amount to receive (in token decimals) - use for "I want X"
|
|
31
|
+
fromAddress: string; // Sender address
|
|
32
|
+
toAddress?: string; // Recipient address (defaults to fromAddress)
|
|
33
|
+
slippage?: number; // Slippage tolerance (overrides default)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Quote response from a bridge.
|
|
38
|
+
*/
|
|
39
|
+
export interface BridgeQuote<R = unknown> {
|
|
40
|
+
id: string; // Unique quote identifier
|
|
41
|
+
tool: string; // Bridge/DEX tool used (e.g., 'stargate', 'across')
|
|
42
|
+
fromAmount: bigint; // Amount being sent (input required)
|
|
43
|
+
toAmount: bigint; // Expected amount to receive
|
|
44
|
+
toAmountMin: bigint; // Minimum amount to receive (after slippage)
|
|
45
|
+
executionDuration: number; // Estimated execution time in seconds
|
|
46
|
+
gasCosts: bigint; // Sum of gas costs for the bridge operation
|
|
47
|
+
feeCosts: bigint; // Sum of non-included fee costs (protocol fees, etc.)
|
|
48
|
+
route: R; // Bridge-specific route data for execution
|
|
49
|
+
requestParams: BridgeQuoteParams; // Original request parameters
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Result of executing a bridge transfer.
|
|
54
|
+
*/
|
|
55
|
+
export interface BridgeTransferResult {
|
|
56
|
+
txHash: string; // Origin chain transaction hash
|
|
57
|
+
fromChain: number; // Source chain ID
|
|
58
|
+
toChain: number; // Destination chain ID
|
|
59
|
+
transferId?: string; // Bridge-specific transfer identifier
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Status of a bridge transfer.
|
|
64
|
+
*/
|
|
65
|
+
export type BridgeTransferStatus =
|
|
66
|
+
| { status: 'pending'; substatus?: string }
|
|
67
|
+
| { status: 'complete'; receivingTxHash: string; receivedAmount: bigint }
|
|
68
|
+
| { status: 'failed'; error?: string }
|
|
69
|
+
| { status: 'not_found' };
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Interface for external bridge implementations (e.g., LiFi, Socket).
|
|
73
|
+
*
|
|
74
|
+
* External bridges are used for inventory rebalancing when chains don't support
|
|
75
|
+
* MovableCollateralRouter. The flow is:
|
|
76
|
+
* 1. quote() - Get a quote for bridging tokens
|
|
77
|
+
* 2. execute() - Execute the bridge transfer
|
|
78
|
+
* 3. getStatus() - Poll for transfer completion
|
|
79
|
+
*/
|
|
80
|
+
export interface IExternalBridge {
|
|
81
|
+
readonly externalBridgeId: string;
|
|
82
|
+
readonly logger: Logger;
|
|
83
|
+
|
|
84
|
+
getNativeTokenAddress?(): string;
|
|
85
|
+
|
|
86
|
+
quote(params: BridgeQuoteParams): Promise<BridgeQuote>;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Execute a bridge transfer using a previously obtained quote.
|
|
90
|
+
* @param quote - Quote obtained from quote()
|
|
91
|
+
* @param privateKeys - Private keys keyed by ProtocolType (e.g., { [ProtocolType.Ethereum]: '0x...' })
|
|
92
|
+
*/
|
|
93
|
+
execute(
|
|
94
|
+
quote: BridgeQuote,
|
|
95
|
+
privateKeys: Partial<Record<ProtocolType, string>>,
|
|
96
|
+
): Promise<BridgeTransferResult>;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Get the status of a bridge transfer.
|
|
100
|
+
* @param txHash - Origin chain transaction hash
|
|
101
|
+
* @param fromChain - Source chain ID
|
|
102
|
+
* @param toChain - Destination chain ID
|
|
103
|
+
*/
|
|
104
|
+
getStatus(
|
|
105
|
+
txHash: string,
|
|
106
|
+
fromChain: number,
|
|
107
|
+
toChain: number,
|
|
108
|
+
): Promise<BridgeTransferStatus>;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Registry mapping external bridge types to their implementations.
|
|
113
|
+
*/
|
|
114
|
+
export type ExternalBridgeRegistry = Record<
|
|
115
|
+
ExternalBridgeType,
|
|
116
|
+
IExternalBridge
|
|
117
|
+
>;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type ChainMap,
|
|
3
|
+
EthJsonRpcBlockParameterTag,
|
|
4
|
+
type Token,
|
|
5
|
+
} from '@humanode-hyperlane/sdk';
|
|
6
|
+
|
|
7
|
+
import { WrappedError } from '../utils/errors.js';
|
|
8
|
+
|
|
9
|
+
export class MonitorStartError extends WrappedError {
|
|
10
|
+
name = 'MonitorStartError';
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class MonitorPollingError extends WrappedError {
|
|
14
|
+
name = 'MonitorPollingError';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export enum MonitorEventType {
|
|
18
|
+
TokenInfo = 'TokenInfo',
|
|
19
|
+
Error = 'Error',
|
|
20
|
+
Start = 'Start',
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type ConfirmedBlockTag =
|
|
24
|
+
| number
|
|
25
|
+
| EthJsonRpcBlockParameterTag
|
|
26
|
+
| undefined;
|
|
27
|
+
|
|
28
|
+
export type ConfirmedBlockTags = ChainMap<ConfirmedBlockTag>;
|
|
29
|
+
|
|
30
|
+
export type MonitorEvent = {
|
|
31
|
+
tokensInfo: {
|
|
32
|
+
token: Token;
|
|
33
|
+
bridgedSupply?: bigint;
|
|
34
|
+
}[];
|
|
35
|
+
confirmedBlockTags: ConfirmedBlockTags;
|
|
36
|
+
inventoryBalances?: ChainMap<bigint>;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Interface for a monitoring service that tracks token information across different chains.
|
|
41
|
+
*/
|
|
42
|
+
export interface IMonitor {
|
|
43
|
+
/**
|
|
44
|
+
* Allows subscribers to listen to hyperlane's tokens info.
|
|
45
|
+
* Handler can be async - Monitor will await it before starting next cycle.
|
|
46
|
+
*/
|
|
47
|
+
on(
|
|
48
|
+
eventName: MonitorEventType.TokenInfo,
|
|
49
|
+
fn: (event: MonitorEvent) => void | Promise<void>,
|
|
50
|
+
): this;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Allows subscribers to listen to error events.
|
|
54
|
+
*/
|
|
55
|
+
on(eventName: MonitorEventType.Error, fn: (event: Error) => void): this;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Allows subscribers to listen to start events.
|
|
59
|
+
*/
|
|
60
|
+
on(eventName: MonitorEventType.Start, fn: () => void): this;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Starts the monitoring long-running process.
|
|
64
|
+
*/
|
|
65
|
+
start(): Promise<void>;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Stops the monitoring long-running process.
|
|
69
|
+
*/
|
|
70
|
+
stop(): void;
|
|
71
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type EvmMovableCollateralAdapter,
|
|
3
|
+
type TokenAmount,
|
|
4
|
+
} from '@humanode-hyperlane/sdk';
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
type InventoryRoute,
|
|
8
|
+
type MovableCollateralRoute,
|
|
9
|
+
type Route,
|
|
10
|
+
} from './IStrategy.js';
|
|
11
|
+
|
|
12
|
+
export type RebalancerType = 'movableCollateral' | 'inventory';
|
|
13
|
+
|
|
14
|
+
export interface ExecutionResult<R extends Route = Route> {
|
|
15
|
+
route: R;
|
|
16
|
+
success: boolean;
|
|
17
|
+
error?: string;
|
|
18
|
+
// messageId?: string;
|
|
19
|
+
txHash?: string;
|
|
20
|
+
// amountSent?: bigint;
|
|
21
|
+
reason?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface MovableCollateralExecutionResult extends ExecutionResult<MovableCollateralRoute> {
|
|
25
|
+
messageId: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface InventoryExecutionResult extends ExecutionResult<InventoryRoute> {
|
|
29
|
+
messageId?: string;
|
|
30
|
+
amountSent?: bigint;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface IRebalancer<
|
|
34
|
+
R extends Route = Route,
|
|
35
|
+
E extends ExecutionResult<R> = ExecutionResult<R>,
|
|
36
|
+
> {
|
|
37
|
+
readonly rebalancerType: RebalancerType;
|
|
38
|
+
rebalance(routes: R[]): Promise<E[]>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type IMovableCollateralRebalancer = IRebalancer<
|
|
42
|
+
MovableCollateralRoute,
|
|
43
|
+
MovableCollateralExecutionResult
|
|
44
|
+
>;
|
|
45
|
+
|
|
46
|
+
export type IInventoryRebalancer = IRebalancer<
|
|
47
|
+
InventoryRoute,
|
|
48
|
+
InventoryExecutionResult
|
|
49
|
+
>;
|
|
50
|
+
|
|
51
|
+
export type PreparedTransaction = {
|
|
52
|
+
populatedTx: Awaited<
|
|
53
|
+
ReturnType<EvmMovableCollateralAdapter['populateRebalanceTx']>
|
|
54
|
+
>;
|
|
55
|
+
route: MovableCollateralRoute & { intentId: string };
|
|
56
|
+
originTokenAmount: TokenAmount;
|
|
57
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { type ChainMap, type ChainName } from '@humanode-hyperlane/sdk';
|
|
2
|
+
import type { Address } from '@humanode-hyperlane/utils';
|
|
3
|
+
|
|
4
|
+
import { ExternalBridgeType } from '../config/types.js';
|
|
5
|
+
import { ExecutionMethod } from '../tracking/types.js';
|
|
6
|
+
|
|
7
|
+
export type RawBalances = ChainMap<bigint>;
|
|
8
|
+
|
|
9
|
+
export interface Route {
|
|
10
|
+
origin: ChainName;
|
|
11
|
+
destination: ChainName;
|
|
12
|
+
amount: bigint;
|
|
13
|
+
/** Execution method used for this rebalance */
|
|
14
|
+
executionMethod?: ExecutionMethod;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface RouteWithContext extends Route {
|
|
18
|
+
/** For inventory intents: sum of complete inventory_deposit actions (message delivered) */
|
|
19
|
+
deliveredAmount?: bigint;
|
|
20
|
+
/** For inventory intents: sum of in_progress inventory_deposit actions (tx confirmed, message pending) */
|
|
21
|
+
awaitingDeliveryAmount?: bigint;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Route using movable collateral execution (on-chain rebalance via bridge)
|
|
26
|
+
*/
|
|
27
|
+
export interface MovableCollateralRoute extends Route {
|
|
28
|
+
executionType: 'movableCollateral';
|
|
29
|
+
bridge: Address;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Route using inventory execution (external bridge + transferRemote)
|
|
34
|
+
*/
|
|
35
|
+
export interface InventoryRoute extends Route {
|
|
36
|
+
executionType: 'inventory';
|
|
37
|
+
externalBridge: ExternalBridgeType;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Discriminated union of route types by executionType
|
|
42
|
+
*/
|
|
43
|
+
export type StrategyRoute = MovableCollateralRoute | InventoryRoute;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Type guard to check if a route is a MovableCollateralRoute
|
|
47
|
+
*/
|
|
48
|
+
export function isMovableCollateralRoute(
|
|
49
|
+
route: StrategyRoute,
|
|
50
|
+
): route is MovableCollateralRoute {
|
|
51
|
+
return route.executionType === 'movableCollateral';
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Type guard to check if a route is an InventoryRoute
|
|
56
|
+
*/
|
|
57
|
+
export function isInventoryRoute(
|
|
58
|
+
route: StrategyRoute,
|
|
59
|
+
): route is InventoryRoute {
|
|
60
|
+
return route.executionType === 'inventory';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export type InflightContext = {
|
|
64
|
+
/**
|
|
65
|
+
* In-flight rebalances from ActionTracker.
|
|
66
|
+
* Uses Route[] because recovered intents (from Explorer startup recovery)
|
|
67
|
+
* don't have bridge information. Some routes may have bridge at runtime.
|
|
68
|
+
*/
|
|
69
|
+
pendingRebalances: RouteWithContext[];
|
|
70
|
+
pendingTransfers: RouteWithContext[];
|
|
71
|
+
/** Routes from earlier strategies - always have bridge */
|
|
72
|
+
proposedRebalances?: StrategyRoute[];
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export interface IStrategy {
|
|
76
|
+
readonly name: string;
|
|
77
|
+
getRebalancingRoutes(
|
|
78
|
+
rawBalances: RawBalances,
|
|
79
|
+
inflightContext?: InflightContext,
|
|
80
|
+
): StrategyRoute[];
|
|
81
|
+
}
|