@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
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { ethers, providers } from 'ethers';
|
|
2
|
+
|
|
3
|
+
import { HypNative__factory } from '@humanode-hyperlane/core';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
type NativeChainDeployment,
|
|
7
|
+
type NativeDeployedAddresses,
|
|
8
|
+
TEST_CHAIN_CONFIGS,
|
|
9
|
+
type TestChain,
|
|
10
|
+
} from '../fixtures/routes.js';
|
|
11
|
+
|
|
12
|
+
import { BaseLocalDeploymentManager } from './BaseLocalDeploymentManager.js';
|
|
13
|
+
|
|
14
|
+
const TOKEN_SCALE_NUMERATOR = ethers.BigNumber.from(1);
|
|
15
|
+
const TOKEN_SCALE_DENOMINATOR = ethers.BigNumber.from(1);
|
|
16
|
+
const INVENTORY_INITIAL_BALANCE = '20000000000000000000';
|
|
17
|
+
const INVENTORY_BRIDGE_SEED = '10000000000000000000';
|
|
18
|
+
|
|
19
|
+
export class NativeLocalDeploymentManager extends BaseLocalDeploymentManager<NativeDeployedAddresses> {
|
|
20
|
+
constructor(private readonly inventorySignerAddress: string) {
|
|
21
|
+
super();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
protected async deployRoutes(
|
|
25
|
+
deployerWallet: ethers.Wallet,
|
|
26
|
+
providersByChain: Map<string, providers.JsonRpcProvider>,
|
|
27
|
+
chainInfra: Record<
|
|
28
|
+
string,
|
|
29
|
+
{ mailbox: string; ism: string; merkleHook: string }
|
|
30
|
+
>,
|
|
31
|
+
): Promise<NativeDeployedAddresses> {
|
|
32
|
+
const deployerAddress = deployerWallet.address;
|
|
33
|
+
const chainDeployments = {} as Record<TestChain, NativeChainDeployment>;
|
|
34
|
+
const monitoredRouters = {} as Record<TestChain, ethers.Contract>;
|
|
35
|
+
const bridgeRouters = {} as Record<TestChain, ethers.Contract>;
|
|
36
|
+
|
|
37
|
+
for (const config of TEST_CHAIN_CONFIGS) {
|
|
38
|
+
const provider = providersByChain.get(config.name)!;
|
|
39
|
+
await provider.send('anvil_setBalance', [
|
|
40
|
+
this.inventorySignerAddress,
|
|
41
|
+
ethers.utils.hexValue(ethers.BigNumber.from(INVENTORY_INITIAL_BALANCE)),
|
|
42
|
+
]);
|
|
43
|
+
|
|
44
|
+
const deployer = deployerWallet.connect(provider);
|
|
45
|
+
|
|
46
|
+
const monitoredRoute = await new HypNative__factory(deployer).deploy(
|
|
47
|
+
TOKEN_SCALE_NUMERATOR,
|
|
48
|
+
TOKEN_SCALE_DENOMINATOR,
|
|
49
|
+
chainInfra[config.name].mailbox,
|
|
50
|
+
);
|
|
51
|
+
await monitoredRoute.deployed();
|
|
52
|
+
await monitoredRoute.initialize(
|
|
53
|
+
ethers.constants.AddressZero,
|
|
54
|
+
chainInfra[config.name].ism,
|
|
55
|
+
deployerAddress,
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
const bridgeRoute = await new HypNative__factory(deployer).deploy(
|
|
59
|
+
TOKEN_SCALE_NUMERATOR,
|
|
60
|
+
TOKEN_SCALE_DENOMINATOR,
|
|
61
|
+
chainInfra[config.name].mailbox,
|
|
62
|
+
);
|
|
63
|
+
await bridgeRoute.deployed();
|
|
64
|
+
await bridgeRoute.initialize(
|
|
65
|
+
ethers.constants.AddressZero,
|
|
66
|
+
chainInfra[config.name].ism,
|
|
67
|
+
deployerAddress,
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
chainDeployments[config.name] = {
|
|
71
|
+
mailbox: chainInfra[config.name].mailbox,
|
|
72
|
+
ism: chainInfra[config.name].ism,
|
|
73
|
+
monitoredRouter: monitoredRoute.address,
|
|
74
|
+
bridgeRouter: bridgeRoute.address,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
monitoredRouters[config.name] = monitoredRoute;
|
|
78
|
+
bridgeRouters[config.name] = bridgeRoute;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const routeGroups = [monitoredRouters, bridgeRouters];
|
|
82
|
+
for (const routeMap of routeGroups) {
|
|
83
|
+
for (const chain of TEST_CHAIN_CONFIGS) {
|
|
84
|
+
const localRoute = routeMap[chain.name];
|
|
85
|
+
const remoteDomains: number[] = [];
|
|
86
|
+
const remoteRouters: string[] = [];
|
|
87
|
+
|
|
88
|
+
for (const remote of TEST_CHAIN_CONFIGS) {
|
|
89
|
+
if (remote.name === chain.name) continue;
|
|
90
|
+
remoteDomains.push(remote.domainId);
|
|
91
|
+
remoteRouters.push(
|
|
92
|
+
ethers.utils.hexZeroPad(routeMap[remote.name].address, 32),
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
await localRoute.enrollRemoteRouters(remoteDomains, remoteRouters);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
for (const chain of TEST_CHAIN_CONFIGS) {
|
|
101
|
+
const monitoredRoute = monitoredRouters[chain.name];
|
|
102
|
+
await monitoredRoute.addRebalancer(deployerAddress);
|
|
103
|
+
await monitoredRoute.addRebalancer(this.inventorySignerAddress);
|
|
104
|
+
|
|
105
|
+
for (const destination of TEST_CHAIN_CONFIGS) {
|
|
106
|
+
if (destination.name === chain.name) continue;
|
|
107
|
+
await monitoredRoute.addBridge(
|
|
108
|
+
destination.domainId,
|
|
109
|
+
bridgeRouters[chain.name].address,
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const bridgeSeedAmount = ethers.BigNumber.from(INVENTORY_BRIDGE_SEED);
|
|
115
|
+
for (const chain of TEST_CHAIN_CONFIGS) {
|
|
116
|
+
const provider = providersByChain.get(chain.name)!;
|
|
117
|
+
const deployer = deployerWallet.connect(provider);
|
|
118
|
+
await deployer.sendTransaction({
|
|
119
|
+
to: bridgeRouters[chain.name].address,
|
|
120
|
+
value: bridgeSeedAmount,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return {
|
|
125
|
+
chains: chainDeployments,
|
|
126
|
+
monitoredRoute: {
|
|
127
|
+
anvil1: monitoredRouters.anvil1.address,
|
|
128
|
+
anvil2: monitoredRouters.anvil2.address,
|
|
129
|
+
anvil3: monitoredRouters.anvil3.address,
|
|
130
|
+
},
|
|
131
|
+
bridgeRoute: {
|
|
132
|
+
anvil1: bridgeRouters.anvil1.address,
|
|
133
|
+
anvil2: bridgeRouters.anvil2.address,
|
|
134
|
+
anvil3: bridgeRouters.anvil3.address,
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ethers, providers } from 'ethers';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
MultiProvider,
|
|
5
|
+
revertToSnapshot,
|
|
6
|
+
snapshot,
|
|
7
|
+
} from '@humanode-hyperlane/sdk';
|
|
8
|
+
import { assert, retryAsync } from '@humanode-hyperlane/utils';
|
|
9
|
+
|
|
10
|
+
import { ANVIL_TEST_PRIVATE_KEY, TEST_CHAINS } from '../fixtures/routes.js';
|
|
11
|
+
|
|
12
|
+
function createFreshProvider(url: string): providers.JsonRpcProvider {
|
|
13
|
+
return new providers.JsonRpcProvider(url);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Revert all chains to their snapshots, take new snapshots, and refresh
|
|
18
|
+
* the providers in both localProviders and multiProvider so that ethers v5
|
|
19
|
+
* internal block-number caches are cleared.
|
|
20
|
+
*/
|
|
21
|
+
export async function resetSnapshotsAndRefreshProviders({
|
|
22
|
+
localProviders,
|
|
23
|
+
multiProvider,
|
|
24
|
+
snapshotIds,
|
|
25
|
+
}: {
|
|
26
|
+
localProviders: Map<string, providers.JsonRpcProvider>;
|
|
27
|
+
multiProvider: MultiProvider;
|
|
28
|
+
snapshotIds: Map<string, string>;
|
|
29
|
+
}): Promise<void> {
|
|
30
|
+
for (const [chain, provider] of localProviders) {
|
|
31
|
+
const id = snapshotIds.get(chain);
|
|
32
|
+
assert(id, `Missing snapshot id for chain ${chain}`);
|
|
33
|
+
await revertToSnapshot(provider, id);
|
|
34
|
+
snapshotIds.set(chain, await snapshot(provider));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Replace providers so ethers v5 internal block-number caches are cleared.
|
|
38
|
+
const signerWallet = new ethers.Wallet(ANVIL_TEST_PRIVATE_KEY);
|
|
39
|
+
|
|
40
|
+
for (const [chain, oldProvider] of Array.from(localProviders.entries())) {
|
|
41
|
+
const url = oldProvider.connection.url;
|
|
42
|
+
const freshProvider = createFreshProvider(url);
|
|
43
|
+
localProviders.set(chain, freshProvider);
|
|
44
|
+
multiProvider.setProvider(chain, freshProvider);
|
|
45
|
+
multiProvider.setSigner(chain, signerWallet.connect(freshProvider));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Wait until every fresh provider can serve a basic RPC call.
|
|
49
|
+
await Promise.all(
|
|
50
|
+
TEST_CHAINS.map((chain) => {
|
|
51
|
+
const p = localProviders.get(chain);
|
|
52
|
+
assert(p, `Missing provider for chain ${chain}`);
|
|
53
|
+
return retryAsync(() => p.send('eth_blockNumber', []), 10, 500);
|
|
54
|
+
}),
|
|
55
|
+
);
|
|
56
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { BigNumber, providers } from 'ethers';
|
|
2
|
+
|
|
3
|
+
import { HyperlaneCore, MultiProvider } from '@humanode-hyperlane/sdk';
|
|
4
|
+
import { assert } from '@humanode-hyperlane/utils';
|
|
5
|
+
import { ERC20Test__factory } from '@humanode-hyperlane/core';
|
|
6
|
+
import { expect } from 'chai';
|
|
7
|
+
|
|
8
|
+
import type { RebalanceAction } from '../../tracking/types.js';
|
|
9
|
+
import type { MonitorEvent } from '../../interfaces/IMonitor.js';
|
|
10
|
+
import { MonitorEventType } from '../../interfaces/IMonitor.js';
|
|
11
|
+
import type { Monitor } from '../../monitor/Monitor.js';
|
|
12
|
+
import type { TestRebalancerContext } from './TestRebalancer.js';
|
|
13
|
+
import { tryRelayMessage } from './TransferHelper.js';
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
DOMAIN_IDS,
|
|
17
|
+
type Erc20InventoryDeployedAddresses,
|
|
18
|
+
type NativeDeployedAddresses,
|
|
19
|
+
TEST_CHAINS,
|
|
20
|
+
} from '../fixtures/routes.js';
|
|
21
|
+
|
|
22
|
+
export async function getFirstMonitorEvent(
|
|
23
|
+
monitor: Monitor,
|
|
24
|
+
): Promise<MonitorEvent> {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
let settled = false;
|
|
27
|
+
|
|
28
|
+
async function finalize(
|
|
29
|
+
cb: (v: any) => void, // eslint-disable-line @typescript-eslint/no-explicit-any -- accepts both resolve and reject
|
|
30
|
+
value: unknown,
|
|
31
|
+
timer: ReturnType<typeof setTimeout>,
|
|
32
|
+
) {
|
|
33
|
+
if (settled) return;
|
|
34
|
+
settled = true;
|
|
35
|
+
clearTimeout(timer);
|
|
36
|
+
cb(value);
|
|
37
|
+
try {
|
|
38
|
+
await monitor.stop();
|
|
39
|
+
} catch {
|
|
40
|
+
// stop errors are non-fatal — the event/error has already been delivered
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const timeout = setTimeout(() => {
|
|
45
|
+
void finalize(reject, new Error('Monitor event timeout'), timeout);
|
|
46
|
+
}, 60_000);
|
|
47
|
+
|
|
48
|
+
monitor.on(MonitorEventType.TokenInfo, (event: MonitorEvent) => {
|
|
49
|
+
void finalize(resolve, event, timeout);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
monitor.on(MonitorEventType.Error, (error: Error) => {
|
|
53
|
+
void finalize(reject, error, timeout);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
void monitor.start();
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function chainFromDomain(domain: number): string {
|
|
61
|
+
const found = Object.entries(DOMAIN_IDS).find(([, d]) => d === domain);
|
|
62
|
+
if (!found) {
|
|
63
|
+
throw new Error(`Unknown domain: ${domain}`);
|
|
64
|
+
}
|
|
65
|
+
return found[0];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export async function getRouterBalances(
|
|
69
|
+
localProviders: Map<string, providers.JsonRpcProvider>,
|
|
70
|
+
addresses: NativeDeployedAddresses,
|
|
71
|
+
): Promise<Record<string, BigNumber>> {
|
|
72
|
+
const balances: Record<string, BigNumber> = {};
|
|
73
|
+
for (const chain of TEST_CHAINS) {
|
|
74
|
+
const provider = localProviders.get(chain);
|
|
75
|
+
assert(provider, `Missing provider for chain ${chain}`);
|
|
76
|
+
balances[chain] = await provider.getBalance(
|
|
77
|
+
addresses.monitoredRoute[chain],
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
return balances;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export async function getErc20RouterBalances(
|
|
84
|
+
localProviders: Map<string, providers.JsonRpcProvider>,
|
|
85
|
+
addresses: Erc20InventoryDeployedAddresses,
|
|
86
|
+
): Promise<Record<string, BigNumber>> {
|
|
87
|
+
const balances: Record<string, BigNumber> = {};
|
|
88
|
+
for (const chain of TEST_CHAINS) {
|
|
89
|
+
const provider = localProviders.get(chain);
|
|
90
|
+
assert(provider, `Missing provider for chain ${chain}`);
|
|
91
|
+
const token = ERC20Test__factory.connect(addresses.tokens[chain], provider);
|
|
92
|
+
balances[chain] = await token.balanceOf(addresses.monitoredRoute[chain]);
|
|
93
|
+
}
|
|
94
|
+
return balances;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface ChainRoles {
|
|
98
|
+
deficitChain: string;
|
|
99
|
+
surplusChain: string;
|
|
100
|
+
neutralChain?: string;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Classify chains into deficit, surplus, and neutral based on a deposit action.
|
|
105
|
+
*
|
|
106
|
+
* For inventory deposits the execution direction is swapped: the action's
|
|
107
|
+
* destination is the surplus chain (where the router pays out on delivery).
|
|
108
|
+
*/
|
|
109
|
+
export function classifyChains(
|
|
110
|
+
deficitChain: string,
|
|
111
|
+
depositAction: RebalanceAction,
|
|
112
|
+
): ChainRoles {
|
|
113
|
+
const surplusChain = chainFromDomain(depositAction.destination);
|
|
114
|
+
const neutralChain = TEST_CHAINS.find(
|
|
115
|
+
(c) => c !== deficitChain && c !== surplusChain,
|
|
116
|
+
);
|
|
117
|
+
return { deficitChain, surplusChain, neutralChain };
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export async function relayInProgressInventoryDeposits(
|
|
121
|
+
context: TestRebalancerContext,
|
|
122
|
+
localProviders: Map<string, providers.JsonRpcProvider>,
|
|
123
|
+
multiProvider: MultiProvider,
|
|
124
|
+
hyperlaneCore: HyperlaneCore,
|
|
125
|
+
): Promise<void> {
|
|
126
|
+
const inProgressActions = await context.tracker.getInProgressActions();
|
|
127
|
+
const depositActions = inProgressActions.filter(
|
|
128
|
+
(a) => a.type === 'inventory_deposit' && a.txHash && a.messageId,
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
for (const action of depositActions) {
|
|
132
|
+
const origin = chainFromDomain(action.origin);
|
|
133
|
+
const destination = chainFromDomain(action.destination);
|
|
134
|
+
const provider = localProviders.get(origin);
|
|
135
|
+
assert(provider, `Missing provider for chain ${origin}`);
|
|
136
|
+
assert(
|
|
137
|
+
action.txHash,
|
|
138
|
+
`Missing txHash for action ${action.origin}->${action.destination}`,
|
|
139
|
+
);
|
|
140
|
+
const dispatchTx = await provider.getTransactionReceipt(action.txHash);
|
|
141
|
+
|
|
142
|
+
assert(
|
|
143
|
+
action.messageId,
|
|
144
|
+
`Missing messageId for action ${action.origin}->${action.destination}`,
|
|
145
|
+
);
|
|
146
|
+
const relayResult = await tryRelayMessage(multiProvider, hyperlaneCore, {
|
|
147
|
+
dispatchTx,
|
|
148
|
+
messageId: action.messageId,
|
|
149
|
+
origin,
|
|
150
|
+
destination,
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
expect(
|
|
154
|
+
relayResult.success,
|
|
155
|
+
`Inventory deposit relay should succeed: ${relayResult.error}`,
|
|
156
|
+
).to.be.true;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Use provider.send to bypass ethers v5 _maxInternalBlockNumber cache
|
|
160
|
+
// which refuses to return lower block numbers after evm_revert.
|
|
161
|
+
const tags: Record<string, number> = {};
|
|
162
|
+
for (const chain of TEST_CHAINS) {
|
|
163
|
+
const p = localProviders.get(chain);
|
|
164
|
+
assert(p, `Missing provider for chain ${chain}`);
|
|
165
|
+
const hex = await p.send('eth_blockNumber', []);
|
|
166
|
+
tags[chain] = parseInt(hex, 16);
|
|
167
|
+
}
|
|
168
|
+
await context.tracker.syncRebalanceActions(tags);
|
|
169
|
+
}
|