@hyperlane-xyz/cli 3.10.1-beta1 → 3.20.0-beta0
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/dist/cli.js +13 -5
- package/dist/cli.js.map +1 -1
- package/dist/src/commands/chains.d.ts.map +1 -1
- package/dist/src/commands/chains.js +40 -34
- package/dist/src/commands/chains.js.map +1 -1
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +41 -82
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/deploy.d.ts +0 -6
- package/dist/src/commands/deploy.d.ts.map +1 -1
- package/dist/src/commands/deploy.js +27 -74
- package/dist/src/commands/deploy.js.map +1 -1
- package/dist/src/commands/hook.d.ts +6 -1
- package/dist/src/commands/hook.d.ts.map +1 -1
- package/dist/src/commands/hook.js +6 -14
- package/dist/src/commands/hook.js.map +1 -1
- package/dist/src/commands/ism.d.ts +6 -1
- package/dist/src/commands/ism.d.ts.map +1 -1
- package/dist/src/commands/ism.js +5 -13
- package/dist/src/commands/ism.js.map +1 -1
- package/dist/src/commands/options.d.ts +6 -33
- package/dist/src/commands/options.d.ts.map +1 -1
- package/dist/src/commands/options.js +40 -41
- package/dist/src/commands/options.js.map +1 -1
- package/dist/src/commands/send.d.ts +7 -1
- package/dist/src/commands/send.d.ts.map +1 -1
- package/dist/src/commands/send.js +23 -58
- package/dist/src/commands/send.js.map +1 -1
- package/dist/src/commands/signCommands.d.ts +3 -0
- package/dist/src/commands/signCommands.d.ts.map +1 -0
- package/dist/src/commands/signCommands.js +9 -0
- package/dist/src/commands/signCommands.js.map +1 -0
- package/dist/src/commands/status.d.ts +5 -2
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +6 -15
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/config/chain.d.ts +5 -7
- package/dist/src/config/chain.d.ts.map +1 -1
- package/dist/src/config/chain.js +16 -39
- package/dist/src/config/chain.js.map +1 -1
- package/dist/src/config/chain.test.js +1 -5
- package/dist/src/config/chain.test.js.map +1 -1
- package/dist/src/config/hooks.d.ts +7 -8
- package/dist/src/config/hooks.d.ts.map +1 -1
- package/dist/src/config/hooks.js +18 -20
- package/dist/src/config/hooks.js.map +1 -1
- package/dist/src/config/ism.d.ts +3 -4
- package/dist/src/config/ism.d.ts.map +1 -1
- package/dist/src/config/ism.js +3 -5
- package/dist/src/config/ism.js.map +1 -1
- package/dist/src/config/multisig.d.ts +3 -4
- package/dist/src/config/multisig.d.ts.map +1 -1
- package/dist/src/config/multisig.js +5 -7
- package/dist/src/config/multisig.js.map +1 -1
- package/dist/src/config/warp.d.ts +6 -36
- package/dist/src/config/warp.d.ts.map +1 -1
- package/dist/src/config/warp.js +14 -13
- package/dist/src/config/warp.js.map +1 -1
- package/dist/src/context/context.d.ts +14 -0
- package/dist/src/context/context.d.ts.map +1 -0
- package/dist/src/context/context.js +100 -0
- package/dist/src/context/context.js.map +1 -0
- package/dist/src/context/types.d.ts +32 -0
- package/dist/src/context/types.d.ts.map +1 -0
- package/dist/src/context/types.js +2 -0
- package/dist/src/context/types.js.map +1 -0
- package/dist/src/deploy/agent.d.ts +6 -5
- package/dist/src/deploy/agent.d.ts.map +1 -1
- package/dist/src/deploy/agent.js +4 -6
- package/dist/src/deploy/agent.js.map +1 -1
- package/dist/src/deploy/core.d.ts +4 -7
- package/dist/src/deploy/core.d.ts.map +1 -1
- package/dist/src/deploy/core.js +61 -73
- package/dist/src/deploy/core.js.map +1 -1
- package/dist/src/deploy/dry-run.d.ts +2 -3
- package/dist/src/deploy/dry-run.d.ts.map +1 -1
- package/dist/src/deploy/dry-run.js.map +1 -1
- package/dist/src/deploy/utils.d.ts +9 -11
- package/dist/src/deploy/utils.d.ts.map +1 -1
- package/dist/src/deploy/utils.js +13 -11
- package/dist/src/deploy/utils.js.map +1 -1
- package/dist/src/deploy/warp.d.ts +3 -7
- package/dist/src/deploy/warp.d.ts.map +1 -1
- package/dist/src/deploy/warp.js +26 -63
- package/dist/src/deploy/warp.js.map +1 -1
- package/dist/src/hook/read.d.ts +4 -5
- package/dist/src/hook/read.d.ts.map +1 -1
- package/dist/src/hook/read.js +8 -12
- package/dist/src/hook/read.js.map +1 -1
- package/dist/src/ism/read.d.ts +4 -5
- package/dist/src/ism/read.d.ts.map +1 -1
- package/dist/src/ism/read.js +8 -12
- package/dist/src/ism/read.js.map +1 -1
- package/dist/src/registry/MergedRegistry.d.ts +35 -0
- package/dist/src/registry/MergedRegistry.d.ts.map +1 -0
- package/dist/src/registry/MergedRegistry.js +83 -0
- package/dist/src/registry/MergedRegistry.js.map +1 -0
- package/dist/src/send/message.d.ts +3 -4
- package/dist/src/send/message.d.ts.map +1 -1
- package/dist/src/send/message.js +14 -19
- package/dist/src/send/message.js.map +1 -1
- package/dist/src/send/transfer.d.ts +3 -6
- package/dist/src/send/transfer.d.ts.map +1 -1
- package/dist/src/send/transfer.js +25 -40
- package/dist/src/send/transfer.js.map +1 -1
- package/dist/src/status/message.d.ts +3 -4
- package/dist/src/status/message.d.ts.map +1 -1
- package/dist/src/status/message.js +5 -12
- package/dist/src/status/message.js.map +1 -1
- package/dist/src/utils/chains.d.ts +2 -2
- package/dist/src/utils/chains.d.ts.map +1 -1
- package/dist/src/utils/chains.js +11 -12
- package/dist/src/utils/chains.js.map +1 -1
- package/dist/src/utils/files.d.ts +0 -7
- package/dist/src/utils/files.d.ts.map +1 -1
- package/dist/src/utils/files.js +2 -27
- package/dist/src/utils/files.js.map +1 -1
- package/dist/src/utils/keys.d.ts +15 -4
- package/dist/src/utils/keys.d.ts.map +1 -1
- package/dist/src/utils/keys.js +11 -16
- package/dist/src/utils/keys.js.map +1 -1
- package/dist/src/utils/tokens.d.ts +3 -0
- package/dist/src/utils/tokens.d.ts.map +1 -0
- package/dist/src/utils/tokens.js +14 -0
- package/dist/src/utils/tokens.js.map +1 -0
- package/dist/src/utils/version-check.d.ts.map +1 -1
- package/dist/src/utils/version-check.js +5 -0
- package/dist/src/utils/version-check.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/examples/chain-config.yaml +38 -46
- package/package.json +5 -4
- package/dist/src/config/artifacts.d.ts +0 -16
- package/dist/src/config/artifacts.d.ts.map +0 -1
- package/dist/src/config/artifacts.js +0 -48
- package/dist/src/config/artifacts.js.map +0 -1
- package/dist/src/context.d.ts +0 -64
- package/dist/src/context.d.ts.map +0 -1
- package/dist/src/context.js +0 -113
- package/dist/src/context.js.map +0 -1
- package/dist/src/context.test.d.ts +0 -2
- package/dist/src/context.test.d.ts.map +0 -1
- package/dist/src/context.test.js +0 -21
- package/dist/src/context.test.js.map +0 -1
- package/dist/src/utils/fork.d.ts +0 -37
- package/dist/src/utils/fork.d.ts.map +0 -1
- package/dist/src/utils/fork.js +0 -91
- package/dist/src/utils/fork.js.map +0 -1
- package/examples/anvil-chains.yaml +0 -22
- package/examples/dry-run/anvil-chains.yaml +0 -17
- package/examples/dry-run/ism.yaml +0 -8
- package/examples/dry-run/warp-route-deployment.yaml +0 -4
- package/examples/fork/anvil-chains.yaml +0 -21
- package/examples/fork/ism.yaml +0 -9
- package/examples/fork/warp-route-deployment.yaml +0 -34
package/dist/src/config/warp.js
CHANGED
|
@@ -1,28 +1,21 @@
|
|
|
1
1
|
import { confirm, input } from '@inquirer/prompts';
|
|
2
2
|
import { ethers } from 'ethers';
|
|
3
|
-
import { TokenType, WarpRouteDeployConfigSchema, } from '@hyperlane-xyz/sdk';
|
|
3
|
+
import { TokenType, WarpCoreConfigSchema, WarpRouteDeployConfigSchema, } from '@hyperlane-xyz/sdk';
|
|
4
4
|
import { errorRed, logBlue, logGreen } from '../logger.js';
|
|
5
5
|
import { runMultiChainSelectionStep, runSingleChainSelectionStep, } from '../utils/chains.js';
|
|
6
6
|
import { readYamlOrJson, writeYamlOrJson } from '../utils/files.js';
|
|
7
|
-
import { readChainConfigsIfExists } from './chain.js';
|
|
8
7
|
export function readWarpRouteDeployConfig(filePath) {
|
|
9
8
|
const config = readYamlOrJson(filePath);
|
|
10
9
|
if (!config)
|
|
11
10
|
throw new Error(`No warp route deploy config found at ${filePath}`);
|
|
12
|
-
|
|
13
|
-
if (!result.success) {
|
|
14
|
-
const firstIssue = result.error.issues[0];
|
|
15
|
-
throw new Error(`Invalid warp config: ${firstIssue.path} => ${firstIssue.message}`);
|
|
16
|
-
}
|
|
17
|
-
return result.data;
|
|
11
|
+
return WarpRouteDeployConfigSchema.parse(config);
|
|
18
12
|
}
|
|
19
13
|
export function isValidWarpRouteDeployConfig(config) {
|
|
20
14
|
return WarpRouteDeployConfigSchema.safeParse(config).success;
|
|
21
15
|
}
|
|
22
|
-
export async function createWarpRouteDeployConfig({
|
|
16
|
+
export async function createWarpRouteDeployConfig({ context, outPath, }) {
|
|
23
17
|
logBlue('Creating a new warp route deployment config');
|
|
24
|
-
const
|
|
25
|
-
const baseChain = await runSingleChainSelectionStep(customChains, 'Select base chain with the original token to warp');
|
|
18
|
+
const baseChain = await runSingleChainSelectionStep(context.chainMetadata, 'Select base chain with the original token to warp');
|
|
26
19
|
const isNative = await confirm({
|
|
27
20
|
message: 'Are you creating a route for the native token of the base chain (e.g. Ether on Ethereum)?',
|
|
28
21
|
});
|
|
@@ -38,7 +31,7 @@ export async function createWarpRouteDeployConfig({ format, outPath, chainConfig
|
|
|
38
31
|
const baseAddress = isNative
|
|
39
32
|
? ethers.constants.AddressZero
|
|
40
33
|
: await input({ message: addressMessage });
|
|
41
|
-
const syntheticChains = await runMultiChainSelectionStep(
|
|
34
|
+
const syntheticChains = await runMultiChainSelectionStep(context.chainMetadata, 'Select chains to which the base token will be connected');
|
|
42
35
|
// TODO add more prompts here to support customizing the token metadata
|
|
43
36
|
let result;
|
|
44
37
|
if (isNative) {
|
|
@@ -64,11 +57,19 @@ export async function createWarpRouteDeployConfig({ format, outPath, chainConfig
|
|
|
64
57
|
});
|
|
65
58
|
if (isValidWarpRouteDeployConfig(result)) {
|
|
66
59
|
logGreen(`Warp Route config is valid, writing to file ${outPath}`);
|
|
67
|
-
writeYamlOrJson(outPath, result
|
|
60
|
+
writeYamlOrJson(outPath, result);
|
|
68
61
|
}
|
|
69
62
|
else {
|
|
70
63
|
errorRed(`Warp route deployment config is invalid, please see https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/main/typescript/cli/examples/warp-route-deployment.yaml for an example`);
|
|
71
64
|
throw new Error('Invalid multisig config');
|
|
72
65
|
}
|
|
73
66
|
}
|
|
67
|
+
// Note, this is different than the function above which reads a config
|
|
68
|
+
// for a DEPLOYMENT. This gets a config for using a warp route (aka WarpCoreConfig)
|
|
69
|
+
export function readWarpRouteConfig(filePath) {
|
|
70
|
+
const config = readYamlOrJson(filePath);
|
|
71
|
+
if (!config)
|
|
72
|
+
throw new Error(`No warp route config found at ${filePath}`);
|
|
73
|
+
return WarpCoreConfigSchema.parse(config);
|
|
74
|
+
}
|
|
74
75
|
//# sourceMappingURL=warp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warp.js","sourceRoot":"","sources":["../../../src/config/warp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EACL,SAAS,EAET,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"warp.js","sourceRoot":"","sources":["../../../src/config/warp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ChainName } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { CommandContext, ContextSettings } from './types.js';
|
|
3
|
+
export declare function contextMiddleware(argv: Record<string, any>): Promise<void>;
|
|
4
|
+
/**
|
|
5
|
+
* Retrieves context for the user-selected command
|
|
6
|
+
* @returns context for the current command
|
|
7
|
+
*/
|
|
8
|
+
export declare function getContext({ registryUri, registryOverrideUri, key, requiresKey, skipConfirmation, }: ContextSettings): Promise<CommandContext>;
|
|
9
|
+
/**
|
|
10
|
+
* Retrieves dry-run context for the user-selected command
|
|
11
|
+
* @returns dry-run context for the current command
|
|
12
|
+
*/
|
|
13
|
+
export declare function getDryRunContext({ registryUri, registryOverrideUri, key, skipConfirmation }: ContextSettings, chain?: ChainName): Promise<CommandContext>;
|
|
14
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/context/context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAiB,MAAM,oBAAoB,CAAC;AAQ9D,OAAO,EACL,cAAc,EACd,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,iBAchE;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,EAC/B,WAAW,EACX,mBAAmB,EACnB,GAAG,EACH,WAAW,EACX,gBAAgB,GACjB,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAiB3C;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,gBAAgB,EAAE,EAAE,eAAe,EAC5E,KAAK,CAAC,EAAE,SAAS,GAChB,OAAO,CAAC,cAAc,CAAC,CA+BzB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { MultiProvider } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { isSignCommand } from '../commands/signCommands.js';
|
|
3
|
+
import { forkNetworkToMultiProvider } from '../deploy/dry-run.js';
|
|
4
|
+
import { MergedRegistry } from '../registry/MergedRegistry.js';
|
|
5
|
+
import { runSingleChainSelectionStep } from '../utils/chains.js';
|
|
6
|
+
import { getImpersonatedSigner, getSigner } from '../utils/keys.js';
|
|
7
|
+
export async function contextMiddleware(argv) {
|
|
8
|
+
const isDryRun = !!argv.dryRun;
|
|
9
|
+
const requiresKey = isSignCommand(argv);
|
|
10
|
+
const settings = {
|
|
11
|
+
registryUri: argv.registry,
|
|
12
|
+
registryOverrideUri: argv.overrides,
|
|
13
|
+
key: argv.key,
|
|
14
|
+
requiresKey,
|
|
15
|
+
skipConfirmation: argv.yes,
|
|
16
|
+
};
|
|
17
|
+
const context = isDryRun
|
|
18
|
+
? await getDryRunContext(settings, argv.dryRun)
|
|
19
|
+
: await getContext(settings);
|
|
20
|
+
argv.context = context;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Retrieves context for the user-selected command
|
|
24
|
+
* @returns context for the current command
|
|
25
|
+
*/
|
|
26
|
+
export async function getContext({ registryUri, registryOverrideUri, key, requiresKey, skipConfirmation, }) {
|
|
27
|
+
const registry = getRegistry(registryUri, registryOverrideUri);
|
|
28
|
+
let signer = undefined;
|
|
29
|
+
if (requiresKey) {
|
|
30
|
+
({ key, signer } = await getSigner({ key, skipConfirmation }));
|
|
31
|
+
}
|
|
32
|
+
const multiProvider = await getMultiProvider(registry, signer);
|
|
33
|
+
return {
|
|
34
|
+
registry,
|
|
35
|
+
chainMetadata: multiProvider.metadata,
|
|
36
|
+
multiProvider,
|
|
37
|
+
key,
|
|
38
|
+
signer,
|
|
39
|
+
skipConfirmation: !!skipConfirmation,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Retrieves dry-run context for the user-selected command
|
|
44
|
+
* @returns dry-run context for the current command
|
|
45
|
+
*/
|
|
46
|
+
export async function getDryRunContext({ registryUri, registryOverrideUri, key, skipConfirmation }, chain) {
|
|
47
|
+
const registry = getRegistry(registryUri, registryOverrideUri, true);
|
|
48
|
+
const chainMetadata = await registry.getMetadata();
|
|
49
|
+
if (!chain) {
|
|
50
|
+
if (skipConfirmation)
|
|
51
|
+
throw new Error('No chains provided');
|
|
52
|
+
chain = await runSingleChainSelectionStep(chainMetadata, 'Select chain to dry-run against:');
|
|
53
|
+
}
|
|
54
|
+
const multiProvider = await getMultiProvider(registry);
|
|
55
|
+
await forkNetworkToMultiProvider(multiProvider, chain);
|
|
56
|
+
const { key: impersonatedKey, signer: impersonatedSigner } = await getImpersonatedSigner({
|
|
57
|
+
key,
|
|
58
|
+
skipConfirmation,
|
|
59
|
+
});
|
|
60
|
+
multiProvider.setSharedSigner(impersonatedSigner);
|
|
61
|
+
return {
|
|
62
|
+
registry,
|
|
63
|
+
chainMetadata: multiProvider.metadata,
|
|
64
|
+
key: impersonatedKey,
|
|
65
|
+
signer: impersonatedSigner,
|
|
66
|
+
multiProvider: multiProvider,
|
|
67
|
+
skipConfirmation: !!skipConfirmation,
|
|
68
|
+
isDryRun: true,
|
|
69
|
+
dryRunChain: chain,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Creates a new MergedRegistry using the provided URIs
|
|
74
|
+
* The intention of the MergedRegistry is to join the common data
|
|
75
|
+
* from a primary URI (such as the Hyperlane default Github repo)
|
|
76
|
+
* and an override one (such as a local directory)
|
|
77
|
+
* @returns a new MergedRegistry
|
|
78
|
+
*/
|
|
79
|
+
function getRegistry(primaryRegistryUri, overrideRegistryUri, isDryRun) {
|
|
80
|
+
const registryUris = [primaryRegistryUri, overrideRegistryUri]
|
|
81
|
+
.map((r) => r.trim())
|
|
82
|
+
.filter((r) => !!r);
|
|
83
|
+
return new MergedRegistry({
|
|
84
|
+
registryUris,
|
|
85
|
+
isDryRun,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Retrieves a new MultiProvider based on all known chain metadata & custom user chains
|
|
90
|
+
* @param customChains Custom chains specified by the user
|
|
91
|
+
* @returns a new MultiProvider
|
|
92
|
+
*/
|
|
93
|
+
async function getMultiProvider(registry, signer) {
|
|
94
|
+
const chainMetadata = await registry.getMetadata();
|
|
95
|
+
const multiProvider = new MultiProvider(chainMetadata);
|
|
96
|
+
if (signer)
|
|
97
|
+
multiProvider.setSharedSigner(signer);
|
|
98
|
+
return multiProvider;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/context/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ethers } from 'ethers';
|
|
2
|
+
import type { CommandModule } from 'yargs';
|
|
3
|
+
import type { IRegistry } from '@hyperlane-xyz/registry';
|
|
4
|
+
import type { ChainMap, ChainMetadata, MultiProvider } from '@hyperlane-xyz/sdk';
|
|
5
|
+
export interface ContextSettings {
|
|
6
|
+
registryUri: string;
|
|
7
|
+
registryOverrideUri: string;
|
|
8
|
+
key?: string;
|
|
9
|
+
requiresKey?: boolean;
|
|
10
|
+
skipConfirmation?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface CommandContext {
|
|
13
|
+
registry: IRegistry;
|
|
14
|
+
chainMetadata: ChainMap<ChainMetadata>;
|
|
15
|
+
multiProvider: MultiProvider;
|
|
16
|
+
skipConfirmation: boolean;
|
|
17
|
+
key?: string;
|
|
18
|
+
signer?: ethers.Signer;
|
|
19
|
+
}
|
|
20
|
+
export interface WriteCommandContext extends CommandContext {
|
|
21
|
+
key: string;
|
|
22
|
+
signer: ethers.Signer;
|
|
23
|
+
isDryRun?: boolean;
|
|
24
|
+
dryRunChain?: string;
|
|
25
|
+
}
|
|
26
|
+
export type CommandModuleWithContext<Args> = CommandModule<{}, Args & {
|
|
27
|
+
context: CommandContext;
|
|
28
|
+
}>;
|
|
29
|
+
export type CommandModuleWithWriteContext<Args> = CommandModule<{}, Args & {
|
|
30
|
+
context: WriteCommandContext;
|
|
31
|
+
}>;
|
|
32
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/context/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { CommandContext } from '../context/types.js';
|
|
2
|
+
export declare function runKurtosisAgentDeploy({ context, originChain, relayChains, agentConfigurationPath, }: {
|
|
3
|
+
context: CommandContext;
|
|
4
|
+
originChain?: string;
|
|
5
|
+
relayChains?: string;
|
|
6
|
+
agentConfigurationPath?: string;
|
|
6
7
|
}): Promise<void>;
|
|
7
8
|
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/deploy/agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/deploy/agent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQrD,wBAAsB,sBAAsB,CAAC,EAC3C,OAAO,EACP,WAAW,EACX,WAAW,EACX,sBAAsB,GACvB,EAAE;IACD,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,iBAyDA"}
|
package/dist/src/deploy/agent.js
CHANGED
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import terminalLink from 'terminal-link';
|
|
2
2
|
import { toBase64 } from '@hyperlane-xyz/utils';
|
|
3
|
-
import { getContext } from '../context.js';
|
|
4
3
|
import { logBlue, logGreen } from '../logger.js';
|
|
5
4
|
import { runMultiChainSelectionStep, runSingleChainSelectionStep, } from '../utils/chains.js';
|
|
6
5
|
import { readJson, runFileSelectionStep } from '../utils/files.js';
|
|
7
|
-
export async function runKurtosisAgentDeploy({ originChain, relayChains,
|
|
8
|
-
const { customChains } = await getContext({ chainConfigPath });
|
|
6
|
+
export async function runKurtosisAgentDeploy({ context, originChain, relayChains, agentConfigurationPath, }) {
|
|
9
7
|
if (!originChain) {
|
|
10
|
-
originChain = await runSingleChainSelectionStep(
|
|
8
|
+
originChain = await runSingleChainSelectionStep(context.chainMetadata, 'Select the origin chain');
|
|
11
9
|
}
|
|
12
10
|
if (!relayChains) {
|
|
13
|
-
const selectedRelayChains = await runMultiChainSelectionStep(
|
|
11
|
+
const selectedRelayChains = await runMultiChainSelectionStep(context.chainMetadata, 'Select chains to relay between', true);
|
|
14
12
|
relayChains = selectedRelayChains.join(',');
|
|
15
13
|
}
|
|
16
14
|
if (!agentConfigurationPath) {
|
|
17
15
|
logBlue('\n', 'No agent config json was provided. Please specify the agent config json filepath.');
|
|
18
|
-
agentConfigurationPath = await runFileSelectionStep('./
|
|
16
|
+
agentConfigurationPath = await runFileSelectionStep('./configs', 'agent config json', 'agent-config');
|
|
19
17
|
}
|
|
20
18
|
const agentConfigObject = readJson(agentConfigurationPath);
|
|
21
19
|
const hyperlanePackageArgs = {
|
|
@@ -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;
|
|
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,8BAA8B,EAC9B,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,18 +1,15 @@
|
|
|
1
1
|
import { ChainMap, ChainName, IgpConfig, MultisigConfig } from '@hyperlane-xyz/sdk';
|
|
2
2
|
import { Address } from '@hyperlane-xyz/utils';
|
|
3
|
+
import { WriteCommandContext } from '../context/types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Executes the core deploy command.
|
|
5
6
|
*/
|
|
6
|
-
export declare function runCoreDeploy({
|
|
7
|
-
|
|
8
|
-
chainConfigPath: string;
|
|
7
|
+
export declare function runCoreDeploy({ context, chains, ismConfigPath, hookConfigPath, agentOutPath, }: {
|
|
8
|
+
context: WriteCommandContext;
|
|
9
9
|
chains?: ChainName[];
|
|
10
10
|
ismConfigPath?: string;
|
|
11
11
|
hookConfigPath?: string;
|
|
12
|
-
|
|
13
|
-
outPath: string;
|
|
14
|
-
skipConfirmation: boolean;
|
|
15
|
-
dryRun: string;
|
|
12
|
+
agentOutPath: string;
|
|
16
13
|
}): Promise<void>;
|
|
17
14
|
export declare function buildIgpConfigMap(owner: Address, chains: ChainName[], multisigConfigs: ChainMap<MultisigConfig>): ChainMap<IgpConfig>;
|
|
18
15
|
//# 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":"AAIA,OAAO,EACL,QAAQ,EACR,SAAS,EAUT,SAAS,EAGT,cAAc,EAOf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAA+B,MAAM,sBAAsB,CAAC;AAM5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAsB1D;;GAEG;AACH,wBAAsB,aAAa,CAAC,EAClC,OAAO,EACP,MAAM,EACN,aAAa,EACb,cAAc,EACd,YAAY,GACb,EAAE;IACD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB,iBA4CA;AAoPD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,SAAS,EAAE,EACnB,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,GACxC,QAAQ,CAAC,SAAS,CAAC,CA6BrB"}
|
package/dist/src/deploy/core.js
CHANGED
|
@@ -1,45 +1,28 @@
|
|
|
1
1
|
import { confirm } from '@inquirer/prompts';
|
|
2
2
|
import { ethers } from 'ethers';
|
|
3
3
|
import { GasOracleContractType, HyperlaneCore, HyperlaneCoreDeployer, HyperlaneIsmFactory, HyperlaneProxyFactoryDeployer, IsmType, buildAgentConfig, buildAggregationIsmConfigs, defaultMultisigConfigs, multisigIsmVerificationCost, serializeContractsMap, } from '@hyperlane-xyz/sdk';
|
|
4
|
-
import { objFilter, objMerge } from '@hyperlane-xyz/utils';
|
|
5
|
-
import { Command } from '../commands/deploy.js';
|
|
6
|
-
import { runDeploymentArtifactStep } from '../config/artifacts.js';
|
|
4
|
+
import { objFilter, objMap, objMerge } from '@hyperlane-xyz/utils';
|
|
7
5
|
import { presetHookConfigs, readHooksConfigMap } from '../config/hooks.js';
|
|
8
6
|
import { readIsmConfig } from '../config/ism.js';
|
|
9
7
|
import { readMultisigConfig } from '../config/multisig.js';
|
|
10
8
|
import { MINIMUM_CORE_DEPLOY_GAS } from '../consts.js';
|
|
11
|
-
import { getContext, getDryRunContext, getMergedContractAddresses, sdkContractAddressesMap, } from '../context.js';
|
|
12
9
|
import { log, logBlue, logBoldUnderlinedRed, logGray, logGreen, logRed, } from '../logger.js';
|
|
13
10
|
import { runMultiChainSelectionStep } from '../utils/chains.js';
|
|
14
|
-
import {
|
|
11
|
+
import { runFileSelectionStep, writeJson } from '../utils/files.js';
|
|
15
12
|
import { completeDeploy, isISMConfig, isZODISMConfig, prepareDeploy, runPreflightChecksForChains, } from './utils.js';
|
|
13
|
+
const CONTRACT_CACHE_EXCLUSIONS = ['interchainGasPaymaster'];
|
|
16
14
|
/**
|
|
17
15
|
* Executes the core deploy command.
|
|
18
16
|
*/
|
|
19
|
-
export async function runCoreDeploy({
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
chains: [dryRun],
|
|
24
|
-
keyConfig: { key },
|
|
25
|
-
skipConfirmation,
|
|
26
|
-
})
|
|
27
|
-
: await getContext({
|
|
28
|
-
chainConfigPath,
|
|
29
|
-
keyConfig: { key },
|
|
30
|
-
skipConfirmation,
|
|
31
|
-
});
|
|
32
|
-
const customChains = context.customChains;
|
|
33
|
-
const multiProvider = context.multiProvider;
|
|
34
|
-
const signer = context.signer;
|
|
35
|
-
if (dryRun)
|
|
36
|
-
chains = context.chains;
|
|
17
|
+
export async function runCoreDeploy({ context, chains, ismConfigPath, hookConfigPath, agentOutPath, }) {
|
|
18
|
+
const { chainMetadata, signer, dryRunChain, skipConfirmation } = context;
|
|
19
|
+
if (dryRunChain)
|
|
20
|
+
chains = [dryRunChain];
|
|
37
21
|
else if (!chains?.length) {
|
|
38
22
|
if (skipConfirmation)
|
|
39
23
|
throw new Error('No chains provided');
|
|
40
|
-
chains = await runMultiChainSelectionStep(
|
|
24
|
+
chains = await runMultiChainSelectionStep(chainMetadata, 'Select chains to connect:', true);
|
|
41
25
|
}
|
|
42
|
-
const artifacts = await runArtifactStep(chains, skipConfirmation, artifactsPath);
|
|
43
26
|
const result = await runIsmStep(chains, skipConfirmation, ismConfigPath);
|
|
44
27
|
// we can either specify the full ISM config or just the multisig config
|
|
45
28
|
const isIsmConfig = isISMConfig(result);
|
|
@@ -49,35 +32,22 @@ export async function runCoreDeploy({ key, chainConfigPath, chains, ismConfigPat
|
|
|
49
32
|
: result;
|
|
50
33
|
const hooksConfig = await runHookStep(chains, hookConfigPath);
|
|
51
34
|
const deploymentParams = {
|
|
35
|
+
context,
|
|
52
36
|
chains,
|
|
53
|
-
signer,
|
|
54
|
-
multiProvider,
|
|
55
|
-
artifacts,
|
|
56
37
|
ismConfigs,
|
|
57
38
|
multisigConfigs,
|
|
58
39
|
hooksConfig,
|
|
59
|
-
|
|
60
|
-
skipConfirmation,
|
|
61
|
-
dryRun,
|
|
40
|
+
agentOutPath,
|
|
62
41
|
};
|
|
63
42
|
await runDeployPlanStep(deploymentParams);
|
|
64
43
|
await runPreflightChecksForChains({
|
|
65
44
|
...deploymentParams,
|
|
66
45
|
minGas: MINIMUM_CORE_DEPLOY_GAS,
|
|
67
46
|
});
|
|
68
|
-
const userAddress =
|
|
69
|
-
const initialBalances = await prepareDeploy(
|
|
47
|
+
const userAddress = await signer.getAddress();
|
|
48
|
+
const initialBalances = await prepareDeploy(context, userAddress, chains);
|
|
70
49
|
await executeDeploy(deploymentParams);
|
|
71
|
-
await completeDeploy(
|
|
72
|
-
}
|
|
73
|
-
function runArtifactStep(selectedChains, skipConfirmation, artifactsPath, dryRun) {
|
|
74
|
-
logBlue('\nDeployments can be totally new or can use some existing contract addresses.');
|
|
75
|
-
return runDeploymentArtifactStep({
|
|
76
|
-
artifactsPath,
|
|
77
|
-
selectedChains,
|
|
78
|
-
skipConfirmation,
|
|
79
|
-
dryRun,
|
|
80
|
-
});
|
|
50
|
+
await completeDeploy(context, 'core', initialBalances, userAddress, chains);
|
|
81
51
|
}
|
|
82
52
|
async function runIsmStep(selectedChains, skipConfirmation, ismConfigPath) {
|
|
83
53
|
if (!ismConfigPath) {
|
|
@@ -122,13 +92,14 @@ async function runHookStep(_selectedChains, hookConfigPath) {
|
|
|
122
92
|
return {};
|
|
123
93
|
return readHooksConfigMap(hookConfigPath);
|
|
124
94
|
}
|
|
125
|
-
async function runDeployPlanStep({
|
|
95
|
+
async function runDeployPlanStep({ context, chains }) {
|
|
96
|
+
const { signer, skipConfirmation } = context;
|
|
126
97
|
const address = await signer.getAddress();
|
|
127
98
|
logBlue('\nDeployment plan');
|
|
128
99
|
logGray('===============');
|
|
129
100
|
log(`Transaction signer and owner of new contracts will be ${address}`);
|
|
130
101
|
log(`Deploying to ${chains.join(', ')}`);
|
|
131
|
-
log(`There are several contracts required for each chain but contracts in
|
|
102
|
+
log(`There are several contracts required for each chain but contracts in your provided registries will be skipped`);
|
|
132
103
|
if (skipConfirmation)
|
|
133
104
|
return;
|
|
134
105
|
const isConfirmed = await confirm({
|
|
@@ -137,41 +108,38 @@ async function runDeployPlanStep({ chains, signer, artifacts, skipConfirmation,
|
|
|
137
108
|
if (!isConfirmed)
|
|
138
109
|
throw new Error('Deployment cancelled');
|
|
139
110
|
}
|
|
140
|
-
async function executeDeploy({
|
|
111
|
+
async function executeDeploy({ context, chains, ismConfigs = {}, multisigConfigs = {}, hooksConfig = {}, agentOutPath, }) {
|
|
141
112
|
logBlue('All systems ready, captain! Beginning deployment...');
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
], dryRun));
|
|
113
|
+
const { signer, multiProvider, registry } = context;
|
|
114
|
+
let chainAddresses = await registry.getAddresses();
|
|
115
|
+
chainAddresses = filterAddressesToCache(chainAddresses);
|
|
146
116
|
const owner = await signer.getAddress();
|
|
147
|
-
|
|
117
|
+
let artifacts = {};
|
|
148
118
|
// 1. Deploy ISM factories to all deployable chains that don't have them.
|
|
149
119
|
logBlue('Deploying ISM factory contracts');
|
|
150
120
|
const ismFactoryDeployer = new HyperlaneProxyFactoryDeployer(multiProvider);
|
|
151
|
-
ismFactoryDeployer.cacheAddressesMap(
|
|
121
|
+
ismFactoryDeployer.cacheAddressesMap(chainAddresses);
|
|
152
122
|
const ismFactoryConfig = chains.reduce((chainMap, curr) => {
|
|
153
123
|
chainMap[curr] = {};
|
|
154
124
|
return chainMap;
|
|
155
125
|
}, {});
|
|
156
126
|
const ismFactoryContracts = await ismFactoryDeployer.deploy(ismFactoryConfig);
|
|
157
|
-
artifacts =
|
|
127
|
+
artifacts = await updateChainAddresses(registry, ismFactoryContracts, artifacts);
|
|
158
128
|
logGreen('ISM factory contracts deployed');
|
|
159
129
|
// Build an IsmFactory that covers all chains so that we can
|
|
160
130
|
// use it to deploy ISMs to remote chains.
|
|
161
|
-
const ismFactory = HyperlaneIsmFactory.fromAddressesMap(
|
|
131
|
+
const ismFactory = HyperlaneIsmFactory.fromAddressesMap(chainAddresses, multiProvider);
|
|
162
132
|
// 3. Construct ISM configs for all deployable chains
|
|
163
|
-
const ismContracts = {};
|
|
164
133
|
const defaultIsms = {};
|
|
165
134
|
for (const ismOrigin of chains) {
|
|
166
135
|
defaultIsms[ismOrigin] =
|
|
167
136
|
ismConfigs[ismOrigin] ??
|
|
168
137
|
buildIsmConfig(owner, ismOrigin, chains, multisigConfigs);
|
|
169
138
|
}
|
|
170
|
-
artifacts = writeMergedAddresses(contractsFilePath, artifacts, ismContracts);
|
|
171
139
|
// 4. Deploy core contracts to chains
|
|
172
140
|
logBlue(`Deploying core contracts to ${chains.join(', ')}`);
|
|
173
141
|
const coreDeployer = new HyperlaneCoreDeployer(multiProvider, ismFactory);
|
|
174
|
-
coreDeployer.cacheAddressesMap(
|
|
142
|
+
coreDeployer.cacheAddressesMap(chainAddresses);
|
|
175
143
|
const coreConfigs = buildCoreConfigMap(owner, chains, defaultIsms, hooksConfig);
|
|
176
144
|
const coreContracts = await coreDeployer.deploy(coreConfigs);
|
|
177
145
|
// 4.5 recover the toplevel ISM address
|
|
@@ -182,14 +150,18 @@ async function executeDeploy({ chains, signer, multiProvider, outPath, artifacts
|
|
|
182
150
|
};
|
|
183
151
|
}
|
|
184
152
|
artifacts = objMerge(artifacts, isms);
|
|
185
|
-
artifacts =
|
|
153
|
+
artifacts = await updateChainAddresses(registry, coreContracts, artifacts);
|
|
186
154
|
logGreen('✅ Core contracts deployed');
|
|
187
|
-
log(
|
|
188
|
-
await writeAgentConfig(
|
|
189
|
-
logGreen('Agent configs written');
|
|
155
|
+
log(JSON.stringify(artifacts, null, 2));
|
|
156
|
+
await writeAgentConfig(context, artifacts, chains, agentOutPath);
|
|
190
157
|
logBlue('Deployment is complete!');
|
|
191
|
-
|
|
192
|
-
|
|
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)));
|
|
193
165
|
}
|
|
194
166
|
function buildIsmConfig(owner, local, chains, multisigIsmConfigs) {
|
|
195
167
|
const aggregationIsmConfigs = buildAggregationIsmConfigs(local, chains, multisigIsmConfigs);
|
|
@@ -239,28 +211,44 @@ export function buildIgpConfigMap(owner, chains, multisigConfigs) {
|
|
|
239
211
|
}
|
|
240
212
|
return configMap;
|
|
241
213
|
}
|
|
242
|
-
function
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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');
|
|
221
|
+
});
|
|
222
|
+
const mergedAddresses = objMerge(otherAddresses, newAddresses);
|
|
223
|
+
for (const chainName of Object.keys(newContracts)) {
|
|
224
|
+
await registry.updateChain({
|
|
225
|
+
chainName,
|
|
226
|
+
addresses: mergedAddresses[chainName],
|
|
227
|
+
});
|
|
228
|
+
}
|
|
246
229
|
return mergedAddresses;
|
|
247
230
|
}
|
|
248
|
-
async function writeAgentConfig(
|
|
231
|
+
async function writeAgentConfig(context, artifacts, chains, outPath) {
|
|
232
|
+
if (context.isDryRun)
|
|
233
|
+
return;
|
|
234
|
+
log('Writing agent configs');
|
|
235
|
+
const { multiProvider, registry } = context;
|
|
249
236
|
const startBlocks = {};
|
|
250
237
|
const core = HyperlaneCore.fromAddressesMap(artifacts, multiProvider);
|
|
251
238
|
for (const chain of chains) {
|
|
252
239
|
const mailbox = core.getContracts(chain).mailbox;
|
|
253
240
|
startBlocks[chain] = (await mailbox.deployedBlock()).toNumber();
|
|
254
241
|
}
|
|
255
|
-
const
|
|
242
|
+
const chainAddresses = await registry.getAddresses();
|
|
256
243
|
for (const chain of chains) {
|
|
257
|
-
if (!
|
|
258
|
-
|
|
244
|
+
if (!chainAddresses[chain].interchainGasPaymaster) {
|
|
245
|
+
chainAddresses[chain].interchainGasPaymaster =
|
|
259
246
|
ethers.constants.AddressZero;
|
|
260
247
|
}
|
|
261
248
|
}
|
|
262
249
|
const agentConfig = buildAgentConfig(chains, // Use only the chains that were deployed to
|
|
263
|
-
multiProvider,
|
|
264
|
-
writeJson(
|
|
250
|
+
multiProvider, chainAddresses, startBlocks);
|
|
251
|
+
writeJson(outPath, agentConfig);
|
|
252
|
+
logGreen('Agent configs written');
|
|
265
253
|
}
|
|
266
254
|
//# sourceMappingURL=core.js.map
|