@hyperlane-xyz/sdk 41.1.0 → 41.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/block-explorer/etherscan.d.ts +16 -0
- package/dist/block-explorer/etherscan.d.ts.map +1 -1
- package/dist/block-explorer/etherscan.js +42 -30
- package/dist/block-explorer/etherscan.js.map +1 -1
- package/dist/ccip/consts.d.ts.map +1 -1
- package/dist/ccip/consts.js +0 -80
- package/dist/ccip/consts.js.map +1 -1
- package/dist/consts/multisigIsm.d.ts.map +1 -1
- package/dist/consts/multisigIsm.js +0 -118
- package/dist/consts/multisigIsm.js.map +1 -1
- package/dist/core/types.d.ts +136 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/deploy/proxy.d.ts +41 -4
- package/dist/deploy/proxy.d.ts.map +1 -1
- package/dist/deploy/proxy.js +38 -8
- package/dist/deploy/proxy.js.map +1 -1
- package/dist/deploy/warp.d.ts.map +1 -1
- package/dist/deploy/warp.js +29 -3
- package/dist/deploy/warp.js.map +1 -1
- package/dist/ica/types.d.ts +80 -0
- package/dist/ica/types.d.ts.map +1 -1
- package/dist/ism/EvmIsmModule.d.ts +2 -0
- package/dist/ism/EvmIsmModule.d.ts.map +1 -1
- package/dist/ism/EvmIsmModule.hardhat-test.js +162 -9
- package/dist/ism/EvmIsmModule.hardhat-test.js.map +1 -1
- package/dist/ism/EvmIsmModule.js +35 -8
- package/dist/ism/EvmIsmModule.js.map +1 -1
- package/dist/ism/EvmIsmModule.test.d.ts +2 -0
- package/dist/ism/EvmIsmModule.test.d.ts.map +1 -0
- package/dist/ism/EvmIsmModule.test.js +200 -0
- package/dist/ism/EvmIsmModule.test.js.map +1 -0
- package/dist/ism/EvmIsmReader.d.ts +12 -0
- package/dist/ism/EvmIsmReader.d.ts.map +1 -1
- package/dist/ism/EvmIsmReader.js +29 -12
- package/dist/ism/EvmIsmReader.js.map +1 -1
- package/dist/ism/EvmIsmReader.test.js +227 -8
- package/dist/ism/EvmIsmReader.test.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.hardhat-test.js +166 -2
- package/dist/ism/HyperlaneIsmFactory.hardhat-test.js.map +1 -1
- package/dist/ism/HyperlaneIsmFactory.js +3 -2
- package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
- package/dist/ism/blacklist.d.ts +62 -0
- package/dist/ism/blacklist.d.ts.map +1 -0
- package/dist/ism/blacklist.js +98 -0
- package/dist/ism/blacklist.js.map +1 -0
- package/dist/ism/types.test.js +20 -1
- package/dist/ism/types.test.js.map +1 -1
- package/dist/ism/utils.d.ts.map +1 -1
- package/dist/ism/utils.js +26 -8
- package/dist/ism/utils.js.map +1 -1
- package/dist/metadata/ChainMetadataManager.d.ts +6 -0
- package/dist/metadata/ChainMetadataManager.d.ts.map +1 -1
- package/dist/metadata/ChainMetadataManager.js +21 -16
- package/dist/metadata/ChainMetadataManager.js.map +1 -1
- package/dist/metadata/ChainMetadataManager.test.js +30 -0
- package/dist/metadata/ChainMetadataManager.test.js.map +1 -1
- package/dist/metadata/warpRouteConfig.d.ts +10 -8
- package/dist/metadata/warpRouteConfig.d.ts.map +1 -1
- package/dist/middleware/account/InterchainAccount.d.ts.map +1 -1
- package/dist/middleware/account/InterchainAccount.js +38 -10
- package/dist/middleware/account/InterchainAccount.js.map +1 -1
- package/dist/middleware/account/InterchainAccount.test.js +182 -2
- package/dist/middleware/account/InterchainAccount.test.js.map +1 -1
- package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.d.ts.map +1 -1
- package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js +21 -6
- package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js.map +1 -1
- package/dist/providers/SmartProvider/SmartProvider.d.ts +4 -0
- package/dist/providers/SmartProvider/SmartProvider.d.ts.map +1 -1
- package/dist/providers/SmartProvider/SmartProvider.js +1 -1
- package/dist/providers/SmartProvider/SmartProvider.js.map +1 -1
- package/dist/providers/SmartProvider/SmartProvider.test.js +82 -0
- package/dist/providers/SmartProvider/SmartProvider.test.js.map +1 -1
- package/dist/providers/transactionFeeEstimators.d.ts.map +1 -1
- package/dist/providers/transactionFeeEstimators.js +16 -10
- package/dist/providers/transactionFeeEstimators.js.map +1 -1
- package/dist/providers/transactionFeeEstimators.test.js +66 -1
- package/dist/providers/transactionFeeEstimators.test.js.map +1 -1
- package/dist/router/ProxiedRouterDeployer.d.ts.map +1 -1
- package/dist/router/ProxiedRouterDeployer.js +9 -0
- package/dist/router/ProxiedRouterDeployer.js.map +1 -1
- package/dist/router/types.d.ts +80 -0
- package/dist/router/types.d.ts.map +1 -1
- package/dist/router/types.js +4 -1
- package/dist/router/types.js.map +1 -1
- package/dist/router/types.test.js +76 -0
- package/dist/router/types.test.js.map +1 -1
- package/dist/rpc/evm/EvmEventLogsReader.d.ts +14 -0
- package/dist/rpc/evm/EvmEventLogsReader.d.ts.map +1 -1
- package/dist/rpc/evm/EvmEventLogsReader.hardhat-test.js +209 -3
- package/dist/rpc/evm/EvmEventLogsReader.hardhat-test.js.map +1 -1
- package/dist/rpc/evm/EvmEventLogsReader.js +96 -11
- package/dist/rpc/evm/EvmEventLogsReader.js.map +1 -1
- package/dist/rpc/evm/utils.d.ts +7 -11
- package/dist/rpc/evm/utils.d.ts.map +1 -1
- package/dist/rpc/evm/utils.hardhat-test.js +34 -9
- package/dist/rpc/evm/utils.hardhat-test.js.map +1 -1
- package/dist/rpc/evm/utils.js +10 -20
- package/dist/rpc/evm/utils.js.map +1 -1
- package/dist/test/contractDouble.d.ts +8 -0
- package/dist/test/contractDouble.d.ts.map +1 -0
- package/dist/test/contractDouble.js +12 -0
- package/dist/test/contractDouble.js.map +1 -0
- package/dist/timelock/evm/constants.d.ts +1 -0
- package/dist/timelock/evm/constants.d.ts.map +1 -1
- package/dist/timelock/evm/constants.js +1 -0
- package/dist/timelock/evm/constants.js.map +1 -1
- package/dist/timelock/evm/errors.d.ts +2 -0
- package/dist/timelock/evm/errors.d.ts.map +1 -0
- package/dist/timelock/evm/errors.js +19 -0
- package/dist/timelock/evm/errors.js.map +1 -0
- package/dist/timelock/evm/errors.test.d.ts +2 -0
- package/dist/timelock/evm/errors.test.d.ts.map +1 -0
- package/dist/timelock/evm/errors.test.js +33 -0
- package/dist/timelock/evm/errors.test.js.map +1 -0
- package/dist/token/EvmWarpModule.d.ts +17 -0
- package/dist/token/EvmWarpModule.d.ts.map +1 -1
- package/dist/token/EvmWarpModule.hardhat-test.js +144 -0
- package/dist/token/EvmWarpModule.hardhat-test.js.map +1 -1
- package/dist/token/EvmWarpModule.js +191 -6
- package/dist/token/EvmWarpModule.js.map +1 -1
- package/dist/token/EvmWarpModule.test.js +232 -8
- package/dist/token/EvmWarpModule.test.js.map +1 -1
- package/dist/token/EvmWarpRouteReader.d.ts +1 -0
- package/dist/token/EvmWarpRouteReader.d.ts.map +1 -1
- package/dist/token/EvmWarpRouteReader.hardhat-test.js +68 -3
- package/dist/token/EvmWarpRouteReader.hardhat-test.js.map +1 -1
- package/dist/token/EvmWarpRouteReader.js +83 -6
- package/dist/token/EvmWarpRouteReader.js.map +1 -1
- package/dist/token/ITokenMetadata.d.ts +3 -2
- package/dist/token/ITokenMetadata.d.ts.map +1 -1
- package/dist/token/Token.d.ts.map +1 -1
- package/dist/token/Token.js +4 -0
- package/dist/token/Token.js.map +1 -1
- package/dist/token/Token.test.js +16 -0
- package/dist/token/Token.test.js.map +1 -1
- package/dist/token/TokenStandard.d.ts +3 -1
- package/dist/token/TokenStandard.d.ts.map +1 -1
- package/dist/token/TokenStandard.js +6 -0
- package/dist/token/TokenStandard.js.map +1 -1
- package/dist/token/config.d.ts +2 -0
- package/dist/token/config.d.ts.map +1 -1
- package/dist/token/config.js +4 -0
- package/dist/token/config.js.map +1 -1
- package/dist/token/configUtils.d.ts +5 -0
- package/dist/token/configUtils.d.ts.map +1 -1
- package/dist/token/configUtils.js +30 -6
- package/dist/token/configUtils.js.map +1 -1
- package/dist/token/configUtils.test.js +21 -1
- package/dist/token/configUtils.test.js.map +1 -1
- package/dist/token/contracts.d.ts +3 -1
- package/dist/token/contracts.d.ts.map +1 -1
- package/dist/token/contracts.js +3 -1
- package/dist/token/contracts.js.map +1 -1
- package/dist/token/deploy.d.ts +3 -1
- package/dist/token/deploy.d.ts.map +1 -1
- package/dist/token/deploy.hardhat-test.js +111 -3
- package/dist/token/deploy.hardhat-test.js.map +1 -1
- package/dist/token/deploy.js +52 -3
- package/dist/token/deploy.js.map +1 -1
- package/dist/token/tokenMetadataUtils.d.ts.map +1 -1
- package/dist/token/tokenMetadataUtils.js +20 -2
- package/dist/token/tokenMetadataUtils.js.map +1 -1
- package/dist/token/types.d.ts +9807 -5533
- package/dist/token/types.d.ts.map +1 -1
- package/dist/token/types.js +49 -3
- package/dist/token/types.js.map +1 -1
- package/dist/token/types.test.js +21 -0
- package/dist/token/types.test.js.map +1 -1
- package/dist/token/warpCheck.d.ts.map +1 -1
- package/dist/token/warpCheck.js +100 -2
- package/dist/token/warpCheck.js.map +1 -1
- package/dist/token/warpCheck.test.js +101 -1
- package/dist/token/warpCheck.test.js.map +1 -1
- package/dist/warp/types.d.ts +5 -4
- package/dist/warp/types.d.ts.map +1 -1
- package/package.json +11 -11
|
@@ -2,4 +2,5 @@ export declare const EMPTY_BYTES_32 = "0x000000000000000000000000000000000000000
|
|
|
2
2
|
export declare const PROPOSER_ROLE: string;
|
|
3
3
|
export declare const EXECUTOR_ROLE: string;
|
|
4
4
|
export declare const CANCELLER_ROLE: string;
|
|
5
|
+
export declare const TIMELOCK_ADMIN_ROLE: string;
|
|
5
6
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/timelock/evm/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,uEAC2C,CAAC;AAEvE,eAAO,MAAM,aAAa,EAAE,MAAgD,CAAC;AAC7E,eAAO,MAAM,aAAa,EAAE,MAAgD,CAAC;AAC7E,eAAO,MAAM,cAAc,EAAE,MAAiD,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/timelock/evm/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,uEAC2C,CAAC;AAEvE,eAAO,MAAM,aAAa,EAAE,MAAgD,CAAC;AAC7E,eAAO,MAAM,aAAa,EAAE,MAAgD,CAAC;AAC7E,eAAO,MAAM,cAAc,EAAE,MAAiD,CAAC;AAC/E,eAAO,MAAM,mBAAmB,EAAE,MAEjC,CAAC"}
|
|
@@ -3,4 +3,5 @@ export const EMPTY_BYTES_32 = '0x00000000000000000000000000000000000000000000000
|
|
|
3
3
|
export const PROPOSER_ROLE = keccak256(Buffer.from('PROPOSER_ROLE'));
|
|
4
4
|
export const EXECUTOR_ROLE = keccak256(Buffer.from('EXECUTOR_ROLE'));
|
|
5
5
|
export const CANCELLER_ROLE = keccak256(Buffer.from('CANCELLER_ROLE'));
|
|
6
|
+
export const TIMELOCK_ADMIN_ROLE = keccak256(Buffer.from('TIMELOCK_ADMIN_ROLE'));
|
|
6
7
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/timelock/evm/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,CAAC,MAAM,cAAc,GACzB,oEAAoE,CAAC;AAEvE,MAAM,CAAC,MAAM,aAAa,GAAW,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAW,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAW,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/timelock/evm/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,CAAC,MAAM,cAAc,GACzB,oEAAoE,CAAC;AAEvE,MAAM,CAAC,MAAM,aAAa,GAAW,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAW,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAW,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAW,SAAS,CAClD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/timelock/evm/errors.ts"],"names":[],"mappings":"AAgBA,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAUxE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { errors as EthersError } from 'ethers';
|
|
2
|
+
import { getNestedJsonRpcError } from '../../providers/SmartProvider/SmartProvider.js';
|
|
3
|
+
function asRecord(error) {
|
|
4
|
+
if (typeof error !== 'object' || error === null)
|
|
5
|
+
return undefined;
|
|
6
|
+
// CAST: runtime object check above narrows enough for keyed inspection.
|
|
7
|
+
return error;
|
|
8
|
+
}
|
|
9
|
+
export function isDeterministicTimelockReadError(error) {
|
|
10
|
+
// CAST: asRecord gates property reads; fields stay unknown until compared.
|
|
11
|
+
const record = asRecord(error);
|
|
12
|
+
if (record?.code !== EthersError.CALL_EXCEPTION)
|
|
13
|
+
return false;
|
|
14
|
+
const hasRevertData = !!record.data && record.data !== '0x';
|
|
15
|
+
const hasNestedError = !!record.error;
|
|
16
|
+
const jsonRpcErrorCode = getNestedJsonRpcError(error).code;
|
|
17
|
+
return hasRevertData || jsonRpcErrorCode === 3 || !hasNestedError;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/timelock/evm/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAQvF,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAClE,wEAAwE;IACxE,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,KAAc;IAC7D,2EAA2E;IAC3E,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAoC,CAAC;IAClE,IAAI,MAAM,EAAE,IAAI,KAAK,WAAW,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IAE9D,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;IAC5D,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACtC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;IAE3D,OAAO,aAAa,IAAI,gBAAgB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../../src/timelock/evm/errors.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { errors as EthersError } from 'ethers';
|
|
3
|
+
import { isDeterministicTimelockReadError } from './errors.js';
|
|
4
|
+
describe('timelock EVM errors', () => {
|
|
5
|
+
const cases = [
|
|
6
|
+
['direct nested code 3', { error: { code: 3 } }, true],
|
|
7
|
+
['double-nested code 3', { error: { error: { code: 3 } } }, true],
|
|
8
|
+
[
|
|
9
|
+
'body-encoded code 3',
|
|
10
|
+
{
|
|
11
|
+
error: {
|
|
12
|
+
body: JSON.stringify({
|
|
13
|
+
jsonrpc: '2.0',
|
|
14
|
+
id: 1,
|
|
15
|
+
error: { code: 3, message: 'execution reverted' },
|
|
16
|
+
}),
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
true,
|
|
20
|
+
],
|
|
21
|
+
['nested transient call exception', { error: { code: -32000 } }, false],
|
|
22
|
+
];
|
|
23
|
+
for (const [name, errorShape, expected] of cases) {
|
|
24
|
+
it(`classifies ${name}`, () => {
|
|
25
|
+
const error = Object.assign(new Error('execution reverted'), {
|
|
26
|
+
code: EthersError.CALL_EXCEPTION,
|
|
27
|
+
...errorShape,
|
|
28
|
+
});
|
|
29
|
+
expect(isDeterministicTimelockReadError(error)).to.equal(expected);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=errors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../../src/timelock/evm/errors.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE/C,OAAO,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAE/D,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,MAAM,KAAK,GAAsD;QAC/D,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC;QACtD,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;QACjE;YACE,qBAAqB;YACrB;gBACE,KAAK,EAAE;oBACL,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,KAAK;wBACd,EAAE,EAAE,CAAC;wBACL,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE;qBAClD,CAAC;iBACH;aACF;YACD,IAAI;SACL;QACD,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC;KACxE,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;QACjD,EAAE,CAAC,cAAc,IAAI,EAAE,EAAE,GAAG,EAAE;YAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,EAAE;gBAC3D,IAAI,EAAE,WAAW,CAAC,cAAc;gBAChC,GAAG,UAAU;aACd,CAAC,CAAC;YAEH,MAAM,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -29,6 +29,7 @@ export declare class EvmWarpModule extends HyperlaneModule<ProtocolType.Ethereum
|
|
|
29
29
|
protected readonly multiProvider: MultiProvider;
|
|
30
30
|
protected readonly ccipContractCache?: CCIPContractCache | undefined;
|
|
31
31
|
protected readonly contractVerifier?: ContractVerifier | undefined;
|
|
32
|
+
private static readonly deployedTimelockByProvider;
|
|
32
33
|
protected logger: import("pino").pino.Logger<never>;
|
|
33
34
|
reader: EvmWarpRouteReader;
|
|
34
35
|
readonly chainName: ChainName;
|
|
@@ -42,6 +43,11 @@ export declare class EvmWarpModule extends HyperlaneModule<ProtocolType.Ethereum
|
|
|
42
43
|
* @returns A promise that resolves to the token router configuration.
|
|
43
44
|
*/
|
|
44
45
|
read(): Promise<DerivedTokenRouterConfig>;
|
|
46
|
+
private timelockMatchesConfig;
|
|
47
|
+
private cachedTimelockMatchesConfig;
|
|
48
|
+
private configWithTimelockProxyAdminOwner;
|
|
49
|
+
private timelockDeploymentCacheKey;
|
|
50
|
+
private static deployedTimelockByConfig;
|
|
45
51
|
/**
|
|
46
52
|
* Updates the Warp Route contract with the provided configuration.
|
|
47
53
|
*
|
|
@@ -50,6 +56,13 @@ export declare class EvmWarpModule extends HyperlaneModule<ProtocolType.Ethereum
|
|
|
50
56
|
* method returns). If the returned transactions are never submitted, the wrapper is
|
|
51
57
|
* orphaned. See PredicateWrapperDeployer.deployAndConfigure for details.
|
|
52
58
|
*
|
|
59
|
+
* IMPORTANT — irreversible side effects when expectedConfig includes `timelock`:
|
|
60
|
+
* A TimelockController may be deployed on-chain during planning so the returned ownership
|
|
61
|
+
* transactions can transfer ProxyAdmin ownership to it. The deployment address is cached
|
|
62
|
+
* per MultiProvider, revalidated, and reused across retries for the same
|
|
63
|
+
* chain/ProxyAdmin/timelock config, but a declined or externally persisted
|
|
64
|
+
* transaction plan can still leave an untracked timelock deployment.
|
|
65
|
+
*
|
|
53
66
|
* @param expectedConfig - The configuration for the token router to be updated.
|
|
54
67
|
* @returns `{txs, feeTxs, ownershipTxs}` — main txs (includes router-owner `setFeeRecipient`), fee-contract-owner txs (safe to route to a dedicated feeSubmitter), and ownership/proxyAdmin txs that must execute last.
|
|
55
68
|
*/
|
|
@@ -91,6 +104,10 @@ export declare class EvmWarpModule extends HyperlaneModule<ProtocolType.Ethereum
|
|
|
91
104
|
getAllowedBridgesApprovalTxs(actualConfig: DerivedTokenRouterConfig, expectedConfig: HypTokenRouterConfig): Promise<AnnotatedEV5Transaction[]>;
|
|
92
105
|
createAddAllowedBridgesUpdateTxs(actualConfig: DerivedTokenRouterConfig, expectedConfig: HypTokenRouterConfig): Promise<AnnotatedEV5Transaction[]>;
|
|
93
106
|
createRemoveBridgesTxs(actualConfig: DerivedTokenRouterConfig, expectedConfig: HypTokenRouterConfig): AnnotatedEV5Transaction[];
|
|
107
|
+
createAddRebalanceTargetsUpdateTxs(actualConfig: DerivedTokenRouterConfig, expectedConfig: HypTokenRouterConfig): AnnotatedEV5Transaction[];
|
|
108
|
+
createRemoveRebalanceTargetsTxs(actualConfig: DerivedTokenRouterConfig, expectedConfig: HypTokenRouterConfig): AnnotatedEV5Transaction[];
|
|
109
|
+
createSetRecipientsUpdateTxs(actualConfig: DerivedTokenRouterConfig, expectedConfig: HypTokenRouterConfig): AnnotatedEV5Transaction[];
|
|
110
|
+
createRemoveRecipientsTxs(actualConfig: DerivedTokenRouterConfig, expectedConfig: HypTokenRouterConfig): AnnotatedEV5Transaction[];
|
|
94
111
|
/**
|
|
95
112
|
* Revokes legacy standing ERC20 allowances for bridges that remain allowlisted
|
|
96
113
|
* after an in-place upgrade.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EvmWarpModule.d.ts","sourceRoot":"","sources":["../../src/token/EvmWarpModule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EvmWarpModule.d.ts","sourceRoot":"","sources":["../../src/token/EvmWarpModule.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,OAAO,EACP,MAAM,EACN,UAAU,EACV,YAAY,EAkBb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,qBAAqB,EACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAQ/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAQnE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AASvE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AASvD,OAAO,EAEL,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AASjC,OAAO,EAEL,wBAAwB,EAExB,oBAAoB,EAerB,MAAM,YAAY,CAAC;AAEpB,KAAK,kBAAkB,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,GAAG;IACpE,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAMF,eAAO,MAAM,kCAAkC,WAAW,CAAC;AAE3D;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,eAAe,EAAE,MAAM,GACtB,OAAO,CAIT;AAkBD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,uBAAuB,EAAE,CAAC;IAC/B,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,YAAY,EAAE,uBAAuB,EAAE,CAAC;CACzC,CAAC;AAuBF,qBAAa,aAAc,SAAQ,eAAe,CAChD,YAAY,CAAC,QAAQ,EACrB,oBAAoB,EACpB,kBAAkB,CACnB;IAcG,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAE/C,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB;IACxD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB;IAhBxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAG9C;IACJ,SAAS,CAAC,MAAM,oCAEb;IACH,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC,SAAgB,OAAO,EAAE,UAAU,CAAC;IACpC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IAEjC,YACqB,aAAa,EAAE,aAAa,EAC/C,IAAI,EAAE,qBAAqB,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,EAClD,iBAAiB,CAAC,EAAE,iBAAiB,YAAA,EACrC,gBAAgB,CAAC,EAAE,gBAAgB,YAAA,EAcvD;IAED;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC,wBAAwB,CAAC,CA0B9C;YAEa,qBAAqB;YAiDrB,2BAA2B;YAe3B,iCAAiC;IAsE/C,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAevC;;;;;;;;;;;;;;;;;OAiBG;IACG,WAAW,CACf,cAAc,EAAE,oBAAoB,EACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAChD,OAAO,CAAC,gBAAgB,CAAC,CAyH3B;IAED;;;OAGG;IACG,MAAM,CACV,cAAc,EAAE,oBAAoB,EACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAChD,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAQpC;IAED;;;;;;OAMG;IACH,kCAAkC,CAChC,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAqD3B;IAED,oCAAoC,CAClC,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CA2C3B;IAED,6BAA6B,CAC3B,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAoC3B;IAED,gCAAgC,CAC9B,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAoC3B;IAED;;OAEG;IACH,qCAAqC,CACnC,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAuD3B;IAED;;OAEG;IACH,uCAAuC,CACrC,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAqD3B;IAED,OAAO,CAAC,mBAAmB;IAQ3B;;;;;;;;OAQG;IACG,4BAA4B,CAChC,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAuEpC;IAEK,gCAAgC,CACpC,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAuDpC;IAED,sBAAsB,CACpB,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAgD3B;IAED,kCAAkC,CAChC,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAyC3B;IAED,+BAA+B,CAC7B,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAsC3B;IAED,4BAA4B,CAC1B,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CA0C3B;IAED,yBAAyB,CACvB,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAsC3B;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,oCAAoC,CACxC,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,EACpC,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CA+GpC;IAED,8BAA8B,CAC5B,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAgD3B;IAED,iCAAiC,CAC/B,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAmD3B;IAED,iCAAiC,CAC/B,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAyD3B;IAED,iCAAiC,CAC/B,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAwC3B;IAED;;;;;;OAMG;IACH,gCAAgC,CAC9B,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAwG3B;IAED;;;;;;OAMG;IACG,kBAAkB,CACtB,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAoCpC;IAEK,mBAAmB,CACvB,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAEpC;IAED;;;OAGG;IACG,+BAA+B,CACnC,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAgJpC;IAED;;;;;;;OAOG;YACW,4BAA4B;IAuB1C;;;OAGG;YACW,qBAAqB;IAoCnC;;;OAGG;YACW,qBAAqB;IA6CnC;;;;;;;OAOG;IACG,0BAA0B,CAC9B,YAAY,EAAE,wBAAwB,EACtC,uBAAuB,EAAE;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,GACA,OAAO,CAAC,OAAO,CAAC,CASlB;IAED;;;;;;;;OAQG;IACG,+BAA+B,CACnC,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,EACpC,kBAAkB,CAAC,EAAE,OAAO,GAC3B,OAAO,CAAC;QACT,YAAY,EAAE,uBAAuB,EAAE,CAAC;QACxC,iBAAiB,EAAE,OAAO,CAAC;KAC5B,CAAC,CAwGD;IAED,sBAAsB,CACpB,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CA8B3B;IAED;;;;;;;;;;;;OAYG;IACG,uBAAuB,CAC3B,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,EACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAChD,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAqIpC;IAED;;;;;;OAMG;IACH,wBAAwB,CACtB,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CAQ3B;IAED;;;;OAIG;IACG,iBAAiB,CACrB,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC;QACT,WAAW,EAAE,OAAO,CAAC;QACrB,kBAAkB,EAAE,uBAAuB,EAAE,CAAC;KAC/C,CAAC,CA+DD;IAED;;;;;;OAMG;IACG,gCAAgC,CACpC,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,uBAAuB,EAAE,CAAC,CA2FpC;IAED,qBAAqB,CACnB,YAAY,EAAE,wBAAwB,EACtC,cAAc,EAAE,oBAAoB,GACnC,uBAAuB,EAAE,CA4C3B;IAED;;;;;;;OAOG;IACH,OAAa,MAAM,CAAC,MAAM,EAAE;QAC1B,KAAK,EAAE,aAAa,CAAC;QACrB,MAAM,EAAE,oBAAoB,CAAC;QAC7B,aAAa,EAAE,aAAa,CAAC;QAC7B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;QACtC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QACpC,qBAAqB,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;KAClE,GAAG,OAAO,CAAC,aAAa,CAAC,CAuGzB;CACF"}
|
|
@@ -728,6 +728,115 @@ describe('EvmWarpModule', async () => {
|
|
|
728
728
|
]);
|
|
729
729
|
expect(unenrollRouters.map((router) => router.toLowerCase()).sort()).to.deep.equal([routerOne.toLowerCase(), routerTwo.toLowerCase()].sort());
|
|
730
730
|
});
|
|
731
|
+
it('preserves canonical bytes32 rebalance targets and recipients', () => {
|
|
732
|
+
const localDomain = multiProvider.getDomainId(chain);
|
|
733
|
+
const target = addressToBytes32('0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
|
|
734
|
+
const recipient = addressToBytes32('0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
|
|
735
|
+
const module = new EvmWarpModule(multiProvider, {
|
|
736
|
+
chain,
|
|
737
|
+
config: {
|
|
738
|
+
...baseConfig,
|
|
739
|
+
type: TokenType.crossCollateral,
|
|
740
|
+
token: token.address,
|
|
741
|
+
},
|
|
742
|
+
addresses: {
|
|
743
|
+
...ismFactoryAddresses,
|
|
744
|
+
deployedTokenRoute: randomAddress(),
|
|
745
|
+
},
|
|
746
|
+
});
|
|
747
|
+
const actualConfig = {
|
|
748
|
+
...baseConfig,
|
|
749
|
+
hook: ethers.constants.AddressZero,
|
|
750
|
+
interchainSecurityModule: ethers.constants.AddressZero,
|
|
751
|
+
type: TokenType.crossCollateral,
|
|
752
|
+
token: token.address,
|
|
753
|
+
tokenFee: undefined,
|
|
754
|
+
rebalanceTargets: {},
|
|
755
|
+
rebalanceRecipients: {},
|
|
756
|
+
};
|
|
757
|
+
const expectedConfig = {
|
|
758
|
+
...baseConfig,
|
|
759
|
+
type: TokenType.crossCollateral,
|
|
760
|
+
token: token.address,
|
|
761
|
+
rebalanceTargets: { [localDomain]: [target] },
|
|
762
|
+
rebalanceRecipients: { [localDomain]: recipient },
|
|
763
|
+
};
|
|
764
|
+
const [targetTx] = module.createAddRebalanceTargetsUpdateTxs(actualConfig, expectedConfig);
|
|
765
|
+
assert(targetTx.data, 'Expected rebalance target calldata');
|
|
766
|
+
const [, decodedTarget] = CrossCollateralRouter__factory.createInterface().decodeFunctionData('addRebalanceTarget(uint32,bytes32)', targetTx.data);
|
|
767
|
+
expect(decodedTarget.toLowerCase()).to.equal(target);
|
|
768
|
+
const [recipientTx] = module.createSetRecipientsUpdateTxs(actualConfig, expectedConfig);
|
|
769
|
+
assert(recipientTx.data, 'Expected rebalance recipient calldata');
|
|
770
|
+
const [, decodedRecipient] = CrossCollateralRouter__factory.createInterface().decodeFunctionData('setRecipient(uint32,bytes32)', recipientTx.data);
|
|
771
|
+
expect(decodedRecipient.toLowerCase()).to.equal(recipient);
|
|
772
|
+
});
|
|
773
|
+
it('rejects rebalance domains that cannot be read back', () => {
|
|
774
|
+
const localDomain = multiProvider.getDomainId(chain);
|
|
775
|
+
const unknownDomain = localDomain + 1000;
|
|
776
|
+
const module = new EvmWarpModule(multiProvider, {
|
|
777
|
+
chain,
|
|
778
|
+
config: {
|
|
779
|
+
...baseConfig,
|
|
780
|
+
type: TokenType.crossCollateral,
|
|
781
|
+
token: token.address,
|
|
782
|
+
},
|
|
783
|
+
addresses: {
|
|
784
|
+
...ismFactoryAddresses,
|
|
785
|
+
deployedTokenRoute: randomAddress(),
|
|
786
|
+
},
|
|
787
|
+
});
|
|
788
|
+
const actualConfig = {
|
|
789
|
+
...baseConfig,
|
|
790
|
+
hook: ethers.constants.AddressZero,
|
|
791
|
+
interchainSecurityModule: ethers.constants.AddressZero,
|
|
792
|
+
type: TokenType.crossCollateral,
|
|
793
|
+
token: token.address,
|
|
794
|
+
tokenFee: undefined,
|
|
795
|
+
};
|
|
796
|
+
const expectedConfig = {
|
|
797
|
+
...baseConfig,
|
|
798
|
+
type: TokenType.crossCollateral,
|
|
799
|
+
token: token.address,
|
|
800
|
+
rebalanceTargets: {
|
|
801
|
+
[unknownDomain]: [addressToBytes32(randomAddress())],
|
|
802
|
+
},
|
|
803
|
+
};
|
|
804
|
+
expect(() => module.createAddRebalanceTargetsUpdateTxs(actualConfig, expectedConfig)).to.throw(`Rebalance domain ${unknownDomain}`);
|
|
805
|
+
});
|
|
806
|
+
it('removes stale rebalance config when expected fields are omitted', () => {
|
|
807
|
+
const localDomain = multiProvider.getDomainId(chain);
|
|
808
|
+
const target = addressToBytes32(randomAddress());
|
|
809
|
+
const recipient = addressToBytes32(randomAddress());
|
|
810
|
+
const module = new EvmWarpModule(multiProvider, {
|
|
811
|
+
chain,
|
|
812
|
+
config: {
|
|
813
|
+
...baseConfig,
|
|
814
|
+
type: TokenType.crossCollateral,
|
|
815
|
+
token: token.address,
|
|
816
|
+
},
|
|
817
|
+
addresses: {
|
|
818
|
+
...ismFactoryAddresses,
|
|
819
|
+
deployedTokenRoute: randomAddress(),
|
|
820
|
+
},
|
|
821
|
+
});
|
|
822
|
+
const actualConfig = {
|
|
823
|
+
...baseConfig,
|
|
824
|
+
hook: ethers.constants.AddressZero,
|
|
825
|
+
interchainSecurityModule: ethers.constants.AddressZero,
|
|
826
|
+
type: TokenType.crossCollateral,
|
|
827
|
+
token: token.address,
|
|
828
|
+
tokenFee: undefined,
|
|
829
|
+
rebalanceTargets: { [localDomain]: [target] },
|
|
830
|
+
rebalanceRecipients: { [localDomain]: recipient },
|
|
831
|
+
};
|
|
832
|
+
const expectedConfig = {
|
|
833
|
+
...baseConfig,
|
|
834
|
+
type: TokenType.crossCollateral,
|
|
835
|
+
token: token.address,
|
|
836
|
+
};
|
|
837
|
+
expect(module.createRemoveRebalanceTargetsTxs(actualConfig, expectedConfig)).to.have.length(1);
|
|
838
|
+
expect(module.createRemoveRecipientsTxs(actualConfig, expectedConfig)).to.have.length(1);
|
|
839
|
+
});
|
|
731
840
|
it('includes MC crossCollateralRouters domains in destination gas txs', async () => {
|
|
732
841
|
const destinationDomain = multiProvider.getDomainId(TestChainName.test2);
|
|
733
842
|
const enrolledRouter = addressToBytes32('0x4444444444444444444444444444444444444444');
|
|
@@ -867,6 +976,41 @@ describe('EvmWarpModule', async () => {
|
|
|
867
976
|
const txs = await evmERC20WarpModule.update(updatedWarpCoreConfig);
|
|
868
977
|
expect(txs.length).to.equal(0);
|
|
869
978
|
});
|
|
979
|
+
it('should reuse a configured ProxyAdmin timelock', async () => {
|
|
980
|
+
const config = {
|
|
981
|
+
...baseConfig,
|
|
982
|
+
type: TokenType.native,
|
|
983
|
+
};
|
|
984
|
+
const evmWarpModule = await EvmWarpModule.create({
|
|
985
|
+
chain,
|
|
986
|
+
config: {
|
|
987
|
+
...config,
|
|
988
|
+
interchainSecurityModule: ismAddress,
|
|
989
|
+
},
|
|
990
|
+
multiProvider,
|
|
991
|
+
proxyFactoryFactories: ismFactoryAddresses,
|
|
992
|
+
});
|
|
993
|
+
const timelockConfig = {
|
|
994
|
+
delay: 259_200,
|
|
995
|
+
roles: {
|
|
996
|
+
proposer: signer.address,
|
|
997
|
+
executor: signer.address,
|
|
998
|
+
},
|
|
999
|
+
};
|
|
1000
|
+
const firstUpdate = await evmWarpModule.updateSplit({
|
|
1001
|
+
...config,
|
|
1002
|
+
timelock: timelockConfig,
|
|
1003
|
+
});
|
|
1004
|
+
expect(firstUpdate.ownershipTxs.length).to.equal(1);
|
|
1005
|
+
await sendTxs(firstUpdate.ownershipTxs);
|
|
1006
|
+
const secondUpdate = await evmWarpModule.updateSplit({
|
|
1007
|
+
...config,
|
|
1008
|
+
timelock: timelockConfig,
|
|
1009
|
+
});
|
|
1010
|
+
expect(secondUpdate.txs).to.be.empty;
|
|
1011
|
+
expect(secondUpdate.feeTxs).to.be.empty;
|
|
1012
|
+
expect(secondUpdate.ownershipTxs).to.be.empty;
|
|
1013
|
+
});
|
|
870
1014
|
it('should update the destination gas', async () => {
|
|
871
1015
|
const domain = 3;
|
|
872
1016
|
const config = {
|