@hyperlane-xyz/cli 3.1.10 → 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 (219) 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 -4
  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 -68
  57. package/dist/src/config/chain.js.map +1 -1
  58. package/dist/src/config/chain.test.js +1 -5
  59. package/dist/src/config/chain.test.js.map +1 -1
  60. package/dist/src/config/hooks.d.ts +91 -214
  61. package/dist/src/config/hooks.d.ts.map +1 -1
  62. package/dist/src/config/hooks.js +218 -122
  63. package/dist/src/config/hooks.js.map +1 -1
  64. package/dist/src/config/ism.d.ts +74 -0
  65. package/dist/src/config/ism.d.ts.map +1 -0
  66. package/dist/src/config/ism.js +223 -0
  67. package/dist/src/config/ism.js.map +1 -0
  68. package/dist/src/config/multisig.d.ts +4 -14
  69. package/dist/src/config/multisig.d.ts.map +1 -1
  70. package/dist/src/config/multisig.js +35 -29
  71. package/dist/src/config/multisig.js.map +1 -1
  72. package/dist/src/config/warp.d.ts +7 -180
  73. package/dist/src/config/warp.d.ts.map +1 -1
  74. package/dist/src/config/warp.js +55 -62
  75. package/dist/src/config/warp.js.map +1 -1
  76. package/dist/src/consts.d.ts +1 -0
  77. package/dist/src/consts.d.ts.map +1 -1
  78. package/dist/src/consts.js +1 -0
  79. package/dist/src/consts.js.map +1 -1
  80. package/dist/src/context/context.d.ts +14 -0
  81. package/dist/src/context/context.d.ts.map +1 -0
  82. package/dist/src/context/context.js +108 -0
  83. package/dist/src/context/context.js.map +1 -0
  84. package/dist/src/context/types.d.ts +33 -0
  85. package/dist/src/context/types.d.ts.map +1 -0
  86. package/dist/src/context/types.js.map +1 -0
  87. package/dist/src/deploy/agent.d.ts +6 -4
  88. package/dist/src/deploy/agent.d.ts.map +1 -1
  89. package/dist/src/deploy/agent.js +10 -24
  90. package/dist/src/deploy/agent.js.map +1 -1
  91. package/dist/src/deploy/core.d.ts +10 -7
  92. package/dist/src/deploy/core.d.ts.map +1 -1
  93. package/dist/src/deploy/core.js +156 -160
  94. package/dist/src/deploy/core.js.map +1 -1
  95. package/dist/src/deploy/dry-run.d.ts +19 -0
  96. package/dist/src/deploy/dry-run.d.ts.map +1 -0
  97. package/dist/src/deploy/dry-run.js +45 -0
  98. package/dist/src/deploy/dry-run.js.map +1 -0
  99. package/dist/src/deploy/utils.d.ts +15 -8
  100. package/dist/src/deploy/utils.d.ts.map +1 -1
  101. package/dist/src/deploy/utils.js +60 -11
  102. package/dist/src/deploy/utils.js.map +1 -1
  103. package/dist/src/deploy/warp.d.ts +4 -7
  104. package/dist/src/deploy/warp.d.ts.map +1 -1
  105. package/dist/src/deploy/warp.js +129 -169
  106. package/dist/src/deploy/warp.js.map +1 -1
  107. package/dist/src/hook/read.d.ts +13 -0
  108. package/dist/src/hook/read.d.ts.map +1 -0
  109. package/dist/src/hook/read.js +25 -0
  110. package/dist/src/hook/read.js.map +1 -0
  111. package/dist/src/ism/read.d.ts +13 -0
  112. package/dist/src/ism/read.d.ts.map +1 -0
  113. package/dist/src/ism/read.js +25 -0
  114. package/dist/src/ism/read.js.map +1 -0
  115. package/dist/src/logger.d.ts +17 -0
  116. package/dist/src/logger.d.ts.map +1 -0
  117. package/dist/src/logger.js +32 -0
  118. package/dist/src/logger.js.map +1 -0
  119. package/dist/src/registry/MergedRegistry.d.ts +35 -0
  120. package/dist/src/registry/MergedRegistry.d.ts.map +1 -0
  121. package/dist/src/registry/MergedRegistry.js +83 -0
  122. package/dist/src/registry/MergedRegistry.js.map +1 -0
  123. package/dist/src/send/message.d.ts +7 -6
  124. package/dist/src/send/message.d.ts.map +1 -1
  125. package/dist/src/send/message.js +40 -22
  126. package/dist/src/send/message.js.map +1 -1
  127. package/dist/src/send/transfer.d.ts +8 -10
  128. package/dist/src/send/transfer.d.ts.map +1 -1
  129. package/dist/src/send/transfer.js +68 -70
  130. package/dist/src/send/transfer.js.map +1 -1
  131. package/dist/src/status/message.d.ts +7 -5
  132. package/dist/src/status/message.d.ts.map +1 -1
  133. package/dist/src/status/message.js +25 -12
  134. package/dist/src/status/message.js.map +1 -1
  135. package/dist/src/submit/submit.d.ts +5 -0
  136. package/dist/src/submit/submit.d.ts.map +1 -0
  137. package/dist/src/submit/submit.js +30 -0
  138. package/dist/src/submit/submit.js.map +1 -0
  139. package/dist/src/submit/types.d.ts +18 -0
  140. package/dist/src/submit/types.d.ts.map +1 -0
  141. package/dist/src/submit/types.js +2 -0
  142. package/dist/src/{deploy → submit}/types.js.map +1 -1
  143. package/dist/src/tests/deployTestErc20.d.ts +2 -0
  144. package/dist/src/tests/deployTestErc20.d.ts.map +1 -0
  145. package/dist/src/tests/deployTestErc20.js +26 -0
  146. package/dist/src/tests/deployTestErc20.js.map +1 -0
  147. package/dist/src/tests/hooks.test.d.ts +2 -0
  148. package/dist/src/tests/hooks.test.d.ts.map +1 -0
  149. package/dist/src/tests/hooks.test.js +83 -0
  150. package/dist/src/tests/hooks.test.js.map +1 -0
  151. package/dist/src/tests/ism.test.d.ts +2 -0
  152. package/dist/src/tests/ism.test.d.ts.map +1 -0
  153. package/dist/src/tests/ism.test.js +76 -0
  154. package/dist/src/tests/ism.test.js.map +1 -0
  155. package/dist/src/tests/multisig.test.d.ts +2 -0
  156. package/dist/src/tests/multisig.test.d.ts.map +1 -0
  157. package/dist/src/tests/multisig.test.js +34 -0
  158. package/dist/src/tests/multisig.test.js.map +1 -0
  159. package/dist/src/utils/balances.d.ts +2 -4
  160. package/dist/src/utils/balances.d.ts.map +1 -1
  161. package/dist/src/utils/balances.js +8 -12
  162. package/dist/src/utils/balances.js.map +1 -1
  163. package/dist/src/utils/chains.d.ts +3 -2
  164. package/dist/src/utils/chains.d.ts.map +1 -1
  165. package/dist/src/utils/chains.js +33 -18
  166. package/dist/src/utils/chains.js.map +1 -1
  167. package/dist/src/utils/env.d.ts +6 -0
  168. package/dist/src/utils/env.d.ts.map +1 -0
  169. package/dist/src/utils/env.js +9 -0
  170. package/dist/src/utils/env.js.map +1 -0
  171. package/dist/src/utils/files.d.ts +6 -4
  172. package/dist/src/utils/files.d.ts.map +1 -1
  173. package/dist/src/utils/files.js +37 -25
  174. package/dist/src/utils/files.js.map +1 -1
  175. package/dist/src/utils/keys.d.ts +28 -1
  176. package/dist/src/utils/keys.d.ts.map +1 -1
  177. package/dist/src/utils/keys.js +65 -6
  178. package/dist/src/utils/keys.js.map +1 -1
  179. package/dist/src/utils/tokens.d.ts +3 -0
  180. package/dist/src/utils/tokens.d.ts.map +1 -0
  181. package/dist/src/utils/tokens.js +14 -0
  182. package/dist/src/utils/tokens.js.map +1 -0
  183. package/dist/src/utils/version-check.d.ts +2 -0
  184. package/dist/src/utils/version-check.d.ts.map +1 -0
  185. package/dist/src/utils/version-check.js +15 -0
  186. package/dist/src/utils/version-check.js.map +1 -0
  187. package/dist/src/version.d.ts +2 -0
  188. package/dist/src/version.d.ts.map +1 -0
  189. package/dist/src/version.js +2 -0
  190. package/dist/src/version.js.map +1 -0
  191. package/examples/chain-config.yaml +38 -46
  192. package/examples/contract-artifacts.yaml +4 -4
  193. package/examples/hooks.yaml +66 -0
  194. package/examples/ism-advanced.yaml +33 -0
  195. package/examples/{multisig-ism.yaml → ism.yaml} +0 -8
  196. package/examples/warp-route-deployment.yaml +32 -0
  197. package/package.json +20 -13
  198. package/dist/logger.d.ts +0 -14
  199. package/dist/logger.d.ts.map +0 -1
  200. package/dist/logger.js +0 -45
  201. package/dist/logger.js.map +0 -1
  202. package/dist/src/config/artifacts.d.ts +0 -3
  203. package/dist/src/config/artifacts.d.ts.map +0 -1
  204. package/dist/src/config/artifacts.js +0 -18
  205. package/dist/src/config/artifacts.js.map +0 -1
  206. package/dist/src/context.d.ts +0 -388
  207. package/dist/src/context.d.ts.map +0 -1
  208. package/dist/src/context.js +0 -30
  209. package/dist/src/context.js.map +0 -1
  210. package/dist/src/deploy/TestRecipientDeployer.d.ts +0 -20
  211. package/dist/src/deploy/TestRecipientDeployer.d.ts.map +0 -1
  212. package/dist/src/deploy/TestRecipientDeployer.js +0 -36
  213. package/dist/src/deploy/TestRecipientDeployer.js.map +0 -1
  214. package/dist/src/deploy/types.d.ts +0 -21
  215. package/dist/src/deploy/types.d.ts.map +0 -1
  216. package/examples/anvil-chains.yaml +0 -22
  217. package/examples/hook-config.yaml +0 -18
  218. package/examples/warp-tokens.yaml +0 -26
  219. /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,qBAc1B"}
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"}
@@ -1,55 +1,70 @@
1
- import { Separator, checkbox } from '@inquirer/prompts';
1
+ import { Separator, checkbox, confirm, input } from '@inquirer/prompts';
2
2
  import select from '@inquirer/select';
3
3
  import chalk from 'chalk';
4
- import { mainnetChainsMetadata, testnetChainsMetadata, } from '@hyperlane-xyz/sdk';
5
- import { log, logBlue, logRed, logTip } from '../../logger.js';
4
+ import { log, logRed, logTip } from '../logger.js';
6
5
  // A special value marker to indicate user selected
7
6
  // a new chain in the list
8
7
  const NEW_CHAIN_MARKER = '__new__';
9
- export async function runSingleChainSelectionStep(customChains, message = 'Select chain') {
10
- const choices = getChainChoices(customChains);
8
+ export async function runSingleChainSelectionStep(chainMetadata, message = 'Select chain') {
9
+ const choices = getChainChoices(chainMetadata);
11
10
  const chain = (await select({
12
11
  message,
13
12
  choices,
14
- pageSize: 20,
13
+ pageSize: 30,
15
14
  }));
16
15
  handleNewChain([chain]);
17
16
  return chain;
18
17
  }
19
- export async function runMultiChainSelectionStep(customChains, message = 'Select chains') {
20
- const choices = getChainChoices(customChains);
18
+ export async function runMultiChainSelectionStep(chainMetadata, message = 'Select chains', requireMultiple = false) {
19
+ const choices = getChainChoices(chainMetadata);
21
20
  while (true) {
22
21
  logTip('Use SPACE key to select chains, then press ENTER');
23
22
  const chains = (await checkbox({
24
23
  message,
25
24
  choices,
26
- pageSize: 20,
25
+ pageSize: 30,
27
26
  }));
28
27
  handleNewChain(chains);
29
- if (chains?.length >= 2)
30
- return chains;
31
- else
28
+ if (requireMultiple && chains?.length < 2) {
32
29
  logRed('Please select at least 2 chains');
30
+ continue;
31
+ }
32
+ return chains;
33
33
  }
34
34
  }
35
- function getChainChoices(customChains) {
35
+ function getChainChoices(chainMetadata) {
36
36
  const chainsToChoices = (chains) => chains.map((c) => ({ name: c.name, value: c.name }));
37
+ const chains = Object.values(chainMetadata);
38
+ const testnetChains = chains.filter((c) => !!c.isTestnet);
39
+ const mainnetChains = chains.filter((c) => !c.isTestnet);
37
40
  const choices = [
38
- new Separator('--Custom Chains--'),
39
- ...chainsToChoices(Object.values(customChains)),
40
41
  { name: '(New custom chain)', value: NEW_CHAIN_MARKER },
41
42
  new Separator('--Mainnet Chains--'),
42
- ...chainsToChoices(mainnetChainsMetadata),
43
+ ...chainsToChoices(mainnetChains),
43
44
  new Separator('--Testnet Chains--'),
44
- ...chainsToChoices(testnetChainsMetadata),
45
+ ...chainsToChoices(testnetChains),
45
46
  ];
46
47
  return choices;
47
48
  }
48
49
  function handleNewChain(chainNames) {
49
50
  if (chainNames.includes(NEW_CHAIN_MARKER)) {
50
- logBlue('To use a new chain, use the --config argument add them to that file');
51
51
  log(chalk.blue('Use the'), chalk.magentaBright('hyperlane config create'), chalk.blue('command to create new configs'));
52
52
  process.exit(0);
53
53
  }
54
54
  }
55
+ export async function detectAndConfirmOrPrompt(detect, label, prompt) {
56
+ let detectedValue;
57
+ try {
58
+ detectedValue = await detect();
59
+ const confirmed = await confirm({
60
+ message: `Detected ${label} as ${detectedValue}, is this correct?`,
61
+ });
62
+ if (confirmed) {
63
+ return detectedValue;
64
+ }
65
+ // eslint-disable-next-line no-empty
66
+ }
67
+ catch (e) { }
68
+ return input({ message: `${prompt} ${label}`, default: detectedValue });
69
+ }
55
70
  //# sourceMappingURL=chains.js.map