@humanode-hyperlane/rebalancer 0.0.0-stage → 27.2.2-humanode.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { BigNumber, ethers, providers } from 'ethers';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
HyperlaneCore,
|
|
6
|
+
MultiProvider,
|
|
7
|
+
snapshot,
|
|
8
|
+
} from '@humanode-hyperlane/sdk';
|
|
9
|
+
import { toWei } from '@humanode-hyperlane/utils';
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
RebalancerStrategyOptions,
|
|
13
|
+
type StrategyConfig,
|
|
14
|
+
} from '../config/types.js';
|
|
15
|
+
|
|
16
|
+
import {
|
|
17
|
+
ANVIL_TEST_PRIVATE_KEY,
|
|
18
|
+
ANVIL_USER_PRIVATE_KEY,
|
|
19
|
+
DOMAIN_IDS,
|
|
20
|
+
type DeployedAddresses,
|
|
21
|
+
TEST_CHAINS,
|
|
22
|
+
} from './fixtures/routes.js';
|
|
23
|
+
import { getAllCollateralBalances } from './harness/BridgeSetup.js';
|
|
24
|
+
import { type LocalDeploymentContext } from './harness/BaseLocalDeploymentManager.js';
|
|
25
|
+
import { Erc20LocalDeploymentManager } from './harness/Erc20LocalDeploymentManager.js';
|
|
26
|
+
import { resetSnapshotsAndRefreshProviders } from './harness/SnapshotHelper.js';
|
|
27
|
+
import { getFirstMonitorEvent } from './harness/TestHelpers.js';
|
|
28
|
+
import { TestRebalancer } from './harness/TestRebalancer.js';
|
|
29
|
+
import {
|
|
30
|
+
executeWarpTransfer,
|
|
31
|
+
tryRelayMessage,
|
|
32
|
+
} from './harness/TransferHelper.js';
|
|
33
|
+
|
|
34
|
+
const USDC_DECIMALS = 6;
|
|
35
|
+
|
|
36
|
+
describe('Collateral Deficit E2E', function () {
|
|
37
|
+
this.timeout(300_000);
|
|
38
|
+
|
|
39
|
+
let deploymentManager: Erc20LocalDeploymentManager;
|
|
40
|
+
let multiProvider: MultiProvider;
|
|
41
|
+
let localProviders: Map<string, providers.JsonRpcProvider>;
|
|
42
|
+
let userAddress: string;
|
|
43
|
+
let snapshotIds: Map<string, string>;
|
|
44
|
+
let hyperlaneCore: HyperlaneCore;
|
|
45
|
+
let deployedAddresses: DeployedAddresses;
|
|
46
|
+
let collateralDeficitStrategyConfig: StrategyConfig[];
|
|
47
|
+
|
|
48
|
+
before(async function () {
|
|
49
|
+
const wallet = new ethers.Wallet(ANVIL_USER_PRIVATE_KEY);
|
|
50
|
+
userAddress = wallet.address;
|
|
51
|
+
|
|
52
|
+
deploymentManager = new Erc20LocalDeploymentManager();
|
|
53
|
+
const ctx: LocalDeploymentContext<DeployedAddresses> =
|
|
54
|
+
await deploymentManager.start();
|
|
55
|
+
multiProvider = ctx.multiProvider;
|
|
56
|
+
localProviders = ctx.providers;
|
|
57
|
+
deployedAddresses = ctx.deployedAddresses;
|
|
58
|
+
|
|
59
|
+
const coreAddresses: Record<string, Record<string, string>> = {};
|
|
60
|
+
for (const chain of TEST_CHAINS) {
|
|
61
|
+
coreAddresses[chain] = {
|
|
62
|
+
mailbox: deployedAddresses.chains[chain].mailbox,
|
|
63
|
+
interchainSecurityModule: deployedAddresses.chains[chain].ism,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
hyperlaneCore = HyperlaneCore.fromAddressesMap(
|
|
67
|
+
coreAddresses,
|
|
68
|
+
multiProvider,
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
collateralDeficitStrategyConfig = [
|
|
72
|
+
{
|
|
73
|
+
rebalanceStrategy: RebalancerStrategyOptions.CollateralDeficit,
|
|
74
|
+
chains: {
|
|
75
|
+
anvil1: {
|
|
76
|
+
buffer: '0',
|
|
77
|
+
bridge: deployedAddresses.bridgeRoute1.anvil1,
|
|
78
|
+
},
|
|
79
|
+
anvil2: {
|
|
80
|
+
buffer: '0',
|
|
81
|
+
bridge: deployedAddresses.bridgeRoute1.anvil2,
|
|
82
|
+
},
|
|
83
|
+
anvil3: {
|
|
84
|
+
buffer: '0',
|
|
85
|
+
bridge: deployedAddresses.bridgeRoute1.anvil3,
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
snapshotIds = new Map();
|
|
92
|
+
for (const [chain, provider] of localProviders) {
|
|
93
|
+
snapshotIds.set(chain, await snapshot(provider));
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
afterEach(async function () {
|
|
98
|
+
await resetSnapshotsAndRefreshProviders({
|
|
99
|
+
localProviders,
|
|
100
|
+
multiProvider,
|
|
101
|
+
snapshotIds,
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
after(async function () {
|
|
106
|
+
if (deploymentManager) {
|
|
107
|
+
await deploymentManager.stop();
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it('should propose rebalance route when pending transfer creates collateral deficit', async function () {
|
|
112
|
+
const transferAmount = BigNumber.from(toWei('500', USDC_DECIMALS));
|
|
113
|
+
|
|
114
|
+
const context = await TestRebalancer.builder(
|
|
115
|
+
deploymentManager,
|
|
116
|
+
multiProvider,
|
|
117
|
+
)
|
|
118
|
+
.withStrategy(collateralDeficitStrategyConfig)
|
|
119
|
+
.withBalances('DEFICIT_ARB')
|
|
120
|
+
.withPendingTransfer({
|
|
121
|
+
from: 'anvil1',
|
|
122
|
+
to: 'anvil2',
|
|
123
|
+
amount: transferAmount,
|
|
124
|
+
warpRecipient: userAddress,
|
|
125
|
+
})
|
|
126
|
+
.withExecutionMode('execute')
|
|
127
|
+
.build();
|
|
128
|
+
|
|
129
|
+
const monitor = context.createMonitor(0);
|
|
130
|
+
const event = await getFirstMonitorEvent(monitor);
|
|
131
|
+
|
|
132
|
+
await context.orchestrator.executeCycle(event);
|
|
133
|
+
|
|
134
|
+
// Assert: Strategy created rebalance intents for the deficit chain
|
|
135
|
+
const activeIntents = await context.tracker.getActiveRebalanceIntents();
|
|
136
|
+
expect(activeIntents.length).to.be.greaterThan(0);
|
|
137
|
+
|
|
138
|
+
const intentToArbitrum = activeIntents.find(
|
|
139
|
+
(i) => i.destination === DOMAIN_IDS.anvil2,
|
|
140
|
+
);
|
|
141
|
+
expect(intentToArbitrum, 'Should have intent destined for arbitrum').to
|
|
142
|
+
.exist;
|
|
143
|
+
expect(intentToArbitrum!.amount).to.equal(400000000n);
|
|
144
|
+
expect(intentToArbitrum!.origin).to.equal(DOMAIN_IDS.anvil1);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it('should execute full rebalance cycle with actual transfers', async function () {
|
|
148
|
+
const transferAmount = BigNumber.from(toWei('500', USDC_DECIMALS));
|
|
149
|
+
|
|
150
|
+
const context = await TestRebalancer.builder(
|
|
151
|
+
deploymentManager,
|
|
152
|
+
multiProvider,
|
|
153
|
+
)
|
|
154
|
+
.withStrategy(collateralDeficitStrategyConfig)
|
|
155
|
+
.withBalances('DEFICIT_ARB')
|
|
156
|
+
.withExecutionMode('execute')
|
|
157
|
+
.build();
|
|
158
|
+
|
|
159
|
+
const initialCollateralBalances = await getAllCollateralBalances(
|
|
160
|
+
localProviders,
|
|
161
|
+
TEST_CHAINS,
|
|
162
|
+
deployedAddresses.monitoredRoute,
|
|
163
|
+
deployedAddresses.tokens,
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
const ethProvider = localProviders.get('anvil1')!;
|
|
167
|
+
const deployer = new ethers.Wallet(ANVIL_TEST_PRIVATE_KEY, ethProvider);
|
|
168
|
+
const token = (
|
|
169
|
+
await import('@humanode-hyperlane/core')
|
|
170
|
+
).ERC20__factory.connect(deployedAddresses.tokens.anvil1, deployer);
|
|
171
|
+
const tx = await token.transfer(userAddress, transferAmount.mul(2));
|
|
172
|
+
await tx.wait();
|
|
173
|
+
|
|
174
|
+
const transferResult = await executeWarpTransfer(
|
|
175
|
+
context.multiProvider,
|
|
176
|
+
{
|
|
177
|
+
originChain: 'anvil1',
|
|
178
|
+
destinationChain: 'anvil2',
|
|
179
|
+
routerAddress: deployedAddresses.monitoredRoute.anvil1,
|
|
180
|
+
tokenAddress: deployedAddresses.tokens.anvil1,
|
|
181
|
+
amount: transferAmount,
|
|
182
|
+
recipient: userAddress,
|
|
183
|
+
senderAddress: userAddress,
|
|
184
|
+
},
|
|
185
|
+
ethProvider,
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
// Get collateral balances after user transfer dispatch
|
|
189
|
+
const balancesAfterUserTransfer = await getAllCollateralBalances(
|
|
190
|
+
localProviders,
|
|
191
|
+
TEST_CHAINS,
|
|
192
|
+
deployedAddresses.monitoredRoute,
|
|
193
|
+
deployedAddresses.tokens,
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
// Assert: Origin collateral INCREASED by exactly the transfer amount (user deposited tokens into router)
|
|
197
|
+
const expectedCollateralAfterDeposit =
|
|
198
|
+
initialCollateralBalances.anvil1.add(transferAmount);
|
|
199
|
+
expect(
|
|
200
|
+
balancesAfterUserTransfer.anvil1.eq(expectedCollateralAfterDeposit),
|
|
201
|
+
`Origin (anvil1) collateral should increase by transfer amount. ` +
|
|
202
|
+
`Expected: ${expectedCollateralAfterDeposit.toString()}, Actual: ${balancesAfterUserTransfer.anvil1.toString()}`,
|
|
203
|
+
).to.be.true;
|
|
204
|
+
|
|
205
|
+
const userTransferRelay1 = await tryRelayMessage(
|
|
206
|
+
context.multiProvider,
|
|
207
|
+
hyperlaneCore,
|
|
208
|
+
transferResult,
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
// Assert: Relay fails due to insufficient collateral on destination
|
|
212
|
+
expect(userTransferRelay1.success).to.be.false;
|
|
213
|
+
|
|
214
|
+
// Assert: Destination collateral UNCHANGED (transfer not delivered)
|
|
215
|
+
expect(
|
|
216
|
+
balancesAfterUserTransfer.anvil2.eq(initialCollateralBalances.anvil2),
|
|
217
|
+
`Destination (anvil2) collateral should be unchanged before delivery. ` +
|
|
218
|
+
`Before: ${initialCollateralBalances.anvil2.toString()}, After: ${balancesAfterUserTransfer.anvil2.toString()}`,
|
|
219
|
+
).to.be.true;
|
|
220
|
+
|
|
221
|
+
const blockTags = await context.getConfirmedBlockTags();
|
|
222
|
+
await context.tracker.syncTransfers(blockTags);
|
|
223
|
+
|
|
224
|
+
// Assert: User transfer exists in action tracker with correct fields
|
|
225
|
+
const transfersBeforeRebalance =
|
|
226
|
+
await context.tracker.getInProgressTransfers();
|
|
227
|
+
expect(transfersBeforeRebalance.length).to.equal(
|
|
228
|
+
1,
|
|
229
|
+
'Should have exactly 1 in-progress transfer',
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
const trackedTransfer = transfersBeforeRebalance[0];
|
|
233
|
+
// Assert all Transfer fields (except createdAt, updatedAt, messageId, txHash)
|
|
234
|
+
expect(trackedTransfer.id).to.be.a('string').and.not.be.empty;
|
|
235
|
+
expect(trackedTransfer.origin).to.equal(
|
|
236
|
+
DOMAIN_IDS.anvil1,
|
|
237
|
+
'Transfer origin should be ethereum',
|
|
238
|
+
);
|
|
239
|
+
expect(trackedTransfer.destination).to.equal(
|
|
240
|
+
DOMAIN_IDS.anvil2,
|
|
241
|
+
'Transfer destination should be arbitrum',
|
|
242
|
+
);
|
|
243
|
+
expect(trackedTransfer.amount.toString()).to.equal(
|
|
244
|
+
transferAmount.toString(),
|
|
245
|
+
'Transfer amount should match',
|
|
246
|
+
);
|
|
247
|
+
expect(trackedTransfer.status).to.equal(
|
|
248
|
+
'in_progress',
|
|
249
|
+
'Transfer status should be in_progress',
|
|
250
|
+
);
|
|
251
|
+
expect(trackedTransfer.messageId).to.equal(
|
|
252
|
+
transferResult.messageId,
|
|
253
|
+
'Transfer messageId should match dispatched message',
|
|
254
|
+
);
|
|
255
|
+
expect(trackedTransfer.sender.toLowerCase()).to.equal(
|
|
256
|
+
deployedAddresses.monitoredRoute.anvil1.toLowerCase(),
|
|
257
|
+
'Transfer sender should be the warp route router',
|
|
258
|
+
);
|
|
259
|
+
expect(trackedTransfer.recipient.toLowerCase()).to.equal(
|
|
260
|
+
deployedAddresses.monitoredRoute.anvil2.toLowerCase(),
|
|
261
|
+
'Transfer recipient should be the destination warp route router',
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
const monitor1 = context.createMonitor(0);
|
|
265
|
+
const event1 = await getFirstMonitorEvent(monitor1);
|
|
266
|
+
await context.orchestrator.executeCycle(event1);
|
|
267
|
+
|
|
268
|
+
// Assert: Rebalance intent was created with correct fields
|
|
269
|
+
const activeIntents = await context.tracker.getActiveRebalanceIntents();
|
|
270
|
+
expect(
|
|
271
|
+
activeIntents.length,
|
|
272
|
+
'Should have exactly 1 active rebalance intent',
|
|
273
|
+
).to.equal(1);
|
|
274
|
+
|
|
275
|
+
const intentToArbitrum = activeIntents.find(
|
|
276
|
+
(i) => i.destination === DOMAIN_IDS.anvil2,
|
|
277
|
+
);
|
|
278
|
+
expect(intentToArbitrum, 'Should have intent destined for arbitrum').to
|
|
279
|
+
.exist;
|
|
280
|
+
|
|
281
|
+
// Assert all RebalanceIntent fields (except createdAt, updatedAt)
|
|
282
|
+
expect(intentToArbitrum!.id).to.be.a('string').and.not.be.empty;
|
|
283
|
+
expect(intentToArbitrum!.origin).to.equal(DOMAIN_IDS.anvil1);
|
|
284
|
+
expect(intentToArbitrum!.destination).to.equal(DOMAIN_IDS.anvil2);
|
|
285
|
+
expect(intentToArbitrum!.amount).to.equal(400000000n);
|
|
286
|
+
expect(intentToArbitrum!.status).to.equal('in_progress');
|
|
287
|
+
|
|
288
|
+
// Capture intent ID for completion verification
|
|
289
|
+
const rebalanceIntentId = intentToArbitrum!.id;
|
|
290
|
+
|
|
291
|
+
// Assert: Rebalance action was created with correct fields
|
|
292
|
+
const inProgressActions = await context.tracker.getInProgressActions();
|
|
293
|
+
expect(
|
|
294
|
+
inProgressActions.length,
|
|
295
|
+
'Should have at least 1 in-progress action',
|
|
296
|
+
).to.be.greaterThan(0);
|
|
297
|
+
|
|
298
|
+
const actionToArbitrum = inProgressActions.find(
|
|
299
|
+
(a) => a.destination === DOMAIN_IDS.anvil2,
|
|
300
|
+
);
|
|
301
|
+
expect(actionToArbitrum, 'Should have action destined for arbitrum').to
|
|
302
|
+
.exist;
|
|
303
|
+
|
|
304
|
+
// Assert all RebalanceAction fields (except createdAt, updatedAt, messageId, txHash)
|
|
305
|
+
expect(actionToArbitrum!.id).to.be.a('string').and.not.be.empty;
|
|
306
|
+
expect(actionToArbitrum!.intentId).to.equal(rebalanceIntentId);
|
|
307
|
+
expect(actionToArbitrum!.origin).to.equal(DOMAIN_IDS.anvil1);
|
|
308
|
+
expect(actionToArbitrum!.destination).to.equal(DOMAIN_IDS.anvil2);
|
|
309
|
+
expect(actionToArbitrum!.amount).to.equal(400000000n);
|
|
310
|
+
expect(actionToArbitrum!.status).to.equal('in_progress');
|
|
311
|
+
expect(actionToArbitrum!.messageId).to.be.a('string').and.not.be.empty;
|
|
312
|
+
|
|
313
|
+
// Assert: Monitored route collateral on origin DECREASED (sent to bridge)
|
|
314
|
+
const balancesAfterRebalance = await getAllCollateralBalances(
|
|
315
|
+
localProviders,
|
|
316
|
+
TEST_CHAINS,
|
|
317
|
+
deployedAddresses.monitoredRoute,
|
|
318
|
+
deployedAddresses.tokens,
|
|
319
|
+
);
|
|
320
|
+
|
|
321
|
+
// Assert exact balance: initial 10000 + user deposit 500 - rebalance 400 = 10100 USDC
|
|
322
|
+
expect(
|
|
323
|
+
balancesAfterRebalance.anvil1.toString(),
|
|
324
|
+
'anvil1 collateral should be 10100 USDC after rebalance',
|
|
325
|
+
).to.equal('10100000000');
|
|
326
|
+
|
|
327
|
+
// Verify entities can be retrieved by ID and have correct status
|
|
328
|
+
const retrievedTransfer = await context.tracker.getTransfer(
|
|
329
|
+
trackedTransfer.id,
|
|
330
|
+
);
|
|
331
|
+
expect(retrievedTransfer, 'Transfer should be retrievable by ID').to.exist;
|
|
332
|
+
expect(retrievedTransfer!.id).to.equal(trackedTransfer.id);
|
|
333
|
+
expect(retrievedTransfer!.status).to.equal('in_progress');
|
|
334
|
+
|
|
335
|
+
const retrievedIntent =
|
|
336
|
+
await context.tracker.getRebalanceIntent(rebalanceIntentId);
|
|
337
|
+
expect(retrievedIntent, 'Intent should be retrievable by ID').to.exist;
|
|
338
|
+
expect(retrievedIntent!.id).to.equal(rebalanceIntentId);
|
|
339
|
+
expect(retrievedIntent!.status).to.equal('in_progress');
|
|
340
|
+
|
|
341
|
+
const retrievedAction = await context.tracker.getRebalanceAction(
|
|
342
|
+
actionToArbitrum!.id,
|
|
343
|
+
);
|
|
344
|
+
expect(retrievedAction, 'Action should be retrievable by ID').to.exist;
|
|
345
|
+
expect(retrievedAction!.id).to.equal(actionToArbitrum!.id);
|
|
346
|
+
expect(retrievedAction!.status).to.equal('in_progress');
|
|
347
|
+
|
|
348
|
+
// Relay the rebalance message to destination (use global multiProvider which has signers on all chains)
|
|
349
|
+
expect(actionToArbitrum!.txHash, 'Action should have txHash').to.exist;
|
|
350
|
+
const rebalanceTxReceipt = await ethProvider.getTransactionReceipt(
|
|
351
|
+
actionToArbitrum!.txHash!,
|
|
352
|
+
);
|
|
353
|
+
const rebalanceRelayResult = await tryRelayMessage(
|
|
354
|
+
multiProvider,
|
|
355
|
+
hyperlaneCore,
|
|
356
|
+
{
|
|
357
|
+
dispatchTx: rebalanceTxReceipt,
|
|
358
|
+
messageId: actionToArbitrum!.messageId!,
|
|
359
|
+
origin: 'anvil1',
|
|
360
|
+
destination: 'anvil2',
|
|
361
|
+
},
|
|
362
|
+
);
|
|
363
|
+
expect(
|
|
364
|
+
rebalanceRelayResult.success,
|
|
365
|
+
`Rebalance relay should succeed: ${rebalanceRelayResult.error}`,
|
|
366
|
+
).to.be.true;
|
|
367
|
+
|
|
368
|
+
const userTransferRelay2 = await tryRelayMessage(
|
|
369
|
+
context.multiProvider,
|
|
370
|
+
hyperlaneCore,
|
|
371
|
+
transferResult,
|
|
372
|
+
);
|
|
373
|
+
expect(
|
|
374
|
+
userTransferRelay2.success,
|
|
375
|
+
`User transfer relay should succeed: ${userTransferRelay2.error}`,
|
|
376
|
+
).to.be.true;
|
|
377
|
+
|
|
378
|
+
// Sync actions to detect delivery and mark complete
|
|
379
|
+
const blockTags2 = await context.getConfirmedBlockTags();
|
|
380
|
+
await context.tracker.syncRebalanceActions(blockTags2);
|
|
381
|
+
await context.tracker.syncTransfers(blockTags2);
|
|
382
|
+
|
|
383
|
+
// Assert: Action is now complete
|
|
384
|
+
const completedAction = await context.tracker.getRebalanceAction(
|
|
385
|
+
actionToArbitrum!.id,
|
|
386
|
+
);
|
|
387
|
+
expect(completedAction!.status).to.equal('complete');
|
|
388
|
+
|
|
389
|
+
// Assert: Intent is now complete
|
|
390
|
+
const completedIntent =
|
|
391
|
+
await context.tracker.getRebalanceIntent(rebalanceIntentId);
|
|
392
|
+
expect(completedIntent!.status).to.equal('complete');
|
|
393
|
+
|
|
394
|
+
// Assert: No more in-progress actions
|
|
395
|
+
const remainingActions = await context.tracker.getInProgressActions();
|
|
396
|
+
expect(remainingActions.length).to.equal(0);
|
|
397
|
+
|
|
398
|
+
const completedTransfer = await context.tracker.getTransfer(
|
|
399
|
+
transferResult.messageId,
|
|
400
|
+
);
|
|
401
|
+
expect(completedTransfer!.status).to.equal('complete');
|
|
402
|
+
});
|
|
403
|
+
});
|