@hyperlane-xyz/cli 3.10.1-beta1 → 3.11.1-alpha.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.
- package/dist/cli.js +15 -5
- package/dist/cli.js.map +1 -1
- package/dist/src/avs/config.d.ts +11 -0
- package/dist/src/avs/config.d.ts.map +1 -0
- package/dist/src/avs/config.js +10 -0
- package/dist/src/avs/config.js.map +1 -0
- package/dist/src/avs/stakeRegistry.d.ts +20 -0
- package/dist/src/avs/stakeRegistry.d.ts.map +1 -0
- package/dist/src/avs/stakeRegistry.js +92 -0
- package/dist/src/avs/stakeRegistry.js.map +1 -0
- package/dist/src/commands/avs.d.ts +12 -0
- package/dist/src/commands/avs.d.ts.map +1 -0
- package/dist/src/commands/avs.js +62 -0
- package/dist/src/commands/avs.js.map +1 -0
- package/dist/src/commands/chains.d.ts.map +1 -1
- package/dist/src/commands/chains.js +40 -34
- package/dist/src/commands/chains.js.map +1 -1
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +41 -82
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/deploy.d.ts +0 -6
- package/dist/src/commands/deploy.d.ts.map +1 -1
- package/dist/src/commands/deploy.js +28 -79
- package/dist/src/commands/deploy.js.map +1 -1
- package/dist/src/commands/hook.d.ts +6 -1
- package/dist/src/commands/hook.d.ts.map +1 -1
- package/dist/src/commands/hook.js +6 -14
- package/dist/src/commands/hook.js.map +1 -1
- package/dist/src/commands/ism.d.ts +6 -1
- package/dist/src/commands/ism.d.ts.map +1 -1
- package/dist/src/commands/ism.js +5 -13
- package/dist/src/commands/ism.js.map +1 -1
- package/dist/src/commands/options.d.ts +6 -33
- package/dist/src/commands/options.d.ts.map +1 -1
- package/dist/src/commands/options.js +42 -41
- package/dist/src/commands/options.js.map +1 -1
- package/dist/src/commands/send.d.ts +7 -1
- package/dist/src/commands/send.d.ts.map +1 -1
- package/dist/src/commands/send.js +23 -58
- package/dist/src/commands/send.js.map +1 -1
- package/dist/src/commands/signCommands.d.ts +3 -0
- package/dist/src/commands/signCommands.d.ts.map +1 -0
- package/dist/src/commands/signCommands.js +11 -0
- package/dist/src/commands/signCommands.js.map +1 -0
- package/dist/src/commands/status.d.ts +5 -2
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +6 -15
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/config/chain.d.ts +5 -7
- package/dist/src/config/chain.d.ts.map +1 -1
- package/dist/src/config/chain.js +37 -48
- package/dist/src/config/chain.js.map +1 -1
- package/dist/src/config/chain.test.js +1 -5
- package/dist/src/config/chain.test.js.map +1 -1
- package/dist/src/config/hooks.d.ts +7 -8
- package/dist/src/config/hooks.d.ts.map +1 -1
- package/dist/src/config/hooks.js +18 -20
- package/dist/src/config/hooks.js.map +1 -1
- package/dist/src/config/ism.d.ts +3 -4
- package/dist/src/config/ism.d.ts.map +1 -1
- package/dist/src/config/ism.js +3 -5
- package/dist/src/config/ism.js.map +1 -1
- package/dist/src/config/multisig.d.ts +3 -4
- package/dist/src/config/multisig.d.ts.map +1 -1
- package/dist/src/config/multisig.js +5 -7
- package/dist/src/config/multisig.js.map +1 -1
- package/dist/src/config/warp.d.ts +6 -36
- package/dist/src/config/warp.d.ts.map +1 -1
- package/dist/src/config/warp.js +16 -13
- package/dist/src/config/warp.js.map +1 -1
- package/dist/src/consts.d.ts +1 -0
- package/dist/src/consts.d.ts.map +1 -1
- package/dist/src/consts.js +1 -0
- package/dist/src/consts.js.map +1 -1
- package/dist/src/context/context.d.ts +14 -0
- package/dist/src/context/context.d.ts.map +1 -0
- package/dist/src/context/context.js +104 -0
- package/dist/src/context/context.js.map +1 -0
- package/dist/src/context/types.d.ts +32 -0
- package/dist/src/context/types.d.ts.map +1 -0
- package/dist/src/context/types.js +2 -0
- package/dist/src/context/types.js.map +1 -0
- package/dist/src/deploy/agent.d.ts +6 -5
- package/dist/src/deploy/agent.d.ts.map +1 -1
- package/dist/src/deploy/agent.js +4 -6
- package/dist/src/deploy/agent.js.map +1 -1
- package/dist/src/deploy/core.d.ts +4 -7
- package/dist/src/deploy/core.d.ts.map +1 -1
- package/dist/src/deploy/core.js +61 -73
- package/dist/src/deploy/core.js.map +1 -1
- package/dist/src/deploy/dry-run.d.ts +1 -2
- package/dist/src/deploy/dry-run.d.ts.map +1 -1
- package/dist/src/deploy/dry-run.js.map +1 -1
- package/dist/src/deploy/utils.d.ts +9 -11
- package/dist/src/deploy/utils.d.ts.map +1 -1
- package/dist/src/deploy/utils.js +13 -11
- package/dist/src/deploy/utils.js.map +1 -1
- package/dist/src/deploy/warp.d.ts +3 -7
- package/dist/src/deploy/warp.d.ts.map +1 -1
- package/dist/src/deploy/warp.js +28 -64
- package/dist/src/deploy/warp.js.map +1 -1
- package/dist/src/hook/read.d.ts +4 -5
- package/dist/src/hook/read.d.ts.map +1 -1
- package/dist/src/hook/read.js +8 -12
- package/dist/src/hook/read.js.map +1 -1
- package/dist/src/ism/read.d.ts +4 -5
- package/dist/src/ism/read.d.ts.map +1 -1
- package/dist/src/ism/read.js +8 -12
- package/dist/src/ism/read.js.map +1 -1
- package/dist/src/registry/MergedRegistry.d.ts +35 -0
- package/dist/src/registry/MergedRegistry.d.ts.map +1 -0
- package/dist/src/registry/MergedRegistry.js +83 -0
- package/dist/src/registry/MergedRegistry.js.map +1 -0
- package/dist/src/send/message.d.ts +3 -4
- package/dist/src/send/message.d.ts.map +1 -1
- package/dist/src/send/message.js +14 -19
- package/dist/src/send/message.js.map +1 -1
- package/dist/src/send/transfer.d.ts +3 -6
- package/dist/src/send/transfer.d.ts.map +1 -1
- package/dist/src/send/transfer.js +26 -41
- package/dist/src/send/transfer.js.map +1 -1
- package/dist/src/status/message.d.ts +3 -4
- package/dist/src/status/message.d.ts.map +1 -1
- package/dist/src/status/message.js +5 -12
- package/dist/src/status/message.js.map +1 -1
- package/dist/src/utils/chains.d.ts +3 -2
- package/dist/src/utils/chains.d.ts.map +1 -1
- package/dist/src/utils/chains.js +29 -15
- package/dist/src/utils/chains.js.map +1 -1
- package/dist/src/utils/files.d.ts +1 -7
- package/dist/src/utils/files.d.ts.map +1 -1
- package/dist/src/utils/files.js +10 -27
- package/dist/src/utils/files.js.map +1 -1
- package/dist/src/utils/keys.d.ts +15 -4
- package/dist/src/utils/keys.d.ts.map +1 -1
- package/dist/src/utils/keys.js +11 -16
- package/dist/src/utils/keys.js.map +1 -1
- package/dist/src/utils/tokens.d.ts +3 -0
- package/dist/src/utils/tokens.d.ts.map +1 -0
- package/dist/src/utils/tokens.js +14 -0
- package/dist/src/utils/tokens.js.map +1 -0
- package/dist/src/utils/version-check.d.ts.map +1 -1
- package/dist/src/utils/version-check.js +5 -0
- package/dist/src/utils/version-check.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.d.ts.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/examples/chain-config.yaml +38 -46
- package/examples/warp-route-deployment.yaml +2 -4
- package/package.json +5 -4
- package/dist/src/config/artifacts.d.ts +0 -16
- package/dist/src/config/artifacts.d.ts.map +0 -1
- package/dist/src/config/artifacts.js +0 -48
- package/dist/src/config/artifacts.js.map +0 -1
- package/dist/src/context.d.ts +0 -64
- package/dist/src/context.d.ts.map +0 -1
- package/dist/src/context.js +0 -113
- package/dist/src/context.js.map +0 -1
- package/dist/src/context.test.d.ts +0 -2
- package/dist/src/context.test.d.ts.map +0 -1
- package/dist/src/context.test.js +0 -21
- package/dist/src/context.test.js.map +0 -1
- package/dist/src/utils/fork.d.ts +0 -37
- package/dist/src/utils/fork.d.ts.map +0 -1
- package/dist/src/utils/fork.js +0 -91
- package/dist/src/utils/fork.js.map +0 -1
- package/examples/anvil-chains.yaml +0 -22
- package/examples/dry-run/anvil-chains.yaml +0 -17
- package/examples/dry-run/ism.yaml +0 -8
- package/examples/dry-run/warp-route-deployment.yaml +0 -4
- package/examples/fork/anvil-chains.yaml +0 -21
- package/examples/fork/ism.yaml +0 -9
- package/examples/fork/warp-route-deployment.yaml +0 -34
package/dist/cli.js
CHANGED
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import yargs from 'yargs';
|
|
4
4
|
import './env.js';
|
|
5
|
+
import { avsCommand } from './src/commands/avs.js';
|
|
5
6
|
import { chainsCommand } from './src/commands/chains.js';
|
|
6
7
|
import { configCommand } from './src/commands/config.js';
|
|
7
8
|
import { deployCommand } from './src/commands/deploy.js';
|
|
8
9
|
import { hookCommand } from './src/commands/hook.js';
|
|
9
10
|
import { ismCommand } from './src/commands/ism.js';
|
|
10
|
-
import { logFormatCommandOption, logLevelCommandOption, } from './src/commands/options.js';
|
|
11
|
+
import { keyCommandOption, logFormatCommandOption, logLevelCommandOption, overrideRegistryUriCommandOption, registryUriCommandOption, skipConfirmationOption, } from './src/commands/options.js';
|
|
11
12
|
import { sendCommand } from './src/commands/send.js';
|
|
12
13
|
import { statusCommand } from './src/commands/status.js';
|
|
14
|
+
import { contextMiddleware } from './src/context/context.js';
|
|
13
15
|
import { configureLogger, errorRed } from './src/logger.js';
|
|
14
16
|
import { checkVersion } from './src/utils/version-check.js';
|
|
15
17
|
import { VERSION } from './src/version.js';
|
|
@@ -22,10 +24,18 @@ try {
|
|
|
22
24
|
.scriptName('hyperlane')
|
|
23
25
|
.option('log', logFormatCommandOption)
|
|
24
26
|
.option('verbosity', logLevelCommandOption)
|
|
25
|
-
.
|
|
26
|
-
.
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
.option('registry', registryUriCommandOption)
|
|
28
|
+
.option('overrides', overrideRegistryUriCommandOption)
|
|
29
|
+
.option('key', keyCommandOption)
|
|
30
|
+
.option('yes', skipConfirmationOption)
|
|
31
|
+
.global(['log', 'verbosity', 'registry', 'overrides', 'yes'])
|
|
32
|
+
.middleware([
|
|
33
|
+
(argv) => {
|
|
34
|
+
configureLogger(argv.log, argv.verbosity);
|
|
35
|
+
},
|
|
36
|
+
contextMiddleware,
|
|
37
|
+
])
|
|
38
|
+
.command(avsCommand)
|
|
29
39
|
.command(chainsCommand)
|
|
30
40
|
.command(configCommand)
|
|
31
41
|
.command(deployCommand)
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ChainMap } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { Address } from '@hyperlane-xyz/utils';
|
|
3
|
+
interface AVSContracts {
|
|
4
|
+
avsDirectory: Address;
|
|
5
|
+
proxyAdmin: Address;
|
|
6
|
+
ecdsaStakeRegistry: Address;
|
|
7
|
+
hyperlaneServiceManager: Address;
|
|
8
|
+
}
|
|
9
|
+
export declare const avsAddresses: ChainMap<AVSContracts>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/avs/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,UAAU,YAAY;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAGD,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,YAAY,CAO/C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// TODO: move to registry
|
|
2
|
+
export const avsAddresses = {
|
|
3
|
+
holesky: {
|
|
4
|
+
avsDirectory: '0x055733000064333CaDDbC92763c58BF0192fFeBf',
|
|
5
|
+
proxyAdmin: '0x6e7b29cb2a7617405b4d30c6f84bbd51b4bb4be8',
|
|
6
|
+
ecdsaStakeRegistry: '0x275aCcCa81cAD931dC6fB6E49ED233Bc99Bed4A7',
|
|
7
|
+
hyperlaneServiceManager: '0x16B710b86CAd07E6F1C531861a16F5feC29dba37',
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/avs/config.ts"],"names":[],"mappings":"AAUA,yBAAyB;AACzB,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,OAAO,EAAE;QACP,YAAY,EAAE,4CAA4C;QAC1D,UAAU,EAAE,4CAA4C;QACxD,kBAAkB,EAAE,4CAA4C;QAChE,uBAAuB,EAAE,4CAA4C;KACtE;CACF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BigNumberish } from 'ethers';
|
|
2
|
+
import { BytesLike } from 'ethers/lib/utils.js';
|
|
3
|
+
import { ChainName } from '@hyperlane-xyz/sdk';
|
|
4
|
+
import { WriteCommandContext } from '../context/types.js';
|
|
5
|
+
export type SignatureWithSaltAndExpiryStruct = {
|
|
6
|
+
signature: BytesLike;
|
|
7
|
+
salt: BytesLike;
|
|
8
|
+
expiry: BigNumberish;
|
|
9
|
+
};
|
|
10
|
+
export declare function registerOperatorWithSignature({ context, chain, operatorKeyPath, }: {
|
|
11
|
+
context: WriteCommandContext;
|
|
12
|
+
chain: ChainName;
|
|
13
|
+
operatorKeyPath: string;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
export declare function deregisterOperator({ context, chain, operatorKeyPath, }: {
|
|
16
|
+
context: WriteCommandContext;
|
|
17
|
+
chain: ChainName;
|
|
18
|
+
operatorKeyPath: string;
|
|
19
|
+
}): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=stakeRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stakeRegistry.d.ts","sourceRoot":"","sources":["../../../src/avs/stakeRegistry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAyB,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,SAAS,EAA4B,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAO1D,MAAM,MAAM,gCAAgC,GAAG;IAC7C,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,wBAAsB,6BAA6B,CAAC,EAClD,OAAO,EACP,KAAK,EACL,eAAe,GAChB,EAAE;IACD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB,iBAiDA;AAED,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,KAAK,EACL,eAAe,GAChB,EAAE;IACD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB,iBA+BA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { password } from '@inquirer/prompts';
|
|
2
|
+
import { ethers, utils } from 'ethers';
|
|
3
|
+
import { joinSignature, keccak256 } from 'ethers/lib/utils.js';
|
|
4
|
+
import { ECDSAStakeRegistry__factory } from '@hyperlane-xyz/core';
|
|
5
|
+
import { addressToBytes32 } from '@hyperlane-xyz/utils';
|
|
6
|
+
import { MINIMUM_AVS_GAS } from '../consts.js';
|
|
7
|
+
import { runPreflightChecksForChains } from '../deploy/utils.js';
|
|
8
|
+
import { log, logBlue } from '../logger.js';
|
|
9
|
+
import { readFileAtPath, resolvePath } from '../utils/files.js';
|
|
10
|
+
import { avsAddresses } from './config.js';
|
|
11
|
+
export async function registerOperatorWithSignature({ context, chain, operatorKeyPath, }) {
|
|
12
|
+
const { multiProvider, signer } = context;
|
|
13
|
+
await runPreflightChecksForChains({
|
|
14
|
+
context,
|
|
15
|
+
chains: [chain],
|
|
16
|
+
minGas: MINIMUM_AVS_GAS,
|
|
17
|
+
});
|
|
18
|
+
const provider = multiProvider.getProvider(chain);
|
|
19
|
+
const connectedSigner = signer.connect(provider);
|
|
20
|
+
// Read the encrypted JSON key from the file
|
|
21
|
+
const encryptedJson = readFileAtPath(resolvePath(operatorKeyPath));
|
|
22
|
+
const keyFilePassword = await password({
|
|
23
|
+
mask: '*',
|
|
24
|
+
message: 'Enter the password for the operator key file: ',
|
|
25
|
+
});
|
|
26
|
+
const operator = await ethers.Wallet.fromEncryptedJson(encryptedJson, keyFilePassword);
|
|
27
|
+
const stakeRegistryAddress = avsAddresses[chain].ecdsaStakeRegistry;
|
|
28
|
+
const ecdsaStakeRegistry = ECDSAStakeRegistry__factory.connect(stakeRegistryAddress, connectedSigner);
|
|
29
|
+
const domainId = multiProvider.getDomainId(chain);
|
|
30
|
+
const operatorSignature = await getOperatorSignature(domainId, avsAddresses[chain].hyperlaneServiceManager, avsAddresses[chain].avsDirectory, operator);
|
|
31
|
+
log(`Registering operator ${operator.address} with signature on ${chain}...`);
|
|
32
|
+
await multiProvider.handleTx(chain, ecdsaStakeRegistry.registerOperatorWithSignature(operator.address, operatorSignature));
|
|
33
|
+
logBlue(`Operator ${operator.address} registered to Hyperlane AVS`);
|
|
34
|
+
}
|
|
35
|
+
export async function deregisterOperator({ context, chain, operatorKeyPath, }) {
|
|
36
|
+
const { multiProvider } = context;
|
|
37
|
+
// Read the encrypted JSON key from the file
|
|
38
|
+
const encryptedJson = readFileAtPath(resolvePath(operatorKeyPath));
|
|
39
|
+
const keyFilePassword = await password({
|
|
40
|
+
mask: '*',
|
|
41
|
+
message: 'Enter the password for the operator key file: ',
|
|
42
|
+
});
|
|
43
|
+
const operatorAsSigner = await ethers.Wallet.fromEncryptedJson(encryptedJson, keyFilePassword);
|
|
44
|
+
const provider = multiProvider.getProvider(chain);
|
|
45
|
+
const connectedSigner = operatorAsSigner.connect(provider);
|
|
46
|
+
const stakeRegistryAddress = avsAddresses[chain].ecdsaStakeRegistry;
|
|
47
|
+
const ecdsaStakeRegistry = ECDSAStakeRegistry__factory.connect(stakeRegistryAddress, connectedSigner);
|
|
48
|
+
log(`Deregistering operator ${operatorAsSigner.address} on ${chain}...`);
|
|
49
|
+
await multiProvider.handleTx(chain, ecdsaStakeRegistry.deregisterOperator());
|
|
50
|
+
logBlue(`Operator ${operatorAsSigner.address} deregistered from Hyperlane AVS`);
|
|
51
|
+
}
|
|
52
|
+
async function getOperatorSignature(domain, serviceManager, avsDirectory, operator) {
|
|
53
|
+
const operatorRegistrationTypehash = keccak256(ethers.utils.toUtf8Bytes('OperatorAVSRegistration(address operator,address avs,bytes32 salt,uint256 expiry)'));
|
|
54
|
+
const salt = utils.hexZeroPad(utils.randomBytes(32), 32);
|
|
55
|
+
// give a expiry timestamp 1 week from now
|
|
56
|
+
const expiry = utils.hexZeroPad(utils.hexlify(Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 7), 32);
|
|
57
|
+
const structHash = keccak256(ethers.utils.solidityPack(['bytes32', 'bytes32', 'bytes32', 'bytes32', 'bytes32'], [
|
|
58
|
+
operatorRegistrationTypehash,
|
|
59
|
+
addressToBytes32(operator.address),
|
|
60
|
+
addressToBytes32(serviceManager),
|
|
61
|
+
salt,
|
|
62
|
+
expiry,
|
|
63
|
+
]));
|
|
64
|
+
const domainSeparator = getDomainSeparator(domain, avsDirectory);
|
|
65
|
+
const signingHash = ethers.utils.keccak256(ethers.utils.solidityPack(['bytes', 'bytes32', 'bytes32'], [ethers.utils.toUtf8Bytes('\x19\x01'), domainSeparator, structHash]));
|
|
66
|
+
// Eigenlayer's AVSDirectory expects the signature over raw signed hash instead of EIP-191 compatible toEthSignedMessageHash
|
|
67
|
+
// see https://github.com/Layr-Labs/eigenlayer-contracts/blob/ef2ea4a7459884f381057aa9bbcd29c7148cfb63/src/contracts/libraries/EIP1271SignatureUtils.sol#L22
|
|
68
|
+
const signature = operator
|
|
69
|
+
._signingKey()
|
|
70
|
+
.signDigest(ethers.utils.arrayify(signingHash));
|
|
71
|
+
return {
|
|
72
|
+
signature: joinSignature(signature),
|
|
73
|
+
salt,
|
|
74
|
+
expiry,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function getDomainSeparator(domain, avsDirectory) {
|
|
78
|
+
if (!avsDirectory) {
|
|
79
|
+
throw new Error('Invalid domain for operator to the AVS, currently only Ethereum Mainnet and Holesky are supported.');
|
|
80
|
+
}
|
|
81
|
+
const domainTypehash = keccak256(ethers.utils.toUtf8Bytes('EIP712Domain(string name,uint256 chainId,address verifyingContract)'));
|
|
82
|
+
const domainBN = utils.hexZeroPad(utils.hexlify(domain), 32);
|
|
83
|
+
const eigenlayerDigest = keccak256(ethers.utils.toUtf8Bytes('EigenLayer'));
|
|
84
|
+
const domainSeparator = keccak256(ethers.utils.solidityPack(['bytes32', 'bytes32', 'bytes32', 'bytes32'], [
|
|
85
|
+
domainTypehash,
|
|
86
|
+
eigenlayerDigest,
|
|
87
|
+
domainBN,
|
|
88
|
+
addressToBytes32(avsDirectory),
|
|
89
|
+
]));
|
|
90
|
+
return domainSeparator;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=stakeRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stakeRegistry.js","sourceRoot":"","sources":["../../../src/avs/stakeRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CommandModule, Options } from 'yargs';
|
|
2
|
+
/**
|
|
3
|
+
* Parent command
|
|
4
|
+
*/
|
|
5
|
+
export declare const avsCommand: CommandModule;
|
|
6
|
+
/**
|
|
7
|
+
* Registration command
|
|
8
|
+
*/
|
|
9
|
+
export declare const registrationOptions: {
|
|
10
|
+
[k: string]: Options;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=avs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avs.d.ts","sourceRoot":"","sources":["../../../src/commands/avs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAW/C;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,aAUxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAYvD,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { deregisterOperator, registerOperatorWithSignature, } from '../avs/stakeRegistry.js';
|
|
2
|
+
import { log } from '../logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Parent command
|
|
5
|
+
*/
|
|
6
|
+
export const avsCommand = {
|
|
7
|
+
command: 'avs',
|
|
8
|
+
describe: 'Interact with the Hyperlane AVS',
|
|
9
|
+
builder: (yargs) => yargs
|
|
10
|
+
.command(registerCommand)
|
|
11
|
+
.command(deregisterCommand)
|
|
12
|
+
.version(false)
|
|
13
|
+
.demandCommand(),
|
|
14
|
+
handler: () => log('Command required'),
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Registration command
|
|
18
|
+
*/
|
|
19
|
+
export const registrationOptions = {
|
|
20
|
+
chain: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
description: 'Chain to interact with the AVS on',
|
|
23
|
+
demandOption: true,
|
|
24
|
+
choices: ['holesky', 'ethereum'],
|
|
25
|
+
},
|
|
26
|
+
operatorKeyPath: {
|
|
27
|
+
type: 'string',
|
|
28
|
+
description: 'Path to the operator key file',
|
|
29
|
+
demandOption: true,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
const registerCommand = {
|
|
33
|
+
command: 'register',
|
|
34
|
+
describe: 'Register operator with the AVS',
|
|
35
|
+
builder: {
|
|
36
|
+
...registrationOptions,
|
|
37
|
+
},
|
|
38
|
+
handler: async ({ context, chain, operatorKeyPath }) => {
|
|
39
|
+
await registerOperatorWithSignature({
|
|
40
|
+
context,
|
|
41
|
+
chain,
|
|
42
|
+
operatorKeyPath,
|
|
43
|
+
});
|
|
44
|
+
process.exit(0);
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
const deregisterCommand = {
|
|
48
|
+
command: 'deregister',
|
|
49
|
+
describe: 'Deregister yourself with the AVS',
|
|
50
|
+
builder: {
|
|
51
|
+
...registrationOptions,
|
|
52
|
+
},
|
|
53
|
+
handler: async ({ context, chain, operatorKeyPath }) => {
|
|
54
|
+
await deregisterOperator({
|
|
55
|
+
context,
|
|
56
|
+
chain,
|
|
57
|
+
operatorKeyPath,
|
|
58
|
+
});
|
|
59
|
+
process.exit(0);
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=avs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avs.js","sourceRoot":"","sources":["../../../src/commands/avs.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAkB;IACvC,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,iCAAiC;IAC3C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,OAAO,CAAC,eAAe,CAAC;SACxB,OAAO,CAAC,iBAAiB,CAAC;SAC1B,OAAO,CAAC,KAAK,CAAC;SACd,aAAa,EAAE;IACpB,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA6B;IAC3D,KAAK,EAAE;QACL,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mCAAmC;QAChD,YAAY,EAAE,IAAI;QAClB,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;KACjC;IACD,eAAe,EAAE;QACf,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,+BAA+B;QAC5C,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF,MAAM,eAAe,GAGhB;IACH,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,gCAAgC;IAC1C,OAAO,EAAE;QACP,GAAG,mBAAmB;KACvB;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE;QACrD,MAAM,6BAA6B,CAAC;YAClC,OAAO;YACP,KAAK;YACL,eAAe;SAChB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,MAAM,iBAAiB,GAGlB;IACH,OAAO,EAAE,YAAY;IACrB,QAAQ,EAAE,kCAAkC;IAC5C,OAAO,EAAE;QACP,GAAG,mBAAmB;KACvB;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE;QACrD,MAAM,kBAAkB,CAAC;YACvB,OAAO;YACP,KAAK;YACL,eAAe;SAChB,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../../src/commands/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../../src/commands/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAQtC;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAU3B,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Chains, chainMetadata, hyperlaneContractAddresses, hyperlaneEnvironments, } from '@hyperlane-xyz/sdk';
|
|
2
1
|
import { log, logBlue, logGray, logTable } from '../logger.js';
|
|
2
|
+
const ChainTypes = ['mainnet', 'testnet'];
|
|
3
3
|
/**
|
|
4
4
|
* Parent command
|
|
5
5
|
*/
|
|
6
6
|
export const chainsCommand = {
|
|
7
7
|
command: 'chains',
|
|
8
|
-
describe: 'View information about
|
|
8
|
+
describe: 'View information about Hyperlane chains in a registry',
|
|
9
9
|
builder: (yargs) => yargs
|
|
10
10
|
.command(listCommand)
|
|
11
11
|
.command(addressesCommand)
|
|
@@ -18,33 +18,39 @@ export const chainsCommand = {
|
|
|
18
18
|
*/
|
|
19
19
|
const listCommand = {
|
|
20
20
|
command: 'list',
|
|
21
|
-
describe: 'List all
|
|
22
|
-
builder:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
result[chain] = {
|
|
32
|
-
'Display Name': displayName,
|
|
33
|
-
'Chain Id': chainId,
|
|
34
|
-
};
|
|
35
|
-
return result;
|
|
36
|
-
}, {});
|
|
37
|
-
const logChainsForEnv = (env) => {
|
|
38
|
-
logBlue(`\nHyperlane core ${env} chains:`);
|
|
21
|
+
describe: 'List all chains included in a registry',
|
|
22
|
+
builder: {
|
|
23
|
+
type: {
|
|
24
|
+
describe: 'Specify the type of chains',
|
|
25
|
+
choices: ChainTypes,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
handler: async ({ type, context }) => {
|
|
29
|
+
const logChainsForType = (type) => {
|
|
30
|
+
logBlue(`\nHyperlane ${type} chains:`);
|
|
39
31
|
logGray('------------------------------');
|
|
40
|
-
|
|
32
|
+
const chains = Object.values(context.chainMetadata).filter((c) => {
|
|
33
|
+
if (type === 'mainnet')
|
|
34
|
+
return !c.isTestnet;
|
|
35
|
+
else
|
|
36
|
+
return !!c.isTestnet;
|
|
37
|
+
});
|
|
38
|
+
const tableData = chains.reduce((result, chain) => {
|
|
39
|
+
const { chainId, displayName } = chain;
|
|
40
|
+
result[chain.name] = {
|
|
41
|
+
'Display Name': displayName,
|
|
42
|
+
'Chain Id': chainId,
|
|
43
|
+
};
|
|
44
|
+
return result;
|
|
45
|
+
}, {});
|
|
46
|
+
logTable(tableData);
|
|
41
47
|
};
|
|
42
|
-
if (
|
|
43
|
-
|
|
48
|
+
if (type) {
|
|
49
|
+
logChainsForType(type);
|
|
44
50
|
}
|
|
45
51
|
else {
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
logChainsForType('mainnet');
|
|
53
|
+
logChainsForType('testnet');
|
|
48
54
|
}
|
|
49
55
|
},
|
|
50
56
|
};
|
|
@@ -54,25 +60,25 @@ const listCommand = {
|
|
|
54
60
|
const addressesCommand = {
|
|
55
61
|
command: 'addresses',
|
|
56
62
|
describe: 'Display the addresses of core Hyperlane contracts',
|
|
57
|
-
builder:
|
|
63
|
+
builder: {
|
|
58
64
|
name: {
|
|
59
65
|
type: 'string',
|
|
60
66
|
description: 'Chain to display addresses for',
|
|
61
|
-
choices: Object.values(Chains),
|
|
62
67
|
alias: 'chain',
|
|
63
68
|
},
|
|
64
|
-
}
|
|
65
|
-
handler: (
|
|
66
|
-
|
|
67
|
-
|
|
69
|
+
},
|
|
70
|
+
handler: async ({ name, context }) => {
|
|
71
|
+
if (name) {
|
|
72
|
+
const result = await context.registry.getChainAddresses(name);
|
|
68
73
|
logBlue('Hyperlane contract addresses for:', name);
|
|
69
74
|
logGray('---------------------------------');
|
|
70
|
-
log(JSON.stringify(
|
|
75
|
+
log(JSON.stringify(result, null, 2));
|
|
71
76
|
}
|
|
72
77
|
else {
|
|
73
|
-
|
|
78
|
+
const result = await context.registry.getAddresses();
|
|
79
|
+
logBlue('Hyperlane contract addresses:');
|
|
74
80
|
logGray('----------------------------------');
|
|
75
|
-
log(JSON.stringify(
|
|
81
|
+
log(JSON.stringify(result, null, 2));
|
|
76
82
|
}
|
|
77
83
|
},
|
|
78
84
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../src/commands/chains.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../src/commands/chains.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAkBtC;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAU3B,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { createIsmConfigMap, readIsmConfig } from '../config/ism.js';
|
|
|
4
4
|
import { createMultisigConfig, readMultisigConfig, } from '../config/multisig.js';
|
|
5
5
|
import { createWarpRouteDeployConfig, readWarpRouteDeployConfig, } from '../config/warp.js';
|
|
6
6
|
import { log, logGreen } from '../logger.js';
|
|
7
|
-
import {
|
|
7
|
+
import { inputFileOption, outputFileOption } from './options.js';
|
|
8
8
|
/**
|
|
9
9
|
* Parent command
|
|
10
10
|
*/
|
|
@@ -36,40 +36,28 @@ const createCommand = {
|
|
|
36
36
|
const createChainConfigCommand = {
|
|
37
37
|
command: 'chain',
|
|
38
38
|
describe: 'Create a new, minimal Hyperlane chain config (aka chain metadata)',
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
format: fileFormatOption,
|
|
42
|
-
}),
|
|
43
|
-
handler: async (argv) => {
|
|
44
|
-
const format = argv.format;
|
|
45
|
-
const outPath = argv.output;
|
|
46
|
-
await createChainConfig({ format, outPath });
|
|
39
|
+
handler: async ({ context }) => {
|
|
40
|
+
await createChainConfig({ context });
|
|
47
41
|
process.exit(0);
|
|
48
42
|
},
|
|
49
43
|
};
|
|
50
44
|
const createIsmConfigCommand = {
|
|
51
45
|
command: 'ism',
|
|
52
46
|
describe: 'Create a basic or advanced ISM config for a validator set',
|
|
53
|
-
builder:
|
|
54
|
-
|
|
55
|
-
format: fileFormatOption,
|
|
56
|
-
chains: chainsCommandOption,
|
|
47
|
+
builder: {
|
|
48
|
+
out: outputFileOption('./configs/ism.yaml'),
|
|
57
49
|
advanced: {
|
|
58
50
|
type: 'boolean',
|
|
59
51
|
describe: 'Create an advanced ISM configuration',
|
|
60
52
|
default: false,
|
|
61
53
|
},
|
|
62
|
-
}
|
|
63
|
-
handler: async (
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const chainConfigPath = argv.chains;
|
|
67
|
-
const isAdvanced = argv.advanced;
|
|
68
|
-
if (isAdvanced) {
|
|
69
|
-
await createIsmConfigMap({ format, outPath, chainConfigPath });
|
|
54
|
+
},
|
|
55
|
+
handler: async ({ context, out, advanced }) => {
|
|
56
|
+
if (advanced) {
|
|
57
|
+
await createIsmConfigMap({ context, outPath: out });
|
|
70
58
|
}
|
|
71
59
|
else {
|
|
72
|
-
await createMultisigConfig({
|
|
60
|
+
await createMultisigConfig({ context, outPath: out });
|
|
73
61
|
}
|
|
74
62
|
process.exit(0);
|
|
75
63
|
},
|
|
@@ -77,32 +65,22 @@ const createIsmConfigCommand = {
|
|
|
77
65
|
const createHookConfigCommand = {
|
|
78
66
|
command: 'hooks',
|
|
79
67
|
describe: 'Create a new hooks config (required & default)',
|
|
80
|
-
builder:
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
handler: async (argv) => {
|
|
86
|
-
const format = argv.format;
|
|
87
|
-
const outPath = argv.output;
|
|
88
|
-
const chainConfigPath = argv.chains;
|
|
89
|
-
await createHooksConfigMap({ format, outPath, chainConfigPath });
|
|
68
|
+
builder: {
|
|
69
|
+
out: outputFileOption('./configs/hooks.yaml'),
|
|
70
|
+
},
|
|
71
|
+
handler: async ({ context, out }) => {
|
|
72
|
+
await createHooksConfigMap({ context, outPath: out });
|
|
90
73
|
process.exit(0);
|
|
91
74
|
},
|
|
92
75
|
};
|
|
93
76
|
const createWarpRouteDeployConfigCommand = {
|
|
94
77
|
command: 'warp',
|
|
95
78
|
describe: 'Create a new Warp Route deployment config',
|
|
96
|
-
builder:
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
handler: async (argv) => {
|
|
102
|
-
const format = argv.format;
|
|
103
|
-
const outPath = argv.output;
|
|
104
|
-
const chainConfigPath = argv.chains;
|
|
105
|
-
await createWarpRouteDeployConfig({ format, outPath, chainConfigPath });
|
|
79
|
+
builder: {
|
|
80
|
+
out: outputFileOption('./configs/warp-route-deployment.yaml'),
|
|
81
|
+
},
|
|
82
|
+
handler: async ({ context, out }) => {
|
|
83
|
+
await createWarpRouteDeployConfig({ context, outPath: out });
|
|
106
84
|
process.exit(0);
|
|
107
85
|
},
|
|
108
86
|
};
|
|
@@ -123,32 +101,23 @@ const validateCommand = {
|
|
|
123
101
|
};
|
|
124
102
|
const validateChainCommand = {
|
|
125
103
|
command: 'chain',
|
|
126
|
-
describe: 'Validate a chain config
|
|
127
|
-
builder:
|
|
128
|
-
path:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
demandOption: true,
|
|
132
|
-
},
|
|
133
|
-
}),
|
|
134
|
-
handler: async (argv) => {
|
|
135
|
-
const path = argv.path;
|
|
104
|
+
describe: 'Validate a chain config file',
|
|
105
|
+
builder: {
|
|
106
|
+
path: inputFileOption,
|
|
107
|
+
},
|
|
108
|
+
handler: async ({ path }) => {
|
|
136
109
|
readChainConfigs(path);
|
|
110
|
+
logGreen(`All chain configs in ${path} are valid`);
|
|
137
111
|
process.exit(0);
|
|
138
112
|
},
|
|
139
113
|
};
|
|
140
114
|
const validateIsmCommand = {
|
|
141
115
|
command: 'ism',
|
|
142
|
-
describe: 'Validate the basic ISM config
|
|
143
|
-
builder:
|
|
144
|
-
path:
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
demandOption: true,
|
|
148
|
-
},
|
|
149
|
-
}),
|
|
150
|
-
handler: async (argv) => {
|
|
151
|
-
const path = argv.path;
|
|
116
|
+
describe: 'Validate the basic ISM config file',
|
|
117
|
+
builder: {
|
|
118
|
+
path: inputFileOption,
|
|
119
|
+
},
|
|
120
|
+
handler: async ({ path }) => {
|
|
152
121
|
readMultisigConfig(path);
|
|
153
122
|
logGreen('Config is valid');
|
|
154
123
|
process.exit(0);
|
|
@@ -156,16 +125,11 @@ const validateIsmCommand = {
|
|
|
156
125
|
};
|
|
157
126
|
const validateIsmAdvancedCommand = {
|
|
158
127
|
command: 'ism-advanced',
|
|
159
|
-
describe: 'Validate the advanced ISM config
|
|
160
|
-
builder:
|
|
161
|
-
path:
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
demandOption: true,
|
|
165
|
-
},
|
|
166
|
-
}),
|
|
167
|
-
handler: async (argv) => {
|
|
168
|
-
const path = argv.path;
|
|
128
|
+
describe: 'Validate the advanced ISM config file',
|
|
129
|
+
builder: {
|
|
130
|
+
path: inputFileOption,
|
|
131
|
+
},
|
|
132
|
+
handler: async ({ path }) => {
|
|
169
133
|
readIsmConfig(path);
|
|
170
134
|
logGreen('Config is valid');
|
|
171
135
|
process.exit(0);
|
|
@@ -173,16 +137,11 @@ const validateIsmAdvancedCommand = {
|
|
|
173
137
|
};
|
|
174
138
|
const validateWarpCommand = {
|
|
175
139
|
command: 'warp',
|
|
176
|
-
describe: 'Validate a Warp Route config
|
|
177
|
-
builder:
|
|
178
|
-
path:
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
demandOption: true,
|
|
182
|
-
},
|
|
183
|
-
}),
|
|
184
|
-
handler: async (argv) => {
|
|
185
|
-
const path = argv.path;
|
|
140
|
+
describe: 'Validate a Warp Route deployment config file',
|
|
141
|
+
builder: {
|
|
142
|
+
path: inputFileOption,
|
|
143
|
+
},
|
|
144
|
+
handler: async ({ path }) => {
|
|
186
145
|
readWarpRouteDeployConfig(path);
|
|
187
146
|
logGreen('Config is valid');
|
|
188
147
|
process.exit(0);
|