@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,8 +1,10 @@
1
1
  import { ChainName } from '@hyperlane-xyz/sdk';
2
- export declare function checkMessageStatus({ chainConfigPath, coreArtifactsPath, messageId, destination, }: {
3
- chainConfigPath: string;
4
- coreArtifactsPath: string;
5
- messageId: string;
6
- destination: ChainName;
2
+ import { CommandContext } from '../context/types.js';
3
+ export declare function checkMessageStatus({ context, messageId, destination, origin, selfRelay, }: {
4
+ context: CommandContext;
5
+ messageId?: string;
6
+ destination?: ChainName;
7
+ origin?: ChainName;
8
+ selfRelay?: boolean;
7
9
  }): Promise<void>;
8
10
  //# sourceMappingURL=message.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/status/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,MAAM,oBAAoB,CAAC;AAM9D,wBAAsB,kBAAkB,CAAC,EACvC,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,WAAW,GACZ,EAAE;IACD,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;CACxB,iBAmBA"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/status/message.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAiB,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,SAAS,EACT,WAAW,EACX,MAAM,EACN,SAAS,GACV,EAAE;IACD,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,iBA0CA"}
@@ -1,22 +1,35 @@
1
+ import { input } from '@inquirer/prompts';
1
2
  import { HyperlaneCore } from '@hyperlane-xyz/sdk';
2
- import { log, logBlue, logGreen } from '../../logger.js';
3
- import { readDeploymentArtifacts } from '../config/artifacts.js';
4
- import { getContext, getMergedContractAddresses } from '../context.js';
5
- export async function checkMessageStatus({ chainConfigPath, coreArtifactsPath, messageId, destination, }) {
6
- const { multiProvider } = getContext(chainConfigPath);
7
- const coreArtifacts = coreArtifactsPath
8
- ? readDeploymentArtifacts(coreArtifactsPath)
9
- : undefined;
10
- const mergedContractAddrs = getMergedContractAddresses(coreArtifacts);
11
- const core = HyperlaneCore.fromAddressesMap(mergedContractAddrs, multiProvider);
3
+ import { log, logBlue, logGreen } from '../logger.js';
4
+ import { runSingleChainSelectionStep } from '../utils/chains.js';
5
+ export async function checkMessageStatus({ context, messageId, destination, origin, selfRelay, }) {
6
+ if (!destination) {
7
+ destination = await runSingleChainSelectionStep(context.chainMetadata, 'Select the destination chain');
8
+ }
9
+ if (!messageId) {
10
+ messageId = await input({
11
+ message: 'Please specify the message id',
12
+ });
13
+ }
14
+ const chainAddresses = await context.registry.getAddresses();
15
+ const core = HyperlaneCore.fromAddressesMap(chainAddresses, context.multiProvider);
12
16
  const mailbox = core.getContracts(destination).mailbox;
13
17
  log(`Checking status of message ${messageId} on ${destination}`);
14
18
  const delivered = await mailbox.delivered(messageId);
15
19
  if (delivered) {
16
20
  logGreen(`Message ${messageId} was delivered`);
21
+ return;
17
22
  }
18
- else {
19
- logBlue(`Message ${messageId} was not yet delivered`);
23
+ logBlue(`Message ${messageId} was not yet delivered`);
24
+ if (selfRelay) {
25
+ // TODO: implement option for tx receipt input
26
+ if (!origin) {
27
+ origin = await runSingleChainSelectionStep(context.chainMetadata, 'Select the origin chain');
28
+ }
29
+ const receipt = await core.getDispatchTx(origin, messageId);
30
+ const messages = core.getDispatchedMessages(receipt);
31
+ await core.relayMessage(messages[0]);
32
+ logGreen(`Message ${messageId} was self-relayed!`);
20
33
  }
21
34
  }
22
35
  //# sourceMappingURL=message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/status/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,WAAW,GAMZ;IACC,MAAM,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,iBAAiB;QACrC,CAAC,CAAC,uBAAuB,CAAC,iBAAiB,CAAC;QAC5C,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,aAAa,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,aAAa,CAAC,gBAAgB,CACzC,mBAAmB,EACnB,aAAa,CACd,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;IACvD,GAAG,CAAC,8BAA8B,SAAS,OAAO,WAAW,EAAE,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,SAAS,EAAE;QACb,QAAQ,CAAC,WAAW,SAAS,gBAAgB,CAAC,CAAC;KAChD;SAAM;QACL,OAAO,CAAC,WAAW,SAAS,wBAAwB,CAAC,CAAC;KACvD;AACH,CAAC"}
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/status/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAa,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,OAAO,EACP,SAAS,EACT,WAAW,EACX,MAAM,EACN,SAAS,GAOV;IACC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,MAAM,2BAA2B,CAC7C,OAAO,CAAC,aAAa,EACrB,8BAA8B,CAC/B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,MAAM,KAAK,CAAC;YACtB,OAAO,EAAE,+BAA+B;SACzC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,aAAa,CAAC,gBAAgB,CACzC,cAAc,EACd,OAAO,CAAC,aAAa,CACtB,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;IACvD,GAAG,CAAC,8BAA8B,SAAS,OAAO,WAAW,EAAE,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,CAAC,WAAW,SAAS,gBAAgB,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IACD,OAAO,CAAC,WAAW,SAAS,wBAAwB,CAAC,CAAC;IAEtD,IAAI,SAAS,EAAE,CAAC;QACd,8CAA8C;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,MAAM,2BAA2B,CACxC,OAAO,CAAC,aAAa,EACrB,yBAAyB,CAC1B,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,QAAQ,CAAC,WAAW,SAAS,oBAAoB,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { TxSubmitterBuilder } from '@hyperlane-xyz/sdk';
2
+ import { ProtocolType } from '@hyperlane-xyz/utils';
3
+ import { SubmitterBuilderSettings } from './types.js';
4
+ export declare function getSubmitterBuilder<TProtocol extends ProtocolType>({ submitterMetadata, transformersMetadata, multiProvider, }: SubmitterBuilderSettings): Promise<TxSubmitterBuilder<TProtocol>>;
5
+ //# sourceMappingURL=submit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../../src/submit/submit.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,kBAAkB,EAKnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EACL,wBAAwB,EAGzB,MAAM,YAAY,CAAC;AAEpB,wBAAsB,mBAAmB,CAAC,SAAS,SAAS,YAAY,EAAE,EACxE,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,GACd,EAAE,wBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAWnE"}
@@ -0,0 +1,30 @@
1
+ import { EV5GnosisSafeTxSubmitter, EV5ImpersonatedAccountTxSubmitter, EV5InterchainAccountTxTransformer, EV5JsonRpcTxSubmitter, TxSubmitterBuilder, TxSubmitterType, TxTransformerType, } from '@hyperlane-xyz/sdk';
2
+ export async function getSubmitterBuilder({ submitterMetadata, transformersMetadata, multiProvider, }) {
3
+ const submitter = await getSubmitter(multiProvider, submitterMetadata);
4
+ const transformers = await getTransformers(multiProvider, transformersMetadata);
5
+ return new TxSubmitterBuilder(submitter, transformers);
6
+ }
7
+ async function getSubmitter(multiProvider, submitterMetadata) {
8
+ switch (submitterMetadata.type) {
9
+ case TxSubmitterType.JSON_RPC:
10
+ return new EV5JsonRpcTxSubmitter(multiProvider);
11
+ case TxSubmitterType.IMPERSONATED_ACCOUNT:
12
+ return new EV5ImpersonatedAccountTxSubmitter(multiProvider, submitterMetadata.props);
13
+ case TxSubmitterType.GNOSIS_SAFE:
14
+ return new EV5GnosisSafeTxSubmitter(multiProvider, submitterMetadata.props);
15
+ default:
16
+ throw new Error(`Invalid TxSubmitterType: ${submitterMetadata.type}`);
17
+ }
18
+ }
19
+ async function getTransformers(multiProvider, metadata) {
20
+ return Promise.all(metadata.map(({ type, props: settings }) => getTransformer(multiProvider, { type, props: settings })));
21
+ }
22
+ async function getTransformer(multiProvider, transformerMetadata) {
23
+ switch (transformerMetadata.type) {
24
+ case TxTransformerType.ICA:
25
+ return new EV5InterchainAccountTxTransformer(multiProvider, transformerMetadata.props);
26
+ default:
27
+ throw new Error(`Invalid TxTransformerType: ${transformerMetadata.type}`);
28
+ }
29
+ }
30
+ //# sourceMappingURL=submit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../src/submit/submit.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAExB,iCAAiC,EAEjC,iCAAiC,EACjC,qBAAqB,EAErB,kBAAkB,EAElB,eAAe,EAEf,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAS5B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAiC,EACxE,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,GACY;IACzB,MAAM,SAAS,GAAG,MAAM,YAAY,CAClC,aAAa,EACb,iBAAiB,CAClB,CAAC;IACF,MAAM,YAAY,GAAG,MAAM,eAAe,CACxC,aAAa,EACb,oBAAoB,CACrB,CAAC;IAEF,OAAO,IAAI,kBAAkB,CAAY,SAAS,EAAE,YAAY,CAAC,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,aAA4B,EAC5B,iBAAoC;IAEpC,QAAQ,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC/B,KAAK,eAAe,CAAC,QAAQ;YAC3B,OAAO,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAClD,KAAK,eAAe,CAAC,oBAAoB;YACvC,OAAO,IAAI,iCAAiC,CAC1C,aAAa,EACb,iBAAiB,CAAC,KAA+C,CAClE,CAAC;QACJ,KAAK,eAAe,CAAC,WAAW;YAC9B,OAAO,IAAI,wBAAwB,CACjC,aAAa,EACb,iBAAiB,CAAC,KAAsC,CACzD,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,aAA4B,EAC5B,QAA+B;IAE/B,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CACzC,cAAc,CAAY,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CACpE,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,aAA4B,EAC5B,mBAAwC;IAExC,QAAQ,mBAAmB,CAAC,IAAI,EAAE,CAAC;QACjC,KAAK,iBAAiB,CAAC,GAAG;YACxB,OAAO,IAAI,iCAAiC,CAC1C,aAAa,EACb,mBAAmB,CAAC,KAAK,CAC1B,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { EV5GnosisSafeTxSubmitterProps, EV5ImpersonatedAccountTxSubmitterProps, EV5InterchainAccountTxTransformerProps, MultiProvider, TxSubmitterType, TxTransformerType } from '@hyperlane-xyz/sdk';
2
+ export interface SubmitterBuilderSettings {
3
+ submitterMetadata: SubmitterMetadata;
4
+ transformersMetadata: TransformerMetadata[];
5
+ multiProvider: MultiProvider;
6
+ }
7
+ export interface SubmitterMetadata {
8
+ type: TxSubmitterType;
9
+ props: SubmitterProps;
10
+ }
11
+ export interface TransformerMetadata {
12
+ type: TxTransformerType;
13
+ props: TransformerProps;
14
+ }
15
+ type SubmitterProps = EV5ImpersonatedAccountTxSubmitterProps | EV5GnosisSafeTxSubmitterProps;
16
+ type TransformerProps = EV5InterchainAccountTxTransformerProps;
17
+ export {};
18
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/submit/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAC7B,sCAAsC,EACtC,sCAAsC,EACtC,aAAa,EACb,eAAe,EACf,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,wBAAwB;IACvC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,aAAa,EAAE,aAAa,CAAC;CAC9B;AACD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;CACvB;AACD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,KAAK,cAAc,GACf,sCAAsC,GACtC,6BAA6B,CAAC;AAClC,KAAK,gBAAgB,GAAG,sCAAsC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/deploy/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/submit/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deployTestErc20.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployTestErc20.d.ts","sourceRoot":"","sources":["../../../src/tests/deployTestErc20.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import { Wallet, providers } from 'ethers';
2
+ import fs from 'fs';
3
+ import { ERC20Test__factory } from '@hyperlane-xyz/core';
4
+ import { TokenType } from '@hyperlane-xyz/sdk';
5
+ async function deployERC20() {
6
+ const [rpcUrl, chain1, chain2, privateKey, outPath] = process.argv.slice(2);
7
+ console.log('Deploying Test ERC20 contract to local node');
8
+ const provider = new providers.JsonRpcProvider(rpcUrl);
9
+ const signer = new Wallet(privateKey, provider);
10
+ const factory = new ERC20Test__factory(signer);
11
+ const contract = await factory.deploy('fake', 'FAKE', '100000000000000000000', 18);
12
+ await contract.deployed();
13
+ console.log('Test ERC20 contract deployed', contract.address);
14
+ const warpDeploymentConfig = {
15
+ [chain1]: {
16
+ type: TokenType.collateral,
17
+ token: contract.address,
18
+ isNft: false,
19
+ },
20
+ [chain2]: { type: TokenType.synthetic },
21
+ };
22
+ console.log('Writing deployment config to', outPath);
23
+ fs.writeFileSync(outPath, JSON.stringify(warpDeploymentConfig, null, 2));
24
+ }
25
+ deployERC20().catch(console.error);
26
+ //# sourceMappingURL=deployTestErc20.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployTestErc20.js","sourceRoot":"","sources":["../../../src/tests/deployTestErc20.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAyB,MAAM,oBAAoB,CAAC;AAEtE,KAAK,UAAU,WAAW;IACxB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CACnC,MAAM,EACN,MAAM,EACN,uBAAuB,EACvB,EAAE,CACH,CAAC;IACF,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE9D,MAAM,oBAAoB,GAA0B;QAClD,CAAC,MAAM,CAAC,EAAE;YACR,IAAI,EAAE,SAAS,CAAC,UAAU;YAC1B,KAAK,EAAE,QAAQ,CAAC,OAAO;YACvB,KAAK,EAAE,KAAK;SACb;QACD,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE;KACxC,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;IACrD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hooks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.test.d.ts","sourceRoot":"","sources":["../../../src/tests/hooks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ import { expect } from 'chai';
2
+ import { GasOracleContractType, HookType, } from '@hyperlane-xyz/sdk';
3
+ import { readHooksConfigMap } from '../config/hooks.js';
4
+ describe('readHooksConfigMap', () => {
5
+ it('parses and validates example correctly', () => {
6
+ const hooks = readHooksConfigMap('examples/hooks.yaml');
7
+ const exampleHooksConfig = {
8
+ anvil1: {
9
+ required: {
10
+ type: HookType.PROTOCOL_FEE,
11
+ owner: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
12
+ beneficiary: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
13
+ maxProtocolFee: '1000000000000000000',
14
+ protocolFee: '200000000000000',
15
+ },
16
+ default: {
17
+ type: HookType.ROUTING,
18
+ owner: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
19
+ domains: {
20
+ anvil2: {
21
+ type: HookType.AGGREGATION,
22
+ hooks: [
23
+ {
24
+ type: HookType.MERKLE_TREE,
25
+ },
26
+ {
27
+ type: HookType.INTERCHAIN_GAS_PAYMASTER,
28
+ beneficiary: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
29
+ owner: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
30
+ oracleKey: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
31
+ gasOracleType: {
32
+ anvil2: GasOracleContractType.StorageGasOracle,
33
+ },
34
+ overhead: { anvil2: 50000 },
35
+ },
36
+ ],
37
+ },
38
+ },
39
+ },
40
+ },
41
+ anvil2: {
42
+ required: {
43
+ type: HookType.PROTOCOL_FEE,
44
+ owner: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
45
+ beneficiary: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
46
+ maxProtocolFee: '1000000000000000000',
47
+ protocolFee: '200000000000000',
48
+ },
49
+ default: {
50
+ type: HookType.ROUTING,
51
+ owner: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
52
+ domains: {
53
+ anvil1: {
54
+ type: HookType.AGGREGATION,
55
+ hooks: [
56
+ {
57
+ type: HookType.MERKLE_TREE,
58
+ },
59
+ {
60
+ type: HookType.INTERCHAIN_GAS_PAYMASTER,
61
+ beneficiary: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
62
+ owner: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
63
+ oracleKey: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
64
+ gasOracleType: {
65
+ anvil1: GasOracleContractType.StorageGasOracle,
66
+ },
67
+ overhead: { anvil1: 50000 },
68
+ },
69
+ ],
70
+ },
71
+ },
72
+ },
73
+ },
74
+ };
75
+ expect(hooks).to.deep.equal(exampleHooksConfig);
76
+ });
77
+ it('parsing failure, missing internal key "overhead"', () => {
78
+ expect(() => {
79
+ readHooksConfigMap('src/tests/hooks/safe-parse-fail.yaml');
80
+ }).to.throw('Invalid hook config: anvil2,default => Invalid input');
81
+ });
82
+ });
83
+ //# sourceMappingURL=hooks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.test.js","sourceRoot":"","sources":["../../../src/tests/hooks.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAEL,qBAAqB,EACrB,QAAQ,GAET,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;QAExD,MAAM,kBAAkB,GAA0B;YAChD,MAAM,EAAE;gBACN,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ,CAAC,YAAY;oBAC3B,KAAK,EAAE,4CAA4C;oBACnD,WAAW,EAAE,4CAA4C;oBACzD,cAAc,EAAE,qBAAqB;oBACrC,WAAW,EAAE,iBAAiB;iBAC/B;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ,CAAC,OAAO;oBACtB,KAAK,EAAE,4CAA4C;oBACnD,OAAO,EAAE;wBACP,MAAM,EAAE;4BACN,IAAI,EAAE,QAAQ,CAAC,WAAW;4BAC1B,KAAK,EAAE;gCACL;oCACE,IAAI,EAAE,QAAQ,CAAC,WAAW;iCAC3B;gCACD;oCACE,IAAI,EAAE,QAAQ,CAAC,wBAAwB;oCACvC,WAAW,EAAE,4CAA4C;oCACzD,KAAK,EAAE,4CAA4C;oCACnD,SAAS,EAAE,4CAA4C;oCACvD,aAAa,EAAE;wCACb,MAAM,EAAE,qBAAqB,CAAC,gBAAgB;qCAC/C;oCACD,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;iCAC5B;6BACF;yBACF;qBACF;iBACF;aACF;YACD,MAAM,EAAE;gBACN,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ,CAAC,YAAY;oBAC3B,KAAK,EAAE,4CAA4C;oBACnD,WAAW,EAAE,4CAA4C;oBACzD,cAAc,EAAE,qBAAqB;oBACrC,WAAW,EAAE,iBAAiB;iBAC/B;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ,CAAC,OAAO;oBACtB,KAAK,EAAE,4CAA4C;oBACnD,OAAO,EAAE;wBACP,MAAM,EAAE;4BACN,IAAI,EAAE,QAAQ,CAAC,WAAW;4BAC1B,KAAK,EAAE;gCACL;oCACE,IAAI,EAAE,QAAQ,CAAC,WAAW;iCAC3B;gCACD;oCACE,IAAI,EAAE,QAAQ,CAAC,wBAAwB;oCACvC,WAAW,EAAE,4CAA4C;oCACzD,KAAK,EAAE,4CAA4C;oCACnD,SAAS,EAAE,4CAA4C;oCACvD,aAAa,EAAE;wCACb,MAAM,EAAE,qBAAqB,CAAC,gBAAgB;qCAC/C;oCACD,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;iCAC5B;6BACF;yBACF;qBACF;iBACF;aACF;SACF,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,GAAG,EAAE;YACV,kBAAkB,CAAC,sCAAsC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ism.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ism.test.d.ts","sourceRoot":"","sources":["../../../src/tests/ism.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ import { expect } from 'chai';
2
+ import { IsmType } from '@hyperlane-xyz/sdk';
3
+ import { readIsmConfig } from '../config/ism.js';
4
+ describe('readIsmConfig', () => {
5
+ it('parses and validates example correctly', () => {
6
+ const ism = readIsmConfig('examples/ism-advanced.yaml');
7
+ const exampleIsmConfig = {
8
+ anvil1: {
9
+ type: IsmType.FALLBACK_ROUTING,
10
+ owner: '0xa0ee7a142d267c1f36714e4a8f75612f20a79720',
11
+ domains: {
12
+ anvil2: {
13
+ type: IsmType.AGGREGATION,
14
+ modules: [
15
+ {
16
+ type: IsmType.MESSAGE_ID_MULTISIG,
17
+ threshold: 1,
18
+ validators: ['0xa0ee7a142d267c1f36714e4a8f75612f20a79720'],
19
+ },
20
+ {
21
+ type: IsmType.MERKLE_ROOT_MULTISIG,
22
+ threshold: 1,
23
+ validators: ['0xa0ee7a142d267c1f36714e4a8f75612f20a79720'],
24
+ },
25
+ ],
26
+ threshold: 1,
27
+ },
28
+ },
29
+ },
30
+ anvil2: {
31
+ type: IsmType.ROUTING,
32
+ owner: '0xa0ee7a142d267c1f36714e4a8f75612f20a79720',
33
+ domains: {
34
+ anvil1: {
35
+ type: IsmType.AGGREGATION,
36
+ modules: [
37
+ {
38
+ type: IsmType.MESSAGE_ID_MULTISIG,
39
+ threshold: 1,
40
+ validators: ['0xa0ee7a142d267c1f36714e4a8f75612f20a79720'],
41
+ },
42
+ {
43
+ type: IsmType.MERKLE_ROOT_MULTISIG,
44
+ threshold: 1,
45
+ validators: ['0xa0ee7a142d267c1f36714e4a8f75612f20a79720'],
46
+ },
47
+ ],
48
+ threshold: 1,
49
+ },
50
+ },
51
+ },
52
+ };
53
+ expect(ism).to.deep.equal(exampleIsmConfig);
54
+ });
55
+ it('parsing failure, missing internal key "threshold"', () => {
56
+ expect(function () {
57
+ readIsmConfig('src/tests/ism/safe-parse-fail.yaml');
58
+ }).to.throw();
59
+ });
60
+ it('parsing failure, routingIsm.domains includes destination domain', () => {
61
+ expect(function () {
62
+ readIsmConfig('src/tests/ism/routing-same-chain-fail.yaml');
63
+ }).to.throw('Cannot set RoutingIsm.domain to the same chain you are configuring');
64
+ });
65
+ it('parsing failure, wrong ism type', () => {
66
+ expect(function () {
67
+ readIsmConfig('src/tests/ism/wrong-ism-type-fail.yaml');
68
+ }).to.throw('Invalid ISM config: anvil2 => Invalid input');
69
+ });
70
+ it('parsing failure, threshold > modules.length', () => {
71
+ expect(function () {
72
+ readIsmConfig('src/tests/ism/threshold-gt-modules-length-fail.yaml');
73
+ }).to.throw('Threshold cannot be greater than number of modules');
74
+ });
75
+ });
76
+ //# sourceMappingURL=ism.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ism.test.js","sourceRoot":"","sources":["../../../src/tests/ism.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAuB,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,GAAG,GAAG,aAAa,CAAC,4BAA4B,CAAC,CAAC;QAExD,MAAM,gBAAgB,GAAwB;YAC5C,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO,CAAC,gBAAgB;gBAC9B,KAAK,EAAE,4CAA4C;gBACnD,OAAO,EAAE;oBACP,MAAM,EAAE;wBACN,IAAI,EAAE,OAAO,CAAC,WAAW;wBACzB,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,OAAO,CAAC,mBAAmB;gCACjC,SAAS,EAAE,CAAC;gCACZ,UAAU,EAAE,CAAC,4CAA4C,CAAC;6BAC3D;4BACD;gCACE,IAAI,EAAE,OAAO,CAAC,oBAAoB;gCAClC,SAAS,EAAE,CAAC;gCACZ,UAAU,EAAE,CAAC,4CAA4C,CAAC;6BAC3D;yBACF;wBACD,SAAS,EAAE,CAAC;qBACb;iBACF;aACF;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO,CAAC,OAAO;gBACrB,KAAK,EAAE,4CAA4C;gBACnD,OAAO,EAAE;oBACP,MAAM,EAAE;wBACN,IAAI,EAAE,OAAO,CAAC,WAAW;wBACzB,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,OAAO,CAAC,mBAAmB;gCACjC,SAAS,EAAE,CAAC;gCACZ,UAAU,EAAE,CAAC,4CAA4C,CAAC;6BAC3D;4BACD;gCACE,IAAI,EAAE,OAAO,CAAC,oBAAoB;gCAClC,SAAS,EAAE,CAAC;gCACZ,UAAU,EAAE,CAAC,4CAA4C,CAAC;6BAC3D;yBACF;wBACD,SAAS,EAAE,CAAC;qBACb;iBACF;aACF;SACF,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC;YACL,aAAa,CAAC,oCAAoC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC;YACL,aAAa,CAAC,4CAA4C,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACT,oEAAoE,CACrE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC;YACL,aAAa,CAAC,wCAAwC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC;YACL,aAAa,CAAC,qDAAqD,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=multisig.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multisig.test.d.ts","sourceRoot":"","sources":["../../../src/tests/multisig.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import { expect } from 'chai';
2
+ import { readMultisigConfig } from '../config/multisig.js';
3
+ describe('readMultisigConfig', () => {
4
+ it('parses and validates example correctly', () => {
5
+ const multisig = readMultisigConfig('examples/ism.yaml');
6
+ const exampleMultisigConfig = {
7
+ anvil1: {
8
+ threshold: 1,
9
+ validators: ['0xa0Ee7A142d267C1f36714E4a8F75612F20a79720'],
10
+ },
11
+ anvil2: {
12
+ threshold: 1,
13
+ validators: ['0xa0Ee7A142d267C1f36714E4a8F75612F20a79720'],
14
+ },
15
+ };
16
+ expect(multisig).to.deep.equal(exampleMultisigConfig);
17
+ });
18
+ it('parsing failure', () => {
19
+ expect(function () {
20
+ readMultisigConfig('src/tests/multisig/safe-parse-fail.yaml');
21
+ }).to.throw('Invalid multisig config: anvil2,validators => Required');
22
+ });
23
+ it('threshold cannot be greater than the # of validators', () => {
24
+ expect(function () {
25
+ readMultisigConfig('src/tests/multisig/threshold-gt-fail.yaml');
26
+ }).to.throw('Threshold cannot be greater than number of validators');
27
+ });
28
+ it('invalid address', () => {
29
+ expect(function () {
30
+ readMultisigConfig('src/tests/multisig/invalid-address-fail.yaml');
31
+ }).to.throw('Invalid multisig config: anvil2,validators,0 => Invalid');
32
+ });
33
+ });
34
+ //# sourceMappingURL=multisig.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multisig.test.js","sourceRoot":"","sources":["../../../src/tests/multisig.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAI9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;QAEzD,MAAM,qBAAqB,GAA6B;YACtD,MAAM,EAAE;gBACN,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC,4CAA4C,CAAC;aAC3D;YACD,MAAM,EAAE;gBACN,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC,4CAA4C,CAAC;aAC3D;SACF,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,CAAC;YACL,kBAAkB,CAAC,yCAAyC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC;YACL,kBAAkB,CAAC,2CAA2C,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,CAAC;YACL,kBAAkB,CAAC,8CAA8C,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,7 +1,5 @@
1
1
  import { ethers } from 'ethers';
2
2
  import { ChainName, MultiProvider } from '@hyperlane-xyz/sdk';
3
- import { Address } from '@hyperlane-xyz/utils';
4
- export declare function assertNativeBalances(multiProvider: MultiProvider, signer: ethers.Signer, chains: ChainName[], minBalanceWei: string): Promise<void>;
5
- export declare function assertGasBalances(multiProvider: MultiProvider, signer: ethers.Signer, chains: ChainName[], minGas: string): Promise<void>;
6
- export declare function assertTokenBalance(multiProvider: MultiProvider, signer: ethers.Signer, chain: ChainName, token: Address, minBalanceWei: string): Promise<void>;
3
+ export declare function nativeBalancesAreSufficient(multiProvider: MultiProvider, signer: ethers.Signer, chains: ChainName[], minBalanceWei: string): Promise<boolean>;
4
+ export declare function gasBalancesAreSufficient(multiProvider: MultiProvider, signer: ethers.Signer, chains: ChainName[], minGas: string): Promise<boolean>;
7
5
  //# sourceMappingURL=balances.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"balances.d.ts","sourceRoot":"","sources":["../../../src/utils/balances.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,MAAM,EAAE,SAAS,EAAE,EACnB,aAAa,EAAE,MAAM,iBAqBtB;AAED,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,MAAM,iBAUf;AAED,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,MAAM,iBAUtB"}
1
+ {"version":3,"file":"balances.d.ts","sourceRoot":"","sources":["../../../src/utils/balances.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE9D,wBAAsB,2BAA2B,CAC/C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,MAAM,EAAE,SAAS,EAAE,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAgBlB"}
@@ -1,9 +1,9 @@
1
1
  import { confirm } from '@inquirer/prompts';
2
2
  import { ethers } from 'ethers';
3
- import { ERC20__factory } from '@hyperlane-xyz/core';
4
- export async function assertNativeBalances(multiProvider, signer, chains, minBalanceWei) {
3
+ export async function nativeBalancesAreSufficient(multiProvider, signer, chains, minBalanceWei) {
5
4
  const address = await signer.getAddress();
6
5
  const minBalance = ethers.utils.formatEther(minBalanceWei.toString());
6
+ let sufficient = true;
7
7
  await Promise.all(chains.map(async (chain) => {
8
8
  const balanceWei = await multiProvider
9
9
  .getProvider(chain)
@@ -17,23 +17,19 @@ export async function assertNativeBalances(multiProvider, signer, chains, minBal
17
17
  });
18
18
  if (!isResume)
19
19
  throw new Error(error);
20
+ sufficient = false;
20
21
  }
21
22
  }));
23
+ return sufficient;
22
24
  }
23
- export async function assertGasBalances(multiProvider, signer, chains, minGas) {
25
+ export async function gasBalancesAreSufficient(multiProvider, signer, chains, minGas) {
26
+ let sufficient = true;
24
27
  await Promise.all(chains.map(async (chain) => {
25
28
  const provider = multiProvider.getProvider(chain);
26
29
  const gasPrice = await provider.getGasPrice();
27
30
  const minBalanceWei = gasPrice.mul(minGas).toString();
28
- await assertNativeBalances(multiProvider, signer, [chain], minBalanceWei);
31
+ sufficient = await nativeBalancesAreSufficient(multiProvider, signer, [chain], minBalanceWei);
29
32
  }));
30
- }
31
- export async function assertTokenBalance(multiProvider, signer, chain, token, minBalanceWei) {
32
- const address = await signer.getAddress();
33
- const provider = multiProvider.getProvider(chain);
34
- const tokenContract = ERC20__factory.connect(token, provider);
35
- const balanceWei = await tokenContract.balanceOf(address);
36
- if (balanceWei.lt(minBalanceWei))
37
- throw new Error(`${address} has insufficient balance on ${chain} for token ${token}. At least ${minBalanceWei} wei required but found ${balanceWei.toString()} wei`);
33
+ return sufficient;
38
34
  }
39
35
  //# sourceMappingURL=balances.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../src/utils/balances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,aAA4B,EAC5B,MAAqB,EACrB,MAAmB,EACnB,aAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtE,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzB,MAAM,UAAU,GAAG,MAAM,aAAa;aACnC,WAAW,CAAC,KAAK,CAAC;aAClB,UAAU,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE;YAChC,MAAM,MAAM,GACV,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,MAAM,IAAI,KAAK,CAAC;YACrE,MAAM,KAAK,GAAG,GAAG,OAAO,uBAAuB,KAAK,cAAc,UAAU,0BAA0B,OAAO,CAAC,QAAQ,EAAE,IAAI,MAAM,EAAE,CAAC;YACrI,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;gBAC7B,OAAO,EAAE,YAAY,KAAK,YAAY;aACvC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SACvC;IACH,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,aAA4B,EAC5B,MAAqB,EACrB,MAAmB,EACnB,MAAc;IAEd,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC;IAC5E,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,aAA4B,EAC5B,MAAqB,EACrB,KAAgB,EAChB,KAAc,EACd,aAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,gCAAgC,KAAK,cAAc,KAAK,cAAc,aAAa,2BAA2B,UAAU,CAAC,QAAQ,EAAE,MAAM,CACpJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../src/utils/balances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,aAA4B,EAC5B,MAAqB,EACrB,MAAmB,EACnB,aAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtE,IAAI,UAAU,GAAG,IAAI,CAAC;IACtB,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzB,MAAM,UAAU,GAAG,MAAM,aAAa;aACnC,WAAW,CAAC,KAAK,CAAC;aAClB,UAAU,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,MAAM,MAAM,GACV,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,MAAM,IAAI,KAAK,CAAC;YACrE,MAAM,KAAK,GAAG,GAAG,OAAO,uBAAuB,KAAK,cAAc,UAAU,0BAA0B,OAAO,CAAC,QAAQ,EAAE,IAAI,MAAM,EAAE,CAAC;YACrI,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;gBAC7B,OAAO,EAAE,YAAY,KAAK,YAAY;aACvC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;YACtC,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,aAA4B,EAC5B,MAAqB,EACrB,MAAmB,EACnB,MAAc;IAEd,IAAI,UAAU,GAAG,IAAI,CAAC;IACtB,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtD,UAAU,GAAG,MAAM,2BAA2B,CAC5C,aAAa,EACb,MAAM,EACN,CAAC,KAAK,CAAC,EACP,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { ChainMap, ChainMetadata } from '@hyperlane-xyz/sdk';
2
- export declare function runSingleChainSelectionStep(customChains: ChainMap<ChainMetadata>, message?: string): Promise<string>;
3
- export declare function runMultiChainSelectionStep(customChains: ChainMap<ChainMetadata>, message?: string): Promise<string[]>;
2
+ export declare function runSingleChainSelectionStep(chainMetadata: ChainMap<ChainMetadata>, message?: string): Promise<string>;
3
+ export declare function runMultiChainSelectionStep(chainMetadata: ChainMap<ChainMetadata>, message?: string, requireMultiple?: boolean): Promise<string[]>;
4
+ export declare function detectAndConfirmOrPrompt(detect: () => Promise<string>, label: string, prompt: string): Promise<string>;
4
5
  //# sourceMappingURL=chains.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../../src/utils/chains.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,QAAQ,EACR,aAAa,EAGd,MAAM,oBAAoB,CAAC;AAQ5B,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,QAAQ,CAAC,aAAa,CAAC,EACrC,OAAO,SAAiB,mBAUzB;AAED,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,QAAQ,CAAC,aAAa,CAAC,EACrC,OAAO,SAAkB,qBAW1B"}
1
+ {"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../../src/utils/chains.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQ7D,wBAAsB,2BAA2B,CAC/C,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,EACtC,OAAO,SAAiB,mBAUzB;AAED,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,EACtC,OAAO,SAAkB,EACzB,eAAe,UAAQ,qBAiBxB;AA8BD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAajB"}