@hyperlane-xyz/cli 3.1.9 → 3.2.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.
Files changed (228) hide show
  1. package/README.md +6 -1
  2. package/dist/cli.d.ts +1 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +27 -3
  5. package/dist/cli.js.map +1 -1
  6. package/dist/env.d.ts +2 -0
  7. package/dist/env.d.ts.map +1 -0
  8. package/dist/env.js +14 -0
  9. package/dist/env.js.map +1 -0
  10. package/dist/src/avs/config.d.ts +11 -0
  11. package/dist/src/avs/config.d.ts.map +1 -0
  12. package/dist/src/avs/config.js +10 -0
  13. package/dist/src/avs/config.js.map +1 -0
  14. package/dist/src/avs/stakeRegistry.d.ts +19 -0
  15. package/dist/src/avs/stakeRegistry.d.ts.map +1 -0
  16. package/dist/src/avs/stakeRegistry.js +94 -0
  17. package/dist/src/avs/stakeRegistry.js.map +1 -0
  18. package/dist/src/commands/avs.d.ts +12 -0
  19. package/dist/src/commands/avs.d.ts.map +1 -0
  20. package/dist/src/commands/avs.js +58 -0
  21. package/dist/src/commands/avs.js.map +1 -0
  22. package/dist/src/commands/chains.d.ts.map +1 -1
  23. package/dist/src/commands/chains.js +46 -27
  24. package/dist/src/commands/chains.js.map +1 -1
  25. package/dist/src/commands/config.js +74 -85
  26. package/dist/src/commands/config.js.map +1 -1
  27. package/dist/src/commands/deploy.d.ts.map +1 -1
  28. package/dist/src/commands/deploy.js +58 -91
  29. package/dist/src/commands/deploy.js.map +1 -1
  30. package/dist/src/commands/hook.d.ts +12 -0
  31. package/dist/src/commands/hook.d.ts.map +1 -0
  32. package/dist/src/commands/hook.js +34 -0
  33. package/dist/src/commands/hook.js.map +1 -0
  34. package/dist/src/commands/ism.d.ts +12 -0
  35. package/dist/src/commands/ism.d.ts.map +1 -0
  36. package/dist/src/commands/ism.js +36 -0
  37. package/dist/src/commands/ism.js.map +1 -0
  38. package/dist/src/commands/options.d.ts +19 -7
  39. package/dist/src/commands/options.d.ts.map +1 -1
  40. package/dist/src/commands/options.js +90 -27
  41. package/dist/src/commands/options.js.map +1 -1
  42. package/dist/src/commands/send.d.ts +14 -1
  43. package/dist/src/commands/send.d.ts.map +1 -1
  44. package/dist/src/commands/send.js +32 -55
  45. package/dist/src/commands/send.js.map +1 -1
  46. package/dist/src/commands/signCommands.d.ts +3 -0
  47. package/dist/src/commands/signCommands.d.ts.map +1 -0
  48. package/dist/src/commands/signCommands.js +11 -0
  49. package/dist/src/commands/signCommands.js.map +1 -0
  50. package/dist/src/commands/status.d.ts +5 -2
  51. package/dist/src/commands/status.d.ts.map +1 -1
  52. package/dist/src/commands/status.js +9 -19
  53. package/dist/src/commands/status.js.map +1 -1
  54. package/dist/src/config/chain.d.ts +5 -7
  55. package/dist/src/config/chain.d.ts.map +1 -1
  56. package/dist/src/config/chain.js +94 -64
  57. package/dist/src/config/chain.js.map +1 -1
  58. package/dist/src/config/chain.test.d.ts +2 -0
  59. package/dist/src/config/chain.test.d.ts.map +1 -0
  60. package/dist/src/config/chain.test.js +9 -0
  61. package/dist/src/config/chain.test.js.map +1 -0
  62. package/dist/src/config/hooks.d.ts +91 -214
  63. package/dist/src/config/hooks.d.ts.map +1 -1
  64. package/dist/src/config/hooks.js +218 -122
  65. package/dist/src/config/hooks.js.map +1 -1
  66. package/dist/src/config/ism.d.ts +74 -0
  67. package/dist/src/config/ism.d.ts.map +1 -0
  68. package/dist/src/config/ism.js +223 -0
  69. package/dist/src/config/ism.js.map +1 -0
  70. package/dist/src/config/multisig.d.ts +4 -14
  71. package/dist/src/config/multisig.d.ts.map +1 -1
  72. package/dist/src/config/multisig.js +35 -29
  73. package/dist/src/config/multisig.js.map +1 -1
  74. package/dist/src/config/warp.d.ts +7 -180
  75. package/dist/src/config/warp.d.ts.map +1 -1
  76. package/dist/src/config/warp.js +55 -62
  77. package/dist/src/config/warp.js.map +1 -1
  78. package/dist/src/consts.d.ts +1 -0
  79. package/dist/src/consts.d.ts.map +1 -1
  80. package/dist/src/consts.js +1 -0
  81. package/dist/src/consts.js.map +1 -1
  82. package/dist/src/context/context.d.ts +14 -0
  83. package/dist/src/context/context.d.ts.map +1 -0
  84. package/dist/src/context/context.js +108 -0
  85. package/dist/src/context/context.js.map +1 -0
  86. package/dist/src/context/types.d.ts +33 -0
  87. package/dist/src/context/types.d.ts.map +1 -0
  88. package/dist/src/context/types.js.map +1 -0
  89. package/dist/src/deploy/agent.d.ts +6 -4
  90. package/dist/src/deploy/agent.d.ts.map +1 -1
  91. package/dist/src/deploy/agent.js +10 -24
  92. package/dist/src/deploy/agent.js.map +1 -1
  93. package/dist/src/deploy/core.d.ts +10 -7
  94. package/dist/src/deploy/core.d.ts.map +1 -1
  95. package/dist/src/deploy/core.js +156 -160
  96. package/dist/src/deploy/core.js.map +1 -1
  97. package/dist/src/deploy/dry-run.d.ts +19 -0
  98. package/dist/src/deploy/dry-run.d.ts.map +1 -0
  99. package/dist/src/deploy/dry-run.js +45 -0
  100. package/dist/src/deploy/dry-run.js.map +1 -0
  101. package/dist/src/deploy/utils.d.ts +15 -8
  102. package/dist/src/deploy/utils.d.ts.map +1 -1
  103. package/dist/src/deploy/utils.js +60 -11
  104. package/dist/src/deploy/utils.js.map +1 -1
  105. package/dist/src/deploy/warp.d.ts +4 -7
  106. package/dist/src/deploy/warp.d.ts.map +1 -1
  107. package/dist/src/deploy/warp.js +131 -169
  108. package/dist/src/deploy/warp.js.map +1 -1
  109. package/dist/src/hook/read.d.ts +13 -0
  110. package/dist/src/hook/read.d.ts.map +1 -0
  111. package/dist/src/hook/read.js +25 -0
  112. package/dist/src/hook/read.js.map +1 -0
  113. package/dist/src/ism/read.d.ts +13 -0
  114. package/dist/src/ism/read.d.ts.map +1 -0
  115. package/dist/src/ism/read.js +25 -0
  116. package/dist/src/ism/read.js.map +1 -0
  117. package/dist/src/logger.d.ts +17 -0
  118. package/dist/src/logger.d.ts.map +1 -0
  119. package/dist/src/logger.js +32 -0
  120. package/dist/src/logger.js.map +1 -0
  121. package/dist/src/registry/MergedRegistry.d.ts +35 -0
  122. package/dist/src/registry/MergedRegistry.d.ts.map +1 -0
  123. package/dist/src/registry/MergedRegistry.js +83 -0
  124. package/dist/src/registry/MergedRegistry.js.map +1 -0
  125. package/dist/src/send/message.d.ts +7 -6
  126. package/dist/src/send/message.d.ts.map +1 -1
  127. package/dist/src/send/message.js +40 -22
  128. package/dist/src/send/message.js.map +1 -1
  129. package/dist/src/send/transfer.d.ts +8 -10
  130. package/dist/src/send/transfer.d.ts.map +1 -1
  131. package/dist/src/send/transfer.js +68 -70
  132. package/dist/src/send/transfer.js.map +1 -1
  133. package/dist/src/status/message.d.ts +7 -5
  134. package/dist/src/status/message.d.ts.map +1 -1
  135. package/dist/src/status/message.js +25 -12
  136. package/dist/src/status/message.js.map +1 -1
  137. package/dist/src/submit/submit.d.ts +5 -0
  138. package/dist/src/submit/submit.d.ts.map +1 -0
  139. package/dist/src/submit/submit.js +30 -0
  140. package/dist/src/submit/submit.js.map +1 -0
  141. package/dist/src/submit/types.d.ts +18 -0
  142. package/dist/src/submit/types.d.ts.map +1 -0
  143. package/dist/src/submit/types.js +2 -0
  144. package/dist/src/{deploy → submit}/types.js.map +1 -1
  145. package/dist/src/tests/deployTestErc20.d.ts +2 -0
  146. package/dist/src/tests/deployTestErc20.d.ts.map +1 -0
  147. package/dist/src/tests/deployTestErc20.js +26 -0
  148. package/dist/src/tests/deployTestErc20.js.map +1 -0
  149. package/dist/src/tests/hooks.test.d.ts +2 -0
  150. package/dist/src/tests/hooks.test.d.ts.map +1 -0
  151. package/dist/src/tests/hooks.test.js +83 -0
  152. package/dist/src/tests/hooks.test.js.map +1 -0
  153. package/dist/src/tests/ism.test.d.ts +2 -0
  154. package/dist/src/tests/ism.test.d.ts.map +1 -0
  155. package/dist/src/tests/ism.test.js +76 -0
  156. package/dist/src/tests/ism.test.js.map +1 -0
  157. package/dist/src/tests/multisig.test.d.ts +2 -0
  158. package/dist/src/tests/multisig.test.d.ts.map +1 -0
  159. package/dist/src/tests/multisig.test.js +34 -0
  160. package/dist/src/tests/multisig.test.js.map +1 -0
  161. package/dist/src/utils/balances.d.ts +2 -4
  162. package/dist/src/utils/balances.d.ts.map +1 -1
  163. package/dist/src/utils/balances.js +8 -12
  164. package/dist/src/utils/balances.js.map +1 -1
  165. package/dist/src/utils/chains.d.ts +3 -2
  166. package/dist/src/utils/chains.d.ts.map +1 -1
  167. package/dist/src/utils/chains.js +42 -23
  168. package/dist/src/utils/chains.js.map +1 -1
  169. package/dist/src/utils/env.d.ts +6 -0
  170. package/dist/src/utils/env.d.ts.map +1 -0
  171. package/dist/src/utils/env.js +9 -0
  172. package/dist/src/utils/env.js.map +1 -0
  173. package/dist/src/utils/files.d.ts +7 -4
  174. package/dist/src/utils/files.d.ts.map +1 -1
  175. package/dist/src/utils/files.js +52 -29
  176. package/dist/src/utils/files.js.map +1 -1
  177. package/dist/src/utils/keys.d.ts +28 -1
  178. package/dist/src/utils/keys.d.ts.map +1 -1
  179. package/dist/src/utils/keys.js +65 -6
  180. package/dist/src/utils/keys.js.map +1 -1
  181. package/dist/src/utils/time.d.ts.map +1 -1
  182. package/dist/src/utils/time.js +8 -1
  183. package/dist/src/utils/time.js.map +1 -1
  184. package/dist/src/utils/time.test.d.ts +2 -0
  185. package/dist/src/utils/time.test.d.ts.map +1 -0
  186. package/dist/src/utils/time.test.js +9 -0
  187. package/dist/src/utils/time.test.js.map +1 -0
  188. package/dist/src/utils/tokens.d.ts +3 -0
  189. package/dist/src/utils/tokens.d.ts.map +1 -0
  190. package/dist/src/utils/tokens.js +14 -0
  191. package/dist/src/utils/tokens.js.map +1 -0
  192. package/dist/src/utils/version-check.d.ts +2 -0
  193. package/dist/src/utils/version-check.d.ts.map +1 -0
  194. package/dist/src/utils/version-check.js +15 -0
  195. package/dist/src/utils/version-check.js.map +1 -0
  196. package/dist/src/version.d.ts +2 -0
  197. package/dist/src/version.d.ts.map +1 -0
  198. package/dist/src/version.js +2 -0
  199. package/dist/src/version.js.map +1 -0
  200. package/examples/chain-config.yaml +38 -40
  201. package/examples/contract-artifacts.yaml +4 -4
  202. package/examples/hooks.yaml +66 -0
  203. package/examples/ism-advanced.yaml +33 -0
  204. package/examples/{multisig-ism.yaml → ism.yaml} +0 -8
  205. package/examples/warp-route-deployment.yaml +32 -0
  206. package/package.json +27 -14
  207. package/dist/logger.d.ts +0 -13
  208. package/dist/logger.d.ts.map +0 -1
  209. package/dist/logger.js +0 -44
  210. package/dist/logger.js.map +0 -1
  211. package/dist/src/config/artifacts.d.ts +0 -3
  212. package/dist/src/config/artifacts.d.ts.map +0 -1
  213. package/dist/src/config/artifacts.js +0 -18
  214. package/dist/src/config/artifacts.js.map +0 -1
  215. package/dist/src/context.d.ts +0 -388
  216. package/dist/src/context.d.ts.map +0 -1
  217. package/dist/src/context.js +0 -30
  218. package/dist/src/context.js.map +0 -1
  219. package/dist/src/deploy/TestRecipientDeployer.d.ts +0 -20
  220. package/dist/src/deploy/TestRecipientDeployer.d.ts.map +0 -1
  221. package/dist/src/deploy/TestRecipientDeployer.js +0 -36
  222. package/dist/src/deploy/TestRecipientDeployer.js.map +0 -1
  223. package/dist/src/deploy/types.d.ts +0 -21
  224. package/dist/src/deploy/types.d.ts.map +0 -1
  225. package/examples/anvil-chains.yaml +0 -22
  226. package/examples/hook-config.yaml +0 -18
  227. package/examples/warp-tokens.yaml +0 -26
  228. /package/dist/src/{deploy → context}/types.js +0 -0
@@ -1,22 +1,30 @@
1
+ import { ethers } from 'ethers';
2
+ import { getLocalProvider, } from '@hyperlane-xyz/sdk';
1
3
  import { ProtocolType } from '@hyperlane-xyz/utils';
2
- import { log, logGreen } from '../../logger.js';
3
- import { assertGasBalances } from '../utils/balances.js';
4
+ import { parseIsmConfig } from '../config/ism.js';
5
+ import { log, logGreen, logPink } from '../logger.js';
6
+ import { gasBalancesAreSufficient } from '../utils/balances.js';
7
+ import { ENV } from '../utils/env.js';
4
8
  import { assertSigner } from '../utils/keys.js';
5
- export async function runPreflightChecks({ origin, remotes, signer, multiProvider, minGas, }) {
9
+ import { completeDryRun } from './dry-run.js';
10
+ export async function runPreflightChecks({ context, origin, remotes, minGas, chainsToGasCheck, }) {
6
11
  log('Running pre-flight checks...');
7
12
  if (!origin || !remotes?.length)
8
13
  throw new Error('Invalid chain selection');
14
+ logGreen('✅ Chain selections are valid');
9
15
  if (remotes.includes(origin))
10
16
  throw new Error('Origin and remotes must be distinct');
17
+ logGreen('✅ Origin and remote are distinct');
11
18
  return runPreflightChecksForChains({
19
+ context,
12
20
  chains: [origin, ...remotes],
13
- signer,
14
- multiProvider,
15
21
  minGas,
22
+ chainsToGasCheck,
16
23
  });
17
24
  }
18
- export async function runPreflightChecksForChains({ chains, signer, multiProvider, minGas, }) {
19
- log('Running pre-flight checks...');
25
+ export async function runPreflightChecksForChains({ context, chains, minGas, chainsToGasCheck, }) {
26
+ log('Running pre-flight checks for chains...');
27
+ const { signer, multiProvider } = context;
20
28
  if (!chains?.length)
21
29
  throw new Error('Empty chain selection');
22
30
  for (const chain of chains) {
@@ -26,10 +34,51 @@ export async function runPreflightChecksForChains({ chains, signer, multiProvide
26
34
  if (metadata.protocol !== ProtocolType.Ethereum)
27
35
  throw new Error('Only Ethereum chains are supported for now');
28
36
  }
29
- logGreen('Chains are valid');
37
+ logGreen('Chains are valid');
30
38
  assertSigner(signer);
31
- logGreen('Signer is valid');
32
- await assertGasBalances(multiProvider, signer, chains, minGas);
33
- logGreen('Balances are sufficient ✅');
39
+ logGreen('Signer is valid');
40
+ const sufficient = await gasBalancesAreSufficient(multiProvider, signer, chainsToGasCheck ?? chains, minGas);
41
+ if (sufficient)
42
+ logGreen('✅ Balances are sufficient');
43
+ }
44
+ // from parsed types
45
+ export function isISMConfig(config) {
46
+ return Object.values(config).some((c) => 'type' in c);
47
+ }
48
+ // directly from filepath
49
+ export function isZODISMConfig(filepath) {
50
+ return parseIsmConfig(filepath).success;
51
+ }
52
+ export async function prepareDeploy(context, userAddress, chains) {
53
+ const { multiProvider, isDryRun } = context;
54
+ const initialBalances = {};
55
+ await Promise.all(chains.map(async (chain) => {
56
+ const provider = isDryRun
57
+ ? getLocalProvider(ENV.ANVIL_IP_ADDR, ENV.ANVIL_PORT)
58
+ : multiProvider.getProvider(chain);
59
+ const currentBalance = await provider.getBalance(userAddress);
60
+ initialBalances[chain] = currentBalance;
61
+ }));
62
+ return initialBalances;
63
+ }
64
+ export async function completeDeploy(context, command, initialBalances, userAddress, chains) {
65
+ const { multiProvider, isDryRun } = context;
66
+ if (chains.length > 0)
67
+ logPink(`⛽️ Gas Usage Statistics`);
68
+ for (const chain of chains) {
69
+ const provider = isDryRun
70
+ ? getLocalProvider(ENV.ANVIL_IP_ADDR, ENV.ANVIL_PORT)
71
+ : multiProvider.getProvider(chain);
72
+ const currentBalance = await provider.getBalance(userAddress);
73
+ const balanceDelta = initialBalances[chain].sub(currentBalance);
74
+ if (isDryRun && balanceDelta.lt(0))
75
+ break;
76
+ logPink(`\t- Gas required for ${command} ${isDryRun ? 'dry-run' : 'deploy'} on ${chain}: ${ethers.utils.formatEther(balanceDelta)} ${multiProvider.getChainMetadata(chain).nativeToken?.symbol}`);
77
+ }
78
+ if (isDryRun)
79
+ await completeDryRun(command);
80
+ }
81
+ export function toUpperCamelCase(string) {
82
+ return string.charAt(0).toUpperCase() + string.slice(1);
34
83
  }
35
84
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/deploy/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,MAAM,EACN,OAAO,EACP,MAAM,EACN,aAAa,EACb,MAAM,GAOP;IACC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,OAAO,2BAA2B,CAAC;QACjC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC;QAC5B,MAAM;QACN,aAAa;QACb,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,EAChD,MAAM,EACN,MAAM,EACN,aAAa,EACb,MAAM,GAMP;IACC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAEpC,IAAI,CAAC,MAAM,EAAE,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC9D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,QAAQ,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ;YAC7C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;KACjE;IACD,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAE/B,YAAY,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAE9B,MAAM,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/D,QAAQ,CAAC,2BAA2B,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/deploy/utils.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,6 @@
1
- export declare function runWarpDeploy({ key, chainConfigPath, warpConfigPath, coreArtifactsPath, outPath, skipConfirmation, }: {
2
- key: string;
3
- chainConfigPath: string;
4
- warpConfigPath?: string;
5
- coreArtifactsPath?: string;
6
- outPath: string;
7
- skipConfirmation: boolean;
1
+ import { WriteCommandContext } from '../context/types.js';
2
+ export declare function runWarpRouteDeploy({ context, warpRouteDeploymentConfigPath, }: {
3
+ context: WriteCommandContext;
4
+ warpRouteDeploymentConfigPath?: string;
8
5
  }): Promise<void>;
9
6
  //# sourceMappingURL=warp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"warp.d.ts","sourceRoot":"","sources":["../../../src/deploy/warp.ts"],"names":[],"mappings":"AAsCA,wBAAsB,aAAa,CAAC,EAClC,GAAG,EACH,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,OAAO,EACP,gBAAgB,GACjB,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,iBAuCA"}
1
+ {"version":3,"file":"warp.d.ts","sourceRoot":"","sources":["../../../src/deploy/warp.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAM1D,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,6BAA6B,GAC9B,EAAE;IACD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,6BAA6B,CAAC,EAAE,MAAM,CAAC;CACxC,iBAiDA"}
@@ -1,128 +1,122 @@
1
1
  import { confirm, input } from '@inquirer/prompts';
2
- import { ethers } from 'ethers';
3
- import { ERC20__factory, ERC721__factory } from '@hyperlane-xyz/core';
4
- import { HypERC20Deployer, HypERC721Deployer, TokenType, chainMetadata as defaultChainMetadata, getChainIdNumber, } from '@hyperlane-xyz/sdk';
5
- import { ProtocolType, objMap } from '@hyperlane-xyz/utils';
6
- import { log, logBlue, logGray, logGreen } from '../../logger.js';
7
- import { readDeploymentArtifacts } from '../config/artifacts.js';
8
- import { readWarpRouteConfig } from '../config/warp.js';
2
+ import { EvmTokenAdapter, HypERC20Deployer, HypERC721Deployer, MultiProtocolProvider, TOKEN_TYPE_TO_STANDARD, TokenType, getTokenConnectionId, isCollateralConfig, isNativeConfig, isSyntheticConfig, } from '@hyperlane-xyz/sdk';
3
+ import { ProtocolType } from '@hyperlane-xyz/utils';
4
+ import { readWarpRouteDeployConfig } from '../config/warp.js';
9
5
  import { MINIMUM_WARP_DEPLOY_GAS } from '../consts.js';
10
- import { getContextWithSigner, getMergedContractAddresses, } from '../context.js';
11
- import { prepNewArtifactsFiles, runFileSelectionStep, writeJson, } from '../utils/files.js';
12
- import { runPreflightChecks } from './utils.js';
13
- export async function runWarpDeploy({ key, chainConfigPath, warpConfigPath, coreArtifactsPath, outPath, skipConfirmation, }) {
14
- const { multiProvider, signer } = getContextWithSigner(key, chainConfigPath);
15
- if (!warpConfigPath) {
16
- warpConfigPath = await runFileSelectionStep('./configs', 'Warp config', 'warp');
6
+ import { log, logBlue, logGray, logGreen } from '../logger.js';
7
+ import { isFile, runFileSelectionStep } from '../utils/files.js';
8
+ import { completeDeploy, prepareDeploy, runPreflightChecks } from './utils.js';
9
+ export async function runWarpRouteDeploy({ context, warpRouteDeploymentConfigPath, }) {
10
+ const { signer, skipConfirmation } = context;
11
+ if (!warpRouteDeploymentConfigPath ||
12
+ !isFile(warpRouteDeploymentConfigPath)) {
13
+ if (skipConfirmation)
14
+ throw new Error('Warp route deployment config required');
15
+ warpRouteDeploymentConfigPath = await runFileSelectionStep('./configs', 'Warp route deployment config', 'warp');
17
16
  }
18
- const warpRouteConfig = readWarpRouteConfig(warpConfigPath);
19
- const artifacts = coreArtifactsPath
20
- ? readDeploymentArtifacts(coreArtifactsPath)
21
- : undefined;
17
+ else {
18
+ log(`Using warp route deployment config at ${warpRouteDeploymentConfigPath}`);
19
+ }
20
+ const warpRouteConfig = readWarpRouteDeployConfig(warpRouteDeploymentConfigPath);
22
21
  const configs = await runBuildConfigStep({
22
+ context,
23
23
  warpRouteConfig,
24
- artifacts,
25
- multiProvider,
26
- signer,
27
24
  });
28
25
  const deploymentParams = {
26
+ context,
29
27
  ...configs,
30
- signer,
31
- multiProvider,
32
- outPath,
33
- skipConfirmation,
34
28
  };
35
- logBlue('WARP Deployment plan');
29
+ logBlue('Warp route deployment plan');
36
30
  await runDeployPlanStep(deploymentParams);
37
31
  await runPreflightChecks({
38
32
  ...deploymentParams,
39
33
  minGas: MINIMUM_WARP_DEPLOY_GAS,
40
34
  });
35
+ const userAddress = await signer.getAddress();
36
+ const chains = [deploymentParams.origin, ...configs.remotes];
37
+ const initialBalances = await prepareDeploy(context, userAddress, chains);
41
38
  await executeDeploy(deploymentParams);
39
+ await completeDeploy(context, 'warp', initialBalances, userAddress, chains);
42
40
  }
43
- async function runBuildConfigStep({ warpRouteConfig, multiProvider, signer, artifacts, }) {
41
+ async function runBuildConfigStep({ context, warpRouteConfig, }) {
42
+ const { registry, signer, multiProvider, skipConfirmation } = context;
44
43
  log('Assembling token configs');
45
- const { base, synthetics } = warpRouteConfig;
46
- const { type: baseType, chainName: baseChainName, isNft } = base;
44
+ const chainAddresses = await registry.getAddresses();
47
45
  const owner = await signer.getAddress();
48
- const baseMetadata = await fetchBaseTokenMetadata(base, multiProvider);
49
- log(`Using base token metadata: Name: ${baseMetadata.name}, Symbol: ${baseMetadata.symbol}, Decimals: ${baseMetadata.decimals}`);
50
- const mergedContractAddrs = getMergedContractAddresses(artifacts);
51
- logGray('Contract addresses from artifacts:\n', JSON.stringify(mergedContractAddrs[baseChainName], null, 4));
52
- // Create configs that coalesce together values from the config file,
53
- // the artifacts, and the SDK as a fallback
54
- const configMap = {
55
- [baseChainName]: {
56
- type: baseType,
57
- token: baseType === TokenType.collateral
58
- ? base.address
59
- : ethers.constants.AddressZero,
60
- owner,
61
- mailbox: base.mailbox || mergedContractAddrs[baseChainName].mailbox,
62
- interchainSecurityModule: base.interchainSecurityModule ||
63
- mergedContractAddrs[baseChainName].interchainSecurityModule ||
64
- mergedContractAddrs[baseChainName].multisigIsm,
65
- // ismFactory: mergedContractAddrs[baseChainName].routingIsmFactory, // fix when updating from routingIsm
66
- foreignDeployment: base.foreignDeployment,
67
- name: baseMetadata.name,
68
- symbol: baseMetadata.symbol,
69
- decimals: baseMetadata.decimals,
70
- },
71
- };
72
- for (const synthetic of synthetics) {
73
- const sChainName = synthetic.chainName;
74
- configMap[sChainName] = {
75
- type: TokenType.synthetic,
76
- name: synthetic.name || baseMetadata.name,
77
- symbol: synthetic.symbol || baseMetadata.symbol,
78
- totalSupply: synthetic.totalSupply || 0,
79
- owner,
80
- mailbox: synthetic.mailbox || mergedContractAddrs[sChainName].mailbox,
81
- interchainSecurityModule: synthetic.interchainSecurityModule ||
82
- mergedContractAddrs[sChainName].interchainSecurityModule ||
83
- mergedContractAddrs[sChainName].multisigIsm,
84
- // ismFactory: mergedContractAddrs[sChainName].routingIsmFactory, // fix
85
- foreignDeployment: synthetic.foreignDeployment,
86
- };
87
- }
88
- // Request input for any address fields that are missing
89
46
  const requiredRouterFields = ['mailbox'];
90
- let hasShownInfo = false;
91
- for (const [chain, token] of Object.entries(configMap)) {
47
+ const remotes = [];
48
+ /// @dev This will keep track of the base collateral metadata which can get overwritten if there are multiple collaterals.
49
+ /// These 'base' variables are used to derive synthetic fields
50
+ /// @todo Remove this artifact when multi-collateral is enabled
51
+ let baseChainName = '';
52
+ let baseMetadata = {};
53
+ // Define configs that coalesce together values from the config file
54
+ for (const [chain, config] of Object.entries(warpRouteConfig)) {
55
+ // the artifacts, and the SDK as a fallback
56
+ config.owner = owner;
57
+ config.mailbox = config.mailbox || chainAddresses[chain]?.mailbox;
58
+ config.interchainSecurityModule =
59
+ config.interchainSecurityModule ||
60
+ chainAddresses[chain]?.interchainSecurityModule ||
61
+ chainAddresses[chain]?.multisigIsm;
62
+ // config.ismFactory: chainAddresses[baseChainName].domainRoutingIsmFactory, // TODO fix when updating from routingIsm
63
+ if (isCollateralConfig(config) || isNativeConfig(config)) {
64
+ // Store the base metadata
65
+ baseChainName = chain;
66
+ baseMetadata = await fetchBaseTokenMetadata(chain, config, multiProvider);
67
+ log(`Using token metadata: Name: ${baseMetadata.name}, Symbol: ${baseMetadata.symbol}, Decimals: ${baseMetadata.decimals}`);
68
+ if (isCollateralConfig(config)) {
69
+ config.name = baseMetadata.name;
70
+ config.symbol = baseMetadata.symbol;
71
+ config.decimals = baseMetadata.decimals;
72
+ }
73
+ }
74
+ else if (isSyntheticConfig(config)) {
75
+ // Use the config, or baseMetadata
76
+ config.name = config.name || baseMetadata.name;
77
+ config.symbol = config.symbol || baseMetadata.symbol;
78
+ config.totalSupply = config.totalSupply || 0;
79
+ remotes.push(chain);
80
+ }
81
+ let hasShownInfo = false;
82
+ // Request input for any address fields that are missing
92
83
  for (const field of requiredRouterFields) {
93
- if (token[field])
84
+ if (config[field])
94
85
  continue;
86
+ if (skipConfirmation)
87
+ throw new Error(`Field ${field} for token on ${chain} required`);
95
88
  if (!hasShownInfo) {
96
89
  logBlue('Some router fields are missing. Please enter them now, add them to your warp config, or use the --core flag to use deployment artifacts.');
97
90
  hasShownInfo = true;
98
91
  }
99
92
  const value = await input({
100
- message: `Enter ${field} for ${getTokenName(token)} token on ${chain}`,
93
+ message: `Enter ${field} for ${getTokenName(config)} token on ${chain}`,
101
94
  });
102
95
  if (!value)
103
96
  throw new Error(`Field ${field} required`);
104
- token[field] = value.trim();
97
+ config[field] = value.trim();
105
98
  }
106
99
  }
107
100
  log('Token configs ready');
108
101
  return {
109
- configMap,
110
- metadata: baseMetadata,
102
+ configMap: warpRouteConfig,
111
103
  origin: baseChainName,
112
- remotes: synthetics.map(({ chainName }) => chainName),
113
- isNft: !!isNft,
104
+ metadata: baseMetadata,
105
+ remotes,
114
106
  };
115
107
  }
116
- async function runDeployPlanStep({ configMap, isNft, origin, remotes, signer, skipConfirmation, }) {
108
+ async function runDeployPlanStep({ context, configMap, origin, remotes, }) {
109
+ const { signer, skipConfirmation } = context;
117
110
  const address = await signer.getAddress();
118
111
  const baseToken = configMap[origin];
119
112
  const baseName = getTokenName(baseToken);
120
113
  logBlue('\nDeployment plan');
121
114
  logGray('===============');
115
+ log(`Collateral type will be ${baseToken.type}`);
122
116
  log(`Transaction signer and owner of new contracts will be ${address}`);
123
117
  log(`Deploying a warp route with a base of ${baseName} token on ${origin}`);
124
118
  log(`Connecting it to new synthetic tokens on ${remotes.join(', ')}`);
125
- log(`Using token standard ${isNft ? 'ERC721' : 'ERC20'}`);
119
+ log(`Using token standard ${configMap.isNft ? 'ERC721' : 'ERC20'}`);
126
120
  if (skipConfirmation)
127
121
  return;
128
122
  const isConfirmed = await confirm({
@@ -133,107 +127,75 @@ async function runDeployPlanStep({ configMap, isNft, origin, remotes, signer, sk
133
127
  }
134
128
  async function executeDeploy(params) {
135
129
  logBlue('All systems ready, captain! Beginning deployment...');
136
- const { configMap, isNft, multiProvider, outPath } = params;
137
- const [contractsFilePath, tokenConfigPath] = prepNewArtifactsFiles(outPath, [
138
- { filename: 'warp-deployment', description: 'Contract addresses' },
139
- { filename: 'warp-ui-token-config', description: 'Warp UI token config' },
140
- ]);
141
- const deployer = isNft
130
+ const { configMap, context: { registry, multiProvider, isDryRun }, } = params;
131
+ const deployer = configMap.isNft
142
132
  ? new HypERC721Deployer(multiProvider)
143
133
  : new HypERC20Deployer(multiProvider);
144
- const deployedContracts = await deployer.deploy(configMap);
145
- logGreen('Hyp token deployments complete');
146
- log('Writing deployment artifacts');
147
- writeTokenDeploymentArtifacts(contractsFilePath, deployedContracts, params);
148
- writeWarpUiTokenConfig(tokenConfigPath, deployedContracts, params);
134
+ const config = isDryRun
135
+ ? { [params.origin]: configMap[params.origin] }
136
+ : configMap;
137
+ const deployedContracts = await deployer.deploy(config); /// @todo remove ChainMap once Hyperlane deployers are refactored
138
+ logGreen('✅ Hyp token deployments complete');
139
+ if (!isDryRun)
140
+ log('Writing deployment artifacts');
141
+ const warpCoreConfig = getWarpCoreConfig(params, deployedContracts);
142
+ await registry.addWarpRoute(warpCoreConfig);
143
+ log(JSON.stringify(warpCoreConfig, null, 2));
149
144
  logBlue('Deployment is complete!');
150
- logBlue(`Contract address artifacts are in ${contractsFilePath}`);
151
- logBlue(`Warp UI token config is in ${tokenConfigPath}`);
152
145
  }
153
- // TODO move into token classes in the SDK
154
- async function fetchBaseTokenMetadata(base, multiProvider) {
155
- const { type, name, symbol, chainName, address, decimals, isNft } = base;
156
- // Skip fetching metadata if it's already provided in the config
157
- if (name && symbol && decimals) {
158
- return { name, symbol, decimals };
146
+ async function fetchBaseTokenMetadata(chain, config, multiProvider) {
147
+ if (config.type === TokenType.native) {
148
+ // If it's a native token, use the chain's native token metadata
149
+ const chainNativeToken = multiProvider.getChainMetadata(chain).nativeToken;
150
+ if (chainNativeToken)
151
+ return chainNativeToken;
152
+ else
153
+ throw new Error(`No native token metadata for ${chain}`);
159
154
  }
160
- if (type === TokenType.native) {
161
- return (multiProvider.getChainMetadata(base.chainName).nativeToken ||
162
- defaultChainMetadata.ethereum.nativeToken);
163
- }
164
- else if (base.type === TokenType.collateral && address) {
165
- log(`Fetching token metadata for ${address} on ${chainName}}`);
166
- const provider = multiProvider.getProvider(chainName);
167
- if (isNft) {
168
- const erc721Contract = ERC721__factory.connect(address, provider);
169
- const [name, symbol] = await Promise.all([
170
- erc721Contract.name(),
171
- erc721Contract.symbol(),
172
- ]);
173
- return { name, symbol, decimals: 0 };
174
- }
175
- else {
176
- const erc20Contract = ERC20__factory.connect(address, provider);
177
- const [name, symbol, decimals] = await Promise.all([
178
- erc20Contract.name(),
179
- erc20Contract.symbol(),
180
- erc20Contract.decimals(),
181
- ]);
182
- return { name, symbol, decimals };
183
- }
155
+ else if (config.type === TokenType.collateralVault ||
156
+ config.type === TokenType.collateral) {
157
+ // If it's a collateral type, use a TokenAdapter to query for its metadata
158
+ log(`Fetching token metadata for ${config.token} on ${chain}`);
159
+ const adapter = new EvmTokenAdapter(chain, MultiProtocolProvider.fromMultiProvider(multiProvider), { token: config.token });
160
+ return adapter.getMetadata();
184
161
  }
185
162
  else {
186
- throw new Error(`Unsupported token: ${base}`);
163
+ throw new Error(`Unsupported token: ${config.type}. Consider setting token metadata in your deployment config.`);
187
164
  }
188
165
  }
189
166
  function getTokenName(token) {
190
167
  return token.type === TokenType.native ? 'native' : token.name;
191
168
  }
192
- function writeTokenDeploymentArtifacts(filePath, contracts, { configMap }) {
193
- const artifacts = objMap(contracts, (chain, contract) => {
194
- return {
195
- router: contract.router.address,
196
- tokenType: configMap[chain].type,
197
- };
198
- });
199
- writeJson(filePath, artifacts);
200
- }
201
- function writeWarpUiTokenConfig(filePath, contracts, { configMap, isNft, metadata, origin, multiProvider }) {
202
- const baseConfig = configMap[origin];
203
- const hypTokenAddr = contracts[origin]?.router?.address || configMap[origin]?.foreignDeployment;
204
- if (!hypTokenAddr) {
205
- throw Error('No base Hyperlane token address deployed and no foreign deployment specified');
206
- }
207
- const chain = multiProvider.getChainMetadata(origin);
208
- if (chain.protocol !== ProtocolType.Ethereum)
209
- throw Error('Unsupported VM');
210
- const chainMetadata = multiProvider.getChainMetadata(origin);
211
- const commonFields = {
212
- chainId: getChainIdNumber(chainMetadata),
213
- name: metadata.name,
214
- symbol: metadata.symbol,
215
- decimals: metadata.decimals,
216
- };
217
- let tokenConfig;
218
- if (baseConfig.type === TokenType.collateral) {
219
- tokenConfig = {
220
- ...commonFields,
221
- type: TokenType.collateral,
222
- address: baseConfig.token,
223
- hypCollateralAddress: hypTokenAddr,
224
- isNft,
225
- };
169
+ function getWarpCoreConfig({ configMap, metadata }, contracts) {
170
+ const warpCoreConfig = { tokens: [] };
171
+ // First pass, create token configs
172
+ for (const [chainName, contract] of Object.entries(contracts)) {
173
+ const config = configMap[chainName];
174
+ const collateralAddressOrDenom = config.type === TokenType.collateral ? config.token : undefined;
175
+ warpCoreConfig.tokens.push({
176
+ chainName,
177
+ standard: TOKEN_TYPE_TO_STANDARD[config.type],
178
+ name: metadata.name,
179
+ symbol: metadata.symbol,
180
+ decimals: metadata.decimals,
181
+ addressOrDenom: contract[configMap[chainName].type].address,
182
+ collateralAddressOrDenom,
183
+ });
226
184
  }
227
- else if (baseConfig.type === TokenType.native) {
228
- tokenConfig = {
229
- ...commonFields,
230
- type: TokenType.native,
231
- hypNativeAddress: hypTokenAddr,
232
- };
233
- }
234
- else {
235
- throw new Error(`Unsupported token type: ${baseConfig.type}`);
185
+ // Second pass, add connections between tokens
186
+ // Assumes full interconnectivity between all tokens for now b.c. that's
187
+ // what the deployers do by default.
188
+ for (const token1 of warpCoreConfig.tokens) {
189
+ for (const token2 of warpCoreConfig.tokens) {
190
+ if (token1.chainName === token2.chainName &&
191
+ token1.addressOrDenom === token2.addressOrDenom)
192
+ continue;
193
+ token1.connections ||= [];
194
+ token1.connections.push({
195
+ token: getTokenConnectionId(ProtocolType.Ethereum, token2.chainName, token2.addressOrDenom),
196
+ });
197
+ }
236
198
  }
237
- writeJson(filePath, tokenConfig);
199
+ return warpCoreConfig;
238
200
  }
239
201
  //# sourceMappingURL=warp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"warp.js","sourceRoot":"","sources":["../../../src/deploy/warp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"warp.js","sourceRoot":"","sources":["../../../src/deploy/warp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { ChainName } from '@hyperlane-xyz/sdk';
2
+ import { Address } from '@hyperlane-xyz/utils';
3
+ import { CommandContext } from '../context/types.js';
4
+ /**
5
+ * Read Hook config for a specified chain and address, logging or writing result to file.
6
+ */
7
+ export declare function readHookConfig({ context, chain, address, out, }: {
8
+ context: CommandContext;
9
+ chain: ChainName;
10
+ address: Address;
11
+ out?: string;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/hook/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAiC,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD;;GAEG;AACH,wBAAsB,cAAc,CAAC,EACnC,OAAO,EACP,KAAK,EACL,OAAO,EACP,GAAG,GACJ,EAAE;IACD,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB"}
@@ -0,0 +1,25 @@
1
+ import { EvmHookReader } from '@hyperlane-xyz/sdk';
2
+ import { ProtocolType, stringifyObject } from '@hyperlane-xyz/utils';
3
+ import { log, logBlue, logRed } from '../logger.js';
4
+ import { resolveFileFormat, writeFileAtPath } from '../utils/files.js';
5
+ /**
6
+ * Read Hook config for a specified chain and address, logging or writing result to file.
7
+ */
8
+ export async function readHookConfig({ context, chain, address, out, }) {
9
+ if (context.multiProvider.getProtocol(chain) === ProtocolType.Ethereum) {
10
+ const hookReader = new EvmHookReader(context.multiProvider, chain);
11
+ const config = await hookReader.deriveHookConfig(address);
12
+ const stringConfig = stringifyObject(config, resolveFileFormat(out), 2);
13
+ if (!out) {
14
+ logBlue(`Hook Config at ${address} on ${chain}:`);
15
+ log(stringConfig);
16
+ }
17
+ else {
18
+ writeFileAtPath(out, stringConfig + '\n');
19
+ logBlue(`Hook Config written to ${out}.`);
20
+ }
21
+ return;
22
+ }
23
+ logRed('Unsupported chain. Currently this command supports EVM chains only.');
24
+ }
25
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/hook/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAW,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG9E,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEvE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,OAAO,EACP,KAAK,EACL,OAAO,EACP,GAAG,GAMJ;IACC,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,QAAQ,EAAE,CAAC;QACvE,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,kBAAkB,OAAO,OAAO,KAAK,GAAG,CAAC,CAAC;YAClD,GAAG,CAAC,YAAY,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;YAC1C,OAAO,CAAC,0BAA0B,GAAG,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,qEAAqE,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { ChainName } from '@hyperlane-xyz/sdk';
2
+ import { Address } from '@hyperlane-xyz/utils';
3
+ import { CommandContext } from '../context/types.js';
4
+ /**
5
+ * Read ISM config for a specified chain and address, logging or writing result to file.
6
+ */
7
+ export declare function readIsmConfig({ context, chain, address, out, }: {
8
+ context: CommandContext;
9
+ chain: ChainName;
10
+ address: Address;
11
+ out?: string;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=read.d.ts.map