@hyperlane-xyz/cli 3.20.0-beta1 → 4.0.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.
- package/README.md +1 -1
- package/dist/cli.js +10 -6
- 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 +21 -0
- package/dist/src/avs/stakeRegistry.d.ts.map +1 -0
- package/dist/src/avs/stakeRegistry.js +64 -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 +64 -0
- package/dist/src/commands/avs.js.map +1 -0
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +10 -60
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/core.d.ts +16 -0
- package/dist/src/commands/core.d.ts.map +1 -0
- package/dist/src/commands/core.js +88 -0
- package/dist/src/commands/core.js.map +1 -0
- package/dist/src/commands/deploy.d.ts +13 -0
- package/dist/src/commands/deploy.d.ts.map +1 -1
- package/dist/src/commands/deploy.js +22 -26
- package/dist/src/commands/deploy.js.map +1 -1
- package/dist/src/commands/options.d.ts +11 -5
- package/dist/src/commands/options.d.ts.map +1 -1
- package/dist/src/commands/options.js +45 -11
- package/dist/src/commands/options.js.map +1 -1
- package/dist/src/commands/registry.d.ts +6 -0
- package/dist/src/commands/registry.d.ts.map +1 -0
- package/dist/src/commands/{chains.js → registry.js} +3 -3
- package/dist/src/commands/registry.js.map +1 -0
- package/dist/src/commands/send.d.ts.map +1 -1
- package/dist/src/commands/send.js +2 -42
- package/dist/src/commands/send.js.map +1 -1
- package/dist/src/commands/validator.d.ts +3 -0
- package/dist/src/commands/validator.d.ts.map +1 -0
- package/dist/src/commands/validator.js +34 -0
- package/dist/src/commands/validator.js.map +1 -0
- package/dist/src/commands/{hook.d.ts → warp.d.ts} +6 -2
- package/dist/src/commands/warp.d.ts.map +1 -0
- package/dist/src/commands/warp.js +101 -0
- package/dist/src/commands/warp.js.map +1 -0
- package/dist/src/config/chain.d.ts.map +1 -1
- package/dist/src/config/chain.js +21 -9
- package/dist/src/config/chain.js.map +1 -1
- package/dist/src/config/hooks.d.ts +4528 -90
- package/dist/src/config/hooks.d.ts.map +1 -1
- package/dist/src/config/hooks.js +31 -97
- package/dist/src/config/hooks.js.map +1 -1
- package/dist/src/config/ism.d.ts +58 -61
- package/dist/src/config/ism.d.ts.map +1 -1
- package/dist/src/config/ism.js +40 -128
- package/dist/src/config/ism.js.map +1 -1
- package/dist/src/config/warp.d.ts +3 -2
- package/dist/src/config/warp.d.ts.map +1 -1
- package/dist/src/config/warp.js +112 -49
- 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 +1 -1
- package/dist/src/context/context.d.ts.map +1 -1
- package/dist/src/context/context.js +37 -15
- package/dist/src/context/context.js.map +1 -1
- package/dist/src/context/types.d.ts +1 -0
- package/dist/src/context/types.d.ts.map +1 -1
- package/dist/src/deploy/agent.js +1 -1
- package/dist/src/deploy/agent.js.map +1 -1
- package/dist/src/deploy/core.d.ts +4 -8
- package/dist/src/deploy/core.d.ts.map +1 -1
- package/dist/src/deploy/core.js +28 -232
- package/dist/src/deploy/core.js.map +1 -1
- package/dist/src/deploy/dry-run.d.ts +2 -2
- package/dist/src/deploy/dry-run.d.ts.map +1 -1
- package/dist/src/deploy/dry-run.js +1 -0
- package/dist/src/deploy/dry-run.js.map +1 -1
- package/dist/src/deploy/utils.d.ts +4 -7
- package/dist/src/deploy/utils.d.ts.map +1 -1
- package/dist/src/deploy/utils.js +22 -19
- package/dist/src/deploy/utils.js.map +1 -1
- package/dist/src/deploy/warp.d.ts.map +1 -1
- package/dist/src/deploy/warp.js +38 -123
- package/dist/src/deploy/warp.js.map +1 -1
- package/dist/src/send/message.d.ts.map +1 -1
- package/dist/src/send/message.js +15 -29
- package/dist/src/send/message.js.map +1 -1
- package/dist/src/send/transfer.d.ts.map +1 -1
- package/dist/src/send/transfer.js +5 -6
- package/dist/src/send/transfer.js.map +1 -1
- package/dist/src/submit/submit.d.ts +5 -0
- package/dist/src/submit/submit.d.ts.map +1 -0
- package/dist/src/submit/submit.js +30 -0
- package/dist/src/submit/submit.js.map +1 -0
- package/dist/src/submit/types.d.ts +18 -0
- package/dist/src/submit/types.d.ts.map +1 -0
- package/dist/src/submit/types.js +2 -0
- package/dist/src/submit/types.js.map +1 -0
- package/dist/src/tests/deployTestErc20.js +3 -2
- package/dist/src/tests/deployTestErc20.js.map +1 -1
- package/dist/src/tests/hooks.test.js +14 -8
- package/dist/src/tests/hooks.test.js.map +1 -1
- package/dist/src/tests/ism.test.js +1 -1
- package/dist/src/tests/ism.test.js.map +1 -1
- package/dist/src/utils/balances.d.ts +2 -2
- package/dist/src/utils/balances.d.ts.map +1 -1
- package/dist/src/utils/balances.js +8 -3
- package/dist/src/utils/balances.js.map +1 -1
- package/dist/src/utils/chains.d.ts +1 -0
- package/dist/src/utils/chains.d.ts.map +1 -1
- package/dist/src/utils/chains.js +20 -3
- package/dist/src/utils/chains.js.map +1 -1
- package/dist/src/utils/env.d.ts +3 -0
- package/dist/src/utils/env.d.ts.map +1 -1
- package/dist/src/utils/env.js +3 -0
- package/dist/src/utils/env.js.map +1 -1
- package/dist/src/utils/files.d.ts +1 -0
- package/dist/src/utils/files.d.ts.map +1 -1
- package/dist/src/utils/files.js +8 -0
- package/dist/src/utils/files.js.map +1 -1
- package/dist/src/utils/keys.d.ts +5 -3
- package/dist/src/utils/keys.d.ts.map +1 -1
- package/dist/src/utils/keys.js +16 -13
- package/dist/src/utils/keys.js.map +1 -1
- package/dist/src/validator/address.d.ts +10 -0
- package/dist/src/validator/address.d.ts.map +1 -0
- package/dist/src/validator/address.js +107 -0
- package/dist/src/validator/address.js.map +1 -0
- 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/core-config.yaml +19 -0
- package/examples/hooks.yaml +8 -4
- package/examples/warp-route-deployment.yaml +2 -4
- package/package.json +7 -4
- package/dist/src/commands/chains.d.ts +0 -6
- package/dist/src/commands/chains.d.ts.map +0 -1
- package/dist/src/commands/chains.js.map +0 -1
- package/dist/src/commands/hook.d.ts.map +0 -1
- package/dist/src/commands/hook.js +0 -34
- package/dist/src/commands/hook.js.map +0 -1
- package/dist/src/commands/ism.d.ts +0 -12
- package/dist/src/commands/ism.d.ts.map +0 -1
- package/dist/src/commands/ism.js +0 -36
- package/dist/src/commands/ism.js.map +0 -1
- package/dist/src/registry/MergedRegistry.d.ts +0 -35
- package/dist/src/registry/MergedRegistry.d.ts.map +0 -1
- package/dist/src/registry/MergedRegistry.js +0 -83
- package/dist/src/registry/MergedRegistry.js.map +0 -1
package/README.md
CHANGED
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 {
|
|
5
|
+
import { avsCommand } from './src/commands/avs.js';
|
|
6
6
|
import { configCommand } from './src/commands/config.js';
|
|
7
|
+
import { coreCommand } from './src/commands/core.js';
|
|
7
8
|
import { deployCommand } from './src/commands/deploy.js';
|
|
8
|
-
import { hookCommand } from './src/commands/hook.js';
|
|
9
|
-
import { ismCommand } from './src/commands/ism.js';
|
|
10
9
|
import { keyCommandOption, logFormatCommandOption, logLevelCommandOption, overrideRegistryUriCommandOption, registryUriCommandOption, skipConfirmationOption, } from './src/commands/options.js';
|
|
10
|
+
import { registryCommand } from './src/commands/registry.js';
|
|
11
11
|
import { sendCommand } from './src/commands/send.js';
|
|
12
12
|
import { statusCommand } from './src/commands/status.js';
|
|
13
|
+
import { validatorCommand } from './src/commands/validator.js';
|
|
14
|
+
import { warpCommand } from './src/commands/warp.js';
|
|
13
15
|
import { contextMiddleware } from './src/context/context.js';
|
|
14
16
|
import { configureLogger, errorRed } from './src/logger.js';
|
|
15
17
|
import { checkVersion } from './src/utils/version-check.js';
|
|
@@ -34,13 +36,15 @@ try {
|
|
|
34
36
|
},
|
|
35
37
|
contextMiddleware,
|
|
36
38
|
])
|
|
37
|
-
.command(
|
|
39
|
+
.command(avsCommand)
|
|
38
40
|
.command(configCommand)
|
|
41
|
+
.command(coreCommand)
|
|
39
42
|
.command(deployCommand)
|
|
40
|
-
.command(
|
|
41
|
-
.command(ismCommand)
|
|
43
|
+
.command(registryCommand)
|
|
42
44
|
.command(sendCommand)
|
|
43
45
|
.command(statusCommand)
|
|
46
|
+
.command(validatorCommand)
|
|
47
|
+
.command(warpCommand)
|
|
44
48
|
.version(VERSION)
|
|
45
49
|
.demandCommand()
|
|
46
50
|
.strict()
|
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,
|
|
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: '0x33dB966328Ea213b0f76eF96CA368AB37779F065',
|
|
6
|
+
ecdsaStakeRegistry: '0xFfa913705484C9BAea32Ffe9945BeA099A1DFF72',
|
|
7
|
+
hyperlaneServiceManager: '0xc76E477437065093D353b7d56c81ff54D167B0Ab',
|
|
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,21 @@
|
|
|
1
|
+
import { BigNumberish, utils } from 'ethers';
|
|
2
|
+
import { ChainName } from '@hyperlane-xyz/sdk';
|
|
3
|
+
import { Address } from '@hyperlane-xyz/utils';
|
|
4
|
+
import { WriteCommandContext } from '../context/types.js';
|
|
5
|
+
export type SignatureWithSaltAndExpiryStruct = {
|
|
6
|
+
signature: utils.BytesLike;
|
|
7
|
+
salt: utils.BytesLike;
|
|
8
|
+
expiry: BigNumberish;
|
|
9
|
+
};
|
|
10
|
+
export declare function registerOperatorWithSignature({ context, chain, operatorKeyPath, avsSigningKey, }: {
|
|
11
|
+
context: WriteCommandContext;
|
|
12
|
+
chain: ChainName;
|
|
13
|
+
operatorKeyPath: string;
|
|
14
|
+
avsSigningKey: Address;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
export declare function deregisterOperator({ context, chain, operatorKeyPath, }: {
|
|
17
|
+
context: WriteCommandContext;
|
|
18
|
+
chain: ChainName;
|
|
19
|
+
operatorKeyPath: string;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
//# 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,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAMrD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAM1D,MAAM,MAAM,gCAAgC,GAAG;IAC7C,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,wBAAsB,6BAA6B,CAAC,EAClD,OAAO,EACP,KAAK,EACL,eAAe,EACf,aAAa,GACd,EAAE;IACD,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB,iBA+CA;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,iBAoBA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { password } from '@inquirer/prompts';
|
|
2
|
+
import { Wallet, utils } from 'ethers';
|
|
3
|
+
import { ECDSAStakeRegistry__factory, TestAVSDirectory__factory, } from '@hyperlane-xyz/core';
|
|
4
|
+
import { log, logBlue } from '../logger.js';
|
|
5
|
+
import { readFileAtPath, resolvePath } from '../utils/files.js';
|
|
6
|
+
import { avsAddresses } from './config.js';
|
|
7
|
+
export async function registerOperatorWithSignature({ context, chain, operatorKeyPath, avsSigningKey, }) {
|
|
8
|
+
const { multiProvider } = context;
|
|
9
|
+
const operatorAsSigner = await readOperatorFromEncryptedJson(operatorKeyPath);
|
|
10
|
+
const provider = multiProvider.getProvider(chain);
|
|
11
|
+
const connectedSigner = operatorAsSigner.connect(provider);
|
|
12
|
+
const stakeRegistryAddress = avsAddresses[chain].ecdsaStakeRegistry;
|
|
13
|
+
const ecdsaStakeRegistry = ECDSAStakeRegistry__factory.connect(stakeRegistryAddress, connectedSigner);
|
|
14
|
+
const domainId = multiProvider.getDomainId(chain);
|
|
15
|
+
const avsDirectoryAddress = avsAddresses[chain].avsDirectory;
|
|
16
|
+
const operatorSignature = await getOperatorSignature(domainId, avsAddresses[chain].hyperlaneServiceManager, avsDirectoryAddress, operatorAsSigner, connectedSigner);
|
|
17
|
+
// check if the operator is already registered
|
|
18
|
+
const operatorStatus = await ecdsaStakeRegistry.operatorRegistered(operatorAsSigner.address);
|
|
19
|
+
if (operatorStatus) {
|
|
20
|
+
logBlue(`Operator ${operatorAsSigner.address} already registered to Hyperlane AVS`);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
log(`Registering operator ${operatorAsSigner.address} attesting ${avsSigningKey} with signature on ${chain}...`);
|
|
24
|
+
await multiProvider.handleTx(chain, ecdsaStakeRegistry.registerOperatorWithSignature(operatorSignature, avsSigningKey));
|
|
25
|
+
logBlue(`Operator ${operatorAsSigner.address} registered to Hyperlane AVS`);
|
|
26
|
+
}
|
|
27
|
+
export async function deregisterOperator({ context, chain, operatorKeyPath, }) {
|
|
28
|
+
const { multiProvider } = context;
|
|
29
|
+
const operatorAsSigner = await readOperatorFromEncryptedJson(operatorKeyPath);
|
|
30
|
+
const provider = multiProvider.getProvider(chain);
|
|
31
|
+
const connectedSigner = operatorAsSigner.connect(provider);
|
|
32
|
+
const stakeRegistryAddress = avsAddresses[chain].ecdsaStakeRegistry;
|
|
33
|
+
const ecdsaStakeRegistry = ECDSAStakeRegistry__factory.connect(stakeRegistryAddress, connectedSigner);
|
|
34
|
+
log(`Deregistering operator ${operatorAsSigner.address} on ${chain}...`);
|
|
35
|
+
await multiProvider.handleTx(chain, ecdsaStakeRegistry.deregisterOperator());
|
|
36
|
+
logBlue(`Operator ${operatorAsSigner.address} deregistered from Hyperlane AVS`);
|
|
37
|
+
}
|
|
38
|
+
async function readOperatorFromEncryptedJson(operatorKeyPath) {
|
|
39
|
+
const encryptedJson = readFileAtPath(resolvePath(operatorKeyPath));
|
|
40
|
+
const keyFilePassword = await password({
|
|
41
|
+
mask: '*',
|
|
42
|
+
message: 'Enter the password for the operator key file: ',
|
|
43
|
+
});
|
|
44
|
+
return Wallet.fromEncryptedJson(encryptedJson, keyFilePassword);
|
|
45
|
+
}
|
|
46
|
+
async function getOperatorSignature(domain, serviceManager, avsDirectory, operator, signer) {
|
|
47
|
+
const avsDirectoryContract = TestAVSDirectory__factory.connect(avsDirectory, signer);
|
|
48
|
+
// random salt is ok, because we register the operator right after
|
|
49
|
+
const salt = utils.hexZeroPad(utils.randomBytes(32), 32);
|
|
50
|
+
// give a expiry timestamp 1 hour from now
|
|
51
|
+
const expiry = utils.hexZeroPad(utils.hexlify(Math.floor(Date.now() / 1000) + 60 * 60), 32);
|
|
52
|
+
const signingHash = await avsDirectoryContract.calculateOperatorAVSRegistrationDigestHash(operator.address, serviceManager, salt, expiry);
|
|
53
|
+
// Eigenlayer's AVSDirectory expects the signature over raw signed hash instead of EIP-191 compatible toEthSignedMessageHash
|
|
54
|
+
// see https://github.com/Layr-Labs/eigenlayer-contracts/blob/ef2ea4a7459884f381057aa9bbcd29c7148cfb63/src/contracts/libraries/EIP1271SignatureUtils.sol#L22
|
|
55
|
+
const signature = operator
|
|
56
|
+
._signingKey()
|
|
57
|
+
.signDigest(utils.arrayify(signingHash));
|
|
58
|
+
return {
|
|
59
|
+
signature: utils.joinSignature(signature),
|
|
60
|
+
salt,
|
|
61
|
+
expiry,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# 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;AAY/C;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,aAUxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAiBvD,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
avsSigningKey: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: 'Address of the AVS signing key',
|
|
34
|
+
demandOption: true,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
const registerCommand = {
|
|
38
|
+
command: 'register',
|
|
39
|
+
describe: 'Register operator with the AVS',
|
|
40
|
+
builder: registrationOptions,
|
|
41
|
+
handler: async ({ context, chain, operatorKeyPath, avsSigningKey }) => {
|
|
42
|
+
await registerOperatorWithSignature({
|
|
43
|
+
context,
|
|
44
|
+
chain,
|
|
45
|
+
operatorKeyPath,
|
|
46
|
+
avsSigningKey,
|
|
47
|
+
});
|
|
48
|
+
process.exit(0);
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
const deregisterCommand = {
|
|
52
|
+
command: 'deregister',
|
|
53
|
+
describe: 'Deregister yourself with the AVS',
|
|
54
|
+
builder: registrationOptions,
|
|
55
|
+
handler: async ({ context, chain, operatorKeyPath }) => {
|
|
56
|
+
await deregisterOperator({
|
|
57
|
+
context,
|
|
58
|
+
chain,
|
|
59
|
+
operatorKeyPath,
|
|
60
|
+
});
|
|
61
|
+
process.exit(0);
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=avs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avs.js","sourceRoot":"","sources":["../../../src/commands/avs.ts"],"names":[],"mappings":"AAKA,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;IACD,aAAa,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,gCAAgC;QAC7C,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF,MAAM,eAAe,GAIhB;IACH,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,gCAAgC;IAC1C,OAAO,EAAE,mBAAmB;IAC5B,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,EAAE,EAAE;QACpE,MAAM,6BAA6B,CAAC;YAClC,OAAO;YACP,KAAK;YACL,eAAe;YACf,aAAa;SACd,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,mBAAmB;IAC5B,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":"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;AAWtC;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAU3B,CAAC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { createChainConfig, readChainConfigs } from '../config/chain.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { createWarpRouteDeployConfig, readWarpRouteDeployConfig, } from '../config/warp.js';
|
|
2
|
+
import { readIsmConfig } from '../config/ism.js';
|
|
3
|
+
import { readMultisigConfig } from '../config/multisig.js';
|
|
4
|
+
import { readWarpRouteDeployConfig } from '../config/warp.js';
|
|
6
5
|
import { log, logGreen } from '../logger.js';
|
|
7
|
-
import {
|
|
6
|
+
import { inputFileCommandOption } from './options.js';
|
|
8
7
|
/**
|
|
9
8
|
* Parent command
|
|
10
9
|
*/
|
|
@@ -24,13 +23,7 @@ export const configCommand = {
|
|
|
24
23
|
const createCommand = {
|
|
25
24
|
command: 'create',
|
|
26
25
|
describe: 'Create a new Hyperlane config',
|
|
27
|
-
builder: (yargs) => yargs
|
|
28
|
-
.command(createChainConfigCommand)
|
|
29
|
-
.command(createIsmConfigCommand)
|
|
30
|
-
.command(createHookConfigCommand)
|
|
31
|
-
.command(createWarpRouteDeployConfigCommand)
|
|
32
|
-
.version(false)
|
|
33
|
-
.demandCommand(),
|
|
26
|
+
builder: (yargs) => yargs.command(createChainConfigCommand).version(false).demandCommand(),
|
|
34
27
|
handler: () => log('Command required'),
|
|
35
28
|
};
|
|
36
29
|
const createChainConfigCommand = {
|
|
@@ -41,49 +34,6 @@ const createChainConfigCommand = {
|
|
|
41
34
|
process.exit(0);
|
|
42
35
|
},
|
|
43
36
|
};
|
|
44
|
-
const createIsmConfigCommand = {
|
|
45
|
-
command: 'ism',
|
|
46
|
-
describe: 'Create a basic or advanced ISM config for a validator set',
|
|
47
|
-
builder: {
|
|
48
|
-
out: outputFileOption('./configs/ism.yaml'),
|
|
49
|
-
advanced: {
|
|
50
|
-
type: 'boolean',
|
|
51
|
-
describe: 'Create an advanced ISM configuration',
|
|
52
|
-
default: false,
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
handler: async ({ context, out, advanced }) => {
|
|
56
|
-
if (advanced) {
|
|
57
|
-
await createIsmConfigMap({ context, outPath: out });
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
await createMultisigConfig({ context, outPath: out });
|
|
61
|
-
}
|
|
62
|
-
process.exit(0);
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
const createHookConfigCommand = {
|
|
66
|
-
command: 'hooks',
|
|
67
|
-
describe: 'Create a new hooks config (required & default)',
|
|
68
|
-
builder: {
|
|
69
|
-
out: outputFileOption('./configs/hooks.yaml'),
|
|
70
|
-
},
|
|
71
|
-
handler: async ({ context, out }) => {
|
|
72
|
-
await createHooksConfigMap({ context, outPath: out });
|
|
73
|
-
process.exit(0);
|
|
74
|
-
},
|
|
75
|
-
};
|
|
76
|
-
const createWarpRouteDeployConfigCommand = {
|
|
77
|
-
command: 'warp',
|
|
78
|
-
describe: 'Create a new Warp Route deployment config',
|
|
79
|
-
builder: {
|
|
80
|
-
out: outputFileOption('./configs/warp-route-deployment.yaml'),
|
|
81
|
-
},
|
|
82
|
-
handler: async ({ context, out }) => {
|
|
83
|
-
await createWarpRouteDeployConfig({ context, outPath: out });
|
|
84
|
-
process.exit(0);
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
37
|
/**
|
|
88
38
|
* Validate commands
|
|
89
39
|
*/
|
|
@@ -103,7 +53,7 @@ const validateChainCommand = {
|
|
|
103
53
|
command: 'chain',
|
|
104
54
|
describe: 'Validate a chain config file',
|
|
105
55
|
builder: {
|
|
106
|
-
path:
|
|
56
|
+
path: inputFileCommandOption,
|
|
107
57
|
},
|
|
108
58
|
handler: async ({ path }) => {
|
|
109
59
|
readChainConfigs(path);
|
|
@@ -115,7 +65,7 @@ const validateIsmCommand = {
|
|
|
115
65
|
command: 'ism',
|
|
116
66
|
describe: 'Validate the basic ISM config file',
|
|
117
67
|
builder: {
|
|
118
|
-
path:
|
|
68
|
+
path: inputFileCommandOption,
|
|
119
69
|
},
|
|
120
70
|
handler: async ({ path }) => {
|
|
121
71
|
readMultisigConfig(path);
|
|
@@ -127,7 +77,7 @@ const validateIsmAdvancedCommand = {
|
|
|
127
77
|
command: 'ism-advanced',
|
|
128
78
|
describe: 'Validate the advanced ISM config file',
|
|
129
79
|
builder: {
|
|
130
|
-
path:
|
|
80
|
+
path: inputFileCommandOption,
|
|
131
81
|
},
|
|
132
82
|
handler: async ({ path }) => {
|
|
133
83
|
readIsmConfig(path);
|
|
@@ -139,10 +89,10 @@ const validateWarpCommand = {
|
|
|
139
89
|
command: 'warp',
|
|
140
90
|
describe: 'Validate a Warp Route deployment config file',
|
|
141
91
|
builder: {
|
|
142
|
-
path:
|
|
92
|
+
path: inputFileCommandOption,
|
|
143
93
|
},
|
|
144
94
|
handler: async ({ path }) => {
|
|
145
|
-
readWarpRouteDeployConfig(path);
|
|
95
|
+
await readWarpRouteDeployConfig(path);
|
|
146
96
|
logGreen('Config is valid');
|
|
147
97
|
process.exit(0);
|
|
148
98
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CommandModule } from 'yargs';
|
|
2
|
+
import { CommandModuleWithContext } from '../context/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Parent command
|
|
5
|
+
*/
|
|
6
|
+
export declare const coreCommand: CommandModule;
|
|
7
|
+
export declare const configure: CommandModuleWithContext<{
|
|
8
|
+
ismAdvanced: boolean;
|
|
9
|
+
config: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const read: CommandModuleWithContext<{
|
|
12
|
+
chain: string;
|
|
13
|
+
mailbox: string;
|
|
14
|
+
config: string;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/commands/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAMtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAc/D;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,aAWzB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,wBAAwB,CAAC;IAC/C,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CA6DA,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,wBAAwB,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CA8BA,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { CoreConfigSchema, EvmCoreReader } from '@hyperlane-xyz/sdk';
|
|
2
|
+
import { createHookConfig } from '../config/hooks.js';
|
|
3
|
+
import { createIsmConfig, createTrustedRelayerConfig } from '../config/ism.js';
|
|
4
|
+
import { log, logBlue, logBoldUnderlinedRed, logGray, logRed, } from '../logger.js';
|
|
5
|
+
import { detectAndConfirmOrPrompt } from '../utils/chains.js';
|
|
6
|
+
import { writeYamlOrJson } from '../utils/files.js';
|
|
7
|
+
import { deploy } from './deploy.js';
|
|
8
|
+
import { chainCommandOption, outputFileCommandOption } from './options.js';
|
|
9
|
+
/**
|
|
10
|
+
* Parent command
|
|
11
|
+
*/
|
|
12
|
+
export const coreCommand = {
|
|
13
|
+
command: 'core',
|
|
14
|
+
describe: 'Manage core Hyperlane contracts & configs',
|
|
15
|
+
builder: (yargs) => yargs
|
|
16
|
+
.command(configure)
|
|
17
|
+
.command(deploy)
|
|
18
|
+
.command(read)
|
|
19
|
+
.version(false)
|
|
20
|
+
.demandCommand(),
|
|
21
|
+
handler: () => log('Command required'),
|
|
22
|
+
};
|
|
23
|
+
export const configure = {
|
|
24
|
+
command: 'configure',
|
|
25
|
+
describe: 'Create a core configuration, including ISMs and hooks.',
|
|
26
|
+
builder: {
|
|
27
|
+
ismAdvanced: {
|
|
28
|
+
type: 'boolean',
|
|
29
|
+
describe: 'Create an advanced ISM & hook configuration',
|
|
30
|
+
default: false,
|
|
31
|
+
},
|
|
32
|
+
config: outputFileCommandOption('./configs/core-config.yaml', false, 'The path to output a Core Config JSON or YAML file.'),
|
|
33
|
+
},
|
|
34
|
+
handler: async ({ context, ismAdvanced, config: configFilePath }) => {
|
|
35
|
+
logGray('Hyperlane Core Configure');
|
|
36
|
+
logGray('------------------------');
|
|
37
|
+
const owner = await detectAndConfirmOrPrompt(async () => context.signer?.getAddress(), 'Enter the desired', 'owner address');
|
|
38
|
+
// Create default Ism config (advanced or trusted)
|
|
39
|
+
let defaultIsm;
|
|
40
|
+
if (ismAdvanced) {
|
|
41
|
+
logBlue('Creating a new advanced ISM config');
|
|
42
|
+
logBoldUnderlinedRed('WARNING: USE AT YOUR RISK.');
|
|
43
|
+
logRed('Advanced ISM configs require knowledge of different ISM types and how they work together topologically. If possible, use the basic ISM configs are recommended.');
|
|
44
|
+
defaultIsm = await createIsmConfig(context);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
defaultIsm = await createTrustedRelayerConfig(context);
|
|
48
|
+
}
|
|
49
|
+
// Create default and required Hook config
|
|
50
|
+
const defaultHook = await createHookConfig(context, 'Select default hook type');
|
|
51
|
+
const requiredHook = await createHookConfig(context, 'Select required hook type');
|
|
52
|
+
// Validate
|
|
53
|
+
const coreConfig = {
|
|
54
|
+
owner,
|
|
55
|
+
defaultIsm,
|
|
56
|
+
defaultHook,
|
|
57
|
+
requiredHook,
|
|
58
|
+
};
|
|
59
|
+
CoreConfigSchema.parse(coreConfig);
|
|
60
|
+
writeYamlOrJson(configFilePath, coreConfig);
|
|
61
|
+
process.exit(0);
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
export const read = {
|
|
65
|
+
command: 'read',
|
|
66
|
+
describe: 'Reads onchain ISM & Hook configurations for given addresses',
|
|
67
|
+
builder: {
|
|
68
|
+
chain: {
|
|
69
|
+
...chainCommandOption,
|
|
70
|
+
demandOption: true,
|
|
71
|
+
},
|
|
72
|
+
mailbox: {
|
|
73
|
+
type: 'string',
|
|
74
|
+
description: 'Mailbox address used to derive the core config',
|
|
75
|
+
demandOption: true,
|
|
76
|
+
},
|
|
77
|
+
config: outputFileCommandOption('./configs/core-config.yaml', false, 'The path to output a Core Config JSON or YAML file.'),
|
|
78
|
+
},
|
|
79
|
+
handler: async ({ context, chain, mailbox, config: configFilePath }) => {
|
|
80
|
+
logGray('Hyperlane Core Read');
|
|
81
|
+
logGray('-------------------');
|
|
82
|
+
const evmCoreReader = new EvmCoreReader(context.multiProvider, chain);
|
|
83
|
+
const coreConfig = await evmCoreReader.deriveCoreConfig(mailbox);
|
|
84
|
+
writeYamlOrJson(configFilePath, coreConfig);
|
|
85
|
+
process.exit(0);
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/commands/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { CommandModule } from 'yargs';
|
|
2
|
+
import { CommandModuleWithWriteContext } from '../context/types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Parent command
|
|
4
5
|
*/
|
|
5
6
|
export declare const deployCommand: CommandModule;
|
|
7
|
+
/**
|
|
8
|
+
* Generates a command module for deploying Hyperlane contracts, given a command
|
|
9
|
+
*
|
|
10
|
+
* @param commandName - the deploy command key used to look up the deployFunction
|
|
11
|
+
* @returns A command module used to deploy Hyperlane contracts.
|
|
12
|
+
*/
|
|
13
|
+
export declare const deploy: CommandModuleWithWriteContext<{
|
|
14
|
+
chain: string;
|
|
15
|
+
config: string;
|
|
16
|
+
dryRun: string;
|
|
17
|
+
fromAddress: string;
|
|
18
|
+
}>;
|
|
6
19
|
//# sourceMappingURL=deploy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAEL,6BAA6B,EAC9B,MAAM,qBAAqB,CAAC;AAmB7B;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAU3B,CAAC;AA8BF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,6BAA6B,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,CA6BA,CAAC"}
|