@hyperlane-xyz/sdk 8.8.0 → 8.9.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 (143) hide show
  1. package/dist/block-explorer/etherscan.d.ts +41 -0
  2. package/dist/block-explorer/etherscan.d.ts.map +1 -0
  3. package/dist/block-explorer/etherscan.js +53 -0
  4. package/dist/block-explorer/etherscan.js.map +1 -0
  5. package/dist/ccip/HyperlaneCCIPDeployer.d.ts +18 -0
  6. package/dist/ccip/HyperlaneCCIPDeployer.d.ts.map +1 -0
  7. package/dist/ccip/HyperlaneCCIPDeployer.js +122 -0
  8. package/dist/ccip/HyperlaneCCIPDeployer.js.map +1 -0
  9. package/dist/ccip/consts.d.ts +24 -0
  10. package/dist/ccip/consts.d.ts.map +1 -0
  11. package/dist/ccip/consts.js +691 -0
  12. package/dist/ccip/consts.js.map +1 -0
  13. package/dist/ccip/utils.d.ts +46 -0
  14. package/dist/ccip/utils.d.ts.map +1 -0
  15. package/dist/ccip/utils.js +95 -0
  16. package/dist/ccip/utils.js.map +1 -0
  17. package/dist/consts/multisigIsm.d.ts.map +1 -1
  18. package/dist/consts/multisigIsm.js +27 -9
  19. package/dist/consts/multisigIsm.js.map +1 -1
  20. package/dist/contracts/contracts.d.ts +2 -2
  21. package/dist/contracts/contracts.d.ts.map +1 -1
  22. package/dist/contracts/contracts.js +4 -13
  23. package/dist/contracts/contracts.js.map +1 -1
  24. package/dist/core/HyperlaneRelayer.d.ts +43 -3
  25. package/dist/core/HyperlaneRelayer.d.ts.map +1 -1
  26. package/dist/core/types.d.ts +3558 -2040
  27. package/dist/core/types.d.ts.map +1 -1
  28. package/dist/deploy/proxy.d.ts.map +1 -1
  29. package/dist/deploy/proxy.js +4 -0
  30. package/dist/deploy/proxy.js.map +1 -1
  31. package/dist/deploy/verify/utils.d.ts.map +1 -1
  32. package/dist/deploy/verify/utils.js +3 -9
  33. package/dist/deploy/verify/utils.js.map +1 -1
  34. package/dist/hook/EvmHookModule.d.ts +12 -4
  35. package/dist/hook/EvmHookModule.d.ts.map +1 -1
  36. package/dist/hook/EvmHookModule.hardhat-test.js +2 -106
  37. package/dist/hook/EvmHookModule.hardhat-test.js.map +1 -1
  38. package/dist/hook/EvmHookModule.js +38 -10
  39. package/dist/hook/EvmHookModule.js.map +1 -1
  40. package/dist/hook/EvmHookReader.d.ts +7 -1
  41. package/dist/hook/EvmHookReader.d.ts.map +1 -1
  42. package/dist/hook/EvmHookReader.js +69 -4
  43. package/dist/hook/EvmHookReader.js.map +1 -1
  44. package/dist/hook/EvmHookReader.test.js +50 -1
  45. package/dist/hook/EvmHookReader.test.js.map +1 -1
  46. package/dist/hook/HyperlaneHookDeployer.d.ts +4 -2
  47. package/dist/hook/HyperlaneHookDeployer.d.ts.map +1 -1
  48. package/dist/hook/HyperlaneHookDeployer.js +34 -5
  49. package/dist/hook/HyperlaneHookDeployer.js.map +1 -1
  50. package/dist/hook/contracts.d.ts +4 -1
  51. package/dist/hook/contracts.d.ts.map +1 -1
  52. package/dist/hook/contracts.js +4 -1
  53. package/dist/hook/contracts.js.map +1 -1
  54. package/dist/hook/types.d.ts +2012 -3
  55. package/dist/hook/types.d.ts.map +1 -1
  56. package/dist/hook/types.js +28 -0
  57. package/dist/hook/types.js.map +1 -1
  58. package/dist/index.d.ts +11 -5
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +10 -4
  61. package/dist/index.js.map +1 -1
  62. package/dist/ism/EvmIsmModule.d.ts +4 -2
  63. package/dist/ism/EvmIsmModule.d.ts.map +1 -1
  64. package/dist/ism/EvmIsmModule.hardhat-test.js +10 -71
  65. package/dist/ism/EvmIsmModule.hardhat-test.js.map +1 -1
  66. package/dist/ism/EvmIsmModule.js +4 -4
  67. package/dist/ism/EvmIsmModule.js.map +1 -1
  68. package/dist/ism/EvmIsmReader.d.ts +1 -0
  69. package/dist/ism/EvmIsmReader.d.ts.map +1 -1
  70. package/dist/ism/EvmIsmReader.js +45 -7
  71. package/dist/ism/EvmIsmReader.js.map +1 -1
  72. package/dist/ism/EvmIsmReader.test.js +4 -1
  73. package/dist/ism/EvmIsmReader.test.js.map +1 -1
  74. package/dist/ism/HyperlaneIsmFactory.d.ts +9 -4
  75. package/dist/ism/HyperlaneIsmFactory.d.ts.map +1 -1
  76. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js +15 -0
  77. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js.map +1 -1
  78. package/dist/ism/HyperlaneIsmFactory.js +43 -4
  79. package/dist/ism/HyperlaneIsmFactory.js.map +1 -1
  80. package/dist/ism/metadata/builder.d.ts.map +1 -1
  81. package/dist/ism/metadata/builder.js +1 -0
  82. package/dist/ism/metadata/builder.js.map +1 -1
  83. package/dist/ism/metadata/routing.d.ts.map +1 -1
  84. package/dist/ism/metadata/routing.js +8 -2
  85. package/dist/ism/metadata/routing.js.map +1 -1
  86. package/dist/ism/types.d.ts +34 -5
  87. package/dist/ism/types.d.ts.map +1 -1
  88. package/dist/ism/types.js +15 -0
  89. package/dist/ism/types.js.map +1 -1
  90. package/dist/ism/utils.d.ts.map +1 -1
  91. package/dist/ism/utils.js +30 -2
  92. package/dist/ism/utils.js.map +1 -1
  93. package/dist/metadata/agentConfig.d.ts +276 -276
  94. package/dist/metadata/deploymentArtifacts.d.ts +2 -2
  95. package/dist/router/types.d.ts +129 -9
  96. package/dist/router/types.d.ts.map +1 -1
  97. package/dist/test/testUtils.d.ts +8 -0
  98. package/dist/test/testUtils.d.ts.map +1 -1
  99. package/dist/test/testUtils.js +191 -1
  100. package/dist/test/testUtils.js.map +1 -1
  101. package/dist/token/EvmERC20WarpModule.d.ts +4 -1
  102. package/dist/token/EvmERC20WarpModule.d.ts.map +1 -1
  103. package/dist/token/EvmERC20WarpModule.js +12 -8
  104. package/dist/token/EvmERC20WarpModule.js.map +1 -1
  105. package/dist/token/EvmERC20WarpRouteReader.d.ts +4 -3
  106. package/dist/token/EvmERC20WarpRouteReader.d.ts.map +1 -1
  107. package/dist/token/EvmERC20WarpRouteReader.hardhat-test.js +72 -3
  108. package/dist/token/EvmERC20WarpRouteReader.hardhat-test.js.map +1 -1
  109. package/dist/token/EvmERC20WarpRouteReader.js +84 -15
  110. package/dist/token/EvmERC20WarpRouteReader.js.map +1 -1
  111. package/dist/token/adapters/EvmTokenAdapter.d.ts +49 -15
  112. package/dist/token/adapters/EvmTokenAdapter.d.ts.map +1 -1
  113. package/dist/token/adapters/EvmTokenAdapter.js +152 -42
  114. package/dist/token/adapters/EvmTokenAdapter.js.map +1 -1
  115. package/dist/token/adapters/ITokenAdapter.d.ts +19 -0
  116. package/dist/token/adapters/ITokenAdapter.d.ts.map +1 -1
  117. package/dist/token/checker.d.ts +4 -1
  118. package/dist/token/checker.d.ts.map +1 -1
  119. package/dist/token/checker.js +33 -5
  120. package/dist/token/checker.js.map +1 -1
  121. package/dist/token/config.d.ts +1 -0
  122. package/dist/token/config.d.ts.map +1 -1
  123. package/dist/token/config.js +1 -0
  124. package/dist/token/config.js.map +1 -1
  125. package/dist/token/configUtils.d.ts +10 -0
  126. package/dist/token/configUtils.d.ts.map +1 -0
  127. package/dist/token/configUtils.js +48 -0
  128. package/dist/token/configUtils.js.map +1 -0
  129. package/dist/token/deploy.d.ts.map +1 -1
  130. package/dist/token/deploy.hardhat-test.js +69 -6
  131. package/dist/token/deploy.hardhat-test.js.map +1 -1
  132. package/dist/token/deploy.js +6 -4
  133. package/dist/token/deploy.js.map +1 -1
  134. package/dist/token/types.d.ts +1333 -220
  135. package/dist/token/types.d.ts.map +1 -1
  136. package/dist/token/types.js +117 -2
  137. package/dist/token/types.js.map +1 -1
  138. package/dist/token/xerc20.d.ts +13 -0
  139. package/dist/token/xerc20.d.ts.map +1 -0
  140. package/dist/token/xerc20.js +174 -0
  141. package/dist/token/xerc20.js.map +1 -0
  142. package/dist/warp/types.d.ts +14 -14
  143. package/package.json +3 -3
@@ -0,0 +1,41 @@
1
+ import { Address, HexString } from '@hyperlane-xyz/utils';
2
+ interface EtherscanLikeAPIOptions {
3
+ apiKey?: string;
4
+ apiUrl: string;
5
+ }
6
+ interface BaseEtherscanLikeAPIParams<TModule extends string, TAction extends string> {
7
+ module: TModule;
8
+ action: TAction;
9
+ }
10
+ type GetContractDeploymentTransactionResponse = {
11
+ contractAddress: Address;
12
+ contractCreator: Address;
13
+ txHash: HexString;
14
+ };
15
+ export declare function tryGetContractDeploymentTransaction(explorerOptions: EtherscanLikeAPIOptions, { contractAddress }: {
16
+ contractAddress: Address;
17
+ }): Promise<GetContractDeploymentTransactionResponse | undefined>;
18
+ export declare function getContractDeploymentTransaction(explorerOptions: EtherscanLikeAPIOptions, requestOptions: {
19
+ contractAddress: Address;
20
+ }): Promise<GetContractDeploymentTransactionResponse>;
21
+ interface GetEventLogs extends BaseEtherscanLikeAPIParams<'logs', 'getLogs'> {
22
+ address: Address;
23
+ fromBlock: number;
24
+ toBlock: number;
25
+ topic0: string;
26
+ }
27
+ export type GetEventLogsResponse = {
28
+ address: Address;
29
+ blockNumber: HexString;
30
+ data: HexString;
31
+ gasPrice: HexString;
32
+ gasUsed: HexString;
33
+ logIndex: HexString;
34
+ timeStamp: HexString;
35
+ topics: ReadonlyArray<HexString>;
36
+ transactionHash: HexString;
37
+ transactionIndex: HexString;
38
+ };
39
+ export declare function getLogsFromEtherscanLikeExplorerAPI({ apiUrl, apiKey: apikey }: EtherscanLikeAPIOptions, options: Omit<GetEventLogs, 'module' | 'action'>): Promise<Array<GetEventLogsResponse>>;
40
+ export {};
41
+ //# sourceMappingURL=etherscan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"etherscan.d.ts","sourceRoot":"","sources":["../../src/block-explorer/etherscan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE1D,UAAU,uBAAuB;IAE/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,0BAA0B,CAClC,OAAO,SAAS,MAAM,EACtB,OAAO,SAAS,MAAM;IAEtB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAuCD,KAAK,wCAAwC,GAAG;IAC9C,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,wBAAsB,mCAAmC,CACvD,eAAe,EAAE,uBAAuB,EACxC,EAAE,eAAe,EAAE,EAAE;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,GAChD,OAAO,CAAC,wCAAwC,GAAG,SAAS,CAAC,CAe/D;AAED,wBAAsB,gCAAgC,CACpD,eAAe,EAAE,uBAAuB,EACxC,cAAc,EAAE;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,GAC3C,OAAO,CAAC,wCAAwC,CAAC,CAanD;AAGD,UAAU,YAAa,SAAQ,0BAA0B,CAAC,MAAM,EAAE,SAAS,CAAC;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,SAAS,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACjC,eAAe,EAAE,SAAS,CAAC;IAC3B,gBAAgB,EAAE,SAAS,CAAC;CAC7B,CAAC;AAEF,wBAAsB,mCAAmC,CACvD,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,uBAAuB,EACnD,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,QAAQ,CAAC,GAC/C,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAetC"}
@@ -0,0 +1,53 @@
1
+ function formatExplorerUrl({ apiUrl, apiKey }, params) {
2
+ // hack for Blockscout API urls that in the explorer have the `eth-rpc` path set
3
+ // as it will cause requests to fail with a not found error
4
+ const urlObject = new URL(apiUrl.replace('eth-rpc', ''));
5
+ for (const [key, value] of Object.entries(params)) {
6
+ if (value !== undefined) {
7
+ urlObject.searchParams.append(key, value.toString());
8
+ }
9
+ }
10
+ if (apiKey) {
11
+ urlObject.searchParams.append('apikey', apiKey);
12
+ }
13
+ return urlObject.toString();
14
+ }
15
+ async function handleEtherscanResponse(response) {
16
+ const body = await response.json();
17
+ if (body.status === '0') {
18
+ throw new Error(`Error while performing request to Etherscan like API: ${body.message} ${body.result}`);
19
+ }
20
+ return body.result;
21
+ }
22
+ export async function tryGetContractDeploymentTransaction(explorerOptions, { contractAddress }) {
23
+ const options = {
24
+ module: 'contract',
25
+ action: 'getcontractcreation',
26
+ contractaddresses: contractAddress,
27
+ };
28
+ const requestUrl = formatExplorerUrl(explorerOptions, options);
29
+ const response = await fetch(requestUrl);
30
+ const [deploymentTx] = await handleEtherscanResponse(response);
31
+ return deploymentTx;
32
+ }
33
+ export async function getContractDeploymentTransaction(explorerOptions, requestOptions) {
34
+ const deploymentTx = await tryGetContractDeploymentTransaction(explorerOptions, requestOptions);
35
+ if (!deploymentTx) {
36
+ throw new Error(`No deployment transaction found for contract ${requestOptions.contractAddress}`);
37
+ }
38
+ return deploymentTx;
39
+ }
40
+ export async function getLogsFromEtherscanLikeExplorerAPI({ apiUrl, apiKey: apikey }, options) {
41
+ const data = {
42
+ module: 'logs',
43
+ action: 'getLogs',
44
+ address: options.address,
45
+ fromBlock: options.fromBlock,
46
+ toBlock: options.toBlock,
47
+ topic0: options.topic0,
48
+ };
49
+ const requestUrl = formatExplorerUrl({ apiUrl, apiKey: apikey }, data);
50
+ const response = await fetch(requestUrl);
51
+ return handleEtherscanResponse(response);
52
+ }
53
+ //# sourceMappingURL=etherscan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"etherscan.js","sourceRoot":"","sources":["../../src/block-explorer/etherscan.ts"],"names":[],"mappings":"AAgBA,SAAS,iBAAiB,CACxB,EAAE,MAAM,EAAE,MAAM,EAA2B,EAC3C,MAAoD;IAEpD,gFAAgF;IAChF,2DAA2D;IAC3D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAI,QAAkB;IAC1D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,yDAAyD,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CACvF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAaD,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,eAAwC,EACxC,EAAE,eAAe,EAAgC;IAEjD,MAAM,OAAO,GAAqC;QAChD,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,qBAAqB;QAC7B,iBAAiB,EAAE,eAAe;KACnC,CAAC;IAEF,MAAM,UAAU,GAAG,iBAAiB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;IAEzC,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,uBAAuB,CAElD,QAAQ,CAAC,CAAC;IAEZ,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,eAAwC,EACxC,cAA4C;IAE5C,MAAM,YAAY,GAAG,MAAM,mCAAmC,CAC5D,eAAe,EACf,cAAc,CACf,CAAC;IAEF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,gDAAgD,cAAc,CAAC,eAAe,EAAE,CACjF,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAuBD,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAA2B,EACnD,OAAgD;IAEhD,MAAM,IAAI,GAAiB;QACzB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;IAEF,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;IAEzC,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { HyperlaneAddressesMap, HyperlaneContracts } from '../contracts/types.js';
2
+ import { CoreAddresses } from '../core/contracts.js';
3
+ import { HyperlaneDeployer } from '../deploy/HyperlaneDeployer.js';
4
+ import { ContractVerifier } from '../deploy/verify/ContractVerifier.js';
5
+ import { MultiProvider } from '../providers/MultiProvider.js';
6
+ import { ChainMap, ChainName } from '../types.js';
7
+ export declare class HyperlaneCCIPDeployer extends HyperlaneDeployer<Set<ChainName>, {}> {
8
+ readonly core: ChainMap<Partial<CoreAddresses>>;
9
+ private ccipContractCache;
10
+ constructor(multiProvider: MultiProvider, core: ChainMap<Partial<CoreAddresses>>, contractVerifier?: ContractVerifier);
11
+ cacheAddressesMap(addressesMap: HyperlaneAddressesMap<any>): void;
12
+ deployContracts(origin: ChainName, config: Set<ChainName>): Promise<HyperlaneContracts<{}>>;
13
+ private checkCCIPLanesSupport;
14
+ private authorizeHook;
15
+ protected deployCCIPIsm(origin: ChainName, destination: ChainName): Promise<void>;
16
+ protected deployCCIPHook(origin: ChainName, destination: ChainName): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=HyperlaneCCIPDeployer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyperlaneCCIPDeployer.d.ts","sourceRoot":"","sources":["../../src/ccip/HyperlaneCCIPDeployer.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AASlD,qBAAa,qBAAsB,SAAQ,iBAAiB,CAC1D,GAAG,CAAC,SAAS,CAAC,EACd,EAAE,CACH;IAKG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAJjD,OAAO,CAAC,iBAAiB,CAA8C;gBAGrE,aAAa,EAAE,aAAa,EACnB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAC/C,gBAAgB,CAAC,EAAE,gBAAgB;IAYrC,iBAAiB,CAAC,YAAY,EAAE,qBAAqB,CAAC,GAAG,CAAC,GAAG,IAAI;IAK3D,eAAe,CACnB,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,GACrB,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAsCpB,qBAAqB;YA4BrB,aAAa;cA8DX,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,SAAS,GACrB,OAAO,CAAC,IAAI,CAAC;cAmCA,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,SAAS,GACrB,OAAO,CAAC,IAAI,CAAC;CAoDjB"}
@@ -0,0 +1,122 @@
1
+ import { CCIPHook__factory, CCIPIsm__factory } from '@hyperlane-xyz/core';
2
+ import { ZERO_ADDRESS_HEX_32, addressToBytes32, assert, rootLogger, } from '@hyperlane-xyz/utils';
3
+ import { HyperlaneDeployer } from '../deploy/HyperlaneDeployer.js';
4
+ import { CCIPContractCache, getCCIPChainSelector, getCCIPRouterAddress, isSupportedCCIPLane, } from './utils.js';
5
+ export class HyperlaneCCIPDeployer extends HyperlaneDeployer {
6
+ core;
7
+ ccipContractCache = new CCIPContractCache();
8
+ constructor(multiProvider, core, contractVerifier) {
9
+ super(multiProvider, {}, {
10
+ logger: rootLogger.child({ module: 'HyperlaneCCIPDeployer' }),
11
+ contractVerifier,
12
+ });
13
+ this.core = core;
14
+ }
15
+ cacheAddressesMap(addressesMap) {
16
+ super.cacheAddressesMap(addressesMap);
17
+ this.ccipContractCache.cacheAddressesMap(addressesMap);
18
+ }
19
+ async deployContracts(origin, config) {
20
+ const unsupportedLanes = await this.checkCCIPLanesSupport(origin, config);
21
+ if (unsupportedLanes.length > 0) {
22
+ this.logger.warn(`CCIP lanes not configured from ${origin} to ${unsupportedLanes.join(', ')}. Skipping these chains.`);
23
+ unsupportedLanes.forEach((lane) => config.delete(lane));
24
+ }
25
+ // Deploy ISMs from chain to each destination chain concurrently.
26
+ // This is done in parallel since the ISM is deployed on discrete destination chains.
27
+ await Promise.all(Array.from(config).map(async (destination) => {
28
+ // Deploy CCIP ISM for this origin->destination pair
29
+ await this.deployCCIPIsm(origin, destination);
30
+ }));
31
+ // On the origin chain, deploy hooks for each destination chain in series.
32
+ // This is done in series to avoid nonce contention on the origin chain.
33
+ for (const destination of config) {
34
+ await this.deployCCIPHook(origin, destination);
35
+ }
36
+ // Authorize hooks for each destination chain concurrently.
37
+ // This is done in parallel since the ISM is deployed on discrete destination chains.
38
+ await Promise.all(Array.from(config).map(async (destination) => {
39
+ await this.authorizeHook(origin, destination);
40
+ }));
41
+ this.ccipContractCache.writeBack(this.cachedAddresses);
42
+ return {};
43
+ }
44
+ async checkCCIPLanesSupport(origin, config) {
45
+ this.logger.info(`Checking CCIP lanes exist from ${origin} to ${Array.from(config).join(', ')}`);
46
+ // Check if the CCIP lane is supported for each destination chain
47
+ const isSupportedLane = await Promise.all(Array.from(config).map(async (destination) => {
48
+ const isSupported = await isSupportedCCIPLane({
49
+ origin,
50
+ destination,
51
+ multiProvider: this.multiProvider,
52
+ });
53
+ return { destination, isSupported };
54
+ }));
55
+ // Return the destination chains that are not supported
56
+ return isSupportedLane
57
+ .filter((result) => !result.isSupported)
58
+ .map((result) => result.destination);
59
+ }
60
+ async authorizeHook(origin, destination) {
61
+ const ccipIsmAddress = this.ccipContractCache.getIsm(origin, destination);
62
+ assert(ccipIsmAddress, `CCIP ISM not found for ${origin} -> ${destination}`);
63
+ const ccipHookAddress = this.ccipContractCache.getHook(origin, destination);
64
+ assert(ccipHookAddress, `CCIP Hook not found for ${origin} -> ${destination}`);
65
+ const bytes32HookAddress = addressToBytes32(ccipHookAddress);
66
+ const ccipIsm = CCIPIsm__factory.connect(ccipIsmAddress, this.multiProvider.getSigner(destination));
67
+ const authorizedHook = await ccipIsm.authorizedHook();
68
+ this.logger.debug('Authorized hook on ism %s: %s', ccipIsm.address, authorizedHook);
69
+ // If the hook is already set, return
70
+ if (authorizedHook === bytes32HookAddress) {
71
+ this.logger.info('Authorized hook already set on ism %s', ccipIsm.address);
72
+ return;
73
+ }
74
+ // If not already set, must not be initialised yet
75
+ if (authorizedHook !== ZERO_ADDRESS_HEX_32) {
76
+ this.logger.error('Authorized hook mismatch on ism %s, expected %s, got %s', ccipIsm.address, bytes32HookAddress, authorizedHook);
77
+ throw new Error('Authorized hook mismatch');
78
+ }
79
+ // If not initialised, set the hook
80
+ this.logger.info('Setting authorized hook %s on ism %s on destination %s', ccipHookAddress, ccipIsm.address, destination);
81
+ await this.multiProvider.handleTx(destination, ccipIsm.setAuthorizedHook(bytes32HookAddress, this.multiProvider.getTransactionOverrides(destination)));
82
+ }
83
+ async deployCCIPIsm(origin, destination) {
84
+ const cachedIsm = this.ccipContractCache.getIsm(origin, destination);
85
+ if (cachedIsm) {
86
+ this.logger.debug('CCIP ISM already deployed for %s -> %s: %s', origin, destination, cachedIsm);
87
+ return;
88
+ }
89
+ const ccipOriginChainSelector = getCCIPChainSelector(origin);
90
+ const ccipIsmChainRouterAddress = getCCIPRouterAddress(destination);
91
+ assert(ccipOriginChainSelector, `CCIP chain selector not found for ${origin}`);
92
+ assert(ccipIsmChainRouterAddress, `CCIP router address not found for ${origin}`);
93
+ const ccipIsm = await this.deployContractFromFactory(destination, new CCIPIsm__factory(), 'CCIPIsm', [ccipIsmChainRouterAddress, ccipOriginChainSelector], undefined, false);
94
+ this.ccipContractCache.setIsm(origin, destination, ccipIsm);
95
+ }
96
+ async deployCCIPHook(origin, destination) {
97
+ // Grab the ISM from the cache
98
+ const ccipIsmAddress = this.ccipContractCache.getIsm(origin, destination);
99
+ assert(ccipIsmAddress, `CCIP ISM not found for ${origin} -> ${destination}`);
100
+ const cachedHook = this.ccipContractCache.getHook(origin, destination);
101
+ if (cachedHook) {
102
+ this.logger.debug('CCIP Hook already deployed for %s -> %s: %s', origin, destination, cachedHook);
103
+ return;
104
+ }
105
+ const mailbox = this.core[origin].mailbox;
106
+ assert(mailbox, `Mailbox address is required for ${origin}`);
107
+ const ccipDestinationChainSelector = getCCIPChainSelector(destination);
108
+ const ccipOriginChainRouterAddress = getCCIPRouterAddress(origin);
109
+ assert(ccipDestinationChainSelector, `CCIP chain selector not found for ${destination}`);
110
+ assert(ccipOriginChainRouterAddress, `CCIP router address not found for ${destination}`);
111
+ const destinationDomain = this.multiProvider.getDomainId(destination);
112
+ const ccipHook = await this.deployContractFromFactory(origin, new CCIPHook__factory(), 'CCIPHook', [
113
+ ccipOriginChainRouterAddress,
114
+ ccipDestinationChainSelector,
115
+ mailbox,
116
+ destinationDomain,
117
+ addressToBytes32(ccipIsmAddress),
118
+ ], undefined, false);
119
+ this.ccipContractCache.setHook(origin, destination, ccipHook);
120
+ }
121
+ }
122
+ //# sourceMappingURL=HyperlaneCCIPDeployer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyperlaneCCIPDeployer.js","sourceRoot":"","sources":["../../src/ccip/HyperlaneCCIPDeployer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { ChainMap } from '../types.js';
2
+ export type CCIPAddresses = {
3
+ armProxy: {
4
+ address: string;
5
+ version: string;
6
+ };
7
+ chainSelector: string;
8
+ feeTokens: string[];
9
+ registryModule: {
10
+ address: string;
11
+ version: string;
12
+ };
13
+ router: {
14
+ address: string;
15
+ version: string;
16
+ };
17
+ tokenAdminRegistry: {
18
+ address: string;
19
+ version: string;
20
+ };
21
+ };
22
+ export declare const CCIP_ROUTER_CLIENT_ABI: string[];
23
+ export declare const CCIP_NETWORKS: ChainMap<CCIPAddresses>;
24
+ //# sourceMappingURL=consts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/ccip/consts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,kBAAkB,EAAE;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAIF,eAAO,MAAM,sBAAsB,UAGlC,CAAC;AAIF,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,aAAa,CAyqBjD,CAAC"}