@hyperlane-xyz/cli 3.12.2 → 3.13.0

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 (75) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +4 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/src/avs/config.js +3 -3
  5. package/dist/src/avs/stakeRegistry.d.ts +6 -5
  6. package/dist/src/avs/stakeRegistry.d.ts.map +1 -1
  7. package/dist/src/avs/stakeRegistry.js +34 -62
  8. package/dist/src/avs/stakeRegistry.js.map +1 -1
  9. package/dist/src/commands/avs.d.ts.map +1 -1
  10. package/dist/src/commands/avs.js +9 -7
  11. package/dist/src/commands/avs.js.map +1 -1
  12. package/dist/src/commands/config.js +1 -1
  13. package/dist/src/commands/config.js.map +1 -1
  14. package/dist/src/commands/options.d.ts +5 -0
  15. package/dist/src/commands/options.d.ts.map +1 -1
  16. package/dist/src/commands/options.js +27 -0
  17. package/dist/src/commands/options.js.map +1 -1
  18. package/dist/src/commands/validator.d.ts +3 -0
  19. package/dist/src/commands/validator.d.ts.map +1 -0
  20. package/dist/src/commands/validator.js +34 -0
  21. package/dist/src/commands/validator.js.map +1 -0
  22. package/dist/src/config/chain.js +3 -3
  23. package/dist/src/config/chain.js.map +1 -1
  24. package/dist/src/config/warp.d.ts +1 -1
  25. package/dist/src/config/warp.d.ts.map +1 -1
  26. package/dist/src/config/warp.js +89 -49
  27. package/dist/src/config/warp.js.map +1 -1
  28. package/dist/src/consts.d.ts +1 -0
  29. package/dist/src/consts.d.ts.map +1 -1
  30. package/dist/src/consts.js +1 -0
  31. package/dist/src/consts.js.map +1 -1
  32. package/dist/src/context/context.d.ts.map +1 -1
  33. package/dist/src/context/context.js +23 -9
  34. package/dist/src/context/context.js.map +1 -1
  35. package/dist/src/deploy/core.d.ts.map +1 -1
  36. package/dist/src/deploy/core.js +5 -3
  37. package/dist/src/deploy/core.js.map +1 -1
  38. package/dist/src/deploy/utils.d.ts +0 -7
  39. package/dist/src/deploy/utils.d.ts.map +1 -1
  40. package/dist/src/deploy/utils.js +0 -15
  41. package/dist/src/deploy/utils.js.map +1 -1
  42. package/dist/src/deploy/warp.d.ts.map +1 -1
  43. package/dist/src/deploy/warp.js +37 -123
  44. package/dist/src/deploy/warp.js.map +1 -1
  45. package/dist/src/send/message.d.ts.map +1 -1
  46. package/dist/src/send/message.js +4 -5
  47. package/dist/src/send/message.js.map +1 -1
  48. package/dist/src/send/transfer.d.ts.map +1 -1
  49. package/dist/src/send/transfer.js +4 -5
  50. package/dist/src/send/transfer.js.map +1 -1
  51. package/dist/src/tests/deployTestErc20.js +3 -2
  52. package/dist/src/tests/deployTestErc20.js.map +1 -1
  53. package/dist/src/utils/chains.d.ts +1 -1
  54. package/dist/src/utils/chains.d.ts.map +1 -1
  55. package/dist/src/utils/chains.js +8 -6
  56. package/dist/src/utils/chains.js.map +1 -1
  57. package/dist/src/utils/env.d.ts +3 -0
  58. package/dist/src/utils/env.d.ts.map +1 -1
  59. package/dist/src/utils/env.js +3 -0
  60. package/dist/src/utils/env.js.map +1 -1
  61. package/dist/src/utils/files.d.ts +1 -0
  62. package/dist/src/utils/files.d.ts.map +1 -1
  63. package/dist/src/utils/files.js +8 -0
  64. package/dist/src/utils/files.js.map +1 -1
  65. package/dist/src/validator/address.d.ts +10 -0
  66. package/dist/src/validator/address.d.ts.map +1 -0
  67. package/dist/src/validator/address.js +107 -0
  68. package/dist/src/validator/address.js.map +1 -0
  69. package/dist/src/version.d.ts +1 -1
  70. package/dist/src/version.js +1 -1
  71. package/package.json +7 -4
  72. package/dist/src/registry/MergedRegistry.d.ts +0 -35
  73. package/dist/src/registry/MergedRegistry.d.ts.map +0 -1
  74. package/dist/src/registry/MergedRegistry.js +0 -83
  75. package/dist/src/registry/MergedRegistry.js.map +0 -1
@@ -0,0 +1,107 @@
1
+ import { GetPublicKeyCommand, KMSClient } from '@aws-sdk/client-kms';
2
+ import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';
3
+ import { input } from '@inquirer/prompts';
4
+ // @ts-ignore
5
+ import asn1 from 'asn1.js';
6
+ import { ethers } from 'ethers';
7
+ import { assert } from '@hyperlane-xyz/utils';
8
+ import { log, logBlue } from '../logger.js';
9
+ export async function getValidatorAddress({ context, accessKey, secretKey, region, bucket, keyId, }) {
10
+ if (!bucket && !keyId) {
11
+ throw new Error('Must provide either an S3 bucket or a KMS Key ID.');
12
+ }
13
+ // Query user for AWS parameters if not passed in or stored as .env variables
14
+ accessKey ||= await getAccessKeyId(context.skipConfirmation);
15
+ secretKey ||= await getSecretAccessKey(context.skipConfirmation);
16
+ region ||= await getRegion(context.skipConfirmation);
17
+ assert(accessKey, 'No access key ID set.');
18
+ assert(secretKey, 'No secret access key set.');
19
+ assert(region, 'No AWS region set.');
20
+ let validatorAddress;
21
+ if (bucket) {
22
+ validatorAddress = await getAddressFromBucket(bucket, accessKey, secretKey, region);
23
+ }
24
+ else {
25
+ validatorAddress = await getAddressFromKey(keyId, accessKey, secretKey, region);
26
+ }
27
+ logBlue('Validator address is: ');
28
+ log(validatorAddress);
29
+ }
30
+ /**
31
+ * Displays validator key address from
32
+ * validator announcement S3 bucket.
33
+ */
34
+ async function getAddressFromBucket(bucket, accessKeyId, secretAccessKey, region) {
35
+ const s3Client = new S3Client({
36
+ region: region,
37
+ credentials: {
38
+ accessKeyId,
39
+ secretAccessKey,
40
+ },
41
+ });
42
+ const { Body } = await s3Client.send(new GetObjectCommand({
43
+ Bucket: bucket,
44
+ Key: 'announcement.json',
45
+ }));
46
+ if (Body) {
47
+ const announcement = JSON.parse(await Body?.transformToString());
48
+ return announcement['value']['validator'];
49
+ }
50
+ else {
51
+ throw new Error('Announcement file announcement.json not found in bucket');
52
+ }
53
+ }
54
+ /**
55
+ * Logs validator key address using AWS KMS key ID.
56
+ * Taken from github.com/tkporter/get-aws-kms-address/
57
+ */
58
+ async function getAddressFromKey(keyId, accessKeyId, secretAccessKey, region) {
59
+ const client = new KMSClient({
60
+ region: region,
61
+ credentials: {
62
+ accessKeyId,
63
+ secretAccessKey,
64
+ },
65
+ });
66
+ const publicKeyResponse = await client.send(new GetPublicKeyCommand({ KeyId: keyId }));
67
+ return getEthereumAddress(Buffer.from(publicKeyResponse.PublicKey));
68
+ }
69
+ const EcdsaPubKey = asn1.define('EcdsaPubKey', function () {
70
+ this.seq().obj(this.key('algo').seq().obj(this.key('a').objid(), this.key('b').objid()), this.key('pubKey').bitstr());
71
+ });
72
+ function getEthereumAddress(publicKey) {
73
+ // The public key is ASN1 encoded in a format according to
74
+ // https://tools.ietf.org/html/rfc5480#section-2
75
+ const res = EcdsaPubKey.decode(publicKey, 'der');
76
+ let pubKeyBuffer = res.pubKey.data;
77
+ // The public key starts with a 0x04 prefix that needs to be removed
78
+ // more info: https://www.oreilly.com/library/view/mastering-ethereum/9781491971932/ch04.html
79
+ pubKeyBuffer = pubKeyBuffer.slice(1, pubKeyBuffer.length);
80
+ const address = ethers.utils.keccak256(pubKeyBuffer); // keccak256 hash of publicKey
81
+ return `0x${address.slice(-40)}`; // take last 20 bytes as ethereum address
82
+ }
83
+ async function getAccessKeyId(skipConfirmation) {
84
+ if (skipConfirmation)
85
+ throw new Error('No AWS access key ID set.');
86
+ else
87
+ return await input({
88
+ message: 'Please enter AWS access key ID or use the AWS_ACCESS_KEY_ID environment variable.',
89
+ });
90
+ }
91
+ async function getSecretAccessKey(skipConfirmation) {
92
+ if (skipConfirmation)
93
+ throw new Error('No AWS secret access key set.');
94
+ else
95
+ return await input({
96
+ message: 'Please enter AWS secret access key or use the AWS_SECRET_ACCESS_KEY environment variable.',
97
+ });
98
+ }
99
+ async function getRegion(skipConfirmation) {
100
+ if (skipConfirmation)
101
+ throw new Error('No AWS region set.');
102
+ else
103
+ return await input({
104
+ message: 'Please enter AWS region or use the AWS_REGION environment variable.',
105
+ });
106
+ }
107
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/validator/address.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "3.12.2";
1
+ export declare const VERSION = "3.13.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,2 +1,2 @@
1
- export const VERSION = '3.12.2';
1
+ export const VERSION = '3.13.0';
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "@hyperlane-xyz/cli",
3
- "version": "3.12.2",
3
+ "version": "3.13.0",
4
4
  "description": "A command-line utility for common Hyperlane operations",
5
5
  "dependencies": {
6
- "@hyperlane-xyz/registry": "^1.0.7",
7
- "@hyperlane-xyz/sdk": "3.12.2",
8
- "@hyperlane-xyz/utils": "3.12.2",
6
+ "@aws-sdk/client-kms": "^3.577.0",
7
+ "@aws-sdk/client-s3": "^3.577.0",
8
+ "@hyperlane-xyz/registry": "1.3.0",
9
+ "@hyperlane-xyz/sdk": "3.13.0",
10
+ "@hyperlane-xyz/utils": "3.13.0",
9
11
  "@inquirer/prompts": "^3.0.0",
12
+ "asn1.js": "^5.4.1",
10
13
  "bignumber.js": "^9.1.1",
11
14
  "chalk": "^5.3.0",
12
15
  "ethers": "^5.7.2",
@@ -1,35 +0,0 @@
1
- import { Logger } from 'pino';
2
- import { BaseRegistry, ChainAddresses, IRegistry, RegistryContent, RegistryType } from '@hyperlane-xyz/registry';
3
- import { ChainMap, ChainMetadata, ChainName, WarpCoreConfig } from '@hyperlane-xyz/sdk';
4
- export interface MergedRegistryOptions {
5
- registryUris: Array<string>;
6
- isDryRun?: boolean;
7
- logger?: Logger;
8
- }
9
- export declare class MergedRegistry extends BaseRegistry implements IRegistry {
10
- readonly type = RegistryType.Local;
11
- readonly registries: Array<IRegistry>;
12
- readonly isDryRun: boolean;
13
- constructor({ registryUris, logger, isDryRun }: MergedRegistryOptions);
14
- listRegistryContent(): Promise<RegistryContent>;
15
- getChains(): Promise<Array<ChainName>>;
16
- getMetadata(): Promise<ChainMap<ChainMetadata>>;
17
- getChainMetadata(chainName: ChainName): Promise<ChainMetadata | null>;
18
- getAddresses(): Promise<ChainMap<ChainAddresses>>;
19
- getChainAddresses(chainName: ChainName): Promise<ChainAddresses | null>;
20
- addChain(chain: {
21
- chainName: ChainName;
22
- metadata?: ChainMetadata;
23
- addresses?: ChainAddresses;
24
- }): Promise<void>;
25
- updateChain(chain: {
26
- chainName: ChainName;
27
- metadata?: ChainMetadata;
28
- addresses?: ChainAddresses;
29
- }): Promise<void>;
30
- removeChain(chain: ChainName): Promise<void>;
31
- addWarpRoute(config: WarpCoreConfig): Promise<void>;
32
- protected multiRegistryRead<R>(readFn: (registry: IRegistry) => Promise<R> | R): Promise<(Awaited<R> | Awaited<R>)[]>;
33
- protected multiRegistryWrite(writeFn: (registry: IRegistry) => Promise<void>, logMsg: string): Promise<void>;
34
- }
35
- //# sourceMappingURL=MergedRegistry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MergedRegistry.d.ts","sourceRoot":"","sources":["../../../src/registry/MergedRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EACL,YAAY,EACZ,cAAc,EAEd,SAAS,EACT,eAAe,EACf,YAAY,EACb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,QAAQ,EACR,aAAa,EACb,SAAS,EACT,cAAc,EACf,MAAM,oBAAoB,CAAC;AAQ5B,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,cAAe,SAAQ,YAAa,YAAW,SAAS;IACnE,SAAgB,IAAI,sBAAsB;IAC1C,SAAgB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7C,SAAgB,QAAQ,EAAE,OAAO,CAAC;gBAEtB,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,qBAAqB;IAkB/D,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;IAU/C,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAItC,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAK/C,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIrE,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAKjD,iBAAiB,CACrB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI3B,QAAQ,CAAC,KAAK,EAAE;QACpB,SAAS,EAAE,SAAS,CAAC;QACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,SAAS,CAAC,EAAE,cAAc,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC;IAOX,WAAW,CAAC,KAAK,EAAE;QACvB,SAAS,EAAE,SAAS,CAAC;QACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,SAAS,CAAC,EAAE,cAAc,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC;IAOX,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAC3B,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;cAKjC,kBAAkB,CAChC,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,EAC/C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;CAuBjB"}
@@ -1,83 +0,0 @@
1
- import { BaseRegistry, GithubRegistry, RegistryType, } from '@hyperlane-xyz/registry';
2
- import { LocalRegistry } from '@hyperlane-xyz/registry/local';
3
- import { isHttpsUrl, objKeys, objMerge, rootLogger, } from '@hyperlane-xyz/utils';
4
- export class MergedRegistry extends BaseRegistry {
5
- type = RegistryType.Local;
6
- registries;
7
- isDryRun;
8
- constructor({ registryUris, logger, isDryRun }) {
9
- logger ||= rootLogger.child({ module: 'MergedRegistry' });
10
- super({ uri: '__merged_registry__', logger });
11
- if (!registryUris.length)
12
- throw new Error('At least one registry URI is required');
13
- this.registries = registryUris.map((uri, index) => {
14
- if (isHttpsUrl(uri)) {
15
- return new GithubRegistry({ uri, logger: logger.child({ index }) });
16
- }
17
- else {
18
- return new LocalRegistry({ uri, logger: logger.child({ index }) });
19
- }
20
- });
21
- this.isDryRun = !!isDryRun;
22
- }
23
- async listRegistryContent() {
24
- const results = await this.multiRegistryRead((r) => r.listRegistryContent());
25
- return results.reduce((acc, content) => objMerge(acc, content), {
26
- chains: {},
27
- deployments: {},
28
- });
29
- }
30
- async getChains() {
31
- return objKeys(await this.getMetadata);
32
- }
33
- async getMetadata() {
34
- const results = await this.multiRegistryRead((r) => r.getMetadata());
35
- return results.reduce((acc, content) => objMerge(acc, content), {});
36
- }
37
- async getChainMetadata(chainName) {
38
- return (await this.getMetadata())[chainName] || null;
39
- }
40
- async getAddresses() {
41
- const results = await this.multiRegistryRead((r) => r.getAddresses());
42
- return results.reduce((acc, content) => objMerge(acc, content), {});
43
- }
44
- async getChainAddresses(chainName) {
45
- return (await this.getAddresses())[chainName] || null;
46
- }
47
- async addChain(chain) {
48
- return this.multiRegistryWrite(async (registry) => await registry.addChain(chain), `adding chain ${chain.chainName}`);
49
- }
50
- async updateChain(chain) {
51
- return this.multiRegistryWrite(async (registry) => await registry.updateChain(chain), `updating chain ${chain.chainName}`);
52
- }
53
- async removeChain(chain) {
54
- return this.multiRegistryWrite(async (registry) => await registry.removeChain(chain), `removing chain ${chain}`);
55
- }
56
- async addWarpRoute(config) {
57
- return this.multiRegistryWrite(async (registry) => await registry.addWarpRoute(config), 'adding warp route');
58
- }
59
- multiRegistryRead(readFn) {
60
- return Promise.all(this.registries.map(readFn));
61
- }
62
- async multiRegistryWrite(writeFn, logMsg) {
63
- if (this.isDryRun)
64
- return;
65
- for (const registry of this.registries) {
66
- // TODO remove this when GithubRegistry supports write methods
67
- if (registry.type === RegistryType.Github) {
68
- this.logger.warn(`skipping ${logMsg} at ${registry.type} registry`);
69
- continue;
70
- }
71
- try {
72
- this.logger.info(`${logMsg} at ${registry.type} registry at ${registry.uri}`);
73
- await writeFn(registry);
74
- this.logger.info(`done ${logMsg} at ${registry.type} registry`);
75
- }
76
- catch (error) {
77
- // To prevent loss of artifacts, MergedRegistry write methods are failure tolerant
78
- this.logger.error(`failure ${logMsg} at ${registry.type} registry`, error);
79
- }
80
- }
81
- }
82
- }
83
- //# sourceMappingURL=MergedRegistry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MergedRegistry.js","sourceRoot":"","sources":["../../../src/registry/MergedRegistry.ts"],"names":[],"mappings":"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"}