@hyperlane-xyz/cli 7.1.0 → 7.3.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/src/avs/check.js +1 -1
- package/dist/src/avs/check.js.map +1 -1
- package/dist/src/check/warp.d.ts +0 -1
- package/dist/src/check/warp.d.ts.map +1 -1
- package/dist/src/check/warp.js +0 -1
- package/dist/src/check/warp.js.map +1 -1
- package/dist/src/commands/core.d.ts +1 -0
- package/dist/src/commands/core.d.ts.map +1 -1
- package/dist/src/commands/core.js +6 -2
- package/dist/src/commands/core.js.map +1 -1
- package/dist/src/commands/relayer.js +1 -1
- package/dist/src/commands/relayer.js.map +1 -1
- package/dist/src/commands/warp.js +1 -1
- package/dist/src/commands/warp.js.map +1 -1
- package/dist/src/config/agent.js +1 -1
- package/dist/src/config/agent.js.map +1 -1
- package/dist/src/config/core.d.ts +2 -1194
- package/dist/src/config/core.d.ts.map +1 -1
- package/dist/src/config/core.js +1 -1
- package/dist/src/config/core.js.map +1 -1
- package/dist/src/config/multisig.d.ts +7 -2
- package/dist/src/config/multisig.d.ts.map +1 -1
- package/dist/src/config/multisig.js.map +1 -1
- package/dist/src/config/submit.d.ts.map +1 -1
- package/dist/src/config/submit.js +1 -4
- package/dist/src/config/submit.js.map +1 -1
- package/dist/src/deploy/core.d.ts +1 -2
- package/dist/src/deploy/core.d.ts.map +1 -1
- package/dist/src/deploy/core.js +3 -1
- package/dist/src/deploy/core.js.map +1 -1
- package/dist/src/deploy/dry-run.d.ts.map +1 -1
- package/dist/src/deploy/dry-run.js +1 -1
- package/dist/src/deploy/dry-run.js.map +1 -1
- package/dist/src/deploy/utils.d.ts +0 -1
- package/dist/src/deploy/utils.d.ts.map +1 -1
- package/dist/src/deploy/utils.js +0 -3
- 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 +35 -14
- package/dist/src/deploy/warp.js.map +1 -1
- package/dist/src/read/core.d.ts.map +1 -1
- package/dist/src/read/core.js +5 -2
- package/dist/src/read/core.js.map +1 -1
- package/dist/src/read/warp.js +1 -1
- package/dist/src/read/warp.js.map +1 -1
- package/dist/src/status/message.d.ts.map +1 -1
- package/dist/src/status/message.js +2 -2
- package/dist/src/status/message.js.map +1 -1
- package/dist/src/tests/commands/core.d.ts +2 -2
- package/dist/src/tests/commands/core.d.ts.map +1 -1
- package/dist/src/tests/commands/helpers.d.ts +14 -1
- package/dist/src/tests/commands/helpers.d.ts.map +1 -1
- package/dist/src/tests/commands/helpers.js +15 -2
- package/dist/src/tests/commands/helpers.js.map +1 -1
- package/dist/src/tests/core-apply.e2e-test.d.ts +2 -0
- package/dist/src/tests/core-apply.e2e-test.d.ts.map +1 -0
- package/dist/src/tests/core-apply.e2e-test.js +155 -0
- package/dist/src/tests/core-apply.e2e-test.js.map +1 -0
- package/dist/src/tests/core-deploy.e2e-test.d.ts +2 -0
- package/dist/src/tests/core-deploy.e2e-test.d.ts.map +1 -0
- package/dist/src/tests/core-deploy.e2e-test.js +55 -0
- package/dist/src/tests/core-deploy.e2e-test.js.map +1 -0
- package/dist/src/tests/core-read.e2e-test.d.ts +2 -0
- package/dist/src/tests/core-read.e2e-test.d.ts.map +1 -0
- package/dist/src/tests/core-read.e2e-test.js +29 -0
- package/dist/src/tests/core-read.e2e-test.js.map +1 -0
- package/dist/src/tests/relay.e2e-test.js +14 -17
- package/dist/src/tests/relay.e2e-test.js.map +1 -1
- package/dist/src/tests/warp-apply.e2e-test.js +32 -20
- package/dist/src/tests/warp-apply.e2e-test.js.map +1 -1
- package/dist/src/tests/warp-deploy.e2e-test.js +7 -11
- package/dist/src/tests/warp-deploy.e2e-test.js.map +1 -1
- package/dist/src/tests/warp-read.e2e-test.js +3 -11
- package/dist/src/tests/warp-read.e2e-test.js.map +1 -1
- package/dist/src/utils/balances.d.ts.map +1 -1
- package/dist/src/utils/balances.js +7 -1
- package/dist/src/utils/balances.js.map +1 -1
- package/dist/src/utils/chains.d.ts +1 -1
- package/dist/src/utils/chains.d.ts.map +1 -1
- package/dist/src/utils/env.js +1 -1
- package/dist/src/utils/env.js.map +1 -1
- package/dist/src/utils/files.js +3 -3
- package/dist/src/utils/files.js.map +1 -1
- package/dist/src/utils/input.d.ts +33 -49
- package/dist/src/utils/input.d.ts.map +1 -1
- package/dist/src/utils/input.js +4 -25
- package/dist/src/utils/input.js.map +1 -1
- package/dist/src/utils/warp.d.ts +14 -0
- package/dist/src/utils/warp.d.ts.map +1 -0
- package/dist/src/utils/warp.js +24 -0
- package/dist/src/utils/warp.js.map +1 -0
- package/dist/src/validator/preFlightCheck.js +2 -2
- package/dist/src/validator/preFlightCheck.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +12 -9
- package/dist/src/tests/core.e2e-test.d.ts +0 -2
- package/dist/src/tests/core.e2e-test.d.ts.map +0 -1
- package/dist/src/tests/core.e2e-test.js +0 -113
- package/dist/src/tests/core.e2e-test.js.map +0 -1
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import { Wallet, ethers } from 'ethers';
|
|
3
|
-
import { ProxyAdmin__factory } from '@hyperlane-xyz/core';
|
|
4
|
-
import { randomAddress, } from '@hyperlane-xyz/sdk';
|
|
5
|
-
import { readYamlOrJson, writeYamlOrJson } from '../utils/files.js';
|
|
6
|
-
import { hyperlaneCoreApply, hyperlaneCoreDeploy, readCoreConfig, } from './commands/core.js';
|
|
7
|
-
import { ANVIL_KEY, REGISTRY_PATH } from './commands/helpers.js';
|
|
8
|
-
const CHAIN_NAME = 'anvil2';
|
|
9
|
-
const EXAMPLES_PATH = './examples';
|
|
10
|
-
const CORE_CONFIG_PATH = `${EXAMPLES_PATH}/core-config.yaml`;
|
|
11
|
-
const TEMP_PATH = '/tmp'; // /temp gets removed at the end of all-test.sh
|
|
12
|
-
const CORE_READ_CONFIG_PATH = `${TEMP_PATH}/anvil2/core-config-read.yaml`;
|
|
13
|
-
const TEST_TIMEOUT = 100000; // Long timeout since these tests can take a while
|
|
14
|
-
describe('hyperlane core e2e tests', async function () {
|
|
15
|
-
this.timeout(TEST_TIMEOUT);
|
|
16
|
-
let signer;
|
|
17
|
-
let initialOwnerAddress;
|
|
18
|
-
before(async () => {
|
|
19
|
-
const chainMetadata = readYamlOrJson(`${REGISTRY_PATH}/chains/${CHAIN_NAME}/metadata.yaml`);
|
|
20
|
-
const provider = new ethers.providers.JsonRpcProvider(chainMetadata.rpcUrls[0].http);
|
|
21
|
-
const wallet = new Wallet(ANVIL_KEY);
|
|
22
|
-
signer = wallet.connect(provider);
|
|
23
|
-
initialOwnerAddress = await signer.getAddress();
|
|
24
|
-
});
|
|
25
|
-
describe('core.deploy', () => {
|
|
26
|
-
it('should create a core deployment with the signer as the mailbox owner', async () => {
|
|
27
|
-
await hyperlaneCoreDeploy(CHAIN_NAME, CORE_CONFIG_PATH);
|
|
28
|
-
const coreConfig = await readCoreConfig(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
29
|
-
expect(coreConfig.owner).to.equal(initialOwnerAddress);
|
|
30
|
-
expect(coreConfig.proxyAdmin?.owner).to.equal(initialOwnerAddress);
|
|
31
|
-
// Assuming that the ProtocolFeeHook is used for deployment
|
|
32
|
-
expect(coreConfig.requiredHook.owner).to.equal(initialOwnerAddress);
|
|
33
|
-
});
|
|
34
|
-
it('should create a core deployment with the mailbox owner set to the address in the config', async () => {
|
|
35
|
-
const coreConfig = await readYamlOrJson(CORE_CONFIG_PATH);
|
|
36
|
-
const newOwner = randomAddress().toLowerCase();
|
|
37
|
-
coreConfig.owner = newOwner;
|
|
38
|
-
writeYamlOrJson(CORE_READ_CONFIG_PATH, coreConfig);
|
|
39
|
-
// Deploy the core contracts with the updated mailbox owner
|
|
40
|
-
await hyperlaneCoreDeploy(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
41
|
-
// Verify that the owner has been set correctly without modifying any other owner values
|
|
42
|
-
const updatedConfig = await readCoreConfig(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
43
|
-
expect(updatedConfig.owner.toLowerCase()).to.equal(newOwner);
|
|
44
|
-
expect(updatedConfig.proxyAdmin?.owner).to.equal(initialOwnerAddress);
|
|
45
|
-
// Assuming that the ProtocolFeeHook is used for deployment
|
|
46
|
-
expect(updatedConfig.requiredHook.owner).to.equal(initialOwnerAddress);
|
|
47
|
-
});
|
|
48
|
-
it('should create a core deployment with ProxyAdmin owner of the mailbox set to the address in the config', async () => {
|
|
49
|
-
const coreConfig = await readYamlOrJson(CORE_CONFIG_PATH);
|
|
50
|
-
const newOwner = randomAddress().toLowerCase();
|
|
51
|
-
coreConfig.proxyAdmin = { owner: newOwner };
|
|
52
|
-
writeYamlOrJson(CORE_READ_CONFIG_PATH, coreConfig);
|
|
53
|
-
// Deploy the core contracts with the updated mailbox owner
|
|
54
|
-
await hyperlaneCoreDeploy(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
55
|
-
// Verify that the owner has been set correctly without modifying any other owner values
|
|
56
|
-
const updatedConfig = await readCoreConfig(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
57
|
-
expect(updatedConfig.owner).to.equal(initialOwnerAddress);
|
|
58
|
-
expect(updatedConfig.proxyAdmin?.owner.toLowerCase()).to.equal(newOwner);
|
|
59
|
-
// Assuming that the ProtocolFeeHook is used for deployment
|
|
60
|
-
expect(updatedConfig.requiredHook.owner).to.equal(initialOwnerAddress);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
describe('core.apply', () => {
|
|
64
|
-
it('should update the mailbox owner', async () => {
|
|
65
|
-
await hyperlaneCoreDeploy(CHAIN_NAME, CORE_CONFIG_PATH);
|
|
66
|
-
const coreConfig = await readCoreConfig(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
67
|
-
expect(coreConfig.owner).to.equal(initialOwnerAddress);
|
|
68
|
-
const newOwner = randomAddress().toLowerCase();
|
|
69
|
-
coreConfig.owner = newOwner;
|
|
70
|
-
writeYamlOrJson(CORE_READ_CONFIG_PATH, coreConfig);
|
|
71
|
-
await hyperlaneCoreApply(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
72
|
-
// Verify that the owner has been set correctly without modifying any other owner values
|
|
73
|
-
const updatedConfig = await readCoreConfig(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
74
|
-
expect(updatedConfig.owner.toLowerCase()).to.equal(newOwner);
|
|
75
|
-
expect(updatedConfig.proxyAdmin?.owner).to.equal(initialOwnerAddress);
|
|
76
|
-
// Assuming that the ProtocolFeeHook is used for deployment
|
|
77
|
-
expect(updatedConfig.requiredHook.owner).to.equal(initialOwnerAddress);
|
|
78
|
-
});
|
|
79
|
-
it('should update the ProxyAdmin to a new one for the mailbox', async () => {
|
|
80
|
-
await hyperlaneCoreDeploy(CHAIN_NAME, CORE_CONFIG_PATH);
|
|
81
|
-
const coreConfig = await readCoreConfig(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
82
|
-
expect(coreConfig.owner).to.equal(initialOwnerAddress);
|
|
83
|
-
const proxyFactory = new ProxyAdmin__factory().connect(signer);
|
|
84
|
-
const deployTx = await proxyFactory.deploy();
|
|
85
|
-
const newProxyAdmin = await deployTx.deployed();
|
|
86
|
-
coreConfig.proxyAdmin.address = newProxyAdmin.address;
|
|
87
|
-
writeYamlOrJson(CORE_READ_CONFIG_PATH, coreConfig);
|
|
88
|
-
await hyperlaneCoreApply(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
89
|
-
// Verify that the owner has been set correctly without modifying any other owner values
|
|
90
|
-
const updatedConfig = await readCoreConfig(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
91
|
-
expect(updatedConfig.owner).to.equal(initialOwnerAddress);
|
|
92
|
-
expect(updatedConfig.proxyAdmin?.address).to.equal(newProxyAdmin.address);
|
|
93
|
-
// Assuming that the ProtocolFeeHook is used for deployment
|
|
94
|
-
expect(updatedConfig.requiredHook.owner).to.equal(initialOwnerAddress);
|
|
95
|
-
});
|
|
96
|
-
it('should update the ProxyAdmin owner for the mailbox', async () => {
|
|
97
|
-
await hyperlaneCoreDeploy(CHAIN_NAME, CORE_CONFIG_PATH);
|
|
98
|
-
const coreConfig = await readCoreConfig(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
99
|
-
expect(coreConfig.owner).to.equal(initialOwnerAddress);
|
|
100
|
-
const newOwner = randomAddress().toLowerCase();
|
|
101
|
-
coreConfig.proxyAdmin.owner = newOwner;
|
|
102
|
-
writeYamlOrJson(CORE_READ_CONFIG_PATH, coreConfig);
|
|
103
|
-
await hyperlaneCoreApply(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
104
|
-
// Verify that the owner has been set correctly without modifying any other owner values
|
|
105
|
-
const updatedConfig = await readCoreConfig(CHAIN_NAME, CORE_READ_CONFIG_PATH);
|
|
106
|
-
expect(updatedConfig.owner).to.equal(initialOwnerAddress);
|
|
107
|
-
expect(updatedConfig.proxyAdmin?.owner.toLowerCase()).to.equal(newOwner);
|
|
108
|
-
// Assuming that the ProtocolFeeHook is used for deployment
|
|
109
|
-
expect(updatedConfig.requiredHook.owner).to.equal(initialOwnerAddress);
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
//# sourceMappingURL=core.e2e-test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core.e2e-test.js","sourceRoot":"","sources":["../../../src/tests/core.e2e-test.ts"],"names":[],"mappings":"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"}
|