@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.
Files changed (155) hide show
  1. package/dist/cli.js +13 -5
  2. package/dist/cli.js.map +1 -1
  3. package/dist/src/commands/chains.d.ts.map +1 -1
  4. package/dist/src/commands/chains.js +40 -34
  5. package/dist/src/commands/chains.js.map +1 -1
  6. package/dist/src/commands/config.d.ts.map +1 -1
  7. package/dist/src/commands/config.js +41 -82
  8. package/dist/src/commands/config.js.map +1 -1
  9. package/dist/src/commands/deploy.d.ts +0 -6
  10. package/dist/src/commands/deploy.d.ts.map +1 -1
  11. package/dist/src/commands/deploy.js +27 -74
  12. package/dist/src/commands/deploy.js.map +1 -1
  13. package/dist/src/commands/hook.d.ts +6 -1
  14. package/dist/src/commands/hook.d.ts.map +1 -1
  15. package/dist/src/commands/hook.js +6 -14
  16. package/dist/src/commands/hook.js.map +1 -1
  17. package/dist/src/commands/ism.d.ts +6 -1
  18. package/dist/src/commands/ism.d.ts.map +1 -1
  19. package/dist/src/commands/ism.js +5 -13
  20. package/dist/src/commands/ism.js.map +1 -1
  21. package/dist/src/commands/options.d.ts +6 -33
  22. package/dist/src/commands/options.d.ts.map +1 -1
  23. package/dist/src/commands/options.js +40 -41
  24. package/dist/src/commands/options.js.map +1 -1
  25. package/dist/src/commands/send.d.ts +7 -1
  26. package/dist/src/commands/send.d.ts.map +1 -1
  27. package/dist/src/commands/send.js +23 -58
  28. package/dist/src/commands/send.js.map +1 -1
  29. package/dist/src/commands/signCommands.d.ts +3 -0
  30. package/dist/src/commands/signCommands.d.ts.map +1 -0
  31. package/dist/src/commands/signCommands.js +9 -0
  32. package/dist/src/commands/signCommands.js.map +1 -0
  33. package/dist/src/commands/status.d.ts +5 -2
  34. package/dist/src/commands/status.d.ts.map +1 -1
  35. package/dist/src/commands/status.js +6 -15
  36. package/dist/src/commands/status.js.map +1 -1
  37. package/dist/src/config/chain.d.ts +5 -7
  38. package/dist/src/config/chain.d.ts.map +1 -1
  39. package/dist/src/config/chain.js +16 -39
  40. package/dist/src/config/chain.js.map +1 -1
  41. package/dist/src/config/chain.test.js +1 -5
  42. package/dist/src/config/chain.test.js.map +1 -1
  43. package/dist/src/config/hooks.d.ts +7 -8
  44. package/dist/src/config/hooks.d.ts.map +1 -1
  45. package/dist/src/config/hooks.js +18 -20
  46. package/dist/src/config/hooks.js.map +1 -1
  47. package/dist/src/config/ism.d.ts +3 -4
  48. package/dist/src/config/ism.d.ts.map +1 -1
  49. package/dist/src/config/ism.js +3 -5
  50. package/dist/src/config/ism.js.map +1 -1
  51. package/dist/src/config/multisig.d.ts +3 -4
  52. package/dist/src/config/multisig.d.ts.map +1 -1
  53. package/dist/src/config/multisig.js +5 -7
  54. package/dist/src/config/multisig.js.map +1 -1
  55. package/dist/src/config/warp.d.ts +6 -36
  56. package/dist/src/config/warp.d.ts.map +1 -1
  57. package/dist/src/config/warp.js +14 -13
  58. package/dist/src/config/warp.js.map +1 -1
  59. package/dist/src/context/context.d.ts +14 -0
  60. package/dist/src/context/context.d.ts.map +1 -0
  61. package/dist/src/context/context.js +100 -0
  62. package/dist/src/context/context.js.map +1 -0
  63. package/dist/src/context/types.d.ts +32 -0
  64. package/dist/src/context/types.d.ts.map +1 -0
  65. package/dist/src/context/types.js +2 -0
  66. package/dist/src/context/types.js.map +1 -0
  67. package/dist/src/deploy/agent.d.ts +6 -5
  68. package/dist/src/deploy/agent.d.ts.map +1 -1
  69. package/dist/src/deploy/agent.js +4 -6
  70. package/dist/src/deploy/agent.js.map +1 -1
  71. package/dist/src/deploy/core.d.ts +4 -7
  72. package/dist/src/deploy/core.d.ts.map +1 -1
  73. package/dist/src/deploy/core.js +61 -73
  74. package/dist/src/deploy/core.js.map +1 -1
  75. package/dist/src/deploy/dry-run.d.ts +2 -3
  76. package/dist/src/deploy/dry-run.d.ts.map +1 -1
  77. package/dist/src/deploy/dry-run.js.map +1 -1
  78. package/dist/src/deploy/utils.d.ts +9 -11
  79. package/dist/src/deploy/utils.d.ts.map +1 -1
  80. package/dist/src/deploy/utils.js +13 -11
  81. package/dist/src/deploy/utils.js.map +1 -1
  82. package/dist/src/deploy/warp.d.ts +3 -7
  83. package/dist/src/deploy/warp.d.ts.map +1 -1
  84. package/dist/src/deploy/warp.js +26 -63
  85. package/dist/src/deploy/warp.js.map +1 -1
  86. package/dist/src/hook/read.d.ts +4 -5
  87. package/dist/src/hook/read.d.ts.map +1 -1
  88. package/dist/src/hook/read.js +8 -12
  89. package/dist/src/hook/read.js.map +1 -1
  90. package/dist/src/ism/read.d.ts +4 -5
  91. package/dist/src/ism/read.d.ts.map +1 -1
  92. package/dist/src/ism/read.js +8 -12
  93. package/dist/src/ism/read.js.map +1 -1
  94. package/dist/src/registry/MergedRegistry.d.ts +35 -0
  95. package/dist/src/registry/MergedRegistry.d.ts.map +1 -0
  96. package/dist/src/registry/MergedRegistry.js +83 -0
  97. package/dist/src/registry/MergedRegistry.js.map +1 -0
  98. package/dist/src/send/message.d.ts +3 -4
  99. package/dist/src/send/message.d.ts.map +1 -1
  100. package/dist/src/send/message.js +14 -19
  101. package/dist/src/send/message.js.map +1 -1
  102. package/dist/src/send/transfer.d.ts +3 -6
  103. package/dist/src/send/transfer.d.ts.map +1 -1
  104. package/dist/src/send/transfer.js +25 -40
  105. package/dist/src/send/transfer.js.map +1 -1
  106. package/dist/src/status/message.d.ts +3 -4
  107. package/dist/src/status/message.d.ts.map +1 -1
  108. package/dist/src/status/message.js +5 -12
  109. package/dist/src/status/message.js.map +1 -1
  110. package/dist/src/utils/chains.d.ts +2 -2
  111. package/dist/src/utils/chains.d.ts.map +1 -1
  112. package/dist/src/utils/chains.js +11 -12
  113. package/dist/src/utils/chains.js.map +1 -1
  114. package/dist/src/utils/files.d.ts +0 -7
  115. package/dist/src/utils/files.d.ts.map +1 -1
  116. package/dist/src/utils/files.js +2 -27
  117. package/dist/src/utils/files.js.map +1 -1
  118. package/dist/src/utils/keys.d.ts +15 -4
  119. package/dist/src/utils/keys.d.ts.map +1 -1
  120. package/dist/src/utils/keys.js +11 -16
  121. package/dist/src/utils/keys.js.map +1 -1
  122. package/dist/src/utils/tokens.d.ts +3 -0
  123. package/dist/src/utils/tokens.d.ts.map +1 -0
  124. package/dist/src/utils/tokens.js +14 -0
  125. package/dist/src/utils/tokens.js.map +1 -0
  126. package/dist/src/utils/version-check.d.ts.map +1 -1
  127. package/dist/src/utils/version-check.js +5 -0
  128. package/dist/src/utils/version-check.js.map +1 -1
  129. package/dist/src/version.d.ts +1 -1
  130. package/dist/src/version.js +1 -1
  131. package/examples/chain-config.yaml +38 -46
  132. package/package.json +5 -4
  133. package/dist/src/config/artifacts.d.ts +0 -16
  134. package/dist/src/config/artifacts.d.ts.map +0 -1
  135. package/dist/src/config/artifacts.js +0 -48
  136. package/dist/src/config/artifacts.js.map +0 -1
  137. package/dist/src/context.d.ts +0 -64
  138. package/dist/src/context.d.ts.map +0 -1
  139. package/dist/src/context.js +0 -113
  140. package/dist/src/context.js.map +0 -1
  141. package/dist/src/context.test.d.ts +0 -2
  142. package/dist/src/context.test.d.ts.map +0 -1
  143. package/dist/src/context.test.js +0 -21
  144. package/dist/src/context.test.js.map +0 -1
  145. package/dist/src/utils/fork.d.ts +0 -37
  146. package/dist/src/utils/fork.d.ts.map +0 -1
  147. package/dist/src/utils/fork.js +0 -91
  148. package/dist/src/utils/fork.js.map +0 -1
  149. package/examples/anvil-chains.yaml +0 -22
  150. package/examples/dry-run/anvil-chains.yaml +0 -17
  151. package/examples/dry-run/ism.yaml +0 -8
  152. package/examples/dry-run/warp-route-deployment.yaml +0 -4
  153. package/examples/fork/anvil-chains.yaml +0 -21
  154. package/examples/fork/ism.yaml +0 -9
  155. package/examples/fork/warp-route-deployment.yaml +0 -34
@@ -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
- const result = WarpRouteDeployConfigSchema.safeParse(config);
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({ format, outPath, chainConfigPath, }) {
16
+ export async function createWarpRouteDeployConfig({ context, outPath, }) {
23
17
  logBlue('Creating a new warp route deployment config');
24
- const customChains = readChainConfigsIfExists(chainConfigPath);
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(customChains, 'Select chains to which the base token will be connected');
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, format);
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":"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"}
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/context/types.ts"],"names":[],"mappings":""}
@@ -1,7 +1,8 @@
1
- export declare function runKurtosisAgentDeploy({ originChain, relayChains, chainConfigPath, agentConfigurationPath, }: {
2
- originChain: string;
3
- relayChains: string;
4
- chainConfigPath: string;
5
- agentConfigurationPath: string;
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":"AAYA,wBAAsB,sBAAsB,CAAC,EAC3C,WAAW,EACX,WAAW,EACX,eAAe,EACf,sBAAsB,GACvB,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;CAChC,iBA2DA"}
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"}
@@ -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, chainConfigPath, agentConfigurationPath, }) {
8
- const { customChains } = await getContext({ chainConfigPath });
6
+ export async function runKurtosisAgentDeploy({ context, originChain, relayChains, agentConfigurationPath, }) {
9
7
  if (!originChain) {
10
- originChain = await runSingleChainSelectionStep(customChains, 'Select the origin chain');
8
+ originChain = await runSingleChainSelectionStep(context.chainMetadata, 'Select the origin chain');
11
9
  }
12
10
  if (!relayChains) {
13
- const selectedRelayChains = await runMultiChainSelectionStep(customChains, 'Select chains to relay between', true);
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('./artifacts', 'agent config json', 'agent-config');
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;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,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,WAAW,EACX,WAAW,EACX,eAAe,EACf,sBAAsB,GAMvB;IACC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;IAE/D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,MAAM,2BAA2B,CAC7C,YAAY,EACZ,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,mBAAmB,GAAG,MAAM,0BAA0B,CAC1D,YAAY,EACZ,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,aAAa,EACb,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
+ {"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({ key, chainConfigPath, chains, ismConfigPath, hookConfigPath, artifactsPath, outPath, skipConfirmation, dryRun, }: {
7
- key?: string;
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
- artifactsPath?: string;
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":"AAGA,OAAO,EACL,QAAQ,EACR,SAAS,EAYT,SAAS,EAIT,cAAc,EAOf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAuB,MAAM,sBAAsB,CAAC;AAsCpE;;GAEG;AACH,wBAAsB,aAAa,CAAC,EAClC,GAAG,EACH,eAAe,EACf,MAAM,EACN,aAAa,EACb,cAAc,EACd,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,MAAM,GACP,EAAE;IACD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,iBA+EA;AA+QD,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"}
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"}
@@ -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 { getArtifactsFiles, prepNewArtifactsFiles, runFileSelectionStep, writeJson, } from '../utils/files.js';
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({ key, chainConfigPath, chains, ismConfigPath, hookConfigPath, artifactsPath, outPath, skipConfirmation, dryRun, }) {
20
- const context = dryRun
21
- ? await getDryRunContext({
22
- chainConfigPath,
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(customChains, 'Select chains to connect:', true);
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
- outPath,
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 = dryRun ? key : await signer.getAddress();
69
- const initialBalances = await prepareDeploy(multiProvider, userAddress, chains);
47
+ const userAddress = await signer.getAddress();
48
+ const initialBalances = await prepareDeploy(context, userAddress, chains);
70
49
  await executeDeploy(deploymentParams);
71
- await completeDeploy(Command.CORE, initialBalances, multiProvider, userAddress, chains, dryRun);
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({ chains, signer, artifacts, skipConfirmation, }) {
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 the Hyperlane SDK ${artifacts ? 'or your artifacts ' : ''}will be skipped`);
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({ chains, signer, multiProvider, outPath, artifacts = {}, ismConfigs = {}, multisigConfigs = {}, hooksConfig = {}, dryRun, }) {
111
+ async function executeDeploy({ context, chains, ismConfigs = {}, multisigConfigs = {}, hooksConfig = {}, agentOutPath, }) {
141
112
  logBlue('All systems ready, captain! Beginning deployment...');
142
- const [contractsFilePath, agentFilePath] = prepNewArtifactsFiles(outPath, getArtifactsFiles([
143
- { filename: 'core-deployment', description: 'Contract addresses' },
144
- { filename: 'agent-config', description: 'Agent configs' },
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
- const mergedContractAddrs = getMergedContractAddresses(artifacts, chains);
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(mergedContractAddrs);
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 = writeMergedAddresses(contractsFilePath, artifacts, ismFactoryContracts);
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(mergedContractAddrs, multiProvider);
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(mergedContractAddrs);
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 = writeMergedAddresses(contractsFilePath, artifacts, coreContracts);
153
+ artifacts = await updateChainAddresses(registry, coreContracts, artifacts);
186
154
  logGreen('✅ Core contracts deployed');
187
- log('Writing agent configs');
188
- await writeAgentConfig(agentFilePath, artifacts, chains, multiProvider);
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
- logBlue(`Contract address artifacts are in ${contractsFilePath}`);
192
- logBlue(`Agent configs are in ${agentFilePath}`);
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 writeMergedAddresses(filePath, aAddresses, bContracts) {
243
- const bAddresses = serializeContractsMap(bContracts);
244
- const mergedAddresses = objMerge(aAddresses, bAddresses);
245
- writeJson(filePath, mergedAddresses);
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(filePath, artifacts, chains, multiProvider) {
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 mergedAddressesMap = objMerge(sdkContractAddressesMap, artifacts);
242
+ const chainAddresses = await registry.getAddresses();
256
243
  for (const chain of chains) {
257
- if (!mergedAddressesMap[chain].interchainGasPaymaster) {
258
- mergedAddressesMap[chain].interchainGasPaymaster =
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, mergedAddressesMap, startBlocks);
264
- writeJson(filePath, agentConfig);
250
+ multiProvider, chainAddresses, startBlocks);
251
+ writeJson(outPath, agentConfig);
252
+ logGreen('Agent configs written');
265
253
  }
266
254
  //# sourceMappingURL=core.js.map