@hyperlane-xyz/sdk 1.4.3-beta1 → 1.4.3-beta2
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/README.md +7 -1
- package/dist/{HyperlaneApp.d.ts → app/HyperlaneApp.d.ts} +4 -4
- package/dist/app/HyperlaneApp.d.ts.map +1 -0
- package/dist/{HyperlaneApp.js → app/HyperlaneApp.js} +2 -2
- package/dist/app/HyperlaneApp.js.map +1 -0
- package/dist/app/MultiProtocolApp.d.ts +51 -0
- package/dist/app/MultiProtocolApp.d.ts.map +1 -0
- package/dist/app/MultiProtocolApp.js +80 -0
- package/dist/app/MultiProtocolApp.js.map +1 -0
- package/dist/app/MultiProtocolApp.test.d.ts +2 -0
- package/dist/app/MultiProtocolApp.test.d.ts.map +1 -0
- package/dist/app/MultiProtocolApp.test.js +19 -0
- package/dist/app/MultiProtocolApp.test.js.map +1 -0
- package/dist/consts/agentStartBlocks.d.ts +3 -0
- package/dist/consts/agentStartBlocks.d.ts.map +1 -0
- package/dist/consts/agentStartBlocks.js +28 -0
- package/dist/consts/agentStartBlocks.js.map +1 -0
- package/dist/consts/bytecode.js +1 -1
- package/dist/consts/bytecode.js.map +1 -1
- package/dist/consts/chainMetadata.d.ts +2 -58
- package/dist/consts/chainMetadata.d.ts.map +1 -1
- package/dist/consts/chainMetadata.js +1 -19
- package/dist/consts/chainMetadata.js.map +1 -1
- package/dist/consts/chains.d.ts +2 -3
- package/dist/consts/chains.d.ts.map +1 -1
- package/dist/consts/chains.js +2 -3
- package/dist/consts/chains.js.map +1 -1
- package/dist/consts/environments/index.d.ts +3 -3
- package/dist/consts/environments/index.d.ts.map +1 -1
- package/dist/consts/environments/index.js.map +1 -1
- package/dist/{contracts.d.ts → contracts/contracts.d.ts} +3 -15
- package/dist/contracts/contracts.d.ts.map +1 -0
- package/dist/{contracts.js → contracts/contracts.js} +12 -23
- package/dist/contracts/contracts.js.map +1 -0
- package/dist/contracts/types.d.ts +18 -0
- package/dist/contracts/types.d.ts.map +1 -0
- package/dist/contracts/types.js +3 -0
- package/dist/contracts/types.js.map +1 -0
- package/dist/core/CoreDeployer.hardhat-test.js +33 -42
- package/dist/core/CoreDeployer.hardhat-test.js.map +1 -1
- package/dist/core/HyperlaneCore.d.ts +5 -5
- package/dist/core/HyperlaneCore.d.ts.map +1 -1
- package/dist/core/HyperlaneCore.js +15 -28
- package/dist/core/HyperlaneCore.js.map +1 -1
- package/dist/core/HyperlaneCore.test.js +4 -13
- package/dist/core/HyperlaneCore.test.js.map +1 -1
- package/dist/core/HyperlaneCoreChecker.js +80 -99
- package/dist/core/HyperlaneCoreChecker.js.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.d.ts +1 -1
- package/dist/core/HyperlaneCoreDeployer.d.ts.map +1 -1
- package/dist/core/HyperlaneCoreDeployer.js +45 -62
- package/dist/core/HyperlaneCoreDeployer.js.map +1 -1
- package/dist/core/TestCoreApp.d.ts +1 -1
- package/dist/core/TestCoreApp.d.ts.map +1 -1
- package/dist/core/TestCoreApp.js +35 -45
- package/dist/core/TestCoreApp.js.map +1 -1
- package/dist/core/TestCoreDeployer.d.ts +1 -1
- package/dist/core/TestCoreDeployer.d.ts.map +1 -1
- package/dist/core/TestCoreDeployer.js +14 -27
- package/dist/core/TestCoreDeployer.js.map +1 -1
- package/dist/core/contracts.d.ts +1 -1
- package/dist/core/contracts.d.ts.map +1 -1
- package/dist/core/events.d.ts +1 -1
- package/dist/core/events.d.ts.map +1 -1
- package/dist/core/testHyperlaneDeploy.hardhat-test.js +23 -32
- package/dist/core/testHyperlaneDeploy.hardhat-test.js.map +1 -1
- package/dist/core/types.d.ts +1 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +2 -2
- package/dist/core/types.js.map +1 -1
- package/dist/deploy/HyperlaneAppChecker.d.ts +1 -1
- package/dist/deploy/HyperlaneAppChecker.d.ts.map +1 -1
- package/dist/deploy/HyperlaneAppChecker.js +99 -123
- package/dist/deploy/HyperlaneAppChecker.js.map +1 -1
- package/dist/deploy/HyperlaneDeployer.d.ts +1 -1
- package/dist/deploy/HyperlaneDeployer.d.ts.map +1 -1
- package/dist/deploy/HyperlaneDeployer.js +176 -216
- package/dist/deploy/HyperlaneDeployer.js.map +1 -1
- package/dist/deploy/proxy.d.ts +1 -1
- package/dist/deploy/proxy.d.ts.map +1 -1
- package/dist/deploy/proxy.js +11 -26
- package/dist/deploy/proxy.js.map +1 -1
- package/dist/deploy/types.js +1 -1
- package/dist/deploy/types.js.map +1 -1
- package/dist/deploy/verify/ContractVerifier.js +122 -131
- package/dist/deploy/verify/ContractVerifier.js.map +1 -1
- package/dist/deploy/verify/types.d.ts +3 -3
- package/dist/deploy/verify/types.d.ts.map +1 -1
- package/dist/gas/HyperlaneIgp.d.ts +2 -2
- package/dist/gas/HyperlaneIgp.d.ts.map +1 -1
- package/dist/gas/HyperlaneIgp.js +2 -2
- package/dist/gas/HyperlaneIgp.js.map +1 -1
- package/dist/gas/HyperlaneIgpChecker.js +101 -123
- package/dist/gas/HyperlaneIgpChecker.js.map +1 -1
- package/dist/gas/HyperlaneIgpDeployer.d.ts +1 -1
- package/dist/gas/HyperlaneIgpDeployer.d.ts.map +1 -1
- package/dist/gas/HyperlaneIgpDeployer.js +70 -89
- package/dist/gas/HyperlaneIgpDeployer.js.map +1 -1
- package/dist/gas/contracts.d.ts +1 -1
- package/dist/gas/contracts.d.ts.map +1 -1
- package/dist/gas/contracts.js +6 -1
- package/dist/gas/contracts.js.map +1 -1
- package/dist/gas/token-prices.d.ts +6 -60
- package/dist/gas/token-prices.d.ts.map +1 -1
- package/dist/gas/token-prices.js +37 -54
- package/dist/gas/token-prices.js.map +1 -1
- package/dist/gas/token-prices.test.js +11 -20
- package/dist/gas/token-prices.test.js.map +1 -1
- package/dist/gas/types.d.ts +2 -2
- package/dist/gas/types.d.ts.map +1 -1
- package/dist/gas/types.js +2 -2
- package/dist/gas/types.js.map +1 -1
- package/dist/hook/HyperlaneHookDeployer.d.ts +1 -1
- package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
- package/dist/hook/HyperlaneHookDeployer.js +69 -88
- package/dist/hook/HyperlaneHookDeployer.js.map +1 -1
- package/dist/hook/contracts.d.ts +4 -4
- package/dist/hook/contracts.d.ts.map +1 -1
- package/dist/hook/contracts.js +5 -1
- package/dist/hook/contracts.js.map +1 -1
- package/dist/hook/types.d.ts +3 -3
- package/dist/hook/types.d.ts.map +1 -1
- package/dist/hook/types.js +1 -1
- package/dist/hook/types.js.map +1 -1
- package/dist/index.d.ts +13 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -5
- package/dist/index.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.d.ts +2 -2
- package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.hardhat-test.js +14 -23
- package/dist/ism/HyperlaneIsmFactory.hardhat-test.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.js +234 -256
- package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactoryDeployer.d.ts +1 -1
- package/dist/ism/HyperlaneIsmFactoryDeployer.d.ts.map +1 -1
- package/dist/ism/HyperlaneIsmFactoryDeployer.js +18 -34
- package/dist/ism/HyperlaneIsmFactoryDeployer.js.map +1 -1
- package/dist/ism/contracts.d.ts +1 -1
- package/dist/ism/contracts.d.ts.map +1 -1
- package/dist/ism/types.d.ts +5 -5
- package/dist/ism/types.d.ts.map +1 -1
- package/dist/ism/types.js +1 -1
- package/dist/ism/types.js.map +1 -1
- package/dist/metadata/ChainMetadataManager.d.ts +130 -0
- package/dist/metadata/ChainMetadataManager.d.ts.map +1 -0
- package/dist/metadata/ChainMetadataManager.js +240 -0
- package/dist/metadata/ChainMetadataManager.js.map +1 -0
- package/dist/metadata/agentConfig.d.ts +4 -4
- package/dist/metadata/agentConfig.d.ts.map +1 -1
- package/dist/metadata/agentConfig.js +15 -6
- package/dist/metadata/agentConfig.js.map +1 -1
- package/dist/metadata/chainMetadata.test.js +27 -9
- package/dist/metadata/chainMetadata.test.js.map +1 -1
- package/dist/metadata/chainMetadataTypes.d.ts +2 -2
- package/dist/metadata/chainMetadataTypes.d.ts.map +1 -1
- package/dist/metadata/chainMetadataTypes.js +2 -3
- package/dist/metadata/chainMetadataTypes.js.map +1 -1
- package/dist/metadata/deploymentArtifacts.d.ts +2 -2
- package/dist/metadata/deploymentArtifacts.d.ts.map +1 -1
- package/dist/middleware/account/InterchainAccount.d.ts +1 -1
- package/dist/middleware/account/InterchainAccount.d.ts.map +1 -1
- package/dist/middleware/account/InterchainAccount.js +1 -1
- package/dist/middleware/account/InterchainAccount.js.map +1 -1
- package/dist/middleware/account/InterchainAccountChecker.js +4 -1
- package/dist/middleware/account/InterchainAccountChecker.js.map +1 -1
- package/dist/middleware/account/InterchainAccountDeployer.d.ts +2 -2
- package/dist/middleware/account/InterchainAccountDeployer.d.ts.map +1 -1
- package/dist/middleware/account/InterchainAccountDeployer.js +28 -41
- package/dist/middleware/account/InterchainAccountDeployer.js.map +1 -1
- package/dist/middleware/account/accounts.hardhat-test.js +21 -30
- package/dist/middleware/account/accounts.hardhat-test.js.map +1 -1
- package/dist/middleware/account/contracts.d.ts +1 -1
- package/dist/middleware/account/contracts.d.ts.map +1 -1
- package/dist/middleware/account/contracts.js +5 -1
- package/dist/middleware/account/contracts.js.map +1 -1
- package/dist/middleware/liquidity-layer/LiquidityLayerApp.d.ts +2 -2
- package/dist/middleware/liquidity-layer/LiquidityLayerApp.d.ts.map +1 -1
- package/dist/middleware/liquidity-layer/LiquidityLayerApp.js +130 -152
- package/dist/middleware/liquidity-layer/LiquidityLayerApp.js.map +1 -1
- package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.d.ts +3 -3
- package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.d.ts.map +1 -1
- package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.js +85 -110
- package/dist/middleware/liquidity-layer/LiquidityLayerRouterDeployer.js.map +1 -1
- package/dist/middleware/liquidity-layer/contracts.d.ts +1 -1
- package/dist/middleware/liquidity-layer/contracts.d.ts.map +1 -1
- package/dist/middleware/liquidity-layer/contracts.js +6 -1
- package/dist/middleware/liquidity-layer/contracts.js.map +1 -1
- package/dist/middleware/liquidity-layer/liquidity-layer.hardhat-test.js +41 -46
- package/dist/middleware/liquidity-layer/liquidity-layer.hardhat-test.js.map +1 -1
- package/dist/middleware/query/InterchainQuery.d.ts +1 -1
- package/dist/middleware/query/InterchainQuery.d.ts.map +1 -1
- package/dist/middleware/query/InterchainQuery.js +1 -1
- package/dist/middleware/query/InterchainQuery.js.map +1 -1
- package/dist/middleware/query/InterchainQueryDeployer.d.ts +1 -1
- package/dist/middleware/query/InterchainQueryDeployer.d.ts.map +1 -1
- package/dist/middleware/query/InterchainQueryDeployer.js +13 -27
- package/dist/middleware/query/InterchainQueryDeployer.js.map +1 -1
- package/dist/middleware/query/contracts.d.ts +1 -1
- package/dist/middleware/query/contracts.d.ts.map +1 -1
- package/dist/middleware/query/contracts.js +4 -1
- package/dist/middleware/query/contracts.js.map +1 -1
- package/dist/middleware/query/queries.hardhat-test.js +23 -32
- package/dist/middleware/query/queries.hardhat-test.js.map +1 -1
- package/dist/providers/MultiProtocolProvider.d.ts +39 -0
- package/dist/providers/MultiProtocolProvider.d.ts.map +1 -0
- package/dist/providers/MultiProtocolProvider.js +105 -0
- package/dist/providers/MultiProtocolProvider.js.map +1 -0
- package/dist/providers/MultiProtocolProvider.test.d.ts +2 -0
- package/dist/providers/MultiProtocolProvider.test.d.ts.map +1 -0
- package/dist/providers/MultiProtocolProvider.test.js +24 -0
- package/dist/providers/MultiProtocolProvider.test.js.map +1 -0
- package/dist/providers/MultiProvider.d.ts +20 -118
- package/dist/providers/MultiProvider.d.ts.map +1 -1
- package/dist/providers/MultiProvider.js +69 -300
- package/dist/providers/MultiProvider.js.map +1 -1
- package/dist/providers/ProviderType.d.ts +71 -0
- package/dist/providers/ProviderType.d.ts.map +1 -0
- package/dist/providers/ProviderType.js +11 -0
- package/dist/providers/ProviderType.js.map +1 -0
- package/dist/providers/RetryProvider.d.ts +1 -1
- package/dist/providers/RetryProvider.d.ts.map +1 -1
- package/dist/providers/RetryProvider.js +2 -16
- package/dist/providers/RetryProvider.js.map +1 -1
- package/dist/providers/providerBuilders.d.ts +17 -0
- package/dist/providers/providerBuilders.d.ts.map +1 -0
- package/dist/providers/providerBuilders.js +97 -0
- package/dist/providers/providerBuilders.js.map +1 -0
- package/dist/router/GasRouterDeployer.d.ts +1 -1
- package/dist/router/GasRouterDeployer.d.ts.map +1 -1
- package/dist/router/GasRouterDeployer.js +18 -32
- package/dist/router/GasRouterDeployer.js.map +1 -1
- package/dist/router/HyperlaneRouterChecker.d.ts +1 -1
- package/dist/router/HyperlaneRouterChecker.d.ts.map +1 -1
- package/dist/router/HyperlaneRouterChecker.js +37 -55
- package/dist/router/HyperlaneRouterChecker.js.map +1 -1
- package/dist/router/HyperlaneRouterDeployer.d.ts +1 -1
- package/dist/router/HyperlaneRouterDeployer.d.ts.map +1 -1
- package/dist/router/HyperlaneRouterDeployer.js +87 -115
- package/dist/router/HyperlaneRouterDeployer.js.map +1 -1
- package/dist/router/MultiProtocolRouterApps.d.ts +29 -0
- package/dist/router/MultiProtocolRouterApps.d.ts.map +1 -0
- package/dist/router/MultiProtocolRouterApps.js +43 -0
- package/dist/router/MultiProtocolRouterApps.js.map +1 -0
- package/dist/router/MultiProtocolRouterApps.test.d.ts +2 -0
- package/dist/router/MultiProtocolRouterApps.test.d.ts.map +1 -0
- package/dist/router/MultiProtocolRouterApps.test.js +20 -0
- package/dist/router/MultiProtocolRouterApps.test.js.map +1 -0
- package/dist/router/ProxiedRouterChecker.js +14 -34
- package/dist/router/ProxiedRouterChecker.js.map +1 -1
- package/dist/router/ProxiedRouterDeployer.d.ts +1 -1
- package/dist/router/ProxiedRouterDeployer.d.ts.map +1 -1
- package/dist/router/ProxiedRouterDeployer.js +24 -38
- package/dist/router/ProxiedRouterDeployer.js.map +1 -1
- package/dist/router/RouterApps.d.ts +4 -4
- package/dist/router/RouterApps.d.ts.map +1 -1
- package/dist/router/RouterApps.js +8 -18
- package/dist/router/RouterApps.js.map +1 -1
- package/dist/router/adapters/EvmRouterAdapter.d.ts +25 -0
- package/dist/router/adapters/EvmRouterAdapter.d.ts.map +1 -0
- package/dist/router/adapters/EvmRouterAdapter.js +50 -0
- package/dist/router/adapters/EvmRouterAdapter.js.map +1 -0
- package/dist/router/adapters/SealevelRouterAdapter.d.ts +50 -0
- package/dist/router/adapters/SealevelRouterAdapter.d.ts.map +1 -0
- package/dist/router/adapters/SealevelRouterAdapter.js +132 -0
- package/dist/router/adapters/SealevelRouterAdapter.js.map +1 -0
- package/dist/router/adapters/SealevelRouterAdapter.test.d.ts +2 -0
- package/dist/router/adapters/SealevelRouterAdapter.test.d.ts.map +1 -0
- package/dist/router/adapters/SealevelRouterAdapter.test.js +21 -0
- package/dist/router/adapters/SealevelRouterAdapter.test.js.map +1 -0
- package/dist/router/adapters/types.d.ts +18 -0
- package/dist/router/adapters/types.d.ts.map +1 -0
- package/dist/router/adapters/types.js +3 -0
- package/dist/router/adapters/types.js.map +1 -0
- package/dist/router/types.d.ts +12 -9
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/types.js +1 -1
- package/dist/router/types.js.map +1 -1
- package/dist/test/testUtils.d.ts +1 -1
- package/dist/test/testUtils.d.ts.map +1 -1
- package/dist/test/testUtils.js +12 -23
- package/dist/test/testUtils.js.map +1 -1
- package/dist/types.d.ts +5 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/MultiGeneric.d.ts +1 -1
- package/dist/utils/MultiGeneric.d.ts.map +1 -1
- package/dist/utils/MultiGeneric.js +2 -4
- package/dist/utils/MultiGeneric.js.map +1 -1
- package/dist/utils/fetch.js +8 -16
- package/dist/utils/fetch.js.map +1 -1
- package/dist/utils/wagmi.js +1 -2
- package/dist/utils/wagmi.js.map +1 -1
- package/package.json +10 -7
- package/dist/HyperlaneApp.d.ts.map +0 -1
- package/dist/HyperlaneApp.js.map +0 -1
- package/dist/contracts.d.ts.map +0 -1
- package/dist/contracts.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HyperlaneIsmFactory.hardhat-test.js","sourceRoot":"","sources":["../../src/ism/HyperlaneIsmFactory.hardhat-test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HyperlaneIsmFactory.hardhat-test.js","sourceRoot":"","sources":["../../src/ism/HyperlaneIsmFactory.hardhat-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.collectValidators = exports.moduleMatchesConfig = exports.moduleCanCertainlyVerify = exports.HyperlaneIsmFactory = void 0;
|
|
13
4
|
const debug_1 = require("debug");
|
|
14
5
|
const ethers_1 = require("ethers");
|
|
15
6
|
const core_1 = require("@hyperlane-xyz/core");
|
|
16
7
|
const utils_1 = require("@hyperlane-xyz/utils");
|
|
17
|
-
const HyperlaneApp_1 = require("../HyperlaneApp");
|
|
8
|
+
const HyperlaneApp_1 = require("../app/HyperlaneApp");
|
|
18
9
|
const environments_1 = require("../consts/environments");
|
|
19
|
-
const contracts_1 = require("../contracts");
|
|
10
|
+
const contracts_1 = require("../contracts/contracts");
|
|
20
11
|
const contracts_2 = require("./contracts");
|
|
21
12
|
const types_1 = require("./types");
|
|
13
|
+
// TODO this should handle cached addresses like the other deployers
|
|
22
14
|
class HyperlaneIsmFactory extends HyperlaneApp_1.HyperlaneApp {
|
|
23
15
|
static fromEnvironment(env, multiProvider) {
|
|
24
16
|
const envAddresses = environments_1.hyperlaneEnvironments[env];
|
|
@@ -31,123 +23,113 @@ class HyperlaneIsmFactory extends HyperlaneApp_1.HyperlaneApp {
|
|
|
31
23
|
const helper = (0, contracts_1.appFromAddressesMapHelper)(addressesMap, contracts_2.ismFactoryFactories, multiProvider);
|
|
32
24
|
return new HyperlaneIsmFactory(helper.contractsMap, helper.multiProvider, (0, debug_1.debug)('hyperlane:IsmFactoryApp'));
|
|
33
25
|
}
|
|
34
|
-
deploy(chain, config, origin) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
break;
|
|
49
|
-
}
|
|
50
|
-
return this.deployMultisigIsm(chain, config, origin);
|
|
51
|
-
}
|
|
52
|
-
else if (config.type === types_1.ModuleType.ROUTING) {
|
|
53
|
-
this.logger(`Deploying Routing ISM to ${chain} for verifying ${Object.keys(config.domains)}`);
|
|
54
|
-
return this.deployRoutingIsm(chain, config);
|
|
55
|
-
}
|
|
56
|
-
else if (config.type === types_1.ModuleType.AGGREGATION) {
|
|
57
|
-
this.logger(`Deploying Aggregation ISM to ${chain}`);
|
|
58
|
-
return this.deployAggregationIsm(chain, config);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
throw new Error(`Unsupported ISM type`);
|
|
26
|
+
async deploy(chain, config, origin) {
|
|
27
|
+
if (config.type === types_1.ModuleType.MERKLE_ROOT_MULTISIG ||
|
|
28
|
+
config.type === types_1.ModuleType.MESSAGE_ID_MULTISIG ||
|
|
29
|
+
config.type === types_1.ModuleType.LEGACY_MULTISIG) {
|
|
30
|
+
switch (config.type) {
|
|
31
|
+
case types_1.ModuleType.LEGACY_MULTISIG:
|
|
32
|
+
this.logger(`Deploying Legacy Multisig ISM to ${chain} for verifying ${origin}`);
|
|
33
|
+
break;
|
|
34
|
+
case types_1.ModuleType.MERKLE_ROOT_MULTISIG:
|
|
35
|
+
this.logger(`Deploying Merkle Root Multisig ISM to ${chain} for verifying ${origin}`);
|
|
36
|
+
break;
|
|
37
|
+
case types_1.ModuleType.MESSAGE_ID_MULTISIG:
|
|
38
|
+
this.logger(`Deploying Message ID Multisig ISM to ${chain} for verifying ${origin}`);
|
|
39
|
+
break;
|
|
62
40
|
}
|
|
63
|
-
|
|
41
|
+
return this.deployMultisigIsm(chain, config, origin);
|
|
42
|
+
}
|
|
43
|
+
else if (config.type === types_1.ModuleType.ROUTING) {
|
|
44
|
+
this.logger(`Deploying Routing ISM to ${chain} for verifying ${Object.keys(config.domains)}`);
|
|
45
|
+
return this.deployRoutingIsm(chain, config);
|
|
46
|
+
}
|
|
47
|
+
else if (config.type === types_1.ModuleType.AGGREGATION) {
|
|
48
|
+
this.logger(`Deploying Aggregation ISM to ${chain}`);
|
|
49
|
+
return this.deployAggregationIsm(chain, config);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error(`Unsupported ISM type`);
|
|
53
|
+
}
|
|
64
54
|
}
|
|
65
|
-
deployMultisigIsm(chain, config, origin) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return core_1.IMultisigIsm__factory.connect(address, signer);
|
|
87
|
-
});
|
|
55
|
+
async deployMultisigIsm(chain, config, origin) {
|
|
56
|
+
const signer = this.multiProvider.getSigner(chain);
|
|
57
|
+
let address;
|
|
58
|
+
if (config.type === types_1.ModuleType.LEGACY_MULTISIG) {
|
|
59
|
+
const multisig = await new core_1.LegacyMultisigIsm__factory()
|
|
60
|
+
.connect(signer)
|
|
61
|
+
.deploy();
|
|
62
|
+
await this.multiProvider.handleTx(chain, multisig.deployTransaction);
|
|
63
|
+
const originDomain = this.multiProvider.getDomainId(origin);
|
|
64
|
+
this.logger(`Enrolling validators for ${originDomain}`);
|
|
65
|
+
await this.multiProvider.handleTx(chain, multisig.enrollValidators([originDomain], [config.validators]));
|
|
66
|
+
await this.multiProvider.handleTx(chain, multisig.setThreshold(originDomain, config.threshold));
|
|
67
|
+
address = multisig.address;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const multisigIsmFactory = config.type === types_1.ModuleType.MERKLE_ROOT_MULTISIG
|
|
71
|
+
? this.getContracts(chain).merkleRootMultisigIsmFactory
|
|
72
|
+
: this.getContracts(chain).messageIdMultisigIsmFactory;
|
|
73
|
+
address = await this.deployMOfNFactory(chain, multisigIsmFactory, config.validators, config.threshold);
|
|
74
|
+
}
|
|
75
|
+
return core_1.IMultisigIsm__factory.connect(address, signer);
|
|
88
76
|
}
|
|
89
|
-
deployRoutingIsm(chain, config) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
77
|
+
async deployRoutingIsm(chain, config) {
|
|
78
|
+
const signer = this.multiProvider.getSigner(chain);
|
|
79
|
+
const routingIsmFactory = this.getContracts(chain).routingIsmFactory;
|
|
80
|
+
const isms = {};
|
|
81
|
+
for (const origin of Object.keys(config.domains)) {
|
|
82
|
+
const ism = await this.deploy(chain, config.domains[origin], origin);
|
|
83
|
+
isms[origin] = ism.address;
|
|
84
|
+
}
|
|
85
|
+
const domains = Object.keys(isms).map((chain) => this.multiProvider.getDomainId(chain));
|
|
86
|
+
const submoduleAddresses = Object.values(isms);
|
|
87
|
+
const overrides = this.multiProvider.getTransactionOverrides(chain);
|
|
88
|
+
const tx = await routingIsmFactory.deploy(domains, submoduleAddresses, overrides);
|
|
89
|
+
const receipt = await this.multiProvider.handleTx(chain, tx);
|
|
90
|
+
// TODO: Break this out into a generalized function
|
|
91
|
+
const dispatchLogs = receipt.logs
|
|
92
|
+
.map((log) => {
|
|
93
|
+
try {
|
|
94
|
+
return routingIsmFactory.interface.parseLog(log);
|
|
97
95
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const overrides = this.multiProvider.getTransactionOverrides(chain);
|
|
101
|
-
const tx = yield routingIsmFactory.deploy(domains, submoduleAddresses, overrides);
|
|
102
|
-
const receipt = yield this.multiProvider.handleTx(chain, tx);
|
|
103
|
-
// TODO: Break this out into a generalized function
|
|
104
|
-
const dispatchLogs = receipt.logs
|
|
105
|
-
.map((log) => {
|
|
106
|
-
try {
|
|
107
|
-
return routingIsmFactory.interface.parseLog(log);
|
|
108
|
-
}
|
|
109
|
-
catch (e) {
|
|
110
|
-
return undefined;
|
|
111
|
-
}
|
|
112
|
-
})
|
|
113
|
-
.filter((log) => !!log && log.name === 'ModuleDeployed');
|
|
114
|
-
const moduleAddress = dispatchLogs[0].args['module'];
|
|
115
|
-
const routingIsm = core_1.DomainRoutingIsm__factory.connect(moduleAddress, this.multiProvider.getSigner(chain));
|
|
116
|
-
this.logger(`Transferring ownership of routing ISM to ${config.owner}`);
|
|
117
|
-
yield this.multiProvider.handleTx(chain, yield routingIsm.transferOwnership(config.owner, overrides));
|
|
118
|
-
const address = dispatchLogs[0].args['module'];
|
|
119
|
-
return core_1.IRoutingIsm__factory.connect(address, signer);
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
deployAggregationIsm(chain, config) {
|
|
123
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
-
const signer = this.multiProvider.getSigner(chain);
|
|
125
|
-
const aggregationIsmFactory = this.getContracts(chain).aggregationIsmFactory;
|
|
126
|
-
const addresses = [];
|
|
127
|
-
for (const module of config.modules) {
|
|
128
|
-
addresses.push((yield this.deploy(chain, module)).address);
|
|
96
|
+
catch (e) {
|
|
97
|
+
return undefined;
|
|
129
98
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
99
|
+
})
|
|
100
|
+
.filter((log) => !!log && log.name === 'ModuleDeployed');
|
|
101
|
+
const moduleAddress = dispatchLogs[0].args['module'];
|
|
102
|
+
const routingIsm = core_1.DomainRoutingIsm__factory.connect(moduleAddress, this.multiProvider.getSigner(chain));
|
|
103
|
+
this.logger(`Transferring ownership of routing ISM to ${config.owner}`);
|
|
104
|
+
await this.multiProvider.handleTx(chain, await routingIsm.transferOwnership(config.owner, overrides));
|
|
105
|
+
const address = dispatchLogs[0].args['module'];
|
|
106
|
+
return core_1.IRoutingIsm__factory.connect(address, signer);
|
|
133
107
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
108
|
+
async deployAggregationIsm(chain, config) {
|
|
109
|
+
const signer = this.multiProvider.getSigner(chain);
|
|
110
|
+
const aggregationIsmFactory = this.getContracts(chain).aggregationIsmFactory;
|
|
111
|
+
const addresses = [];
|
|
112
|
+
for (const module of config.modules) {
|
|
113
|
+
addresses.push((await this.deploy(chain, module)).address);
|
|
114
|
+
}
|
|
115
|
+
const address = await this.deployMOfNFactory(chain, aggregationIsmFactory, addresses, config.threshold);
|
|
116
|
+
return core_1.IAggregationIsm__factory.connect(address, signer);
|
|
117
|
+
}
|
|
118
|
+
async deployMOfNFactory(chain, factory, values, threshold) {
|
|
119
|
+
const sorted = [...values].sort();
|
|
120
|
+
const address = await factory.getAddress(sorted, threshold);
|
|
121
|
+
const provider = this.multiProvider.getProvider(chain);
|
|
122
|
+
const code = await provider.getCode(address);
|
|
123
|
+
if (code === '0x') {
|
|
124
|
+
this.logger(`Deploying new ${threshold} of ${values.length} address set to ${chain}`);
|
|
125
|
+
const overrides = this.multiProvider.getTransactionOverrides(chain);
|
|
126
|
+
const hash = await factory.deploy(sorted, threshold, overrides);
|
|
127
|
+
await this.multiProvider.handleTx(chain, hash);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
this.logger(`Recovered ${threshold} of ${values.length} address set on ${chain}`);
|
|
131
|
+
}
|
|
132
|
+
return address;
|
|
151
133
|
}
|
|
152
134
|
}
|
|
153
135
|
exports.HyperlaneIsmFactory = HyperlaneIsmFactory;
|
|
@@ -156,155 +138,151 @@ exports.HyperlaneIsmFactory = HyperlaneIsmFactory;
|
|
|
156
138
|
// This can happen if, for example, the module has sender, recipient, or
|
|
157
139
|
// body specific logic, as the sample message used when querying the ISM
|
|
158
140
|
// sets all of these to zero.
|
|
159
|
-
function moduleCanCertainlyVerify(destModule, multiProvider, origin, destination) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
verified += 1;
|
|
187
|
-
}
|
|
141
|
+
async function moduleCanCertainlyVerify(destModule, multiProvider, origin, destination) {
|
|
142
|
+
const message = (0, utils_1.formatMessage)(0, 0, multiProvider.getDomainId(origin), ethers_1.ethers.constants.AddressZero, multiProvider.getDomainId(destination), ethers_1.ethers.constants.AddressZero, '0x');
|
|
143
|
+
const provider = multiProvider.getSignerOrProvider(destination);
|
|
144
|
+
if (typeof destModule === 'string') {
|
|
145
|
+
const module = core_1.IInterchainSecurityModule__factory.connect(destModule, provider);
|
|
146
|
+
try {
|
|
147
|
+
const moduleType = await module.moduleType();
|
|
148
|
+
if (moduleType === types_1.ModuleType.MERKLE_ROOT_MULTISIG ||
|
|
149
|
+
moduleType === types_1.ModuleType.LEGACY_MULTISIG ||
|
|
150
|
+
moduleType === types_1.ModuleType.MESSAGE_ID_MULTISIG) {
|
|
151
|
+
const multisigModule = core_1.IMultisigIsm__factory.connect(destModule, provider);
|
|
152
|
+
const [, threshold] = await multisigModule.validatorsAndThreshold(message);
|
|
153
|
+
return threshold > 0;
|
|
154
|
+
}
|
|
155
|
+
else if (moduleType === types_1.ModuleType.ROUTING) {
|
|
156
|
+
const routingIsm = core_1.IRoutingIsm__factory.connect(destModule, provider);
|
|
157
|
+
const subModule = await routingIsm.route(message);
|
|
158
|
+
return moduleCanCertainlyVerify(subModule, multiProvider, origin, destination);
|
|
159
|
+
}
|
|
160
|
+
else if (moduleType === types_1.ModuleType.AGGREGATION) {
|
|
161
|
+
const aggregationIsm = core_1.IAggregationIsm__factory.connect(destModule, provider);
|
|
162
|
+
const [subModules, threshold] = await aggregationIsm.modulesAndThreshold(message);
|
|
163
|
+
let verified = 0;
|
|
164
|
+
for (const subModule of subModules) {
|
|
165
|
+
const canVerify = await moduleCanCertainlyVerify(subModule, multiProvider, origin, destination);
|
|
166
|
+
if (canVerify) {
|
|
167
|
+
verified += 1;
|
|
188
168
|
}
|
|
189
|
-
return verified >= threshold;
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
throw new Error(`Unsupported module type: ${moduleType}`);
|
|
193
169
|
}
|
|
170
|
+
return verified >= threshold;
|
|
194
171
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
return false;
|
|
172
|
+
else {
|
|
173
|
+
throw new Error(`Unsupported module type: ${moduleType}`);
|
|
198
174
|
}
|
|
199
175
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
176
|
+
catch (e) {
|
|
177
|
+
(0, utils_1.warn)(`Error checking module ${destModule}: ${e}`);
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// destModule is an IsmConfig
|
|
183
|
+
switch (destModule.type) {
|
|
184
|
+
case types_1.ModuleType.MERKLE_ROOT_MULTISIG:
|
|
185
|
+
case types_1.ModuleType.MESSAGE_ID_MULTISIG:
|
|
186
|
+
case types_1.ModuleType.LEGACY_MULTISIG:
|
|
187
|
+
return destModule.threshold > 0;
|
|
188
|
+
case types_1.ModuleType.ROUTING:
|
|
189
|
+
return moduleCanCertainlyVerify(destModule.domains[destination], multiProvider, origin, destination);
|
|
190
|
+
case types_1.ModuleType.AGGREGATION: {
|
|
191
|
+
let verified = 0;
|
|
192
|
+
for (const subModule of destModule.modules) {
|
|
193
|
+
const canVerify = await moduleCanCertainlyVerify(subModule, multiProvider, origin, destination);
|
|
194
|
+
if (canVerify) {
|
|
195
|
+
verified += 1;
|
|
216
196
|
}
|
|
217
|
-
return verified >= destModule.threshold;
|
|
218
197
|
}
|
|
198
|
+
return verified >= destModule.threshold;
|
|
219
199
|
}
|
|
220
200
|
}
|
|
221
|
-
}
|
|
201
|
+
}
|
|
222
202
|
}
|
|
223
203
|
exports.moduleCanCertainlyVerify = moduleCanCertainlyVerify;
|
|
224
|
-
function moduleMatchesConfig(chain, moduleAddress, config, multiProvider, contracts, origin) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
throw new Error("Can't check legacy multisig without origin");
|
|
249
|
-
}
|
|
250
|
-
const originDomain = multiProvider.getDomainId(origin);
|
|
251
|
-
const validators = yield multisigIsm.validators(originDomain);
|
|
252
|
-
const threshold = yield multisigIsm.threshold(originDomain);
|
|
253
|
-
matches =
|
|
254
|
-
JSON.stringify(config.validators.map((s) => s.toLowerCase()).sort()) ===
|
|
255
|
-
JSON.stringify(validators.map((s) => s.toLowerCase()).sort()) &&
|
|
256
|
-
config.threshold === threshold;
|
|
257
|
-
break;
|
|
258
|
-
}
|
|
259
|
-
case types_1.ModuleType.ROUTING: {
|
|
260
|
-
// A RoutingIsm matches if:
|
|
261
|
-
// 1. The set of domains in the config equals those on-chain
|
|
262
|
-
// 2. The modules for each domain match the config
|
|
263
|
-
// TODO: Check (1)
|
|
264
|
-
const routingIsm = core_1.DomainRoutingIsm__factory.connect(moduleAddress, provider);
|
|
265
|
-
// Check that the RoutingISM owner matches the config
|
|
266
|
-
const owner = yield routingIsm.owner();
|
|
267
|
-
matches = matches && (0, utils_1.eqAddress)(owner, config.owner);
|
|
268
|
-
// Recursively check that the submodule for each configured
|
|
269
|
-
// domain matches the submodule config.
|
|
270
|
-
for (const [origin, subConfig] of Object.entries(config.domains)) {
|
|
271
|
-
const subModule = yield routingIsm.modules(multiProvider.getDomainId(origin));
|
|
272
|
-
const subModuleMatches = yield moduleMatchesConfig(chain, subModule, subConfig, multiProvider, contracts, origin);
|
|
273
|
-
matches = matches && subModuleMatches;
|
|
274
|
-
}
|
|
275
|
-
break;
|
|
204
|
+
async function moduleMatchesConfig(chain, moduleAddress, config, multiProvider, contracts, origin) {
|
|
205
|
+
const provider = multiProvider.getProvider(chain);
|
|
206
|
+
const module = core_1.IInterchainSecurityModule__factory.connect(moduleAddress, provider);
|
|
207
|
+
const actualType = await module.moduleType();
|
|
208
|
+
if (actualType !== config.type)
|
|
209
|
+
return false;
|
|
210
|
+
let matches = true;
|
|
211
|
+
switch (config.type) {
|
|
212
|
+
case types_1.ModuleType.MERKLE_ROOT_MULTISIG: {
|
|
213
|
+
// A MerkleRootMultisigIsm matches if validators and threshold match the config
|
|
214
|
+
const expectedAddress = await contracts.merkleRootMultisigIsmFactory.getAddress(config.validators.sort(), config.threshold);
|
|
215
|
+
matches = (0, utils_1.eqAddress)(expectedAddress, module.address);
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
case types_1.ModuleType.MESSAGE_ID_MULTISIG: {
|
|
219
|
+
// A MessageIdMultisigIsm matches if validators and threshold match the config
|
|
220
|
+
const expectedAddress = await contracts.messageIdMultisigIsmFactory.getAddress(config.validators.sort(), config.threshold);
|
|
221
|
+
matches = (0, utils_1.eqAddress)(expectedAddress, module.address);
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
case types_1.ModuleType.LEGACY_MULTISIG: {
|
|
225
|
+
const multisigIsm = core_1.LegacyMultisigIsm__factory.connect(moduleAddress, provider);
|
|
226
|
+
if (!origin) {
|
|
227
|
+
throw new Error("Can't check legacy multisig without origin");
|
|
276
228
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
229
|
+
const originDomain = multiProvider.getDomainId(origin);
|
|
230
|
+
const validators = await multisigIsm.validators(originDomain);
|
|
231
|
+
const threshold = await multisigIsm.threshold(originDomain);
|
|
232
|
+
matches =
|
|
233
|
+
JSON.stringify(config.validators.map((s) => s.toLowerCase()).sort()) ===
|
|
234
|
+
JSON.stringify(validators.map((s) => s.toLowerCase()).sort()) &&
|
|
235
|
+
config.threshold === threshold;
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
case types_1.ModuleType.ROUTING: {
|
|
239
|
+
// A RoutingIsm matches if:
|
|
240
|
+
// 1. The set of domains in the config equals those on-chain
|
|
241
|
+
// 2. The modules for each domain match the config
|
|
242
|
+
// TODO: Check (1)
|
|
243
|
+
const routingIsm = core_1.DomainRoutingIsm__factory.connect(moduleAddress, provider);
|
|
244
|
+
// Check that the RoutingISM owner matches the config
|
|
245
|
+
const owner = await routingIsm.owner();
|
|
246
|
+
matches = matches && (0, utils_1.eqAddress)(owner, config.owner);
|
|
247
|
+
// Recursively check that the submodule for each configured
|
|
248
|
+
// domain matches the submodule config.
|
|
249
|
+
for (const [origin, subConfig] of Object.entries(config.domains)) {
|
|
250
|
+
const subModule = await routingIsm.modules(multiProvider.getDomainId(origin));
|
|
251
|
+
const subModuleMatches = await moduleMatchesConfig(chain, subModule, subConfig, multiProvider, contracts, origin);
|
|
252
|
+
matches = matches && subModuleMatches;
|
|
301
253
|
}
|
|
302
|
-
|
|
303
|
-
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
case types_1.ModuleType.AGGREGATION: {
|
|
257
|
+
// An AggregationIsm matches if:
|
|
258
|
+
// 1. The threshold matches the config
|
|
259
|
+
// 2. There is a bijection between on and off-chain configured modules
|
|
260
|
+
const aggregationIsm = core_1.StaticAggregationIsm__factory.connect(moduleAddress, provider);
|
|
261
|
+
const [subModules, threshold] = await aggregationIsm.modulesAndThreshold('0x');
|
|
262
|
+
matches = matches && threshold === config.threshold;
|
|
263
|
+
matches = matches && subModules.length === config.modules.length;
|
|
264
|
+
const configIndexMatched = new Map();
|
|
265
|
+
for (const subModule of subModules) {
|
|
266
|
+
const subModuleMatchesConfig = await Promise.all(config.modules.map((c) => moduleMatchesConfig(chain, subModule, c, multiProvider, contracts)));
|
|
267
|
+
// The submodule returned by the ISM must match exactly one
|
|
268
|
+
// entry in the config.
|
|
269
|
+
const count = subModuleMatchesConfig.filter(Boolean).length;
|
|
270
|
+
matches = matches && count === 1;
|
|
271
|
+
// That entry in the config should not have been matched already.
|
|
272
|
+
subModuleMatchesConfig.forEach((matched, index) => {
|
|
273
|
+
if (matched) {
|
|
274
|
+
matches = matches && !configIndexMatched.has(index);
|
|
275
|
+
configIndexMatched.set(index, true);
|
|
276
|
+
}
|
|
277
|
+
});
|
|
304
278
|
}
|
|
279
|
+
break;
|
|
305
280
|
}
|
|
306
|
-
|
|
307
|
-
|
|
281
|
+
default: {
|
|
282
|
+
throw new Error('Unsupported ModuleType');
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return matches;
|
|
308
286
|
}
|
|
309
287
|
exports.moduleMatchesConfig = moduleMatchesConfig;
|
|
310
288
|
function collectValidators(origin, config) {
|