@hyperlane-xyz/cli 9.2.0 → 10.0.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/tests/warp/warp-extend-basic.e2e-test.d.ts +2 -0
- package/dist/src/tests/warp/warp-extend-basic.e2e-test.d.ts.map +1 -0
- package/dist/src/tests/warp/warp-extend-basic.e2e-test.js +172 -0
- package/dist/src/tests/warp/warp-extend-basic.e2e-test.js.map +1 -0
- package/dist/src/tests/warp/warp-extend-config.e2e-test.d.ts +2 -0
- package/dist/src/tests/warp/warp-extend-config.e2e-test.d.ts.map +1 -0
- package/dist/src/tests/warp/warp-extend-config.e2e-test.js +115 -0
- package/dist/src/tests/warp/warp-extend-config.e2e-test.js.map +1 -0
- package/dist/src/tests/warp/warp-extend-recovery.e2e-test.d.ts +2 -0
- package/dist/src/tests/warp/warp-extend-recovery.e2e-test.d.ts.map +1 -0
- package/dist/src/tests/warp/warp-extend-recovery.e2e-test.js +167 -0
- package/dist/src/tests/warp/warp-extend-recovery.e2e-test.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/package.json +3 -3
- package/dist/src/tests/warp/warp-apply-extend.e2e-test.d.ts +0 -2
- package/dist/src/tests/warp/warp-apply-extend.e2e-test.d.ts.map +0 -1
- package/dist/src/tests/warp/warp-apply-extend.e2e-test.js +0 -410
- package/dist/src/tests/warp/warp-apply-extend.e2e-test.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warp-extend-basic.e2e-test.d.ts","sourceRoot":"","sources":["../../../../src/tests/warp/warp-extend-basic.e2e-test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { Wallet } from 'ethers';
|
|
3
|
+
import { TokenType, } from '@hyperlane-xyz/sdk';
|
|
4
|
+
import { readYamlOrJson, writeYamlOrJson } from '../../utils/files.js';
|
|
5
|
+
import { ANVIL_KEY, CHAIN_NAME_2, CHAIN_NAME_3, CORE_CONFIG_PATH, DEFAULT_E2E_TEST_TIMEOUT, E2E_TEST_BURN_ADDRESS, EXAMPLES_PATH, TEMP_PATH, WARP_CONFIG_PATH_2, WARP_CONFIG_PATH_EXAMPLE, WARP_CORE_CONFIG_PATH_2, deployOrUseExistingCore, extendWarpConfig, getCombinedWarpRoutePath, getDomainId, } from '../commands/helpers.js';
|
|
6
|
+
import { hyperlaneWarpApply, hyperlaneWarpDeploy, readWarpConfig, } from '../commands/warp.js';
|
|
7
|
+
describe('hyperlane warp apply basic extension tests', async function () {
|
|
8
|
+
this.timeout(2 * DEFAULT_E2E_TEST_TIMEOUT);
|
|
9
|
+
let chain2Addresses = {};
|
|
10
|
+
before(async function () {
|
|
11
|
+
await deployOrUseExistingCore(CHAIN_NAME_2, CORE_CONFIG_PATH, ANVIL_KEY);
|
|
12
|
+
chain2Addresses = await deployOrUseExistingCore(CHAIN_NAME_3, CORE_CONFIG_PATH, ANVIL_KEY);
|
|
13
|
+
// Create a new warp config using the example
|
|
14
|
+
const warpConfig = readYamlOrJson(WARP_CONFIG_PATH_EXAMPLE);
|
|
15
|
+
const anvil2Config = { anvil2: { ...warpConfig.anvil1 } };
|
|
16
|
+
writeYamlOrJson(WARP_CONFIG_PATH_2, anvil2Config);
|
|
17
|
+
});
|
|
18
|
+
beforeEach(async function () {
|
|
19
|
+
await hyperlaneWarpDeploy(WARP_CONFIG_PATH_2);
|
|
20
|
+
});
|
|
21
|
+
it('should extend an existing warp route', async () => {
|
|
22
|
+
// Read existing config into a file
|
|
23
|
+
const warpConfigPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
24
|
+
await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpConfigPath);
|
|
25
|
+
// Extend with new config
|
|
26
|
+
const config = {
|
|
27
|
+
decimals: 18,
|
|
28
|
+
mailbox: chain2Addresses.mailbox,
|
|
29
|
+
name: 'Ether',
|
|
30
|
+
owner: new Wallet(ANVIL_KEY).address,
|
|
31
|
+
symbol: 'ETH',
|
|
32
|
+
type: TokenType.native,
|
|
33
|
+
};
|
|
34
|
+
await extendWarpConfig({
|
|
35
|
+
chain: CHAIN_NAME_2,
|
|
36
|
+
chainToExtend: CHAIN_NAME_3,
|
|
37
|
+
extendedConfig: config,
|
|
38
|
+
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
39
|
+
warpDeployPath: warpConfigPath,
|
|
40
|
+
});
|
|
41
|
+
const COMBINED_WARP_CORE_CONFIG_PATH = getCombinedWarpRoutePath('ETH', [
|
|
42
|
+
CHAIN_NAME_2,
|
|
43
|
+
CHAIN_NAME_3,
|
|
44
|
+
]);
|
|
45
|
+
// Check that chain2 is enrolled in chain1
|
|
46
|
+
const updatedWarpDeployConfig1 = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
47
|
+
const chain2Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
48
|
+
const remoteRouterKeys1 = Object.keys(updatedWarpDeployConfig1[CHAIN_NAME_2].remoteRouters);
|
|
49
|
+
expect(remoteRouterKeys1).to.include(chain2Id);
|
|
50
|
+
// Check that chain1 is enrolled in chain2
|
|
51
|
+
const updatedWarpDeployConfig2 = await readWarpConfig(CHAIN_NAME_3, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
52
|
+
const chain1Id = await getDomainId(CHAIN_NAME_2, ANVIL_KEY);
|
|
53
|
+
const remoteRouterKeys2 = Object.keys(updatedWarpDeployConfig2[CHAIN_NAME_3].remoteRouters);
|
|
54
|
+
expect(remoteRouterKeys2).to.include(chain1Id);
|
|
55
|
+
});
|
|
56
|
+
it('should extend an existing warp route with json strategy', async () => {
|
|
57
|
+
// Read existing config into a file
|
|
58
|
+
const warpConfigPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
59
|
+
await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpConfigPath);
|
|
60
|
+
// Extend with new config
|
|
61
|
+
const config = {
|
|
62
|
+
decimals: 18,
|
|
63
|
+
mailbox: chain2Addresses.mailbox,
|
|
64
|
+
name: 'Ether',
|
|
65
|
+
owner: new Wallet(ANVIL_KEY).address,
|
|
66
|
+
symbol: 'ETH',
|
|
67
|
+
type: TokenType.native,
|
|
68
|
+
};
|
|
69
|
+
await extendWarpConfig({
|
|
70
|
+
chain: CHAIN_NAME_2,
|
|
71
|
+
chainToExtend: CHAIN_NAME_3,
|
|
72
|
+
extendedConfig: config,
|
|
73
|
+
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
74
|
+
warpDeployPath: warpConfigPath,
|
|
75
|
+
strategyUrl: `${EXAMPLES_PATH}/submit/strategy/json-rpc-chain-strategy.yaml`,
|
|
76
|
+
});
|
|
77
|
+
const COMBINED_WARP_CORE_CONFIG_PATH = getCombinedWarpRoutePath('ETH', [
|
|
78
|
+
CHAIN_NAME_2,
|
|
79
|
+
CHAIN_NAME_3,
|
|
80
|
+
]);
|
|
81
|
+
// Check that chain2 is enrolled in chain1
|
|
82
|
+
const updatedWarpDeployConfig1 = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
83
|
+
const chain2Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
84
|
+
const remoteRouterKeys1 = Object.keys(updatedWarpDeployConfig1[CHAIN_NAME_2].remoteRouters);
|
|
85
|
+
expect(remoteRouterKeys1).to.include(chain2Id);
|
|
86
|
+
// Check that chain1 is enrolled in chain2
|
|
87
|
+
const updatedWarpDeployConfig2 = await readWarpConfig(CHAIN_NAME_3, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
88
|
+
const chain1Id = await getDomainId(CHAIN_NAME_2, ANVIL_KEY);
|
|
89
|
+
const remoteRouterKeys2 = Object.keys(updatedWarpDeployConfig2[CHAIN_NAME_3].remoteRouters);
|
|
90
|
+
expect(remoteRouterKeys2).to.include(chain1Id);
|
|
91
|
+
});
|
|
92
|
+
it('should extend an existing warp route and update the owner', async () => {
|
|
93
|
+
const warpDeployPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
94
|
+
// Burn anvil2 owner in config
|
|
95
|
+
const warpDeployConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
96
|
+
warpDeployConfig[CHAIN_NAME_2].owner = E2E_TEST_BURN_ADDRESS;
|
|
97
|
+
// Extend with new config
|
|
98
|
+
const randomOwner = new Wallet(ANVIL_KEY).address;
|
|
99
|
+
const extendedConfig = {
|
|
100
|
+
decimals: 18,
|
|
101
|
+
mailbox: chain2Addresses.mailbox,
|
|
102
|
+
name: 'Ether',
|
|
103
|
+
owner: randomOwner,
|
|
104
|
+
symbol: 'ETH',
|
|
105
|
+
type: TokenType.native,
|
|
106
|
+
};
|
|
107
|
+
// Remove remoteRouters and destinationGas as they are written in readWarpConfig
|
|
108
|
+
warpDeployConfig[CHAIN_NAME_2].remoteRouters = undefined;
|
|
109
|
+
warpDeployConfig[CHAIN_NAME_2].destinationGas = undefined;
|
|
110
|
+
warpDeployConfig[CHAIN_NAME_3] = extendedConfig;
|
|
111
|
+
writeYamlOrJson(warpDeployPath, warpDeployConfig);
|
|
112
|
+
await hyperlaneWarpApply(warpDeployPath, WARP_CORE_CONFIG_PATH_2);
|
|
113
|
+
const COMBINED_WARP_CORE_CONFIG_PATH = getCombinedWarpRoutePath('ETH', [
|
|
114
|
+
CHAIN_NAME_2,
|
|
115
|
+
CHAIN_NAME_3,
|
|
116
|
+
]);
|
|
117
|
+
const updatedWarpDeployConfig_2 = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpDeployPath);
|
|
118
|
+
const updatedWarpDeployConfig_3 = await readWarpConfig(CHAIN_NAME_3, COMBINED_WARP_CORE_CONFIG_PATH, warpDeployPath);
|
|
119
|
+
// Check that anvil2 owner is burned
|
|
120
|
+
expect(updatedWarpDeployConfig_2.anvil2.owner).to.equal(E2E_TEST_BURN_ADDRESS);
|
|
121
|
+
// Also, anvil3 owner is not burned
|
|
122
|
+
expect(updatedWarpDeployConfig_3.anvil3.owner).to.equal(randomOwner);
|
|
123
|
+
// Check that both chains enrolled
|
|
124
|
+
const chain2Id = await getDomainId(CHAIN_NAME_2, ANVIL_KEY);
|
|
125
|
+
const chain3Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
126
|
+
const remoteRouterKeys2 = Object.keys(updatedWarpDeployConfig_2[CHAIN_NAME_2].remoteRouters);
|
|
127
|
+
const remoteRouterKeys3 = Object.keys(updatedWarpDeployConfig_3[CHAIN_NAME_3].remoteRouters);
|
|
128
|
+
expect(remoteRouterKeys2).to.include(chain3Id);
|
|
129
|
+
expect(remoteRouterKeys3).to.include(chain2Id);
|
|
130
|
+
});
|
|
131
|
+
it('should extend an existing warp route and update all destination domains', async () => {
|
|
132
|
+
// Read existing config into a file
|
|
133
|
+
const warpConfigPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
134
|
+
const warpDeployConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpConfigPath);
|
|
135
|
+
warpDeployConfig[CHAIN_NAME_2].gas = 7777;
|
|
136
|
+
// Extend with new config
|
|
137
|
+
const GAS = 694200;
|
|
138
|
+
const extendedConfig = {
|
|
139
|
+
decimals: 18,
|
|
140
|
+
mailbox: chain2Addresses.mailbox,
|
|
141
|
+
name: 'Ether',
|
|
142
|
+
owner: new Wallet(ANVIL_KEY).address,
|
|
143
|
+
symbol: 'ETH',
|
|
144
|
+
type: TokenType.native,
|
|
145
|
+
gas: GAS,
|
|
146
|
+
};
|
|
147
|
+
// Remove remoteRouters and destinationGas as they are written in readWarpConfig
|
|
148
|
+
warpDeployConfig[CHAIN_NAME_2].remoteRouters = undefined;
|
|
149
|
+
warpDeployConfig[CHAIN_NAME_2].destinationGas = undefined;
|
|
150
|
+
warpDeployConfig[CHAIN_NAME_3] = extendedConfig;
|
|
151
|
+
writeYamlOrJson(warpConfigPath, warpDeployConfig);
|
|
152
|
+
await hyperlaneWarpApply(warpConfigPath, WARP_CORE_CONFIG_PATH_2);
|
|
153
|
+
const COMBINED_WARP_CORE_CONFIG_PATH = getCombinedWarpRoutePath('ETH', [
|
|
154
|
+
CHAIN_NAME_2,
|
|
155
|
+
CHAIN_NAME_3,
|
|
156
|
+
]);
|
|
157
|
+
// Check that chain2 is enrolled in chain1
|
|
158
|
+
const updatedWarpDeployConfig_2 = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
159
|
+
const chain2Id = await getDomainId(CHAIN_NAME_2, ANVIL_KEY);
|
|
160
|
+
const chain3Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
161
|
+
// Destination gas should be set in the existing chain (chain2) to include the extended chain (chain3)
|
|
162
|
+
const destinationGas_2 = updatedWarpDeployConfig_2[CHAIN_NAME_2].destinationGas;
|
|
163
|
+
expect(Object.keys(destinationGas_2)).to.include(chain3Id);
|
|
164
|
+
expect(destinationGas_2[chain3Id]).to.equal(GAS.toString());
|
|
165
|
+
// Destination gas should be set for the extended chain (chain3)
|
|
166
|
+
const updatedWarpDeployConfig_3 = await readWarpConfig(CHAIN_NAME_3, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
167
|
+
const destinationGas_3 = updatedWarpDeployConfig_3[CHAIN_NAME_3].destinationGas;
|
|
168
|
+
expect(Object.keys(destinationGas_3)).to.include(chain2Id);
|
|
169
|
+
expect(destinationGas_3[chain2Id]).to.equal('7777');
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
//# sourceMappingURL=warp-extend-basic.e2e-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warp-extend-basic.e2e-test.js","sourceRoot":"","sources":["../../../../src/tests/warp/warp-extend-basic.e2e-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warp-extend-config.e2e-test.d.ts","sourceRoot":"","sources":["../../../../src/tests/warp/warp-extend-config.e2e-test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { Wallet } from 'ethers';
|
|
3
|
+
import { TokenType, normalizeConfig, randomAddress, } from '@hyperlane-xyz/sdk';
|
|
4
|
+
import { readYamlOrJson, writeYamlOrJson } from '../../utils/files.js';
|
|
5
|
+
import { ANVIL_KEY, CHAIN_NAME_2, CHAIN_NAME_3, CORE_CONFIG_PATH, DEFAULT_E2E_TEST_TIMEOUT, TEMP_PATH, WARP_CONFIG_PATH_2, WARP_CONFIG_PATH_EXAMPLE, WARP_CORE_CONFIG_PATH_2, deployOrUseExistingCore, extendWarpConfig, getDomainId, } from '../commands/helpers.js';
|
|
6
|
+
import { hyperlaneWarpApply, hyperlaneWarpDeploy, readWarpConfig, } from '../commands/warp.js';
|
|
7
|
+
describe('hyperlane warp apply config extension tests', async function () {
|
|
8
|
+
this.timeout(2 * DEFAULT_E2E_TEST_TIMEOUT);
|
|
9
|
+
let chain2Addresses = {};
|
|
10
|
+
before(async function () {
|
|
11
|
+
await deployOrUseExistingCore(CHAIN_NAME_2, CORE_CONFIG_PATH, ANVIL_KEY);
|
|
12
|
+
chain2Addresses = await deployOrUseExistingCore(CHAIN_NAME_3, CORE_CONFIG_PATH, ANVIL_KEY);
|
|
13
|
+
// Create a new warp config using the example
|
|
14
|
+
const warpConfig = readYamlOrJson(WARP_CONFIG_PATH_EXAMPLE);
|
|
15
|
+
const anvil2Config = { anvil2: { ...warpConfig.anvil1 } };
|
|
16
|
+
writeYamlOrJson(WARP_CONFIG_PATH_2, anvil2Config);
|
|
17
|
+
});
|
|
18
|
+
beforeEach(async function () {
|
|
19
|
+
await hyperlaneWarpDeploy(WARP_CONFIG_PATH_2);
|
|
20
|
+
});
|
|
21
|
+
it('should update destination gas configuration', async () => {
|
|
22
|
+
const warpDeployPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
23
|
+
// Extend with new config
|
|
24
|
+
const config = {
|
|
25
|
+
decimals: 18,
|
|
26
|
+
mailbox: chain2Addresses.mailbox,
|
|
27
|
+
name: 'Ether',
|
|
28
|
+
owner: new Wallet(ANVIL_KEY).address,
|
|
29
|
+
symbol: 'ETH',
|
|
30
|
+
type: TokenType.native,
|
|
31
|
+
};
|
|
32
|
+
await extendWarpConfig({
|
|
33
|
+
chain: CHAIN_NAME_2,
|
|
34
|
+
chainToExtend: CHAIN_NAME_3,
|
|
35
|
+
extendedConfig: config,
|
|
36
|
+
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
37
|
+
warpDeployPath,
|
|
38
|
+
});
|
|
39
|
+
// First read the existing config
|
|
40
|
+
const warpDeployConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
41
|
+
// Get the domain ID for chain 3
|
|
42
|
+
const chain3Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
43
|
+
// Update with new destination gas values
|
|
44
|
+
warpDeployConfig[CHAIN_NAME_2].destinationGas = {
|
|
45
|
+
[chain3Id]: '500000', // Set a specific gas value for chain 3
|
|
46
|
+
};
|
|
47
|
+
// Write the updated config
|
|
48
|
+
await writeYamlOrJson(warpDeployPath, warpDeployConfig);
|
|
49
|
+
// Apply the changes
|
|
50
|
+
await hyperlaneWarpApply(warpDeployPath, WARP_CORE_CONFIG_PATH_2);
|
|
51
|
+
// Read back the config to verify changes
|
|
52
|
+
const updatedConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
53
|
+
// Verify the destination gas was updated correctly
|
|
54
|
+
expect(updatedConfig[CHAIN_NAME_2].destinationGas[chain3Id]).to.equal('500000');
|
|
55
|
+
});
|
|
56
|
+
it('should update remote routers configuration', async () => {
|
|
57
|
+
const warpDeployPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
58
|
+
// Extend with new config
|
|
59
|
+
const config = {
|
|
60
|
+
decimals: 18,
|
|
61
|
+
mailbox: chain2Addresses.mailbox,
|
|
62
|
+
name: 'Ether',
|
|
63
|
+
owner: new Wallet(ANVIL_KEY).address,
|
|
64
|
+
symbol: 'ETH',
|
|
65
|
+
type: TokenType.native,
|
|
66
|
+
};
|
|
67
|
+
await extendWarpConfig({
|
|
68
|
+
chain: CHAIN_NAME_2,
|
|
69
|
+
chainToExtend: CHAIN_NAME_3,
|
|
70
|
+
extendedConfig: config,
|
|
71
|
+
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
72
|
+
warpDeployPath,
|
|
73
|
+
});
|
|
74
|
+
// First read the existing config
|
|
75
|
+
const warpDeployConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
76
|
+
// Get the domain ID for chain 3
|
|
77
|
+
const chain3Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
78
|
+
// Generate a new router address to update
|
|
79
|
+
const newRouterAddress = randomAddress();
|
|
80
|
+
// Update with new remote router values
|
|
81
|
+
warpDeployConfig[CHAIN_NAME_2].remoteRouters = {
|
|
82
|
+
[chain3Id]: { address: newRouterAddress }, // Set a new router address for chain 3
|
|
83
|
+
};
|
|
84
|
+
// Write the updated config
|
|
85
|
+
await writeYamlOrJson(warpDeployPath, warpDeployConfig);
|
|
86
|
+
// Apply the changes
|
|
87
|
+
await hyperlaneWarpApply(warpDeployPath, WARP_CORE_CONFIG_PATH_2);
|
|
88
|
+
// Read back the config to verify changes
|
|
89
|
+
const updatedConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
90
|
+
// Verify the remote router was updated correctly
|
|
91
|
+
expect(updatedConfig[CHAIN_NAME_2].remoteRouters[chain3Id].address.toLowerCase()).to.equal(newRouterAddress.toLowerCase());
|
|
92
|
+
});
|
|
93
|
+
it('should preserve deploy config when extending warp route', async () => {
|
|
94
|
+
const warpDeployPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
95
|
+
const warpDeployConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
96
|
+
// Extend with new config for chain 3
|
|
97
|
+
const extendedConfig = {
|
|
98
|
+
decimals: 18,
|
|
99
|
+
mailbox: chain2Addresses.mailbox,
|
|
100
|
+
name: 'Ether',
|
|
101
|
+
owner: new Wallet(ANVIL_KEY).address,
|
|
102
|
+
symbol: 'ETH',
|
|
103
|
+
type: TokenType.native,
|
|
104
|
+
};
|
|
105
|
+
warpDeployConfig[CHAIN_NAME_3] = extendedConfig;
|
|
106
|
+
// Remove remoteRouters and destinationGas as they are written in readWarpConfig
|
|
107
|
+
delete warpDeployConfig[CHAIN_NAME_2].remoteRouters;
|
|
108
|
+
delete warpDeployConfig[CHAIN_NAME_2].destinationGas;
|
|
109
|
+
await writeYamlOrJson(warpDeployPath, warpDeployConfig);
|
|
110
|
+
await hyperlaneWarpApply(warpDeployPath, WARP_CORE_CONFIG_PATH_2);
|
|
111
|
+
const updatedConfig = readYamlOrJson(warpDeployPath);
|
|
112
|
+
expect(normalizeConfig(warpDeployConfig)).to.deep.equal(normalizeConfig(updatedConfig), 'warp deploy config should remain unchanged after extension');
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=warp-extend-config.e2e-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warp-extend-config.e2e-test.js","sourceRoot":"","sources":["../../../../src/tests/warp/warp-extend-config.e2e-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAEL,SAAS,EAET,eAAe,EACf,aAAa,GACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EACL,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,SAAS,EACT,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,QAAQ,CAAC,6CAA6C,EAAE,KAAK;IAC3D,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC;IAE3C,IAAI,eAAe,GAAmB,EAAE,CAAC;IAEzC,MAAM,CAAC,KAAK;QACV,MAAM,uBAAuB,CAAC,YAAY,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC;QACzE,eAAe,GAAG,MAAM,uBAAuB,CAC7C,YAAY,EACZ,gBAAgB,EAChB,SAAS,CACV,CAAC;QAEF,6CAA6C;QAC7C,MAAM,UAAU,GAA0B,cAAc,CACtD,wBAAwB,CACzB,CAAC;QACF,MAAM,YAAY,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1D,eAAe,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK;QACd,MAAM,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,cAAc,GAAG,GAAG,SAAS,+BAA+B,CAAC;QAEnE,yBAAyB;QACzB,MAAM,MAAM,GAAyB;YACnC,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,eAAgB,CAAC,OAAO;YACjC,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO;YACpC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,SAAS,CAAC,MAAM;SACvB,CAAC;QAEF,MAAM,gBAAgB,CAAC;YACrB,KAAK,EAAE,YAAY;YACnB,aAAa,EAAE,YAAY;YAC3B,cAAc,EAAE,MAAM;YACtB,YAAY,EAAE,uBAAuB;YACrC,cAAc;SACf,CAAC,CAAC;QAEH,iCAAiC;QACjC,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAC3C,YAAY,EACZ,uBAAuB,EACvB,cAAc,CACf,CAAC;QAEF,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAE5D,yCAAyC;QACzC,gBAAgB,CAAC,YAAY,CAAC,CAAC,cAAc,GAAG;YAC9C,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,uCAAuC;SAC9D,CAAC;QAEF,2BAA2B;QAC3B,MAAM,eAAe,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAExD,oBAAoB;QACpB,MAAM,kBAAkB,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;QAElE,yCAAyC;QACzC,MAAM,aAAa,GAAG,MAAM,cAAc,CACxC,YAAY,EACZ,uBAAuB,EACvB,cAAc,CACf,CAAC;QAEF,mDAAmD;QACnD,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,cAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACpE,QAAQ,CACT,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,cAAc,GAAG,GAAG,SAAS,+BAA+B,CAAC;QAEnE,yBAAyB;QACzB,MAAM,MAAM,GAAyB;YACnC,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,eAAgB,CAAC,OAAO;YACjC,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO;YACpC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,SAAS,CAAC,MAAM;SACvB,CAAC;QAEF,MAAM,gBAAgB,CAAC;YACrB,KAAK,EAAE,YAAY;YACnB,aAAa,EAAE,YAAY;YAC3B,cAAc,EAAE,MAAM;YACtB,YAAY,EAAE,uBAAuB;YACrC,cAAc;SACf,CAAC,CAAC;QAEH,iCAAiC;QACjC,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAC3C,YAAY,EACZ,uBAAuB,EACvB,cAAc,CACf,CAAC;QAEF,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAE5D,0CAA0C;QAC1C,MAAM,gBAAgB,GAAG,aAAa,EAAE,CAAC;QAEzC,uCAAuC;QACvC,gBAAgB,CAAC,YAAY,CAAC,CAAC,aAAa,GAAG;YAC7C,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,uCAAuC;SACnF,CAAC;QAEF,2BAA2B;QAC3B,MAAM,eAAe,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAExD,oBAAoB;QACpB,MAAM,kBAAkB,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;QAElE,yCAAyC;QACzC,MAAM,aAAa,GAAG,MAAM,cAAc,CACxC,YAAY,EACZ,uBAAuB,EACvB,cAAc,CACf,CAAC;QAEF,iDAAiD;QACjD,MAAM,CACJ,aAAa,CAAC,YAAY,CAAC,CAAC,aAAc,CACxC,QAAQ,CACT,CAAC,OAAO,CAAC,WAAW,EAAE,CACxB,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,cAAc,GAAG,GAAG,SAAS,+BAA+B,CAAC;QAEnE,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAC3C,YAAY,EACZ,uBAAuB,EACvB,cAAc,CACf,CAAC;QAEF,qCAAqC;QACrC,MAAM,cAAc,GAAyB;YAC3C,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,eAAgB,CAAC,OAAO;YACjC,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO;YACpC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,SAAS,CAAC,MAAM;SACvB,CAAC;QAEF,gBAAgB,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC;QAChD,gFAAgF;QAChF,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC;QACpD,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC;QACrD,MAAM,eAAe,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QACxD,MAAM,kBAAkB,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;QAElE,MAAM,aAAa,GAA0B,cAAc,CAAC,cAAc,CAAC,CAAC;QAE5E,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CACrD,eAAe,CAAC,aAAa,CAAC,EAC9B,4DAA4D,CAC7D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warp-extend-recovery.e2e-test.d.ts","sourceRoot":"","sources":["../../../../src/tests/warp/warp-extend-recovery.e2e-test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { Wallet } from 'ethers';
|
|
3
|
+
import { TokenRouter__factory } from '@hyperlane-xyz/core';
|
|
4
|
+
import { TokenType, } from '@hyperlane-xyz/sdk';
|
|
5
|
+
import { getContext } from '../../context/context.js';
|
|
6
|
+
import { readYamlOrJson, writeYamlOrJson } from '../../utils/files.js';
|
|
7
|
+
import { ANVIL_KEY, CHAIN_NAME_2, CHAIN_NAME_3, CORE_CONFIG_PATH, DEFAULT_E2E_TEST_TIMEOUT, REGISTRY_PATH, TEMP_PATH, WARP_CONFIG_PATH_2, WARP_CONFIG_PATH_EXAMPLE, WARP_CORE_CONFIG_PATH_2, deployOrUseExistingCore, extendWarpConfig, getCombinedWarpRoutePath, getDomainId, setupIncompleteWarpRouteExtension, } from '../commands/helpers.js';
|
|
8
|
+
import { hyperlaneWarpDeploy, readWarpConfig } from '../commands/warp.js';
|
|
9
|
+
describe('hyperlane warp apply recovery extension tests', async function () {
|
|
10
|
+
this.timeout(2 * DEFAULT_E2E_TEST_TIMEOUT);
|
|
11
|
+
let chain2Addresses = {};
|
|
12
|
+
before(async function () {
|
|
13
|
+
await deployOrUseExistingCore(CHAIN_NAME_2, CORE_CONFIG_PATH, ANVIL_KEY);
|
|
14
|
+
chain2Addresses = await deployOrUseExistingCore(CHAIN_NAME_3, CORE_CONFIG_PATH, ANVIL_KEY);
|
|
15
|
+
// Create a new warp config using the example
|
|
16
|
+
const warpConfig = readYamlOrJson(WARP_CONFIG_PATH_EXAMPLE);
|
|
17
|
+
const anvil2Config = { anvil2: { ...warpConfig.anvil1 } };
|
|
18
|
+
writeYamlOrJson(WARP_CONFIG_PATH_2, anvil2Config);
|
|
19
|
+
});
|
|
20
|
+
beforeEach(async function () {
|
|
21
|
+
await hyperlaneWarpDeploy(WARP_CONFIG_PATH_2);
|
|
22
|
+
});
|
|
23
|
+
it('should recover and re-enroll routers after direct contract-level unenrollment through TokenRouter interface', async () => {
|
|
24
|
+
const { multiProvider } = await getContext({
|
|
25
|
+
registryUris: [REGISTRY_PATH],
|
|
26
|
+
key: ANVIL_KEY,
|
|
27
|
+
});
|
|
28
|
+
const warpConfigPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
29
|
+
// Initial setup with chain3 using extendWarpConfig
|
|
30
|
+
await extendWarpConfig({
|
|
31
|
+
chain: CHAIN_NAME_2,
|
|
32
|
+
chainToExtend: CHAIN_NAME_3,
|
|
33
|
+
extendedConfig: {
|
|
34
|
+
decimals: 18,
|
|
35
|
+
mailbox: chain2Addresses.mailbox,
|
|
36
|
+
name: 'Ether',
|
|
37
|
+
owner: new Wallet(ANVIL_KEY).address,
|
|
38
|
+
symbol: 'ETH',
|
|
39
|
+
type: TokenType.native,
|
|
40
|
+
},
|
|
41
|
+
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
42
|
+
warpDeployPath: warpConfigPath,
|
|
43
|
+
});
|
|
44
|
+
const COMBINED_WARP_CORE_CONFIG_PATH = getCombinedWarpRoutePath('ETH', [
|
|
45
|
+
CHAIN_NAME_2,
|
|
46
|
+
CHAIN_NAME_3,
|
|
47
|
+
]);
|
|
48
|
+
const warpCoreConfig = readYamlOrJson(COMBINED_WARP_CORE_CONFIG_PATH);
|
|
49
|
+
const deployedTokenRoute = warpCoreConfig.tokens.find((t) => t.chainName === CHAIN_NAME_2)?.addressOrDenom;
|
|
50
|
+
if (!deployedTokenRoute) {
|
|
51
|
+
throw new Error('Failed to find deployed token route address');
|
|
52
|
+
}
|
|
53
|
+
// Manually call unenrollRemoteRouters
|
|
54
|
+
const chain3Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
55
|
+
const tokenRouter = TokenRouter__factory.connect(deployedTokenRoute, new Wallet(ANVIL_KEY).connect(multiProvider.getProvider(CHAIN_NAME_2)));
|
|
56
|
+
await tokenRouter.unenrollRemoteRouters([chain3Id]);
|
|
57
|
+
// Verify the router was unenrolled
|
|
58
|
+
const beforeRecoveryConfig = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
59
|
+
expect(Object.keys(beforeRecoveryConfig[CHAIN_NAME_2].remoteRouters || {})).to.not.include(chain3Id.toString());
|
|
60
|
+
// Re-extend to fix the configuration
|
|
61
|
+
await extendWarpConfig({
|
|
62
|
+
chain: CHAIN_NAME_2,
|
|
63
|
+
chainToExtend: CHAIN_NAME_3,
|
|
64
|
+
extendedConfig: {
|
|
65
|
+
decimals: 18,
|
|
66
|
+
mailbox: chain2Addresses.mailbox,
|
|
67
|
+
name: 'Ether',
|
|
68
|
+
owner: new Wallet(ANVIL_KEY).address,
|
|
69
|
+
symbol: 'ETH',
|
|
70
|
+
type: TokenType.native,
|
|
71
|
+
},
|
|
72
|
+
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
73
|
+
warpDeployPath: warpConfigPath,
|
|
74
|
+
});
|
|
75
|
+
const recoveredConfig = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
76
|
+
expect(Object.keys(recoveredConfig[CHAIN_NAME_2].remoteRouters)).to.include(chain3Id.toString());
|
|
77
|
+
});
|
|
78
|
+
it('should complete warp route extension when previous attempt left incomplete enrollment or destination gas settings (second attempt on new combined config)', async () => {
|
|
79
|
+
const { chain2DomainId, chain3DomainId, warpConfigPath, configToExtend, combinedWarpCorePath, } = await setupIncompleteWarpRouteExtension(chain2Addresses);
|
|
80
|
+
// Verify initial state - neither chain should be enrolled in the other
|
|
81
|
+
const initialConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
82
|
+
const initialConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
83
|
+
// Check remote routers initial state
|
|
84
|
+
expect(Object.keys(initialConfig2[CHAIN_NAME_2].remoteRouters)).to.not.include(chain3DomainId);
|
|
85
|
+
expect(Object.keys(initialConfig3[CHAIN_NAME_3].remoteRouters)).to.not.include(chain2DomainId);
|
|
86
|
+
// Check destination gas initial state
|
|
87
|
+
expect(Object.keys(initialConfig2[CHAIN_NAME_2].destinationGas || {})).to.not.include(chain3DomainId);
|
|
88
|
+
expect(Object.keys(initialConfig3[CHAIN_NAME_3].destinationGas || {})).to.not.include(chain2DomainId);
|
|
89
|
+
// Complete the extension
|
|
90
|
+
await extendWarpConfig({
|
|
91
|
+
chain: CHAIN_NAME_2,
|
|
92
|
+
chainToExtend: CHAIN_NAME_3,
|
|
93
|
+
extendedConfig: configToExtend,
|
|
94
|
+
warpCorePath: combinedWarpCorePath,
|
|
95
|
+
warpDeployPath: warpConfigPath,
|
|
96
|
+
});
|
|
97
|
+
// Verify both chains are now properly configured
|
|
98
|
+
const finalConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
99
|
+
const finalConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
100
|
+
// Check remote routers final state
|
|
101
|
+
expect(Object.keys(finalConfig2[CHAIN_NAME_2].remoteRouters)).to.include(chain3DomainId);
|
|
102
|
+
expect(Object.keys(finalConfig3[CHAIN_NAME_3].remoteRouters)).to.include(chain2DomainId);
|
|
103
|
+
// Check destination gas final state
|
|
104
|
+
expect(Object.keys(finalConfig2[CHAIN_NAME_2].destinationGas)).to.include(chain3DomainId);
|
|
105
|
+
expect(Object.keys(finalConfig3[CHAIN_NAME_3].destinationGas)).to.include(chain2DomainId);
|
|
106
|
+
});
|
|
107
|
+
it('should complete warp route extension when previous attempt left incomplete enrollment or destination gas settings (second attempt with same config)', async () => {
|
|
108
|
+
const { chain2DomainId, chain3DomainId, warpConfigPath, configToExtend, combinedWarpCorePath, } = await setupIncompleteWarpRouteExtension(chain2Addresses);
|
|
109
|
+
// Verify initial state - neither chain should be enrolled in the other
|
|
110
|
+
const initialConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
111
|
+
const initialConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
112
|
+
// Check remote routers initial state
|
|
113
|
+
expect(Object.keys(initialConfig2[CHAIN_NAME_2].remoteRouters)).to.not.include(chain3DomainId);
|
|
114
|
+
expect(Object.keys(initialConfig3[CHAIN_NAME_3].remoteRouters)).to.not.include(chain2DomainId);
|
|
115
|
+
// Check destination gas initial state
|
|
116
|
+
expect(Object.keys(initialConfig2[CHAIN_NAME_2].destinationGas || {})).to.not.include(chain3DomainId);
|
|
117
|
+
expect(Object.keys(initialConfig3[CHAIN_NAME_3].destinationGas || {})).to.not.include(chain2DomainId);
|
|
118
|
+
// Complete the extension
|
|
119
|
+
await extendWarpConfig({
|
|
120
|
+
chain: CHAIN_NAME_2,
|
|
121
|
+
chainToExtend: CHAIN_NAME_3,
|
|
122
|
+
extendedConfig: configToExtend,
|
|
123
|
+
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
124
|
+
warpDeployPath: combinedWarpCorePath,
|
|
125
|
+
});
|
|
126
|
+
// Verify both chains are now properly configured
|
|
127
|
+
const finalConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
128
|
+
const finalConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
129
|
+
// Check remote routers final state
|
|
130
|
+
expect(Object.keys(finalConfig2[CHAIN_NAME_2].remoteRouters)).to.include(chain3DomainId);
|
|
131
|
+
expect(Object.keys(finalConfig3[CHAIN_NAME_3].remoteRouters)).to.include(chain2DomainId);
|
|
132
|
+
// Check destination gas final state
|
|
133
|
+
expect(Object.keys(finalConfig2[CHAIN_NAME_2].destinationGas)).to.include(chain3DomainId);
|
|
134
|
+
expect(Object.keys(finalConfig3[CHAIN_NAME_3].destinationGas)).to.include(chain2DomainId);
|
|
135
|
+
});
|
|
136
|
+
it('should set correct gas values when completing warp route extension', async () => {
|
|
137
|
+
const { chain2DomainId, chain3DomainId, warpConfigPath, configToExtend, combinedWarpCorePath, } = await setupIncompleteWarpRouteExtension(chain2Addresses);
|
|
138
|
+
// Verify initial state - gas values should not be set
|
|
139
|
+
const initialConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
140
|
+
const initialConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
141
|
+
// Check initial gas values
|
|
142
|
+
expect(initialConfig2[CHAIN_NAME_2].destinationGas?.[chain3DomainId]).to.be
|
|
143
|
+
.undefined;
|
|
144
|
+
expect(initialConfig3[CHAIN_NAME_3].destinationGas?.[chain2DomainId]).to.be
|
|
145
|
+
.undefined;
|
|
146
|
+
// Set specific gas values for the extension
|
|
147
|
+
const customGasValue = '300000';
|
|
148
|
+
configToExtend.gas = parseInt(customGasValue);
|
|
149
|
+
// Complete the extension with custom gas value
|
|
150
|
+
await extendWarpConfig({
|
|
151
|
+
chain: CHAIN_NAME_2,
|
|
152
|
+
chainToExtend: CHAIN_NAME_3,
|
|
153
|
+
extendedConfig: configToExtend,
|
|
154
|
+
warpCorePath: combinedWarpCorePath,
|
|
155
|
+
warpDeployPath: warpConfigPath,
|
|
156
|
+
});
|
|
157
|
+
// Verify gas values are correctly set after extension
|
|
158
|
+
const finalConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
159
|
+
const finalConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
160
|
+
// Check gas value is set correctly
|
|
161
|
+
expect(finalConfig2[CHAIN_NAME_2].destinationGas[chain3DomainId]).to.equal(customGasValue);
|
|
162
|
+
// Verify remote routers are also properly set
|
|
163
|
+
expect(Object.keys(finalConfig2[CHAIN_NAME_2].remoteRouters)).to.include(chain3DomainId);
|
|
164
|
+
expect(Object.keys(finalConfig3[CHAIN_NAME_3].remoteRouters)).to.include(chain2DomainId);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=warp-extend-recovery.e2e-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warp-extend-recovery.e2e-test.js","sourceRoot":"","sources":["../../../../src/tests/warp/warp-extend-recovery.e2e-test.ts"],"names":[],"mappings":"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"}
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "
|
|
1
|
+
export declare const VERSION = "10.0.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAC"}
|
package/dist/src/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = '
|
|
1
|
+
export const VERSION = '10.0.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/dist/src/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hyperlane-xyz/cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.0",
|
|
4
4
|
"description": "A command-line utility for common Hyperlane operations",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@aws-sdk/client-kms": "^3.577.0",
|
|
7
7
|
"@aws-sdk/client-s3": "^3.577.0",
|
|
8
8
|
"@hyperlane-xyz/registry": "11.1.0",
|
|
9
|
-
"@hyperlane-xyz/sdk": "
|
|
10
|
-
"@hyperlane-xyz/utils": "
|
|
9
|
+
"@hyperlane-xyz/sdk": "10.0.0",
|
|
10
|
+
"@hyperlane-xyz/utils": "10.0.0",
|
|
11
11
|
"@inquirer/core": "9.0.10",
|
|
12
12
|
"@inquirer/figures": "1.0.5",
|
|
13
13
|
"@inquirer/prompts": "3.3.2",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"warp-apply-extend.e2e-test.d.ts","sourceRoot":"","sources":["../../../../src/tests/warp/warp-apply-extend.e2e-test.ts"],"names":[],"mappings":""}
|
|
@@ -1,410 +0,0 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import { Wallet } from 'ethers';
|
|
3
|
-
import { TokenRouter__factory } from '@hyperlane-xyz/core';
|
|
4
|
-
import { TokenType, normalizeConfig, randomAddress, } from '@hyperlane-xyz/sdk';
|
|
5
|
-
import { getContext } from '../../context/context.js';
|
|
6
|
-
import { readYamlOrJson, writeYamlOrJson } from '../../utils/files.js';
|
|
7
|
-
import { ANVIL_KEY, CHAIN_NAME_2, CHAIN_NAME_3, CORE_CONFIG_PATH, DEFAULT_E2E_TEST_TIMEOUT, E2E_TEST_BURN_ADDRESS, EXAMPLES_PATH, REGISTRY_PATH, TEMP_PATH, WARP_CONFIG_PATH_2, WARP_CONFIG_PATH_EXAMPLE, WARP_CORE_CONFIG_PATH_2, deployOrUseExistingCore, extendWarpConfig, getCombinedWarpRoutePath, getDomainId, setupIncompleteWarpRouteExtension, } from '../commands/helpers.js';
|
|
8
|
-
import { hyperlaneWarpApply, hyperlaneWarpDeploy, readWarpConfig, } from '../commands/warp.js';
|
|
9
|
-
describe('hyperlane warp apply warp route extension tests', async function () {
|
|
10
|
-
this.timeout(2 * DEFAULT_E2E_TEST_TIMEOUT);
|
|
11
|
-
let chain2Addresses = {};
|
|
12
|
-
before(async function () {
|
|
13
|
-
await deployOrUseExistingCore(CHAIN_NAME_2, CORE_CONFIG_PATH, ANVIL_KEY);
|
|
14
|
-
chain2Addresses = await deployOrUseExistingCore(CHAIN_NAME_3, CORE_CONFIG_PATH, ANVIL_KEY);
|
|
15
|
-
// Create a new warp config using the example
|
|
16
|
-
const warpConfig = readYamlOrJson(WARP_CONFIG_PATH_EXAMPLE);
|
|
17
|
-
const anvil2Config = { anvil2: { ...warpConfig.anvil1 } };
|
|
18
|
-
writeYamlOrJson(WARP_CONFIG_PATH_2, anvil2Config);
|
|
19
|
-
});
|
|
20
|
-
beforeEach(async function () {
|
|
21
|
-
await hyperlaneWarpDeploy(WARP_CONFIG_PATH_2);
|
|
22
|
-
});
|
|
23
|
-
it('should extend an existing warp route', async () => {
|
|
24
|
-
// Read existing config into a file
|
|
25
|
-
const warpConfigPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
26
|
-
await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpConfigPath);
|
|
27
|
-
// Extend with new config
|
|
28
|
-
const config = {
|
|
29
|
-
decimals: 18,
|
|
30
|
-
mailbox: chain2Addresses.mailbox,
|
|
31
|
-
name: 'Ether',
|
|
32
|
-
owner: new Wallet(ANVIL_KEY).address,
|
|
33
|
-
symbol: 'ETH',
|
|
34
|
-
type: TokenType.native,
|
|
35
|
-
};
|
|
36
|
-
await extendWarpConfig({
|
|
37
|
-
chain: CHAIN_NAME_2,
|
|
38
|
-
chainToExtend: CHAIN_NAME_3,
|
|
39
|
-
extendedConfig: config,
|
|
40
|
-
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
41
|
-
warpDeployPath: warpConfigPath,
|
|
42
|
-
});
|
|
43
|
-
const COMBINED_WARP_CORE_CONFIG_PATH = getCombinedWarpRoutePath('ETH', [
|
|
44
|
-
CHAIN_NAME_2,
|
|
45
|
-
CHAIN_NAME_3,
|
|
46
|
-
]);
|
|
47
|
-
// Check that chain2 is enrolled in chain1
|
|
48
|
-
const updatedWarpDeployConfig1 = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
49
|
-
const chain2Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
50
|
-
const remoteRouterKeys1 = Object.keys(updatedWarpDeployConfig1[CHAIN_NAME_2].remoteRouters);
|
|
51
|
-
expect(remoteRouterKeys1).to.include(chain2Id);
|
|
52
|
-
// Check that chain1 is enrolled in chain2
|
|
53
|
-
const updatedWarpDeployConfig2 = await readWarpConfig(CHAIN_NAME_3, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
54
|
-
const chain1Id = await getDomainId(CHAIN_NAME_2, ANVIL_KEY);
|
|
55
|
-
const remoteRouterKeys2 = Object.keys(updatedWarpDeployConfig2[CHAIN_NAME_3].remoteRouters);
|
|
56
|
-
expect(remoteRouterKeys2).to.include(chain1Id);
|
|
57
|
-
});
|
|
58
|
-
it('should extend an existing warp route with json strategy', async () => {
|
|
59
|
-
// Read existing config into a file
|
|
60
|
-
const warpConfigPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
61
|
-
await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpConfigPath);
|
|
62
|
-
// Extend with new config
|
|
63
|
-
const config = {
|
|
64
|
-
decimals: 18,
|
|
65
|
-
mailbox: chain2Addresses.mailbox,
|
|
66
|
-
name: 'Ether',
|
|
67
|
-
owner: new Wallet(ANVIL_KEY).address,
|
|
68
|
-
symbol: 'ETH',
|
|
69
|
-
type: TokenType.native,
|
|
70
|
-
};
|
|
71
|
-
await extendWarpConfig({
|
|
72
|
-
chain: CHAIN_NAME_2,
|
|
73
|
-
chainToExtend: CHAIN_NAME_3,
|
|
74
|
-
extendedConfig: config,
|
|
75
|
-
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
76
|
-
warpDeployPath: warpConfigPath,
|
|
77
|
-
strategyUrl: `${EXAMPLES_PATH}/submit/strategy/json-rpc-chain-strategy.yaml`,
|
|
78
|
-
});
|
|
79
|
-
const COMBINED_WARP_CORE_CONFIG_PATH = getCombinedWarpRoutePath('ETH', [
|
|
80
|
-
CHAIN_NAME_2,
|
|
81
|
-
CHAIN_NAME_3,
|
|
82
|
-
]);
|
|
83
|
-
// Check that chain2 is enrolled in chain1
|
|
84
|
-
const updatedWarpDeployConfig1 = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
85
|
-
const chain2Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
86
|
-
const remoteRouterKeys1 = Object.keys(updatedWarpDeployConfig1[CHAIN_NAME_2].remoteRouters);
|
|
87
|
-
expect(remoteRouterKeys1).to.include(chain2Id);
|
|
88
|
-
// Check that chain1 is enrolled in chain2
|
|
89
|
-
const updatedWarpDeployConfig2 = await readWarpConfig(CHAIN_NAME_3, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
90
|
-
const chain1Id = await getDomainId(CHAIN_NAME_2, ANVIL_KEY);
|
|
91
|
-
const remoteRouterKeys2 = Object.keys(updatedWarpDeployConfig2[CHAIN_NAME_3].remoteRouters);
|
|
92
|
-
expect(remoteRouterKeys2).to.include(chain1Id);
|
|
93
|
-
});
|
|
94
|
-
it('should extend an existing warp route and update the owner', async () => {
|
|
95
|
-
const warpDeployPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
96
|
-
// Burn anvil2 owner in config
|
|
97
|
-
const warpDeployConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
98
|
-
warpDeployConfig[CHAIN_NAME_2].owner = E2E_TEST_BURN_ADDRESS;
|
|
99
|
-
// Extend with new config
|
|
100
|
-
const randomOwner = new Wallet(ANVIL_KEY).address;
|
|
101
|
-
const extendedConfig = {
|
|
102
|
-
decimals: 18,
|
|
103
|
-
mailbox: chain2Addresses.mailbox,
|
|
104
|
-
name: 'Ether',
|
|
105
|
-
owner: randomOwner,
|
|
106
|
-
symbol: 'ETH',
|
|
107
|
-
type: TokenType.native,
|
|
108
|
-
};
|
|
109
|
-
// Remove remoteRouters and destinationGas as they are written in readWarpConfig
|
|
110
|
-
warpDeployConfig[CHAIN_NAME_2].remoteRouters = undefined;
|
|
111
|
-
warpDeployConfig[CHAIN_NAME_2].destinationGas = undefined;
|
|
112
|
-
warpDeployConfig[CHAIN_NAME_3] = extendedConfig;
|
|
113
|
-
writeYamlOrJson(warpDeployPath, warpDeployConfig);
|
|
114
|
-
await hyperlaneWarpApply(warpDeployPath, WARP_CORE_CONFIG_PATH_2);
|
|
115
|
-
const COMBINED_WARP_CORE_CONFIG_PATH = getCombinedWarpRoutePath('ETH', [
|
|
116
|
-
CHAIN_NAME_2,
|
|
117
|
-
CHAIN_NAME_3,
|
|
118
|
-
]);
|
|
119
|
-
const updatedWarpDeployConfig_2 = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpDeployPath);
|
|
120
|
-
const updatedWarpDeployConfig_3 = await readWarpConfig(CHAIN_NAME_3, COMBINED_WARP_CORE_CONFIG_PATH, warpDeployPath);
|
|
121
|
-
// Check that anvil2 owner is burned
|
|
122
|
-
expect(updatedWarpDeployConfig_2.anvil2.owner).to.equal(E2E_TEST_BURN_ADDRESS);
|
|
123
|
-
// Also, anvil3 owner is not burned
|
|
124
|
-
expect(updatedWarpDeployConfig_3.anvil3.owner).to.equal(randomOwner);
|
|
125
|
-
// Check that both chains enrolled
|
|
126
|
-
const chain2Id = await getDomainId(CHAIN_NAME_2, ANVIL_KEY);
|
|
127
|
-
const chain3Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
128
|
-
const remoteRouterKeys2 = Object.keys(updatedWarpDeployConfig_2[CHAIN_NAME_2].remoteRouters);
|
|
129
|
-
const remoteRouterKeys3 = Object.keys(updatedWarpDeployConfig_3[CHAIN_NAME_3].remoteRouters);
|
|
130
|
-
expect(remoteRouterKeys2).to.include(chain3Id);
|
|
131
|
-
expect(remoteRouterKeys3).to.include(chain2Id);
|
|
132
|
-
});
|
|
133
|
-
it('should extend an existing warp route and update all destination domains', async () => {
|
|
134
|
-
// Read existing config into a file
|
|
135
|
-
const warpConfigPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
136
|
-
const warpDeployConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpConfigPath);
|
|
137
|
-
warpDeployConfig[CHAIN_NAME_2].gas = 7777;
|
|
138
|
-
// Extend with new config
|
|
139
|
-
const GAS = 694200;
|
|
140
|
-
const extendedConfig = {
|
|
141
|
-
decimals: 18,
|
|
142
|
-
mailbox: chain2Addresses.mailbox,
|
|
143
|
-
name: 'Ether',
|
|
144
|
-
owner: new Wallet(ANVIL_KEY).address,
|
|
145
|
-
symbol: 'ETH',
|
|
146
|
-
type: TokenType.native,
|
|
147
|
-
gas: GAS,
|
|
148
|
-
};
|
|
149
|
-
// Remove remoteRouters and destinationGas as they are written in readWarpConfig
|
|
150
|
-
warpDeployConfig[CHAIN_NAME_2].remoteRouters = undefined;
|
|
151
|
-
warpDeployConfig[CHAIN_NAME_2].destinationGas = undefined;
|
|
152
|
-
warpDeployConfig[CHAIN_NAME_3] = extendedConfig;
|
|
153
|
-
writeYamlOrJson(warpConfigPath, warpDeployConfig);
|
|
154
|
-
await hyperlaneWarpApply(warpConfigPath, WARP_CORE_CONFIG_PATH_2);
|
|
155
|
-
const COMBINED_WARP_CORE_CONFIG_PATH = getCombinedWarpRoutePath('ETH', [
|
|
156
|
-
CHAIN_NAME_2,
|
|
157
|
-
CHAIN_NAME_3,
|
|
158
|
-
]);
|
|
159
|
-
// Check that chain2 is enrolled in chain1
|
|
160
|
-
const updatedWarpDeployConfig_2 = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
161
|
-
const chain2Id = await getDomainId(CHAIN_NAME_2, ANVIL_KEY);
|
|
162
|
-
const chain3Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
163
|
-
// Destination gas should be set in the existing chain (chain2) to include the extended chain (chain3)
|
|
164
|
-
const destinationGas_2 = updatedWarpDeployConfig_2[CHAIN_NAME_2].destinationGas;
|
|
165
|
-
expect(Object.keys(destinationGas_2)).to.include(chain3Id);
|
|
166
|
-
expect(destinationGas_2[chain3Id]).to.equal(GAS.toString());
|
|
167
|
-
// Destination gas should be set for the extended chain (chain3)
|
|
168
|
-
const updatedWarpDeployConfig_3 = await readWarpConfig(CHAIN_NAME_3, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
169
|
-
const destinationGas_3 = updatedWarpDeployConfig_3[CHAIN_NAME_3].destinationGas;
|
|
170
|
-
expect(Object.keys(destinationGas_3)).to.include(chain2Id);
|
|
171
|
-
expect(destinationGas_3[chain2Id]).to.equal('7777');
|
|
172
|
-
});
|
|
173
|
-
it('should recover and re-enroll routers after direct contract-level unenrollment through TokenRouter interface (without having to specify the router table manually)', async () => {
|
|
174
|
-
const { multiProvider } = await getContext({
|
|
175
|
-
registryUris: [REGISTRY_PATH],
|
|
176
|
-
key: ANVIL_KEY,
|
|
177
|
-
});
|
|
178
|
-
const warpConfigPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
179
|
-
// Initial setup with chain3 using extendWarpConfig
|
|
180
|
-
await extendWarpConfig({
|
|
181
|
-
chain: CHAIN_NAME_2,
|
|
182
|
-
chainToExtend: CHAIN_NAME_3,
|
|
183
|
-
extendedConfig: {
|
|
184
|
-
decimals: 18,
|
|
185
|
-
mailbox: chain2Addresses.mailbox,
|
|
186
|
-
name: 'Ether',
|
|
187
|
-
owner: new Wallet(ANVIL_KEY).address,
|
|
188
|
-
symbol: 'ETH',
|
|
189
|
-
type: TokenType.native,
|
|
190
|
-
},
|
|
191
|
-
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
192
|
-
warpDeployPath: warpConfigPath,
|
|
193
|
-
});
|
|
194
|
-
const COMBINED_WARP_CORE_CONFIG_PATH = getCombinedWarpRoutePath('ETH', [
|
|
195
|
-
CHAIN_NAME_2,
|
|
196
|
-
CHAIN_NAME_3,
|
|
197
|
-
]);
|
|
198
|
-
const warpCoreConfig = readYamlOrJson(COMBINED_WARP_CORE_CONFIG_PATH);
|
|
199
|
-
const deployedTokenRoute = warpCoreConfig.tokens.find((t) => t.chainName === CHAIN_NAME_2)?.addressOrDenom;
|
|
200
|
-
if (!deployedTokenRoute) {
|
|
201
|
-
throw new Error('Failed to find deployed token route address');
|
|
202
|
-
}
|
|
203
|
-
// Manually call unenrollRemoteRouters
|
|
204
|
-
const chain3Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
205
|
-
const tokenRouter = TokenRouter__factory.connect(deployedTokenRoute, new Wallet(ANVIL_KEY).connect(multiProvider.getProvider(CHAIN_NAME_2)));
|
|
206
|
-
await tokenRouter.unenrollRemoteRouters([chain3Id]);
|
|
207
|
-
// Verify the router was unenrolled
|
|
208
|
-
const beforeRecoveryConfig = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
209
|
-
expect(Object.keys(beforeRecoveryConfig[CHAIN_NAME_2].remoteRouters || {})).to.not.include(chain3Id.toString());
|
|
210
|
-
// Re-extend to fix the configuration
|
|
211
|
-
await extendWarpConfig({
|
|
212
|
-
chain: CHAIN_NAME_2,
|
|
213
|
-
chainToExtend: CHAIN_NAME_3,
|
|
214
|
-
extendedConfig: {
|
|
215
|
-
decimals: 18,
|
|
216
|
-
mailbox: chain2Addresses.mailbox,
|
|
217
|
-
name: 'Ether',
|
|
218
|
-
owner: new Wallet(ANVIL_KEY).address,
|
|
219
|
-
symbol: 'ETH',
|
|
220
|
-
type: TokenType.native,
|
|
221
|
-
},
|
|
222
|
-
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
223
|
-
warpDeployPath: warpConfigPath,
|
|
224
|
-
});
|
|
225
|
-
const recoveredConfig = await readWarpConfig(CHAIN_NAME_2, COMBINED_WARP_CORE_CONFIG_PATH, warpConfigPath);
|
|
226
|
-
expect(Object.keys(recoveredConfig[CHAIN_NAME_2].remoteRouters)).to.include(chain3Id.toString());
|
|
227
|
-
});
|
|
228
|
-
it('should complete warp route extension when previous attempt left incomplete enrollment or destination gas settings (second attempt on new combined config)', async () => {
|
|
229
|
-
const { chain2DomainId, chain3DomainId, warpConfigPath, configToExtend, combinedWarpCorePath, } = await setupIncompleteWarpRouteExtension(chain2Addresses);
|
|
230
|
-
// Verify initial state - neither chain should be enrolled in the other
|
|
231
|
-
const initialConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
232
|
-
const initialConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
233
|
-
// Check remote routers initial state
|
|
234
|
-
expect(Object.keys(initialConfig2[CHAIN_NAME_2].remoteRouters)).to.not.include(chain3DomainId);
|
|
235
|
-
expect(Object.keys(initialConfig3[CHAIN_NAME_3].remoteRouters)).to.not.include(chain2DomainId);
|
|
236
|
-
// Check destination gas initial state
|
|
237
|
-
expect(Object.keys(initialConfig2[CHAIN_NAME_2].destinationGas || {})).to.not.include(chain3DomainId);
|
|
238
|
-
expect(Object.keys(initialConfig3[CHAIN_NAME_3].destinationGas || {})).to.not.include(chain2DomainId);
|
|
239
|
-
// Complete the extension
|
|
240
|
-
await extendWarpConfig({
|
|
241
|
-
chain: CHAIN_NAME_2,
|
|
242
|
-
chainToExtend: CHAIN_NAME_3,
|
|
243
|
-
extendedConfig: configToExtend,
|
|
244
|
-
warpCorePath: combinedWarpCorePath,
|
|
245
|
-
warpDeployPath: warpConfigPath,
|
|
246
|
-
});
|
|
247
|
-
// Verify both chains are now properly configured
|
|
248
|
-
const finalConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
249
|
-
const finalConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
250
|
-
// Check remote routers final state
|
|
251
|
-
expect(Object.keys(finalConfig2[CHAIN_NAME_2].remoteRouters)).to.include(chain3DomainId);
|
|
252
|
-
expect(Object.keys(finalConfig3[CHAIN_NAME_3].remoteRouters)).to.include(chain2DomainId);
|
|
253
|
-
// Check destination gas final state
|
|
254
|
-
expect(Object.keys(finalConfig2[CHAIN_NAME_2].destinationGas)).to.include(chain3DomainId);
|
|
255
|
-
expect(Object.keys(finalConfig3[CHAIN_NAME_3].destinationGas)).to.include(chain2DomainId);
|
|
256
|
-
});
|
|
257
|
-
it('should complete warp route extension when previous attempt left incomplete enrollment or destination gas settings (second attempt with same config)', async () => {
|
|
258
|
-
const { chain2DomainId, chain3DomainId, warpConfigPath, configToExtend, combinedWarpCorePath, } = await setupIncompleteWarpRouteExtension(chain2Addresses);
|
|
259
|
-
// Verify initial state - neither chain should be enrolled in the other
|
|
260
|
-
const initialConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
261
|
-
const initialConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
262
|
-
// Check remote routers initial state
|
|
263
|
-
expect(Object.keys(initialConfig2[CHAIN_NAME_2].remoteRouters)).to.not.include(chain3DomainId);
|
|
264
|
-
expect(Object.keys(initialConfig3[CHAIN_NAME_3].remoteRouters)).to.not.include(chain2DomainId);
|
|
265
|
-
// Check destination gas initial state
|
|
266
|
-
expect(Object.keys(initialConfig2[CHAIN_NAME_2].destinationGas || {})).to.not.include(chain3DomainId);
|
|
267
|
-
expect(Object.keys(initialConfig3[CHAIN_NAME_3].destinationGas || {})).to.not.include(chain2DomainId);
|
|
268
|
-
// Complete the extension
|
|
269
|
-
await extendWarpConfig({
|
|
270
|
-
chain: CHAIN_NAME_2,
|
|
271
|
-
chainToExtend: CHAIN_NAME_3,
|
|
272
|
-
extendedConfig: configToExtend,
|
|
273
|
-
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
274
|
-
warpDeployPath: combinedWarpCorePath,
|
|
275
|
-
});
|
|
276
|
-
// Verify both chains are now properly configured
|
|
277
|
-
const finalConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
278
|
-
const finalConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
279
|
-
// Check remote routers final state
|
|
280
|
-
expect(Object.keys(finalConfig2[CHAIN_NAME_2].remoteRouters)).to.include(chain3DomainId);
|
|
281
|
-
expect(Object.keys(finalConfig3[CHAIN_NAME_3].remoteRouters)).to.include(chain2DomainId);
|
|
282
|
-
// Check destination gas final state
|
|
283
|
-
expect(Object.keys(finalConfig2[CHAIN_NAME_2].destinationGas)).to.include(chain3DomainId);
|
|
284
|
-
expect(Object.keys(finalConfig3[CHAIN_NAME_3].destinationGas)).to.include(chain2DomainId);
|
|
285
|
-
});
|
|
286
|
-
it('should set correct gas values when completing warp route extension (without having to specify the gas table manually)', async () => {
|
|
287
|
-
const { chain2DomainId, chain3DomainId, warpConfigPath, configToExtend, combinedWarpCorePath, } = await setupIncompleteWarpRouteExtension(chain2Addresses);
|
|
288
|
-
// Verify initial state - gas values should not be set
|
|
289
|
-
const initialConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
290
|
-
const initialConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
291
|
-
// Check initial gas values
|
|
292
|
-
expect(initialConfig2[CHAIN_NAME_2].destinationGas?.[chain3DomainId]).to.be
|
|
293
|
-
.undefined;
|
|
294
|
-
expect(initialConfig3[CHAIN_NAME_3].destinationGas?.[chain2DomainId]).to.be
|
|
295
|
-
.undefined;
|
|
296
|
-
// Set specific gas values for the extension
|
|
297
|
-
const customGasValue = '300000';
|
|
298
|
-
configToExtend.gas = parseInt(customGasValue);
|
|
299
|
-
// Complete the extension with custom gas value
|
|
300
|
-
await extendWarpConfig({
|
|
301
|
-
chain: CHAIN_NAME_2,
|
|
302
|
-
chainToExtend: CHAIN_NAME_3,
|
|
303
|
-
extendedConfig: configToExtend,
|
|
304
|
-
warpCorePath: combinedWarpCorePath,
|
|
305
|
-
warpDeployPath: warpConfigPath,
|
|
306
|
-
});
|
|
307
|
-
// Verify gas values are correctly set after extension
|
|
308
|
-
const finalConfig2 = await readWarpConfig(CHAIN_NAME_2, combinedWarpCorePath, warpConfigPath);
|
|
309
|
-
const finalConfig3 = await readWarpConfig(CHAIN_NAME_3, combinedWarpCorePath, warpConfigPath);
|
|
310
|
-
// Check gas value is set correctly
|
|
311
|
-
expect(finalConfig2[CHAIN_NAME_2].destinationGas[chain3DomainId]).to.equal(customGasValue);
|
|
312
|
-
// Verify remote routers are also properly set
|
|
313
|
-
expect(Object.keys(finalConfig2[CHAIN_NAME_2].remoteRouters)).to.include(chain3DomainId);
|
|
314
|
-
expect(Object.keys(finalConfig3[CHAIN_NAME_3].remoteRouters)).to.include(chain2DomainId);
|
|
315
|
-
});
|
|
316
|
-
it('should update destination gas configuration', async () => {
|
|
317
|
-
const warpDeployPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
318
|
-
// Extend with new config
|
|
319
|
-
const config = {
|
|
320
|
-
decimals: 18,
|
|
321
|
-
mailbox: chain2Addresses.mailbox,
|
|
322
|
-
name: 'Ether',
|
|
323
|
-
owner: new Wallet(ANVIL_KEY).address,
|
|
324
|
-
symbol: 'ETH',
|
|
325
|
-
type: TokenType.native,
|
|
326
|
-
};
|
|
327
|
-
await extendWarpConfig({
|
|
328
|
-
chain: CHAIN_NAME_2,
|
|
329
|
-
chainToExtend: CHAIN_NAME_3,
|
|
330
|
-
extendedConfig: config,
|
|
331
|
-
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
332
|
-
warpDeployPath,
|
|
333
|
-
});
|
|
334
|
-
// First read the existing config
|
|
335
|
-
const warpDeployConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
336
|
-
// Get the domain ID for chain 3
|
|
337
|
-
const chain3Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
338
|
-
// Update with new destination gas values
|
|
339
|
-
warpDeployConfig[CHAIN_NAME_2].destinationGas = {
|
|
340
|
-
[chain3Id]: '500000', // Set a specific gas value for chain 3
|
|
341
|
-
};
|
|
342
|
-
// Write the updated config
|
|
343
|
-
await writeYamlOrJson(warpDeployPath, warpDeployConfig);
|
|
344
|
-
// Apply the changes
|
|
345
|
-
await hyperlaneWarpApply(warpDeployPath, WARP_CORE_CONFIG_PATH_2);
|
|
346
|
-
// Read back the config to verify changes
|
|
347
|
-
const updatedConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
348
|
-
// Verify the destination gas was updated correctly
|
|
349
|
-
expect(updatedConfig[CHAIN_NAME_2].destinationGas[chain3Id]).to.equal('500000');
|
|
350
|
-
});
|
|
351
|
-
it('should update remote routers configuration', async () => {
|
|
352
|
-
const warpDeployPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
353
|
-
// Extend with new config
|
|
354
|
-
const config = {
|
|
355
|
-
decimals: 18,
|
|
356
|
-
mailbox: chain2Addresses.mailbox,
|
|
357
|
-
name: 'Ether',
|
|
358
|
-
owner: new Wallet(ANVIL_KEY).address,
|
|
359
|
-
symbol: 'ETH',
|
|
360
|
-
type: TokenType.native,
|
|
361
|
-
};
|
|
362
|
-
await extendWarpConfig({
|
|
363
|
-
chain: CHAIN_NAME_2,
|
|
364
|
-
chainToExtend: CHAIN_NAME_3,
|
|
365
|
-
extendedConfig: config,
|
|
366
|
-
warpCorePath: WARP_CORE_CONFIG_PATH_2,
|
|
367
|
-
warpDeployPath,
|
|
368
|
-
});
|
|
369
|
-
// First read the existing config
|
|
370
|
-
const warpDeployConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
371
|
-
// Get the domain ID for chain 3
|
|
372
|
-
const chain3Id = await getDomainId(CHAIN_NAME_3, ANVIL_KEY);
|
|
373
|
-
// Generate a new router address to update
|
|
374
|
-
const newRouterAddress = randomAddress();
|
|
375
|
-
// Update with new remote router values
|
|
376
|
-
warpDeployConfig[CHAIN_NAME_2].remoteRouters = {
|
|
377
|
-
[chain3Id]: { address: newRouterAddress }, // Set a new router address for chain 3
|
|
378
|
-
};
|
|
379
|
-
// Write the updated config
|
|
380
|
-
await writeYamlOrJson(warpDeployPath, warpDeployConfig);
|
|
381
|
-
// Apply the changes
|
|
382
|
-
await hyperlaneWarpApply(warpDeployPath, WARP_CORE_CONFIG_PATH_2);
|
|
383
|
-
// Read back the config to verify changes
|
|
384
|
-
const updatedConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
385
|
-
// Verify the remote router was updated correctly
|
|
386
|
-
expect(updatedConfig[CHAIN_NAME_2].remoteRouters[chain3Id].address.toLowerCase()).to.equal(newRouterAddress.toLowerCase());
|
|
387
|
-
});
|
|
388
|
-
it('should preserve deploy config when extending warp route', async () => {
|
|
389
|
-
const warpDeployPath = `${TEMP_PATH}/warp-route-deployment-2.yaml`;
|
|
390
|
-
const warpDeployConfig = await readWarpConfig(CHAIN_NAME_2, WARP_CORE_CONFIG_PATH_2, warpDeployPath);
|
|
391
|
-
// Extend with new config for chain 3
|
|
392
|
-
const extendedConfig = {
|
|
393
|
-
decimals: 18,
|
|
394
|
-
mailbox: chain2Addresses.mailbox,
|
|
395
|
-
name: 'Ether',
|
|
396
|
-
owner: new Wallet(ANVIL_KEY).address,
|
|
397
|
-
symbol: 'ETH',
|
|
398
|
-
type: TokenType.native,
|
|
399
|
-
};
|
|
400
|
-
warpDeployConfig[CHAIN_NAME_3] = extendedConfig;
|
|
401
|
-
// Remove remoteRouters and destinationGas as they are written in readWarpConfig
|
|
402
|
-
delete warpDeployConfig[CHAIN_NAME_2].remoteRouters;
|
|
403
|
-
delete warpDeployConfig[CHAIN_NAME_2].destinationGas;
|
|
404
|
-
await writeYamlOrJson(warpDeployPath, warpDeployConfig);
|
|
405
|
-
await hyperlaneWarpApply(warpDeployPath, WARP_CORE_CONFIG_PATH_2);
|
|
406
|
-
const updatedConfig = readYamlOrJson(warpDeployPath);
|
|
407
|
-
expect(normalizeConfig(warpDeployConfig)).to.deep.equal(normalizeConfig(updatedConfig), 'warp deploy config should remain unchanged after extension');
|
|
408
|
-
});
|
|
409
|
-
});
|
|
410
|
-
//# sourceMappingURL=warp-apply-extend.e2e-test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"warp-apply-extend.e2e-test.js","sourceRoot":"","sources":["../../../../src/tests/warp/warp-apply-extend.e2e-test.ts"],"names":[],"mappings":"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"}
|