@hyperlane-xyz/cli 3.20.0-beta0 → 4.0.0-alpha
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 +1 -1
- package/dist/cli.js +10 -6
- package/dist/cli.js.map +1 -1
- package/dist/src/avs/config.d.ts +11 -0
- package/dist/src/avs/config.d.ts.map +1 -0
- package/dist/src/avs/config.js +10 -0
- package/dist/src/avs/config.js.map +1 -0
- package/dist/src/avs/stakeRegistry.d.ts +21 -0
- package/dist/src/avs/stakeRegistry.d.ts.map +1 -0
- package/dist/src/avs/stakeRegistry.js +64 -0
- package/dist/src/avs/stakeRegistry.js.map +1 -0
- package/dist/src/commands/avs.d.ts +12 -0
- package/dist/src/commands/avs.d.ts.map +1 -0
- package/dist/src/commands/avs.js +64 -0
- package/dist/src/commands/avs.js.map +1 -0
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +10 -60
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/core.d.ts +16 -0
- package/dist/src/commands/core.d.ts.map +1 -0
- package/dist/src/commands/core.js +88 -0
- package/dist/src/commands/core.js.map +1 -0
- package/dist/src/commands/deploy.d.ts +13 -0
- package/dist/src/commands/deploy.d.ts.map +1 -1
- package/dist/src/commands/deploy.js +22 -26
- package/dist/src/commands/deploy.js.map +1 -1
- package/dist/src/commands/options.d.ts +11 -5
- package/dist/src/commands/options.d.ts.map +1 -1
- package/dist/src/commands/options.js +45 -11
- package/dist/src/commands/options.js.map +1 -1
- package/dist/src/commands/registry.d.ts +6 -0
- package/dist/src/commands/registry.d.ts.map +1 -0
- package/dist/src/commands/{chains.js → registry.js} +3 -3
- package/dist/src/commands/registry.js.map +1 -0
- package/dist/src/commands/send.d.ts.map +1 -1
- package/dist/src/commands/send.js +2 -42
- package/dist/src/commands/send.js.map +1 -1
- package/dist/src/commands/validator.d.ts +3 -0
- package/dist/src/commands/validator.d.ts.map +1 -0
- package/dist/src/commands/validator.js +34 -0
- package/dist/src/commands/validator.js.map +1 -0
- package/dist/src/commands/{hook.d.ts → warp.d.ts} +6 -2
- package/dist/src/commands/warp.d.ts.map +1 -0
- package/dist/src/commands/warp.js +101 -0
- package/dist/src/commands/warp.js.map +1 -0
- package/dist/src/config/chain.d.ts.map +1 -1
- package/dist/src/config/chain.js +21 -9
- package/dist/src/config/chain.js.map +1 -1
- package/dist/src/config/hooks.d.ts +4528 -90
- package/dist/src/config/hooks.d.ts.map +1 -1
- package/dist/src/config/hooks.js +31 -97
- package/dist/src/config/hooks.js.map +1 -1
- package/dist/src/config/ism.d.ts +58 -61
- package/dist/src/config/ism.d.ts.map +1 -1
- package/dist/src/config/ism.js +40 -128
- package/dist/src/config/ism.js.map +1 -1
- package/dist/src/config/warp.d.ts +3 -2
- package/dist/src/config/warp.d.ts.map +1 -1
- package/dist/src/config/warp.js +112 -49
- package/dist/src/config/warp.js.map +1 -1
- package/dist/src/consts.d.ts +1 -0
- package/dist/src/consts.d.ts.map +1 -1
- package/dist/src/consts.js +1 -0
- package/dist/src/consts.js.map +1 -1
- package/dist/src/context/context.d.ts +1 -1
- package/dist/src/context/context.d.ts.map +1 -1
- package/dist/src/context/context.js +37 -15
- package/dist/src/context/context.js.map +1 -1
- package/dist/src/context/types.d.ts +1 -0
- package/dist/src/context/types.d.ts.map +1 -1
- package/dist/src/deploy/agent.js +1 -1
- package/dist/src/deploy/agent.js.map +1 -1
- package/dist/src/deploy/core.d.ts +4 -8
- package/dist/src/deploy/core.d.ts.map +1 -1
- package/dist/src/deploy/core.js +28 -232
- package/dist/src/deploy/core.js.map +1 -1
- package/dist/src/deploy/dry-run.d.ts +2 -2
- package/dist/src/deploy/dry-run.d.ts.map +1 -1
- package/dist/src/deploy/dry-run.js +1 -0
- package/dist/src/deploy/dry-run.js.map +1 -1
- package/dist/src/deploy/utils.d.ts +4 -7
- package/dist/src/deploy/utils.d.ts.map +1 -1
- package/dist/src/deploy/utils.js +22 -19
- package/dist/src/deploy/utils.js.map +1 -1
- package/dist/src/deploy/warp.d.ts.map +1 -1
- package/dist/src/deploy/warp.js +38 -123
- package/dist/src/deploy/warp.js.map +1 -1
- package/dist/src/send/message.d.ts.map +1 -1
- package/dist/src/send/message.js +15 -29
- package/dist/src/send/message.js.map +1 -1
- package/dist/src/send/transfer.d.ts.map +1 -1
- package/dist/src/send/transfer.js +5 -6
- package/dist/src/send/transfer.js.map +1 -1
- package/dist/src/submit/submit.d.ts +5 -0
- package/dist/src/submit/submit.d.ts.map +1 -0
- package/dist/src/submit/submit.js +30 -0
- package/dist/src/submit/submit.js.map +1 -0
- package/dist/src/submit/types.d.ts +18 -0
- package/dist/src/submit/types.d.ts.map +1 -0
- package/dist/src/submit/types.js +2 -0
- package/dist/src/submit/types.js.map +1 -0
- package/dist/src/tests/deployTestErc20.js +3 -2
- package/dist/src/tests/deployTestErc20.js.map +1 -1
- package/dist/src/tests/hooks.test.js +14 -8
- package/dist/src/tests/hooks.test.js.map +1 -1
- package/dist/src/tests/ism.test.js +1 -1
- package/dist/src/tests/ism.test.js.map +1 -1
- package/dist/src/utils/balances.d.ts +2 -2
- package/dist/src/utils/balances.d.ts.map +1 -1
- package/dist/src/utils/balances.js +8 -3
- package/dist/src/utils/balances.js.map +1 -1
- package/dist/src/utils/chains.d.ts +1 -0
- package/dist/src/utils/chains.d.ts.map +1 -1
- package/dist/src/utils/chains.js +20 -3
- package/dist/src/utils/chains.js.map +1 -1
- package/dist/src/utils/env.d.ts +3 -0
- package/dist/src/utils/env.d.ts.map +1 -1
- package/dist/src/utils/env.js +3 -0
- package/dist/src/utils/env.js.map +1 -1
- package/dist/src/utils/files.d.ts +1 -0
- package/dist/src/utils/files.d.ts.map +1 -1
- package/dist/src/utils/files.js +8 -0
- package/dist/src/utils/files.js.map +1 -1
- package/dist/src/utils/keys.d.ts +5 -3
- package/dist/src/utils/keys.d.ts.map +1 -1
- package/dist/src/utils/keys.js +16 -13
- package/dist/src/utils/keys.js.map +1 -1
- package/dist/src/validator/address.d.ts +10 -0
- package/dist/src/validator/address.d.ts.map +1 -0
- package/dist/src/validator/address.js +107 -0
- package/dist/src/validator/address.js.map +1 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.d.ts.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/examples/core-config.yaml +19 -0
- package/examples/hooks.yaml +8 -4
- package/examples/warp-route-deployment.yaml +2 -4
- package/package.json +7 -4
- package/dist/src/commands/chains.d.ts +0 -6
- package/dist/src/commands/chains.d.ts.map +0 -1
- package/dist/src/commands/chains.js.map +0 -1
- package/dist/src/commands/hook.d.ts.map +0 -1
- package/dist/src/commands/hook.js +0 -34
- package/dist/src/commands/hook.js.map +0 -1
- package/dist/src/commands/ism.d.ts +0 -12
- package/dist/src/commands/ism.d.ts.map +0 -1
- package/dist/src/commands/ism.js +0 -36
- package/dist/src/commands/ism.js.map +0 -1
- package/dist/src/registry/MergedRegistry.d.ts +0 -35
- package/dist/src/registry/MergedRegistry.d.ts.map +0 -1
- package/dist/src/registry/MergedRegistry.js +0 -83
- package/dist/src/registry/MergedRegistry.js.map +0 -1
|
@@ -1,19 +1,25 @@
|
|
|
1
|
+
import { GithubRegistry, MergedRegistry, } from '@hyperlane-xyz/registry';
|
|
2
|
+
import { FileSystemRegistry } from '@hyperlane-xyz/registry/fs';
|
|
1
3
|
import { MultiProvider } from '@hyperlane-xyz/sdk';
|
|
4
|
+
import { isHttpsUrl, isNullish, rootLogger } from '@hyperlane-xyz/utils';
|
|
2
5
|
import { isSignCommand } from '../commands/signCommands.js';
|
|
3
|
-
import { forkNetworkToMultiProvider } from '../deploy/dry-run.js';
|
|
4
|
-
import {
|
|
6
|
+
import { forkNetworkToMultiProvider, verifyAnvil } from '../deploy/dry-run.js';
|
|
7
|
+
import { logBlue } from '../logger.js';
|
|
5
8
|
import { runSingleChainSelectionStep } from '../utils/chains.js';
|
|
6
9
|
import { getImpersonatedSigner, getSigner } from '../utils/keys.js';
|
|
7
10
|
export async function contextMiddleware(argv) {
|
|
8
|
-
const isDryRun =
|
|
11
|
+
const isDryRun = !isNullish(argv.dryRun);
|
|
9
12
|
const requiresKey = isSignCommand(argv);
|
|
10
13
|
const settings = {
|
|
11
14
|
registryUri: argv.registry,
|
|
12
15
|
registryOverrideUri: argv.overrides,
|
|
13
16
|
key: argv.key,
|
|
17
|
+
fromAddress: argv.fromAddress,
|
|
14
18
|
requiresKey,
|
|
15
19
|
skipConfirmation: argv.yes,
|
|
16
20
|
};
|
|
21
|
+
if (!isDryRun && settings.fromAddress)
|
|
22
|
+
throw new Error("'--from-address' or '-f' should only be used for dry-runs");
|
|
17
23
|
const context = isDryRun
|
|
18
24
|
? await getDryRunContext(settings, argv.dryRun)
|
|
19
25
|
: await getContext(settings);
|
|
@@ -26,7 +32,7 @@ export async function contextMiddleware(argv) {
|
|
|
26
32
|
export async function getContext({ registryUri, registryOverrideUri, key, requiresKey, skipConfirmation, }) {
|
|
27
33
|
const registry = getRegistry(registryUri, registryOverrideUri);
|
|
28
34
|
let signer = undefined;
|
|
29
|
-
if (requiresKey) {
|
|
35
|
+
if (key || requiresKey) {
|
|
30
36
|
({ key, signer } = await getSigner({ key, skipConfirmation }));
|
|
31
37
|
}
|
|
32
38
|
const multiProvider = await getMultiProvider(registry, signer);
|
|
@@ -43,17 +49,20 @@ export async function getContext({ registryUri, registryOverrideUri, key, requir
|
|
|
43
49
|
* Retrieves dry-run context for the user-selected command
|
|
44
50
|
* @returns dry-run context for the current command
|
|
45
51
|
*/
|
|
46
|
-
export async function getDryRunContext({ registryUri, registryOverrideUri, key, skipConfirmation }, chain) {
|
|
47
|
-
const registry = getRegistry(registryUri, registryOverrideUri
|
|
52
|
+
export async function getDryRunContext({ registryUri, registryOverrideUri, key, fromAddress, skipConfirmation, }, chain) {
|
|
53
|
+
const registry = getRegistry(registryUri, registryOverrideUri);
|
|
48
54
|
const chainMetadata = await registry.getMetadata();
|
|
49
55
|
if (!chain) {
|
|
50
56
|
if (skipConfirmation)
|
|
51
57
|
throw new Error('No chains provided');
|
|
52
58
|
chain = await runSingleChainSelectionStep(chainMetadata, 'Select chain to dry-run against:');
|
|
53
59
|
}
|
|
54
|
-
|
|
55
|
-
await
|
|
56
|
-
|
|
60
|
+
logBlue(`Dry-running against chain: ${chain}`);
|
|
61
|
+
await verifyAnvil();
|
|
62
|
+
let multiProvider = await getMultiProvider(registry);
|
|
63
|
+
multiProvider = await forkNetworkToMultiProvider(multiProvider, chain);
|
|
64
|
+
const { impersonatedKey, impersonatedSigner } = await getImpersonatedSigner({
|
|
65
|
+
fromAddress,
|
|
57
66
|
key,
|
|
58
67
|
skipConfirmation,
|
|
59
68
|
});
|
|
@@ -76,13 +85,26 @@ export async function getDryRunContext({ registryUri, registryOverrideUri, key,
|
|
|
76
85
|
* and an override one (such as a local directory)
|
|
77
86
|
* @returns a new MergedRegistry
|
|
78
87
|
*/
|
|
79
|
-
function getRegistry(primaryRegistryUri, overrideRegistryUri
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
.
|
|
88
|
+
function getRegistry(primaryRegistryUri, overrideRegistryUri) {
|
|
89
|
+
const logger = rootLogger.child({ module: 'MergedRegistry' });
|
|
90
|
+
const registries = [primaryRegistryUri, overrideRegistryUri]
|
|
91
|
+
.map((uri) => uri.trim())
|
|
92
|
+
.filter((uri) => !!uri)
|
|
93
|
+
.map((uri, index) => {
|
|
94
|
+
const childLogger = logger.child({ uri, index });
|
|
95
|
+
if (isHttpsUrl(uri)) {
|
|
96
|
+
return new GithubRegistry({ uri, logger: childLogger });
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return new FileSystemRegistry({
|
|
100
|
+
uri,
|
|
101
|
+
logger: childLogger,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
});
|
|
83
105
|
return new MergedRegistry({
|
|
84
|
-
|
|
85
|
-
|
|
106
|
+
registries,
|
|
107
|
+
logger,
|
|
86
108
|
});
|
|
87
109
|
}
|
|
88
110
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/context/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/context/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/context/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,aAAa,EACd,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IACvC,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,wBAAwB,CAAC,IAAI,IAAI,aAAa,CACxD,EAAE,EACF,IAAI,GAAG;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,CACnC,CAAC;AAEF,MAAM,MAAM,6BAA6B,CAAC,IAAI,IAAI,aAAa,CAC7D,EAAE,EACF,IAAI,GAAG;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,CACxC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/context/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,aAAa,EACd,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IACvC,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,wBAAwB,CAAC,IAAI,IAAI,aAAa,CACxD,EAAE,EACF,IAAI,GAAG;IAAE,OAAO,EAAE,cAAc,CAAA;CAAE,CACnC,CAAC;AAEF,MAAM,MAAM,6BAA6B,CAAC,IAAI,IAAI,aAAa,CAC7D,EAAE,EACF,IAAI,GAAG;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,CACxC,CAAC"}
|
package/dist/src/deploy/agent.js
CHANGED
|
@@ -28,7 +28,7 @@ export async function runKurtosisAgentDeploy({ context, originChain, relayChains
|
|
|
28
28
|
};
|
|
29
29
|
const base64EncodedPackageConfig = toBase64(kurtosisPackageConfig) || '';
|
|
30
30
|
const kurtosisCloudUrl = getKurtosisCloudUrl(base64EncodedPackageConfig);
|
|
31
|
-
const kurtosisCloudLink = terminalLink('
|
|
31
|
+
const kurtosisCloudLink = terminalLink('Kurtosis Cloud Link 🔗 (cmd+click or ctrl+click here)', kurtosisCloudUrl, { fallback: () => kurtosisCloudUrl });
|
|
32
32
|
logGreen('\n', 'Click the link below to deploy your validator and relayer with Kurtosis:', '\n', `${kurtosisCloudLink}`);
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/deploy/agent.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAC3C,OAAO,EACP,WAAW,EACX,WAAW,EACX,sBAAsB,GAMvB;IACC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,MAAM,2BAA2B,CAC7C,OAAO,CAAC,aAAa,EACrB,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,mBAAmB,GAAG,MAAM,0BAA0B,CAC1D,OAAO,CAAC,aAAa,EACrB,gCAAgC,EAChC,IAAI,CACL,CAAC;QACF,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,OAAO,CACL,IAAI,EACJ,mFAAmF,CACpF,CAAC;QACF,sBAAsB,GAAG,MAAM,oBAAoB,CACjD,WAAW,EACX,mBAAmB,EACnB,cAAc,CACf,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG,QAAQ,CAAM,sBAAsB,CAAC,CAAC;IAEhE,MAAM,oBAAoB,GAAG;QAC3B,IAAI,EAAE,IAAI;QACV,iBAAiB,EAAE,WAAW;QAC9B,YAAY,EAAE,WAAW;QACzB,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;KACrD,CAAC;IAEF,MAAM,qBAAqB,GAAG;QAC5B,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,oBAAoB;KAC3B,CAAC;IAEF,MAAM,0BAA0B,GAAG,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;IACzE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,0BAA0B,CAAC,CAAC;IAEzE,MAAM,iBAAiB,GAAG,YAAY,CACpC,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/deploy/agent.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAC3C,OAAO,EACP,WAAW,EACX,WAAW,EACX,sBAAsB,GAMvB;IACC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,MAAM,2BAA2B,CAC7C,OAAO,CAAC,aAAa,EACrB,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,mBAAmB,GAAG,MAAM,0BAA0B,CAC1D,OAAO,CAAC,aAAa,EACrB,gCAAgC,EAChC,IAAI,CACL,CAAC;QACF,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,OAAO,CACL,IAAI,EACJ,mFAAmF,CACpF,CAAC;QACF,sBAAsB,GAAG,MAAM,oBAAoB,CACjD,WAAW,EACX,mBAAmB,EACnB,cAAc,CACf,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,GAAG,QAAQ,CAAM,sBAAsB,CAAC,CAAC;IAEhE,MAAM,oBAAoB,GAAG;QAC3B,IAAI,EAAE,IAAI;QACV,iBAAiB,EAAE,WAAW;QAC9B,YAAY,EAAE,WAAW;QACzB,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;KACrD,CAAC;IAEF,MAAM,qBAAqB,GAAG;QAC5B,eAAe,EAAE,IAAI;QACrB,IAAI,EAAE,oBAAoB;KAC3B,CAAC;IAEF,MAAM,0BAA0B,GAAG,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;IACzE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,0BAA0B,CAAC,CAAC;IAEzE,MAAM,iBAAiB,GAAG,YAAY,CACpC,uDAAuD,EACvD,gBAAgB,EAChB,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE,CACrC,CAAC;IAEF,QAAQ,CACN,IAAI,EACJ,0EAA0E,EAC1E,IAAI,EACJ,GAAG,iBAAiB,EAAE,CACvB,CAAC;IACF,OAAO;AACT,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,YAAoB,EAAE,EAAE,CACnD,qHAAqH,YAAY,EAAE,CAAC"}
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Address } from '@hyperlane-xyz/utils';
|
|
1
|
+
import { ChainName, CoreConfig } from '@hyperlane-xyz/sdk';
|
|
3
2
|
import { WriteCommandContext } from '../context/types.js';
|
|
4
3
|
/**
|
|
5
4
|
* Executes the core deploy command.
|
|
6
5
|
*/
|
|
7
|
-
export declare function runCoreDeploy({ context,
|
|
6
|
+
export declare function runCoreDeploy({ context, chain, config, }: {
|
|
8
7
|
context: WriteCommandContext;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
hookConfigPath?: string;
|
|
12
|
-
agentOutPath: string;
|
|
8
|
+
chain: ChainName;
|
|
9
|
+
config: CoreConfig;
|
|
13
10
|
}): Promise<void>;
|
|
14
|
-
export declare function buildIgpConfigMap(owner: Address, chains: ChainName[], multisigConfigs: ChainMap<MultisigConfig>): ChainMap<IgpConfig>;
|
|
15
11
|
//# sourceMappingURL=core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/deploy/core.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/deploy/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAiB,MAAM,oBAAoB,CAAC;AAG1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAgB1D;;GAEG;AACH,wBAAsB,aAAa,CAAC,EAClC,OAAO,EACP,KAAK,EACL,MAAM,GACP,EAAE;IACD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;CACpB,iBAwDA"}
|
package/dist/src/deploy/core.js
CHANGED
|
@@ -1,254 +1,50 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ethers } from 'ethers';
|
|
3
|
-
import { GasOracleContractType, HyperlaneCore, HyperlaneCoreDeployer, HyperlaneIsmFactory, HyperlaneProxyFactoryDeployer, IsmType, buildAgentConfig, buildAggregationIsmConfigs, defaultMultisigConfigs, multisigIsmVerificationCost, serializeContractsMap, } from '@hyperlane-xyz/sdk';
|
|
4
|
-
import { objFilter, objMap, objMerge } from '@hyperlane-xyz/utils';
|
|
5
|
-
import { presetHookConfigs, readHooksConfigMap } from '../config/hooks.js';
|
|
6
|
-
import { readIsmConfig } from '../config/ism.js';
|
|
7
|
-
import { readMultisigConfig } from '../config/multisig.js';
|
|
1
|
+
import { EvmCoreModule } from '@hyperlane-xyz/sdk';
|
|
8
2
|
import { MINIMUM_CORE_DEPLOY_GAS } from '../consts.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { completeDeploy, isISMConfig, isZODISMConfig, prepareDeploy, runPreflightChecksForChains, } from './utils.js';
|
|
13
|
-
const CONTRACT_CACHE_EXCLUSIONS = ['interchainGasPaymaster'];
|
|
3
|
+
import { logBlue } from '../logger.js';
|
|
4
|
+
import { runSingleChainSelectionStep } from '../utils/chains.js';
|
|
5
|
+
import { completeDeploy, prepareDeploy, runDeployPlanStep, runPreflightChecksForChains, } from './utils.js';
|
|
14
6
|
/**
|
|
15
7
|
* Executes the core deploy command.
|
|
16
8
|
*/
|
|
17
|
-
export async function runCoreDeploy({ context,
|
|
18
|
-
const {
|
|
19
|
-
if
|
|
20
|
-
|
|
21
|
-
|
|
9
|
+
export async function runCoreDeploy({ context, chain, config, }) {
|
|
10
|
+
const { signer, isDryRun, chainMetadata, dryRunChain, registry, skipConfirmation, } = context;
|
|
11
|
+
// Select a dry-run chain if it's not supplied
|
|
12
|
+
if (dryRunChain) {
|
|
13
|
+
chain = dryRunChain;
|
|
14
|
+
}
|
|
15
|
+
else if (!chain) {
|
|
22
16
|
if (skipConfirmation)
|
|
23
|
-
throw new Error('No
|
|
24
|
-
|
|
17
|
+
throw new Error('No chain provided');
|
|
18
|
+
chain = await runSingleChainSelectionStep(chainMetadata, 'Select chain to connect:');
|
|
25
19
|
}
|
|
26
|
-
const result = await runIsmStep(chains, skipConfirmation, ismConfigPath);
|
|
27
|
-
// we can either specify the full ISM config or just the multisig config
|
|
28
|
-
const isIsmConfig = isISMConfig(result);
|
|
29
|
-
const ismConfigs = isIsmConfig ? result : undefined;
|
|
30
|
-
const multisigConfigs = isIsmConfig
|
|
31
|
-
? defaultMultisigConfigs
|
|
32
|
-
: result;
|
|
33
|
-
const hooksConfig = await runHookStep(chains, hookConfigPath);
|
|
34
20
|
const deploymentParams = {
|
|
35
21
|
context,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
multisigConfigs,
|
|
39
|
-
hooksConfig,
|
|
40
|
-
agentOutPath,
|
|
22
|
+
chain,
|
|
23
|
+
config,
|
|
41
24
|
};
|
|
42
25
|
await runDeployPlanStep(deploymentParams);
|
|
43
26
|
await runPreflightChecksForChains({
|
|
44
27
|
...deploymentParams,
|
|
28
|
+
chains: [chain],
|
|
45
29
|
minGas: MINIMUM_CORE_DEPLOY_GAS,
|
|
46
30
|
});
|
|
47
31
|
const userAddress = await signer.getAddress();
|
|
48
|
-
const initialBalances = await prepareDeploy(context, userAddress,
|
|
49
|
-
await executeDeploy(deploymentParams);
|
|
50
|
-
await completeDeploy(context, 'core', initialBalances, userAddress, chains);
|
|
51
|
-
}
|
|
52
|
-
async function runIsmStep(selectedChains, skipConfirmation, ismConfigPath) {
|
|
53
|
-
if (!ismConfigPath) {
|
|
54
|
-
logBlue('\n', 'Hyperlane instances requires an Interchain Security Module (ISM).');
|
|
55
|
-
logGray('Example config: https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/main/cli/typescript/cli/examples/ism.yaml');
|
|
56
|
-
if (skipConfirmation)
|
|
57
|
-
throw new Error('ISM config required');
|
|
58
|
-
ismConfigPath = await runFileSelectionStep('./configs', 'ISM config', 'ism');
|
|
59
|
-
}
|
|
60
|
-
const isAdvancedIsm = isZODISMConfig(ismConfigPath);
|
|
61
|
-
// separate flow for 'ism' and 'ism-advanced' options
|
|
62
|
-
if (isAdvancedIsm) {
|
|
63
|
-
logBoldUnderlinedRed('WARNING: YOU ARE DEPLOYING WITH AN ADVANCED ISM CONFIG');
|
|
64
|
-
logRed('Advanced ISM configs require knowledge of different ISM types and how they work together topologically. If possible, use the basic ISM configs are recommended.');
|
|
65
|
-
const ismConfig = readIsmConfig(ismConfigPath);
|
|
66
|
-
const requiredIsms = objFilter(ismConfig, (chain, config) => selectedChains.includes(chain));
|
|
67
|
-
// selected chains - (user configs + default configs) = missing config
|
|
68
|
-
const missingConfigs = selectedChains.filter((c) => !Object.keys(ismConfig).includes(c));
|
|
69
|
-
if (missingConfigs.length > 0) {
|
|
70
|
-
throw new Error(`Missing advanced ISM config for one or more chains: ${missingConfigs.join(', ')}`);
|
|
71
|
-
}
|
|
72
|
-
log(`Found configs for chains: ${selectedChains.join(', ')}`);
|
|
73
|
-
return requiredIsms;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
const multisigConfigs = {
|
|
77
|
-
...defaultMultisigConfigs,
|
|
78
|
-
...readMultisigConfig(ismConfigPath),
|
|
79
|
-
};
|
|
80
|
-
const requiredMultisigs = objFilter(multisigConfigs, (chain, config) => selectedChains.includes(chain));
|
|
81
|
-
// selected chains - (user configs + default configs) = missing config
|
|
82
|
-
const missingConfigs = selectedChains.filter((c) => !Object.keys(requiredMultisigs).includes(c));
|
|
83
|
-
if (missingConfigs.length > 0) {
|
|
84
|
-
throw new Error(`Missing ISM config for one or more chains: ${missingConfigs.join(', ')}`);
|
|
85
|
-
}
|
|
86
|
-
log(`Found configs for chains: ${selectedChains.join(', ')}`);
|
|
87
|
-
return requiredMultisigs;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
async function runHookStep(_selectedChains, hookConfigPath) {
|
|
91
|
-
if (!hookConfigPath)
|
|
92
|
-
return {};
|
|
93
|
-
return readHooksConfigMap(hookConfigPath);
|
|
94
|
-
}
|
|
95
|
-
async function runDeployPlanStep({ context, chains }) {
|
|
96
|
-
const { signer, skipConfirmation } = context;
|
|
97
|
-
const address = await signer.getAddress();
|
|
98
|
-
logBlue('\nDeployment plan');
|
|
99
|
-
logGray('===============');
|
|
100
|
-
log(`Transaction signer and owner of new contracts will be ${address}`);
|
|
101
|
-
log(`Deploying to ${chains.join(', ')}`);
|
|
102
|
-
log(`There are several contracts required for each chain but contracts in your provided registries will be skipped`);
|
|
103
|
-
if (skipConfirmation)
|
|
104
|
-
return;
|
|
105
|
-
const isConfirmed = await confirm({
|
|
106
|
-
message: 'Is this deployment plan correct?',
|
|
107
|
-
});
|
|
108
|
-
if (!isConfirmed)
|
|
109
|
-
throw new Error('Deployment cancelled');
|
|
110
|
-
}
|
|
111
|
-
async function executeDeploy({ context, chains, ismConfigs = {}, multisigConfigs = {}, hooksConfig = {}, agentOutPath, }) {
|
|
32
|
+
const initialBalances = await prepareDeploy(context, userAddress, [chain]);
|
|
112
33
|
logBlue('All systems ready, captain! Beginning deployment...');
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
let artifacts = {};
|
|
118
|
-
// 1. Deploy ISM factories to all deployable chains that don't have them.
|
|
119
|
-
logBlue('Deploying ISM factory contracts');
|
|
120
|
-
const ismFactoryDeployer = new HyperlaneProxyFactoryDeployer(multiProvider);
|
|
121
|
-
ismFactoryDeployer.cacheAddressesMap(chainAddresses);
|
|
122
|
-
const ismFactoryConfig = chains.reduce((chainMap, curr) => {
|
|
123
|
-
chainMap[curr] = {};
|
|
124
|
-
return chainMap;
|
|
125
|
-
}, {});
|
|
126
|
-
const ismFactoryContracts = await ismFactoryDeployer.deploy(ismFactoryConfig);
|
|
127
|
-
artifacts = await updateChainAddresses(registry, ismFactoryContracts, artifacts);
|
|
128
|
-
logGreen('ISM factory contracts deployed');
|
|
129
|
-
// Build an IsmFactory that covers all chains so that we can
|
|
130
|
-
// use it to deploy ISMs to remote chains.
|
|
131
|
-
const ismFactory = HyperlaneIsmFactory.fromAddressesMap(chainAddresses, multiProvider);
|
|
132
|
-
// 3. Construct ISM configs for all deployable chains
|
|
133
|
-
const defaultIsms = {};
|
|
134
|
-
for (const ismOrigin of chains) {
|
|
135
|
-
defaultIsms[ismOrigin] =
|
|
136
|
-
ismConfigs[ismOrigin] ??
|
|
137
|
-
buildIsmConfig(owner, ismOrigin, chains, multisigConfigs);
|
|
138
|
-
}
|
|
139
|
-
// 4. Deploy core contracts to chains
|
|
140
|
-
logBlue(`Deploying core contracts to ${chains.join(', ')}`);
|
|
141
|
-
const coreDeployer = new HyperlaneCoreDeployer(multiProvider, ismFactory);
|
|
142
|
-
coreDeployer.cacheAddressesMap(chainAddresses);
|
|
143
|
-
const coreConfigs = buildCoreConfigMap(owner, chains, defaultIsms, hooksConfig);
|
|
144
|
-
const coreContracts = await coreDeployer.deploy(coreConfigs);
|
|
145
|
-
// 4.5 recover the toplevel ISM address
|
|
146
|
-
const isms = {};
|
|
147
|
-
for (const chain of chains) {
|
|
148
|
-
isms[chain] = {
|
|
149
|
-
interchainSecurityModule: coreDeployer.cachedAddresses[chain].interchainSecurityModule,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
artifacts = objMerge(artifacts, isms);
|
|
153
|
-
artifacts = await updateChainAddresses(registry, coreContracts, artifacts);
|
|
154
|
-
logGreen('✅ Core contracts deployed');
|
|
155
|
-
log(JSON.stringify(artifacts, null, 2));
|
|
156
|
-
await writeAgentConfig(context, artifacts, chains, agentOutPath);
|
|
157
|
-
logBlue('Deployment is complete!');
|
|
158
|
-
}
|
|
159
|
-
function filterAddressesToCache(addressesMap) {
|
|
160
|
-
// Filter out the certain addresses that must always be
|
|
161
|
-
// deployed when deploying to a PI chain.
|
|
162
|
-
// See https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/2983
|
|
163
|
-
// And https://github.com/hyperlane-xyz/hyperlane-monorepo/pull/3183
|
|
164
|
-
return objMap(addressesMap, (_chain, addresses) => objFilter(addresses, (contract, _address) => !CONTRACT_CACHE_EXCLUSIONS.includes(contract)));
|
|
165
|
-
}
|
|
166
|
-
function buildIsmConfig(owner, local, chains, multisigIsmConfigs) {
|
|
167
|
-
const aggregationIsmConfigs = buildAggregationIsmConfigs(local, chains, multisigIsmConfigs);
|
|
168
|
-
return {
|
|
169
|
-
owner,
|
|
170
|
-
type: IsmType.ROUTING,
|
|
171
|
-
domains: aggregationIsmConfigs,
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
function buildCoreConfigMap(owner, chains, defaultIsms, hooksConfig) {
|
|
175
|
-
return chains.reduce((config, chain) => {
|
|
176
|
-
const hooks = hooksConfig[chain] ?? presetHookConfigs(owner);
|
|
177
|
-
config[chain] = {
|
|
178
|
-
owner,
|
|
179
|
-
defaultIsm: defaultIsms[chain],
|
|
180
|
-
defaultHook: hooks.default,
|
|
181
|
-
requiredHook: hooks.required,
|
|
182
|
-
};
|
|
183
|
-
return config;
|
|
184
|
-
}, {});
|
|
185
|
-
}
|
|
186
|
-
export function buildIgpConfigMap(owner, chains, multisigConfigs) {
|
|
187
|
-
const configMap = {};
|
|
188
|
-
for (const chain of chains) {
|
|
189
|
-
const overhead = {};
|
|
190
|
-
const gasOracleType = {};
|
|
191
|
-
for (const remote of chains) {
|
|
192
|
-
if (chain === remote)
|
|
193
|
-
continue;
|
|
194
|
-
// TODO: accurate estimate of gas from ChainMap<ISMConfig>
|
|
195
|
-
const threshold = multisigConfigs[remote]
|
|
196
|
-
? multisigConfigs[remote].threshold
|
|
197
|
-
: 2;
|
|
198
|
-
const validatorsLength = multisigConfigs[remote]
|
|
199
|
-
? multisigConfigs[remote].validators.length
|
|
200
|
-
: 3;
|
|
201
|
-
overhead[remote] = multisigIsmVerificationCost(threshold, validatorsLength);
|
|
202
|
-
gasOracleType[remote] = GasOracleContractType.StorageGasOracle;
|
|
203
|
-
}
|
|
204
|
-
configMap[chain] = {
|
|
205
|
-
owner,
|
|
206
|
-
beneficiary: owner,
|
|
207
|
-
gasOracleType,
|
|
208
|
-
overhead,
|
|
209
|
-
oracleKey: owner,
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
return configMap;
|
|
213
|
-
}
|
|
214
|
-
async function updateChainAddresses(registry, newContracts, otherAddresses) {
|
|
215
|
-
let newAddresses = serializeContractsMap(newContracts);
|
|
216
|
-
// The HyperlaneCoreDeployer is returning a nested object with ISM addresses
|
|
217
|
-
// from other chains, which don't need to be in the artifacts atm.
|
|
218
|
-
newAddresses = objMap(newAddresses, (_, newChainAddresses) => {
|
|
219
|
-
// For each chain in the addresses chainmap, filter the values to those that are just strings
|
|
220
|
-
return objFilter(newChainAddresses, (_, value) => typeof value === 'string');
|
|
34
|
+
const evmCoreModule = await EvmCoreModule.create({
|
|
35
|
+
chain,
|
|
36
|
+
config,
|
|
37
|
+
multiProvider: context.multiProvider,
|
|
221
38
|
});
|
|
222
|
-
|
|
223
|
-
|
|
39
|
+
await completeDeploy(context, 'core', initialBalances, userAddress, [chain]);
|
|
40
|
+
const deployedAddresses = evmCoreModule.serialize();
|
|
41
|
+
if (!isDryRun) {
|
|
224
42
|
await registry.updateChain({
|
|
225
|
-
chainName,
|
|
226
|
-
addresses:
|
|
43
|
+
chainName: chain,
|
|
44
|
+
addresses: deployedAddresses,
|
|
227
45
|
});
|
|
46
|
+
// @TODO implement writeAgentConfig
|
|
228
47
|
}
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
async function writeAgentConfig(context, artifacts, chains, outPath) {
|
|
232
|
-
if (context.isDryRun)
|
|
233
|
-
return;
|
|
234
|
-
log('Writing agent configs');
|
|
235
|
-
const { multiProvider, registry } = context;
|
|
236
|
-
const startBlocks = {};
|
|
237
|
-
const core = HyperlaneCore.fromAddressesMap(artifacts, multiProvider);
|
|
238
|
-
for (const chain of chains) {
|
|
239
|
-
const mailbox = core.getContracts(chain).mailbox;
|
|
240
|
-
startBlocks[chain] = (await mailbox.deployedBlock()).toNumber();
|
|
241
|
-
}
|
|
242
|
-
const chainAddresses = await registry.getAddresses();
|
|
243
|
-
for (const chain of chains) {
|
|
244
|
-
if (!chainAddresses[chain].interchainGasPaymaster) {
|
|
245
|
-
chainAddresses[chain].interchainGasPaymaster =
|
|
246
|
-
ethers.constants.AddressZero;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
const agentConfig = buildAgentConfig(chains, // Use only the chains that were deployed to
|
|
250
|
-
multiProvider, chainAddresses, startBlocks);
|
|
251
|
-
writeJson(outPath, agentConfig);
|
|
252
|
-
logGreen('Agent configs written');
|
|
48
|
+
logBlue('Deployment is complete!');
|
|
253
49
|
}
|
|
254
50
|
//# sourceMappingURL=core.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/deploy/core.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/deploy/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EACL,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,OAAO,EACP,KAAK,EACL,MAAM,GAKP;IACC,MAAM,EACJ,MAAM,EACN,QAAQ,EACR,aAAa,EACb,WAAW,EACX,QAAQ,EACR,gBAAgB,GACjB,GAAG,OAAO,CAAC;IAEZ,8CAA8C;IAC9C,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,GAAG,WAAW,CAAC;IACtB,CAAC;SAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,gBAAgB;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC3D,KAAK,GAAG,MAAM,2BAA2B,CACvC,aAAa,EACb,0BAA0B,CAC3B,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GAAiB;QACrC,OAAO;QACP,KAAK;QACL,MAAM;KACP,CAAC;IAEF,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC1C,MAAM,2BAA2B,CAAC;QAChC,GAAG,gBAAgB;QACnB,MAAM,EAAE,CAAC,KAAK,CAAC;QACf,MAAM,EAAE,uBAAuB;KAChC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAE9C,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAE3E,OAAO,CAAC,qDAAqD,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC;QAC/C,KAAK;QACL,MAAM;QACN,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;IAEH,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,MAAM,iBAAiB,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;IAEpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,QAAQ,CAAC,WAAW,CAAC;YACzB,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,iBAAiB;SAC7B,CAAC,CAAC;QAEH,mCAAmC;IACrC,CAAC;IACD,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { MultiProvider } from '@hyperlane-xyz/sdk';
|
|
|
4
4
|
* @param multiProvider the MultiProvider to be prepared
|
|
5
5
|
* @param chains the chain selection passed-in by the user
|
|
6
6
|
*/
|
|
7
|
-
export declare function forkNetworkToMultiProvider(multiProvider: MultiProvider, chain: string): Promise<
|
|
7
|
+
export declare function forkNetworkToMultiProvider(multiProvider: MultiProvider, chain: string): Promise<MultiProvider<{}>>;
|
|
8
8
|
/**
|
|
9
9
|
* Ensures an anvil node is running locally.
|
|
10
10
|
*/
|
|
@@ -14,6 +14,6 @@ export declare function verifyAnvil(): Promise<void>;
|
|
|
14
14
|
* @param error the thrown error
|
|
15
15
|
* @param dryRun the chain name to execute the dry-run on
|
|
16
16
|
*/
|
|
17
|
-
export declare function evaluateIfDryRunFailure(error: any, dryRun:
|
|
17
|
+
export declare function evaluateIfDryRunFailure(error: any, dryRun: string): void;
|
|
18
18
|
export declare function completeDryRun(command: string): Promise<void>;
|
|
19
19
|
//# sourceMappingURL=dry-run.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../../../src/deploy/dry-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EAId,MAAM,oBAAoB,CAAC;AAO5B;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../../../src/deploy/dry-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EAId,MAAM,oBAAoB,CAAC;AAO5B;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,MAAM,8BAQd;AAED;;GAEG;AACH,wBAAsB,WAAW,kBAahC;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,QAKjE;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,iBAInD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../../src/deploy/dry-run.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,gBAAgB,EAChB,SAAS,EACT,OAAO,GACR,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,aAA4B,EAC5B,KAAa;IAEb,aAAa,GAAG,aAAa,CAAC,mBAAmB,CAAC;QAChD,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE;KAC1C,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../../src/deploy/dry-run.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,gBAAgB,EAChB,SAAS,EACT,OAAO,GACR,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,aAA4B,EAC5B,KAAa;IAEb,aAAa,GAAG,aAAa,CAAC,mBAAmB,CAAC;QAChD,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE;KAC1C,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACpC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,OAAO,CAAC,uCAAuC,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC;+CACyB,CAAC,CAAC;IAC/C,CAAC;IAED,QAAQ,CAAC,+CAA+C,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAU,EAAE,MAAc;IAChE,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC3D,UAAU,CACR,uGAAuG,CACxG,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,MAAM,SAAS,EAAE,CAAC;IAElB,QAAQ,CAAC,KAAK,gBAAgB,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;AAC5E,CAAC"}
|
|
@@ -2,19 +2,16 @@ import { BigNumber } from 'ethers';
|
|
|
2
2
|
import { ChainMap, ChainName, IsmConfig, MultisigConfig } from '@hyperlane-xyz/sdk';
|
|
3
3
|
import { Address } from '@hyperlane-xyz/utils';
|
|
4
4
|
import { WriteCommandContext } from '../context/types.js';
|
|
5
|
-
export declare function runPreflightChecks({ context, origin, remotes, minGas, chainsToGasCheck, }: {
|
|
6
|
-
context: WriteCommandContext;
|
|
7
|
-
origin: ChainName;
|
|
8
|
-
remotes: ChainName[];
|
|
9
|
-
minGas: string;
|
|
10
|
-
chainsToGasCheck?: ChainName[];
|
|
11
|
-
}): Promise<void>;
|
|
12
5
|
export declare function runPreflightChecksForChains({ context, chains, minGas, chainsToGasCheck, }: {
|
|
13
6
|
context: WriteCommandContext;
|
|
14
7
|
chains: ChainName[];
|
|
15
8
|
minGas: string;
|
|
16
9
|
chainsToGasCheck?: ChainName[];
|
|
17
10
|
}): Promise<void>;
|
|
11
|
+
export declare function runDeployPlanStep({ context, chain, }: {
|
|
12
|
+
context: WriteCommandContext;
|
|
13
|
+
chain: ChainName;
|
|
14
|
+
}): Promise<void>;
|
|
18
15
|
export declare function isISMConfig(config: ChainMap<MultisigConfig> | ChainMap<IsmConfig>): boolean;
|
|
19
16
|
export declare function isZODISMConfig(filepath: string): boolean;
|
|
20
17
|
export declare function prepareDeploy(context: WriteCommandContext, userAddress: Address, chains: ChainName[]): Promise<Record<string, BigNumber>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/deploy/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/deploy/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAU,MAAM,QAAQ,CAAC;AAE3C,OAAO,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,cAAc,EAEf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAgB,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQ1D,wBAAsB,2BAA2B,CAAC,EAChD,OAAO,EACP,MAAM,EACN,MAAM,EACN,gBAAgB,GACjB,EAAE;IACD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IAGf,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAC;CAChC,iBAuBA;AAED,wBAAsB,iBAAiB,CAAC,EACtC,OAAO,EACP,KAAK,GACN,EAAE;IACD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,EAAE,SAAS,CAAC;CAClB,iBAiBA;AAGD,wBAAgB,WAAW,CACzB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,GACrD,OAAO,CAET;AAGD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,SAAS,EAAE,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAapC;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1C,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,SAAS,EAAE,iBAqBpB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,UAE9C"}
|
package/dist/src/deploy/utils.js
CHANGED
|
@@ -1,27 +1,13 @@
|
|
|
1
|
+
import { confirm } from '@inquirer/prompts';
|
|
1
2
|
import { ethers } from 'ethers';
|
|
2
3
|
import { getLocalProvider, } from '@hyperlane-xyz/sdk';
|
|
3
4
|
import { ProtocolType } from '@hyperlane-xyz/utils';
|
|
4
5
|
import { parseIsmConfig } from '../config/ism.js';
|
|
5
|
-
import { log, logGreen, logPink } from '../logger.js';
|
|
6
|
-
import {
|
|
6
|
+
import { log, logBlue, logGray, logGreen, logPink } from '../logger.js';
|
|
7
|
+
import { gasBalancesAreSufficient } from '../utils/balances.js';
|
|
7
8
|
import { ENV } from '../utils/env.js';
|
|
8
9
|
import { assertSigner } from '../utils/keys.js';
|
|
9
10
|
import { completeDryRun } from './dry-run.js';
|
|
10
|
-
export async function runPreflightChecks({ context, origin, remotes, minGas, chainsToGasCheck, }) {
|
|
11
|
-
log('Running pre-flight checks...');
|
|
12
|
-
if (!origin || !remotes?.length)
|
|
13
|
-
throw new Error('Invalid chain selection');
|
|
14
|
-
logGreen('✅ Chain selections are valid');
|
|
15
|
-
if (remotes.includes(origin))
|
|
16
|
-
throw new Error('Origin and remotes must be distinct');
|
|
17
|
-
logGreen('✅ Origin and remote are distinct');
|
|
18
|
-
return runPreflightChecksForChains({
|
|
19
|
-
context,
|
|
20
|
-
chains: [origin, ...remotes],
|
|
21
|
-
minGas,
|
|
22
|
-
chainsToGasCheck,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
11
|
export async function runPreflightChecksForChains({ context, chains, minGas, chainsToGasCheck, }) {
|
|
26
12
|
log('Running pre-flight checks for chains...');
|
|
27
13
|
const { signer, multiProvider } = context;
|
|
@@ -37,8 +23,25 @@ export async function runPreflightChecksForChains({ context, chains, minGas, cha
|
|
|
37
23
|
logGreen('✅ Chains are valid');
|
|
38
24
|
assertSigner(signer);
|
|
39
25
|
logGreen('✅ Signer is valid');
|
|
40
|
-
await
|
|
41
|
-
|
|
26
|
+
const sufficient = await gasBalancesAreSufficient(multiProvider, signer, chainsToGasCheck ?? chains, minGas);
|
|
27
|
+
if (sufficient)
|
|
28
|
+
logGreen('✅ Balances are sufficient');
|
|
29
|
+
}
|
|
30
|
+
export async function runDeployPlanStep({ context, chain, }) {
|
|
31
|
+
const { signer, skipConfirmation } = context;
|
|
32
|
+
const address = await signer.getAddress();
|
|
33
|
+
logBlue('\nDeployment plan');
|
|
34
|
+
logGray('===============');
|
|
35
|
+
log(`Transaction signer and owner of new contracts will be ${address}`);
|
|
36
|
+
log(`Deploying to ${chain}`);
|
|
37
|
+
log(`There are several contracts required for each chain but contracts in your provided registries will be skipped`);
|
|
38
|
+
if (skipConfirmation)
|
|
39
|
+
return;
|
|
40
|
+
const isConfirmed = await confirm({
|
|
41
|
+
message: 'Is this deployment plan correct?',
|
|
42
|
+
});
|
|
43
|
+
if (!isConfirmed)
|
|
44
|
+
throw new Error('Deployment cancelled');
|
|
42
45
|
}
|
|
43
46
|
// from parsed types
|
|
44
47
|
export function isISMConfig(config) {
|