@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.
Files changed (177) hide show
  1. package/dist/block-explorer/etherscan.d.ts +16 -0
  2. package/dist/block-explorer/etherscan.d.ts.map +1 -1
  3. package/dist/block-explorer/etherscan.js +42 -30
  4. package/dist/block-explorer/etherscan.js.map +1 -1
  5. package/dist/ccip/consts.d.ts.map +1 -1
  6. package/dist/ccip/consts.js +0 -80
  7. package/dist/ccip/consts.js.map +1 -1
  8. package/dist/consts/multisigIsm.d.ts.map +1 -1
  9. package/dist/consts/multisigIsm.js +0 -118
  10. package/dist/consts/multisigIsm.js.map +1 -1
  11. package/dist/core/types.d.ts +136 -0
  12. package/dist/core/types.d.ts.map +1 -1
  13. package/dist/deploy/proxy.d.ts +41 -4
  14. package/dist/deploy/proxy.d.ts.map +1 -1
  15. package/dist/deploy/proxy.js +38 -8
  16. package/dist/deploy/proxy.js.map +1 -1
  17. package/dist/deploy/warp.d.ts.map +1 -1
  18. package/dist/deploy/warp.js +29 -3
  19. package/dist/deploy/warp.js.map +1 -1
  20. package/dist/ica/types.d.ts +80 -0
  21. package/dist/ica/types.d.ts.map +1 -1
  22. package/dist/ism/EvmIsmModule.d.ts +2 -0
  23. package/dist/ism/EvmIsmModule.d.ts.map +1 -1
  24. package/dist/ism/EvmIsmModule.hardhat-test.js +162 -9
  25. package/dist/ism/EvmIsmModule.hardhat-test.js.map +1 -1
  26. package/dist/ism/EvmIsmModule.js +35 -8
  27. package/dist/ism/EvmIsmModule.js.map +1 -1
  28. package/dist/ism/EvmIsmModule.test.d.ts +2 -0
  29. package/dist/ism/EvmIsmModule.test.d.ts.map +1 -0
  30. package/dist/ism/EvmIsmModule.test.js +200 -0
  31. package/dist/ism/EvmIsmModule.test.js.map +1 -0
  32. package/dist/ism/EvmIsmReader.d.ts +12 -0
  33. package/dist/ism/EvmIsmReader.d.ts.map +1 -1
  34. package/dist/ism/EvmIsmReader.js +29 -12
  35. package/dist/ism/EvmIsmReader.js.map +1 -1
  36. package/dist/ism/EvmIsmReader.test.js +227 -8
  37. package/dist/ism/EvmIsmReader.test.js.map +1 -1
  38. package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
  39. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js +166 -2
  40. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js.map +1 -1
  41. package/dist/ism/HyperlaneIsmFactory.js +3 -2
  42. package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
  43. package/dist/ism/blacklist.d.ts +62 -0
  44. package/dist/ism/blacklist.d.ts.map +1 -0
  45. package/dist/ism/blacklist.js +98 -0
  46. package/dist/ism/blacklist.js.map +1 -0
  47. package/dist/ism/types.test.js +20 -1
  48. package/dist/ism/types.test.js.map +1 -1
  49. package/dist/ism/utils.d.ts.map +1 -1
  50. package/dist/ism/utils.js +26 -8
  51. package/dist/ism/utils.js.map +1 -1
  52. package/dist/metadata/ChainMetadataManager.d.ts +6 -0
  53. package/dist/metadata/ChainMetadataManager.d.ts.map +1 -1
  54. package/dist/metadata/ChainMetadataManager.js +21 -16
  55. package/dist/metadata/ChainMetadataManager.js.map +1 -1
  56. package/dist/metadata/ChainMetadataManager.test.js +30 -0
  57. package/dist/metadata/ChainMetadataManager.test.js.map +1 -1
  58. package/dist/metadata/warpRouteConfig.d.ts +10 -8
  59. package/dist/metadata/warpRouteConfig.d.ts.map +1 -1
  60. package/dist/middleware/account/InterchainAccount.d.ts.map +1 -1
  61. package/dist/middleware/account/InterchainAccount.js +38 -10
  62. package/dist/middleware/account/InterchainAccount.js.map +1 -1
  63. package/dist/middleware/account/InterchainAccount.test.js +182 -2
  64. package/dist/middleware/account/InterchainAccount.test.js.map +1 -1
  65. package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.d.ts.map +1 -1
  66. package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js +21 -6
  67. package/dist/providers/SmartProvider/HyperlaneEtherscanProvider.js.map +1 -1
  68. package/dist/providers/SmartProvider/SmartProvider.d.ts +4 -0
  69. package/dist/providers/SmartProvider/SmartProvider.d.ts.map +1 -1
  70. package/dist/providers/SmartProvider/SmartProvider.js +1 -1
  71. package/dist/providers/SmartProvider/SmartProvider.js.map +1 -1
  72. package/dist/providers/SmartProvider/SmartProvider.test.js +82 -0
  73. package/dist/providers/SmartProvider/SmartProvider.test.js.map +1 -1
  74. package/dist/providers/transactionFeeEstimators.d.ts.map +1 -1
  75. package/dist/providers/transactionFeeEstimators.js +16 -10
  76. package/dist/providers/transactionFeeEstimators.js.map +1 -1
  77. package/dist/providers/transactionFeeEstimators.test.js +66 -1
  78. package/dist/providers/transactionFeeEstimators.test.js.map +1 -1
  79. package/dist/router/ProxiedRouterDeployer.d.ts.map +1 -1
  80. package/dist/router/ProxiedRouterDeployer.js +9 -0
  81. package/dist/router/ProxiedRouterDeployer.js.map +1 -1
  82. package/dist/router/types.d.ts +80 -0
  83. package/dist/router/types.d.ts.map +1 -1
  84. package/dist/router/types.js +4 -1
  85. package/dist/router/types.js.map +1 -1
  86. package/dist/router/types.test.js +76 -0
  87. package/dist/router/types.test.js.map +1 -1
  88. package/dist/rpc/evm/EvmEventLogsReader.d.ts +14 -0
  89. package/dist/rpc/evm/EvmEventLogsReader.d.ts.map +1 -1
  90. package/dist/rpc/evm/EvmEventLogsReader.hardhat-test.js +209 -3
  91. package/dist/rpc/evm/EvmEventLogsReader.hardhat-test.js.map +1 -1
  92. package/dist/rpc/evm/EvmEventLogsReader.js +96 -11
  93. package/dist/rpc/evm/EvmEventLogsReader.js.map +1 -1
  94. package/dist/rpc/evm/utils.d.ts +7 -11
  95. package/dist/rpc/evm/utils.d.ts.map +1 -1
  96. package/dist/rpc/evm/utils.hardhat-test.js +34 -9
  97. package/dist/rpc/evm/utils.hardhat-test.js.map +1 -1
  98. package/dist/rpc/evm/utils.js +10 -20
  99. package/dist/rpc/evm/utils.js.map +1 -1
  100. package/dist/test/contractDouble.d.ts +8 -0
  101. package/dist/test/contractDouble.d.ts.map +1 -0
  102. package/dist/test/contractDouble.js +12 -0
  103. package/dist/test/contractDouble.js.map +1 -0
  104. package/dist/timelock/evm/constants.d.ts +1 -0
  105. package/dist/timelock/evm/constants.d.ts.map +1 -1
  106. package/dist/timelock/evm/constants.js +1 -0
  107. package/dist/timelock/evm/constants.js.map +1 -1
  108. package/dist/timelock/evm/errors.d.ts +2 -0
  109. package/dist/timelock/evm/errors.d.ts.map +1 -0
  110. package/dist/timelock/evm/errors.js +19 -0
  111. package/dist/timelock/evm/errors.js.map +1 -0
  112. package/dist/timelock/evm/errors.test.d.ts +2 -0
  113. package/dist/timelock/evm/errors.test.d.ts.map +1 -0
  114. package/dist/timelock/evm/errors.test.js +33 -0
  115. package/dist/timelock/evm/errors.test.js.map +1 -0
  116. package/dist/token/EvmWarpModule.d.ts +17 -0
  117. package/dist/token/EvmWarpModule.d.ts.map +1 -1
  118. package/dist/token/EvmWarpModule.hardhat-test.js +144 -0
  119. package/dist/token/EvmWarpModule.hardhat-test.js.map +1 -1
  120. package/dist/token/EvmWarpModule.js +191 -6
  121. package/dist/token/EvmWarpModule.js.map +1 -1
  122. package/dist/token/EvmWarpModule.test.js +232 -8
  123. package/dist/token/EvmWarpModule.test.js.map +1 -1
  124. package/dist/token/EvmWarpRouteReader.d.ts +1 -0
  125. package/dist/token/EvmWarpRouteReader.d.ts.map +1 -1
  126. package/dist/token/EvmWarpRouteReader.hardhat-test.js +68 -3
  127. package/dist/token/EvmWarpRouteReader.hardhat-test.js.map +1 -1
  128. package/dist/token/EvmWarpRouteReader.js +83 -6
  129. package/dist/token/EvmWarpRouteReader.js.map +1 -1
  130. package/dist/token/ITokenMetadata.d.ts +3 -2
  131. package/dist/token/ITokenMetadata.d.ts.map +1 -1
  132. package/dist/token/Token.d.ts.map +1 -1
  133. package/dist/token/Token.js +4 -0
  134. package/dist/token/Token.js.map +1 -1
  135. package/dist/token/Token.test.js +16 -0
  136. package/dist/token/Token.test.js.map +1 -1
  137. package/dist/token/TokenStandard.d.ts +3 -1
  138. package/dist/token/TokenStandard.d.ts.map +1 -1
  139. package/dist/token/TokenStandard.js +6 -0
  140. package/dist/token/TokenStandard.js.map +1 -1
  141. package/dist/token/config.d.ts +2 -0
  142. package/dist/token/config.d.ts.map +1 -1
  143. package/dist/token/config.js +4 -0
  144. package/dist/token/config.js.map +1 -1
  145. package/dist/token/configUtils.d.ts +5 -0
  146. package/dist/token/configUtils.d.ts.map +1 -1
  147. package/dist/token/configUtils.js +30 -6
  148. package/dist/token/configUtils.js.map +1 -1
  149. package/dist/token/configUtils.test.js +21 -1
  150. package/dist/token/configUtils.test.js.map +1 -1
  151. package/dist/token/contracts.d.ts +3 -1
  152. package/dist/token/contracts.d.ts.map +1 -1
  153. package/dist/token/contracts.js +3 -1
  154. package/dist/token/contracts.js.map +1 -1
  155. package/dist/token/deploy.d.ts +3 -1
  156. package/dist/token/deploy.d.ts.map +1 -1
  157. package/dist/token/deploy.hardhat-test.js +111 -3
  158. package/dist/token/deploy.hardhat-test.js.map +1 -1
  159. package/dist/token/deploy.js +52 -3
  160. package/dist/token/deploy.js.map +1 -1
  161. package/dist/token/tokenMetadataUtils.d.ts.map +1 -1
  162. package/dist/token/tokenMetadataUtils.js +20 -2
  163. package/dist/token/tokenMetadataUtils.js.map +1 -1
  164. package/dist/token/types.d.ts +9807 -5533
  165. package/dist/token/types.d.ts.map +1 -1
  166. package/dist/token/types.js +49 -3
  167. package/dist/token/types.js.map +1 -1
  168. package/dist/token/types.test.js +21 -0
  169. package/dist/token/types.test.js.map +1 -1
  170. package/dist/token/warpCheck.d.ts.map +1 -1
  171. package/dist/token/warpCheck.js +100 -2
  172. package/dist/token/warpCheck.js.map +1 -1
  173. package/dist/token/warpCheck.test.js +101 -1
  174. package/dist/token/warpCheck.test.js.map +1 -1
  175. package/dist/warp/types.d.ts +5 -4
  176. package/dist/warp/types.d.ts.map +1 -1
  177. 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,2 @@
1
+ export declare function isDeterministicTimelockReadError(error: unknown): boolean;
2
+ //# sourceMappingURL=errors.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=errors.test.d.ts.map
@@ -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":"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"}
1
+ {"version":3,"file":"EvmWarpModule.d.ts","sourceRoot":"","sources":["../../src/token/EvmWarpModule.ts"],"names":[],"mappings":"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"}
@@ -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 = {