@hyperlane-xyz/sdk 22.0.0 → 23.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.
Files changed (157) hide show
  1. package/dist/consts/igp.d.ts +1 -0
  2. package/dist/consts/igp.d.ts.map +1 -1
  3. package/dist/consts/igp.js +8 -3
  4. package/dist/consts/igp.js.map +1 -1
  5. package/dist/consts/multisigIsm.d.ts.map +1 -1
  6. package/dist/consts/multisigIsm.js +23 -148
  7. package/dist/consts/multisigIsm.js.map +1 -1
  8. package/dist/contracts/contracts.d.ts.map +1 -1
  9. package/dist/contracts/contracts.js +2 -0
  10. package/dist/contracts/contracts.js.map +1 -1
  11. package/dist/core/HyperlaneCore.d.ts +24 -0
  12. package/dist/core/HyperlaneCore.d.ts.map +1 -1
  13. package/dist/core/HyperlaneCore.js +38 -3
  14. package/dist/core/HyperlaneCore.js.map +1 -1
  15. package/dist/core/MultiProtocolCore.d.ts.map +1 -1
  16. package/dist/core/MultiProtocolCore.js +3 -0
  17. package/dist/core/MultiProtocolCore.js.map +1 -1
  18. package/dist/core/adapters/AleoCoreAdapter.d.ts +22 -0
  19. package/dist/core/adapters/AleoCoreAdapter.d.ts.map +1 -0
  20. package/dist/core/adapters/AleoCoreAdapter.js +33 -0
  21. package/dist/core/adapters/AleoCoreAdapter.js.map +1 -0
  22. package/dist/deploy/proxy.d.ts +2 -0
  23. package/dist/deploy/proxy.d.ts.map +1 -1
  24. package/dist/deploy/proxy.js +10 -4
  25. package/dist/deploy/proxy.js.map +1 -1
  26. package/dist/deploy/proxy.test.js +44 -1
  27. package/dist/deploy/proxy.test.js.map +1 -1
  28. package/dist/gas/utils.d.ts.map +1 -1
  29. package/dist/gas/utils.js +11 -8
  30. package/dist/gas/utils.js.map +1 -1
  31. package/dist/index.d.ts +7 -9
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +5 -7
  34. package/dist/index.js.map +1 -1
  35. package/dist/ism/HyperlaneIsmFactory.hardhat-test.d.ts +1 -3
  36. package/dist/ism/HyperlaneIsmFactory.hardhat-test.d.ts.map +1 -1
  37. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js +6 -96
  38. package/dist/ism/HyperlaneIsmFactory.hardhat-test.js.map +1 -1
  39. package/dist/ism/multisig.js +2 -2
  40. package/dist/ism/multisig.js.map +1 -1
  41. package/dist/ism/utils.d.ts +1 -0
  42. package/dist/ism/utils.d.ts.map +1 -1
  43. package/dist/ism/utils.js +4 -1
  44. package/dist/ism/utils.js.map +1 -1
  45. package/dist/metadata/agentConfig.d.ts +16 -16
  46. package/dist/metadata/blockExplorer.d.ts.map +1 -1
  47. package/dist/metadata/blockExplorer.js +2 -0
  48. package/dist/metadata/blockExplorer.js.map +1 -1
  49. package/dist/middleware/account/InterchainAccount.d.ts +21 -1
  50. package/dist/middleware/account/InterchainAccount.d.ts.map +1 -1
  51. package/dist/middleware/account/InterchainAccount.js +120 -8
  52. package/dist/middleware/account/InterchainAccount.js.map +1 -1
  53. package/dist/middleware/account/InterchainAccount.test.d.ts +2 -0
  54. package/dist/middleware/account/InterchainAccount.test.d.ts.map +1 -0
  55. package/dist/middleware/account/InterchainAccount.test.js +279 -0
  56. package/dist/middleware/account/InterchainAccount.test.js.map +1 -0
  57. package/dist/middleware/account/types.d.ts +37 -3
  58. package/dist/middleware/account/types.d.ts.map +1 -1
  59. package/dist/middleware/account/types.js +8 -3
  60. package/dist/middleware/account/types.js.map +1 -1
  61. package/dist/providers/MultiProvider.d.ts +26 -4
  62. package/dist/providers/MultiProvider.d.ts.map +1 -1
  63. package/dist/providers/MultiProvider.js +59 -5
  64. package/dist/providers/MultiProvider.js.map +1 -1
  65. package/dist/providers/transactions/submitter/IcaTxSubmitter.d.ts.map +1 -1
  66. package/dist/providers/transactions/submitter/IcaTxSubmitter.js +4 -1
  67. package/dist/providers/transactions/submitter/IcaTxSubmitter.js.map +1 -1
  68. package/dist/test/testUtils.d.ts +9 -2
  69. package/dist/test/testUtils.d.ts.map +1 -1
  70. package/dist/test/testUtils.js +99 -3
  71. package/dist/test/testUtils.js.map +1 -1
  72. package/dist/token/Token.d.ts.map +1 -1
  73. package/dist/token/Token.js +21 -0
  74. package/dist/token/Token.js.map +1 -1
  75. package/dist/token/adapters/AleoTokenAdapter.d.ts +60 -0
  76. package/dist/token/adapters/AleoTokenAdapter.d.ts.map +1 -0
  77. package/dist/token/adapters/AleoTokenAdapter.js +190 -0
  78. package/dist/token/adapters/AleoTokenAdapter.js.map +1 -0
  79. package/dist/token/adapters/EvmTokenAdapter.d.ts +26 -9
  80. package/dist/token/adapters/EvmTokenAdapter.d.ts.map +1 -1
  81. package/dist/token/adapters/EvmTokenAdapter.js +36 -31
  82. package/dist/token/adapters/EvmTokenAdapter.js.map +1 -1
  83. package/dist/token/adapters/ITokenAdapter.d.ts +5 -2
  84. package/dist/token/adapters/ITokenAdapter.d.ts.map +1 -1
  85. package/dist/token/adapters/utils.d.ts +7 -0
  86. package/dist/token/adapters/utils.d.ts.map +1 -0
  87. package/dist/token/adapters/utils.js +4 -0
  88. package/dist/token/adapters/utils.js.map +1 -0
  89. package/dist/utils/gas.d.ts +29 -0
  90. package/dist/utils/gas.d.ts.map +1 -0
  91. package/dist/utils/gas.js +34 -0
  92. package/dist/utils/gas.js.map +1 -0
  93. package/package.json +11 -11
  94. package/dist/core/HyperlaneRelayer.d.ts +0 -600
  95. package/dist/core/HyperlaneRelayer.d.ts.map +0 -1
  96. package/dist/core/HyperlaneRelayer.js +0 -257
  97. package/dist/core/HyperlaneRelayer.js.map +0 -1
  98. package/dist/ism/metadata/aggregation.d.ts +0 -23
  99. package/dist/ism/metadata/aggregation.d.ts.map +0 -1
  100. package/dist/ism/metadata/aggregation.js +0 -92
  101. package/dist/ism/metadata/aggregation.js.map +0 -1
  102. package/dist/ism/metadata/aggregation.test.d.ts +0 -2
  103. package/dist/ism/metadata/aggregation.test.d.ts.map +0 -1
  104. package/dist/ism/metadata/aggregation.test.js +0 -37
  105. package/dist/ism/metadata/aggregation.test.js.map +0 -1
  106. package/dist/ism/metadata/arbL2ToL1.d.ts +0 -25
  107. package/dist/ism/metadata/arbL2ToL1.d.ts.map +0 -1
  108. package/dist/ism/metadata/arbL2ToL1.hardhat-test.d.ts +0 -2
  109. package/dist/ism/metadata/arbL2ToL1.hardhat-test.d.ts.map +0 -1
  110. package/dist/ism/metadata/arbL2ToL1.hardhat-test.js +0 -167
  111. package/dist/ism/metadata/arbL2ToL1.hardhat-test.js.map +0 -1
  112. package/dist/ism/metadata/arbL2ToL1.js +0 -133
  113. package/dist/ism/metadata/arbL2ToL1.js.map +0 -1
  114. package/dist/ism/metadata/builder.d.ts +0 -23
  115. package/dist/ism/metadata/builder.d.ts.map +0 -1
  116. package/dist/ism/metadata/builder.hardhat-test.d.ts +0 -2
  117. package/dist/ism/metadata/builder.hardhat-test.d.ts.map +0 -1
  118. package/dist/ism/metadata/builder.hardhat-test.js +0 -137
  119. package/dist/ism/metadata/builder.hardhat-test.js.map +0 -1
  120. package/dist/ism/metadata/builder.js +0 -87
  121. package/dist/ism/metadata/builder.js.map +0 -1
  122. package/dist/ism/metadata/ccipread.d.ts +0 -12
  123. package/dist/ism/metadata/ccipread.d.ts.map +0 -1
  124. package/dist/ism/metadata/ccipread.hardhat-test.d.ts +0 -2
  125. package/dist/ism/metadata/ccipread.hardhat-test.d.ts.map +0 -1
  126. package/dist/ism/metadata/ccipread.hardhat-test.js +0 -98
  127. package/dist/ism/metadata/ccipread.hardhat-test.js.map +0 -1
  128. package/dist/ism/metadata/ccipread.js +0 -73
  129. package/dist/ism/metadata/ccipread.js.map +0 -1
  130. package/dist/ism/metadata/decode.d.ts +0 -3
  131. package/dist/ism/metadata/decode.d.ts.map +0 -1
  132. package/dist/ism/metadata/decode.js +0 -34
  133. package/dist/ism/metadata/decode.js.map +0 -1
  134. package/dist/ism/metadata/multisig.d.ts +0 -57
  135. package/dist/ism/metadata/multisig.d.ts.map +0 -1
  136. package/dist/ism/metadata/multisig.js +0 -186
  137. package/dist/ism/metadata/multisig.js.map +0 -1
  138. package/dist/ism/metadata/multisig.test.d.ts +0 -2
  139. package/dist/ism/metadata/multisig.test.d.ts.map +0 -1
  140. package/dist/ism/metadata/multisig.test.js +0 -56
  141. package/dist/ism/metadata/multisig.test.js.map +0 -1
  142. package/dist/ism/metadata/null.d.ts +0 -15
  143. package/dist/ism/metadata/null.d.ts.map +0 -1
  144. package/dist/ism/metadata/null.js +0 -20
  145. package/dist/ism/metadata/null.js.map +0 -1
  146. package/dist/ism/metadata/routing.d.ts +0 -22
  147. package/dist/ism/metadata/routing.d.ts.map +0 -1
  148. package/dist/ism/metadata/routing.js +0 -72
  149. package/dist/ism/metadata/routing.js.map +0 -1
  150. package/dist/ism/metadata/types.d.ts +0 -20
  151. package/dist/ism/metadata/types.d.ts.map +0 -1
  152. package/dist/ism/metadata/types.js +0 -2
  153. package/dist/ism/metadata/types.js.map +0 -1
  154. package/dist/ism/metadata/types.test.d.ts +0 -5
  155. package/dist/ism/metadata/types.test.d.ts.map +0 -1
  156. package/dist/ism/metadata/types.test.js +0 -2
  157. package/dist/ism/metadata/types.test.js.map +0 -1
@@ -1,98 +0,0 @@
1
- import { expect } from 'chai';
2
- import { ethers } from 'ethers';
3
- import hre from 'hardhat';
4
- import sinon from 'sinon';
5
- import { TestCcipReadIsm__factory } from '@hyperlane-xyz/core';
6
- import { TestCoreDeployer } from '../../core/TestCoreDeployer.js';
7
- import { TestRecipientDeployer } from '../../core/TestRecipientDeployer.js';
8
- import { HyperlaneProxyFactoryDeployer } from '../../deploy/HyperlaneProxyFactoryDeployer.js';
9
- import { MultiProvider } from '../../providers/MultiProvider.js';
10
- import { EvmIsmReader } from '../EvmIsmReader.js';
11
- import { HyperlaneIsmFactory } from '../HyperlaneIsmFactory.js';
12
- import { BaseMetadataBuilder } from './builder.js';
13
- import { offchainLookupRequestMessageHash } from './ccipread.js';
14
- const OFFCHAIN_LOOKUP_SERVER_URL = 'http://example.com/namespace';
15
- describe('Offchain Lookup ISM Integration', () => {
16
- let core;
17
- let multiProvider;
18
- let testRecipient;
19
- let ccipReadIsm;
20
- let metadataBuilder;
21
- let ismFactory;
22
- let fetchStub;
23
- beforeEach(async () => {
24
- // Set up a local test multi-provider and Hyperlane core
25
- const signers = await hre.ethers.getSigners();
26
- multiProvider = MultiProvider.createTestMultiProvider({
27
- signer: signers[0],
28
- });
29
- const ismFactoryDeployer = new HyperlaneProxyFactoryDeployer(multiProvider);
30
- const contractsMap = await ismFactoryDeployer.deploy(multiProvider.mapKnownChains(() => ({})));
31
- ismFactory = new HyperlaneIsmFactory(contractsMap, multiProvider);
32
- core = await new TestCoreDeployer(multiProvider, ismFactory).deployApp();
33
- // Deploy a TestRecipient on test1
34
- const deployments = await new TestRecipientDeployer(multiProvider).deploy({
35
- test2: {},
36
- });
37
- testRecipient = deployments.test2.testRecipient;
38
- // Deploy the TestCcipReadIsm on test1 domain
39
- const domain = multiProvider.getDomainId('test1');
40
- ccipReadIsm = await multiProvider.handleDeploy(domain, new TestCcipReadIsm__factory(),
41
- // Pass in desired offchain URLs for the ISM constructor:
42
- [[OFFCHAIN_LOOKUP_SERVER_URL]]);
43
- // Configure the TestRecipient to use the CCIP-Read ISM
44
- await testRecipient.setInterchainSecurityModule(ccipReadIsm.address);
45
- // Prepare the metadata builder
46
- metadataBuilder = new BaseMetadataBuilder(core);
47
- fetchStub = sinon.stub(global, 'fetch').resolves({
48
- ok: true,
49
- json: async () => ({
50
- data: '0x0000000000000000000000000000000000000000000000000000000000000001',
51
- }),
52
- });
53
- });
54
- it('should process a message protected by CCIP-Read ISM', async () => {
55
- // Send a message from test1 to test2
56
- const { dispatchTx, message } = await core.sendMessage('test1', 'test2', testRecipient.address, '0x1234');
57
- // Derive the on-chain ISM config for CCIP-Read
58
- const derivedIsm = await new EvmIsmReader(multiProvider, 'test2').deriveOffchainLookupConfig(ccipReadIsm.address);
59
- // Build the metadata using the CCIP-Read builder
60
- const context = {
61
- ism: derivedIsm,
62
- message,
63
- dispatchTx,
64
- hook: {},
65
- };
66
- const metadata = await metadataBuilder.build(context);
67
- // Finally, call mailbox.process on test2 with the metadata and message
68
- const mailbox = core.getContracts('test2').mailbox;
69
- await expect(mailbox.process(metadata, message.message)).to.not.be.reverted;
70
- });
71
- it('sends signature field in request when calling fetch', async () => {
72
- const { dispatchTx, message } = await core.sendMessage('test1', 'test2', testRecipient.address, '0x1234');
73
- // Derive the on-chain ISM config for CCIP-Read
74
- const derivedIsm = (await new EvmIsmReader(multiProvider, 'test2').deriveIsmConfig(ccipReadIsm.address));
75
- // Build the metadata using the CCIP-Read builder
76
- const context = {
77
- ism: derivedIsm,
78
- message,
79
- dispatchTx,
80
- hook: {},
81
- };
82
- await metadataBuilder.build(context);
83
- // Verify that fetch was called exactly once
84
- expect(fetchStub.calledOnce).to.be.true;
85
- const [url, options] = fetchStub.getCall(0).args;
86
- const payload = JSON.parse(options.body);
87
- expect(url).to.equal(OFFCHAIN_LOOKUP_SERVER_URL.replace('{data}', payload.data));
88
- // Should include sender, data, and signature
89
- expect(payload).to.include.keys('sender', 'data', 'signature');
90
- expect(payload.sender).to.equal(ccipReadIsm.address);
91
- const recovered = ethers.utils.verifyMessage(ethers.utils.arrayify(offchainLookupRequestMessageHash(payload.sender, payload.data, OFFCHAIN_LOOKUP_SERVER_URL)), payload.signature);
92
- expect(recovered).to.equal((await hre.ethers.getSigners())[0].address);
93
- });
94
- afterEach(() => {
95
- fetchStub.restore();
96
- });
97
- });
98
- //# sourceMappingURL=ccipread.hardhat-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ccipread.hardhat-test.js","sourceRoot":"","sources":["../../../src/ism/metadata/ccipread.hardhat-test.ts"],"names":[],"mappings":"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"}
@@ -1,73 +0,0 @@
1
- import { utils } from 'ethers';
2
- import { AbstractCcipReadIsm__factory } from '@hyperlane-xyz/core';
3
- import { ensure0x } from '@hyperlane-xyz/utils';
4
- import { IsmType } from '../types.js';
5
- export class OffchainLookupMetadataBuilder {
6
- type = IsmType.OFFCHAIN_LOOKUP;
7
- core;
8
- constructor(core) {
9
- this.core = core;
10
- }
11
- async build(context) {
12
- const { ism, message } = context;
13
- const provider = this.core.multiProvider.getProvider(message.parsed.destination);
14
- const contract = AbstractCcipReadIsm__factory.connect(ism.address, provider);
15
- let revertData;
16
- try {
17
- // Should revert with OffchainLookup
18
- await contract.getOffchainVerifyInfo(message.message);
19
- throw new Error('Expected OffchainLookup revert');
20
- }
21
- catch (err) {
22
- revertData = err.error?.data || err.data;
23
- if (!revertData)
24
- throw err;
25
- }
26
- const parsed = contract.interface.parseError(revertData);
27
- if (parsed.name !== 'OffchainLookup') {
28
- throw new Error(`Unexpected error ${parsed.name}`);
29
- }
30
- const [sender, urls, callData] = parsed.args;
31
- const callDataHex = utils.hexlify(callData);
32
- const signer = this.core.multiProvider.getSigner(message.parsed.destination);
33
- for (const urlTemplate of urls) {
34
- const url = urlTemplate
35
- .replace('{sender}', sender)
36
- .replace('{data}', callDataHex);
37
- let res;
38
- try {
39
- if (urlTemplate.includes('{data}')) {
40
- res = await fetch(url);
41
- }
42
- else {
43
- const signature = await signer.signMessage(utils.arrayify(offchainLookupRequestMessageHash(sender, callDataHex, urlTemplate)));
44
- res = await fetch(url, {
45
- method: 'POST',
46
- headers: { 'Content-Type': 'application/json' },
47
- body: JSON.stringify({ sender, data: callDataHex, signature }),
48
- });
49
- }
50
- }
51
- catch (error) {
52
- this.core.logger.warn(`CCIP-read metadata fetch failed for ${url}: ${error}`);
53
- // try next URL
54
- continue;
55
- }
56
- try {
57
- const responseJson = await res.json();
58
- if (res.ok) {
59
- return ensure0x(responseJson.data);
60
- }
61
- }
62
- catch (error) {
63
- this.core.logger.warn(`CCIP-read metadata fetch failed for ${url}: ${error}`);
64
- // try next URL
65
- }
66
- }
67
- throw new Error('Could not fetch CCIP-read metadata');
68
- }
69
- }
70
- export function offchainLookupRequestMessageHash(sender, callData, urlTemplate) {
71
- return utils.solidityKeccak256(['string', 'address', 'bytes', 'string'], ['HYPERLANE_OFFCHAINLOOKUP', sender, callData, urlTemplate]);
72
- }
73
- //# sourceMappingURL=ccipread.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ccipread.js","sourceRoot":"","sources":["../../../src/ism/metadata/ccipread.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { MetadataContext, StructuredMetadata } from './types.js';
2
- export declare function decodeIsmMetadata(metadata: string, context: MetadataContext): StructuredMetadata;
3
- //# sourceMappingURL=decode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../src/ism/metadata/decode.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,GACvB,kBAAkB,CA+BpB"}
@@ -1,34 +0,0 @@
1
- import { IsmType } from '../types.js';
2
- import { AggregationMetadataBuilder } from './aggregation.js';
3
- import { ArbL2ToL1MetadataBuilder } from './arbL2ToL1.js';
4
- import { MultisigMetadataBuilder } from './multisig.js';
5
- import { NullMetadataBuilder } from './null.js';
6
- import { DynamicRoutingMetadataBuilder } from './routing.js';
7
- export function decodeIsmMetadata(metadata, context) {
8
- const { ism } = context;
9
- switch (ism.type) {
10
- case IsmType.TRUSTED_RELAYER:
11
- return NullMetadataBuilder.decode(ism);
12
- case IsmType.MERKLE_ROOT_MULTISIG:
13
- case IsmType.MESSAGE_ID_MULTISIG:
14
- case IsmType.STORAGE_MERKLE_ROOT_MULTISIG:
15
- case IsmType.STORAGE_MESSAGE_ID_MULTISIG:
16
- return MultisigMetadataBuilder.decode(metadata, ism.type);
17
- case IsmType.AGGREGATION:
18
- case IsmType.STORAGE_AGGREGATION:
19
- return AggregationMetadataBuilder.decode(metadata, { ...context, ism });
20
- case IsmType.ROUTING:
21
- return DynamicRoutingMetadataBuilder.decode(metadata, {
22
- ...context,
23
- ism,
24
- });
25
- case IsmType.ARB_L2_TO_L1:
26
- return ArbL2ToL1MetadataBuilder.decode(metadata, {
27
- ...context,
28
- ism,
29
- });
30
- default:
31
- throw new Error(`Unsupported ISM type: ${ism.type}`);
32
- }
33
- }
34
- //# sourceMappingURL=decode.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../src/ism/metadata/decode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAG7D,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,OAAwB;IAExB,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,eAAe;YAC1B,OAAO,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEzC,KAAK,OAAO,CAAC,oBAAoB,CAAC;QAClC,KAAK,OAAO,CAAC,mBAAmB,CAAC;QACjC,KAAK,OAAO,CAAC,4BAA4B,CAAC;QAC1C,KAAK,OAAO,CAAC,2BAA2B;YACtC,OAAO,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE5D,KAAK,OAAO,CAAC,WAAW,CAAC;QACzB,KAAK,OAAO,CAAC,mBAAmB;YAC9B,OAAO,0BAA0B,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAE1E,KAAK,OAAO,CAAC,OAAO;YAClB,OAAO,6BAA6B,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACpD,GAAG,OAAO;gBACV,GAAG;aACJ,CAAC,CAAC;QAEL,KAAK,OAAO,CAAC,YAAY;YACvB,OAAO,wBAAwB,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC/C,GAAG,OAAO;gBACV,GAAG;aACJ,CAAC,CAAC;QAEL;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
@@ -1,57 +0,0 @@
1
- import { Address, Checkpoint, MerkleProof, S3CheckpointWithId, SignatureLike, WithAddress } from '@hyperlane-xyz/utils';
2
- import { S3Validator } from '../../aws/validator.js';
3
- import { HyperlaneCore } from '../../core/HyperlaneCore.js';
4
- import { MerkleTreeHookConfig } from '../../hook/types.js';
5
- import { ChainName } from '../../types.js';
6
- import { IsmType, MultisigIsmConfig } from '../types.js';
7
- import type { MetadataBuilder, MetadataContext } from './types.js';
8
- interface MessageIdMultisigMetadata {
9
- type: typeof IsmType.MESSAGE_ID_MULTISIG;
10
- signatures: SignatureLike[];
11
- checkpoint: Omit<Checkpoint, 'mailbox_domain'>;
12
- }
13
- interface MerkleRootMultisigMetadata extends Omit<MessageIdMultisigMetadata, 'type'> {
14
- type: typeof IsmType.MERKLE_ROOT_MULTISIG;
15
- proof: MerkleProof;
16
- }
17
- export type MultisigMetadata = MessageIdMultisigMetadata | MerkleRootMultisigMetadata;
18
- export declare class MultisigMetadataBuilder implements MetadataBuilder {
19
- protected readonly core: HyperlaneCore;
20
- protected readonly logger: import("pino").default.Logger<never>;
21
- protected validatorCache: Record<ChainName, Record<string, S3Validator>>;
22
- constructor(core: HyperlaneCore, logger?: import("pino").default.Logger<never>);
23
- protected s3Validators(originChain: ChainName, validators: string[]): Promise<S3Validator[]>;
24
- getS3Checkpoints(validators: Address[], match: {
25
- origin: number;
26
- merkleTree: Address;
27
- messageId: string;
28
- index: number;
29
- }): Promise<S3CheckpointWithId[]>;
30
- build(context: MetadataContext<WithAddress<MultisigIsmConfig>, WithAddress<MerkleTreeHookConfig>>): Promise<string>;
31
- protected static encodeSimplePrefix(metadata: MessageIdMultisigMetadata): string;
32
- static decodeSimplePrefix(metadata: string): {
33
- signatureOffset: number;
34
- type: IsmType;
35
- checkpoint: {
36
- root: string;
37
- index: number;
38
- merkle_tree_hook_address: string;
39
- };
40
- };
41
- static encodeProofPrefix(metadata: MerkleRootMultisigMetadata): string;
42
- static decodeProofPrefix(metadata: string): {
43
- signatureOffset: number;
44
- type: IsmType;
45
- checkpoint: {
46
- root: string;
47
- index: number;
48
- merkle_tree_hook_address: string;
49
- };
50
- proof: MerkleProof;
51
- };
52
- static encode(metadata: MultisigMetadata): string;
53
- static signatureAt(metadata: string, offset: number, index: number): SignatureLike | undefined;
54
- static decode(metadata: string, type: typeof IsmType.MERKLE_ROOT_MULTISIG | typeof IsmType.MESSAGE_ID_MULTISIG | typeof IsmType.STORAGE_MERKLE_ROOT_MULTISIG | typeof IsmType.STORAGE_MESSAGE_ID_MULTISIG): MultisigMetadata;
55
- }
56
- export {};
57
- //# sourceMappingURL=multisig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multisig.d.ts","sourceRoot":"","sources":["../../../src/ism/metadata/multisig.ts"],"names":[],"mappings":"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"}
@@ -1,186 +0,0 @@
1
- import { joinSignature, splitSignature } from 'ethers/lib/utils.js';
2
- import { MerkleTreeHook__factory } from '@hyperlane-xyz/core';
3
- import { assert, bytes32ToAddress, chunk, ensure0x, eqAddress, eqAddressEvm, fromHexString, mapAllSettled, rootLogger, strip0x, toHexString, } from '@hyperlane-xyz/utils';
4
- import { S3Validator } from '../../aws/validator.js';
5
- import { IsmType } from '../types.js';
6
- const MerkleTreeInterface = MerkleTreeHook__factory.createInterface();
7
- const SIGNATURE_LENGTH = 65;
8
- export class MultisigMetadataBuilder {
9
- core;
10
- logger;
11
- validatorCache = {};
12
- constructor(core, logger = rootLogger.child({
13
- module: 'MultisigMetadataBuilder',
14
- })) {
15
- this.core = core;
16
- this.logger = logger;
17
- }
18
- async s3Validators(originChain, validators) {
19
- this.validatorCache[originChain] ??= {};
20
- const toFetch = validators.filter((v) => !(v in this.validatorCache[originChain]));
21
- if (toFetch.length > 0) {
22
- const validatorAnnounce = this.core.getContracts(originChain).validatorAnnounce;
23
- const storageLocations = await validatorAnnounce.getAnnouncedStorageLocations(toFetch);
24
- this.logger.debug({ storageLocations }, 'Fetched storage locations');
25
- const s3Validators = await Promise.all(storageLocations.map((locations) => {
26
- const latestLocation = locations.slice(-1)[0];
27
- return S3Validator.fromStorageLocation(latestLocation);
28
- }));
29
- this.logger.debug({ s3Validators }, 'Fetched validators');
30
- toFetch.forEach((validator, index) => {
31
- this.validatorCache[originChain][validator] = s3Validators[index];
32
- });
33
- }
34
- return validators.map((v) => this.validatorCache[originChain][v]);
35
- }
36
- async getS3Checkpoints(validators, match) {
37
- this.logger.debug({ match, validators }, 'Fetching checkpoints');
38
- const originChain = this.core.multiProvider.getChainName(match.origin);
39
- const s3Validators = await this.s3Validators(originChain, validators);
40
- const { fulfilled, rejected } = await mapAllSettled(s3Validators, (v) => v.getCheckpoint(match.index));
41
- for (const [, error] of rejected) {
42
- this.logger.error({ error }, 'Failed to fetch checkpoint');
43
- }
44
- const checkpoints = [...fulfilled.values()].filter((value) => value !== undefined);
45
- this.logger.debug({ checkpoints }, 'Fetched checkpoints');
46
- if (checkpoints.length < validators.length) {
47
- this.logger.debug({ checkpoints, validators, match }, `Found ${checkpoints.length} checkpoints out of ${validators.length} validators`);
48
- }
49
- const matchingCheckpoints = checkpoints.filter(({ value }) => eqAddress(bytes32ToAddress(value.checkpoint.merkle_tree_hook_address), match.merkleTree) &&
50
- value.message_id === match.messageId &&
51
- value.checkpoint.index === match.index &&
52
- value.checkpoint.mailbox_domain === match.origin);
53
- if (matchingCheckpoints.length !== checkpoints.length) {
54
- this.logger.warn({ matchingCheckpoints, checkpoints, match }, 'Mismatched checkpoints');
55
- }
56
- return matchingCheckpoints;
57
- }
58
- async build(context) {
59
- assert(context.ism.type === IsmType.MESSAGE_ID_MULTISIG ||
60
- context.ism.type === IsmType.STORAGE_MESSAGE_ID_MULTISIG, 'Merkle proofs are not yet supported');
61
- const merkleTree = context.hook.address;
62
- const matchingInsertion = context.dispatchTx.logs
63
- .filter((log) => eqAddressEvm(log.address, merkleTree))
64
- .map((log) => MerkleTreeInterface.parseLog(log))
65
- .find((event) => event.args.messageId === context.message.id);
66
- assert(matchingInsertion, `No merkle tree insertion of ${context.message.id} to ${merkleTree} found in dispatch tx`);
67
- this.logger.debug({ matchingInsertion }, 'Found matching insertion event');
68
- const checkpoints = await this.getS3Checkpoints(context.ism.validators, {
69
- origin: context.message.parsed.origin,
70
- messageId: context.message.id,
71
- merkleTree,
72
- index: matchingInsertion.args.index,
73
- });
74
- assert(checkpoints.length >= context.ism.threshold, `Only ${checkpoints.length} of ${context.ism.threshold} required checkpoints found`);
75
- this.logger.debug({ checkpoints }, `Found ${checkpoints.length} checkpoints for message ${context.message.id}`);
76
- const signatures = checkpoints
77
- .map((checkpoint) => checkpoint.signature)
78
- .slice(0, context.ism.threshold);
79
- this.logger.debug({ signatures, ism: context.ism }, `Taking ${signatures.length} (threshold) signatures for message ${context.message.id}`);
80
- const metadata = {
81
- type: IsmType.MESSAGE_ID_MULTISIG,
82
- checkpoint: checkpoints[0].value.checkpoint,
83
- signatures,
84
- };
85
- return MultisigMetadataBuilder.encode(metadata);
86
- }
87
- static encodeSimplePrefix(metadata) {
88
- const checkpoint = metadata.checkpoint;
89
- const buf = Buffer.alloc(68);
90
- buf.write(strip0x(checkpoint.merkle_tree_hook_address), 0, 32, 'hex');
91
- buf.write(strip0x(checkpoint.root), 32, 32, 'hex');
92
- buf.writeUInt32BE(checkpoint.index, 64);
93
- return toHexString(buf);
94
- }
95
- static decodeSimplePrefix(metadata) {
96
- const buf = fromHexString(metadata);
97
- const merkleTree = toHexString(buf.subarray(0, 32));
98
- const root = toHexString(buf.subarray(32, 64));
99
- const index = buf.readUint32BE(64);
100
- const checkpoint = {
101
- root,
102
- index,
103
- merkle_tree_hook_address: merkleTree,
104
- };
105
- return {
106
- signatureOffset: 68,
107
- type: IsmType.MESSAGE_ID_MULTISIG,
108
- checkpoint,
109
- };
110
- }
111
- static encodeProofPrefix(metadata) {
112
- const checkpoint = metadata.checkpoint;
113
- const buf = Buffer.alloc(1096);
114
- buf.write(strip0x(checkpoint.merkle_tree_hook_address), 0, 32, 'hex');
115
- buf.writeUInt32BE(metadata.proof.index, 32);
116
- buf.write(strip0x(metadata.proof.leaf.toString()), 36, 32, 'hex');
117
- const branchEncoded = metadata.proof.branch
118
- .map((b) => strip0x(b.toString()))
119
- .join('');
120
- buf.write(branchEncoded, 68, 32 * 32, 'hex');
121
- buf.writeUint32BE(checkpoint.index, 1092);
122
- return toHexString(buf);
123
- }
124
- static decodeProofPrefix(metadata) {
125
- const buf = fromHexString(metadata);
126
- const merkleTree = toHexString(buf.subarray(0, 32));
127
- const messageIndex = buf.readUint32BE(32);
128
- const signedMessageId = toHexString(buf.subarray(36, 68));
129
- const branchEncoded = buf.subarray(68, 1092).toString('hex');
130
- const branch = chunk(branchEncoded, 32 * 2).map((v) => ensure0x(v));
131
- const signedIndex = buf.readUint32BE(1092);
132
- const checkpoint = {
133
- root: '',
134
- index: messageIndex,
135
- merkle_tree_hook_address: merkleTree,
136
- };
137
- const proof = {
138
- branch,
139
- leaf: signedMessageId,
140
- index: signedIndex,
141
- };
142
- return {
143
- signatureOffset: 1096,
144
- type: IsmType.MERKLE_ROOT_MULTISIG,
145
- checkpoint,
146
- proof,
147
- };
148
- }
149
- static encode(metadata) {
150
- let encoded = metadata.type === IsmType.MESSAGE_ID_MULTISIG
151
- ? this.encodeSimplePrefix(metadata)
152
- : this.encodeProofPrefix(metadata);
153
- metadata.signatures.forEach((signature) => {
154
- const encodedSignature = joinSignature(signature);
155
- assert(fromHexString(encodedSignature).byteLength === SIGNATURE_LENGTH, 'Invalid signature length');
156
- encoded += strip0x(encodedSignature);
157
- });
158
- return encoded;
159
- }
160
- static signatureAt(metadata, offset, index) {
161
- const buf = fromHexString(metadata);
162
- const start = offset + index * SIGNATURE_LENGTH;
163
- const end = start + SIGNATURE_LENGTH;
164
- if (end > buf.byteLength) {
165
- return undefined;
166
- }
167
- return toHexString(buf.subarray(start, end));
168
- }
169
- static decode(metadata, type) {
170
- const prefix = type === IsmType.MERKLE_ROOT_MULTISIG ||
171
- type === IsmType.STORAGE_MERKLE_ROOT_MULTISIG
172
- ? this.decodeProofPrefix(metadata)
173
- : this.decodeSimplePrefix(metadata);
174
- const { signatureOffset: offset, ...values } = prefix;
175
- const signatures = [];
176
- for (let i = 0; this.signatureAt(metadata, offset, i); i++) {
177
- const { r, s, v } = splitSignature(this.signatureAt(metadata, offset, i));
178
- signatures.push({ r, s, v });
179
- }
180
- return {
181
- signatures,
182
- ...values,
183
- };
184
- }
185
- }
186
- //# sourceMappingURL=multisig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multisig.js","sourceRoot":"","sources":["../../../src/ism/metadata/multisig.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=multisig.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multisig.test.d.ts","sourceRoot":"","sources":["../../../src/ism/metadata/multisig.test.ts"],"names":[],"mappings":""}
@@ -1,56 +0,0 @@
1
- import { expect } from 'chai';
2
- import { existsSync, readFileSync, readdirSync } from 'fs';
3
- import { IsmType, ModuleType } from '../types.js';
4
- import { MultisigMetadataBuilder } from './multisig.js';
5
- const path = '../../solidity/fixtures/multisig';
6
- const files = existsSync(path) ? readdirSync(path) : [];
7
- const fixtures = files
8
- .map((f) => JSON.parse(readFileSync(`${path}/${f}`, 'utf8')))
9
- .map((contents) => {
10
- const type = contents.type;
11
- const { dummy: _dummy, ...signatureValues } = contents.signatures;
12
- const signatures = Object.values(signatureValues);
13
- let decoded;
14
- if (type === ModuleType.MERKLE_ROOT_MULTISIG) {
15
- const { dummy: _dummy, ...branchValues } = contents.prefix.proof;
16
- const branch = Object.values(branchValues);
17
- decoded = {
18
- type: IsmType.MERKLE_ROOT_MULTISIG,
19
- proof: {
20
- branch,
21
- leaf: contents.prefix.id,
22
- index: contents.prefix.signedIndex,
23
- },
24
- checkpoint: {
25
- root: '',
26
- index: contents.prefix.index,
27
- merkle_tree_hook_address: contents.prefix.merkleTree,
28
- },
29
- signatures,
30
- };
31
- }
32
- else {
33
- decoded = {
34
- type: IsmType.MESSAGE_ID_MULTISIG,
35
- checkpoint: {
36
- root: contents.prefix.root,
37
- index: contents.prefix.signedIndex,
38
- merkle_tree_hook_address: contents.prefix.merkleTree,
39
- },
40
- signatures,
41
- };
42
- }
43
- return { decoded, encoded: contents.encoded };
44
- });
45
- // FIXME: migrate to mocha rules: eslint-disable-next-line jest/no-disabled-tests
46
- describe.skip('MultisigMetadataBuilder', () => {
47
- fixtures.forEach((fixture, i) => {
48
- it(`should encode fixture ${i}`, () => {
49
- expect(MultisigMetadataBuilder.encode(fixture.decoded)).to.equal(fixture.encoded);
50
- });
51
- it(`should decode fixture ${i}`, () => {
52
- expect(MultisigMetadataBuilder.decode(fixture.encoded, fixture.decoded.type)).to.deep.equal(fixture.decoded);
53
- });
54
- });
55
- });
56
- //# sourceMappingURL=multisig.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multisig.test.js","sourceRoot":"","sources":["../../../src/ism/metadata/multisig.test.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { WithAddress } from '@hyperlane-xyz/utils';
2
- import { MultiProvider } from '../../providers/MultiProvider.js';
3
- import { NullIsmConfig } from '../types.js';
4
- import type { MetadataBuilder, MetadataContext } from './types.js';
5
- export declare const NULL_METADATA = "0x";
6
- export type NullMetadata = {
7
- type: NullIsmConfig['type'];
8
- };
9
- export declare class NullMetadataBuilder implements MetadataBuilder {
10
- protected multiProvider: MultiProvider;
11
- constructor(multiProvider: MultiProvider);
12
- build(context: MetadataContext<WithAddress<NullIsmConfig>>): Promise<string>;
13
- static decode(ism: NullIsmConfig): NullMetadata;
14
- }
15
- //# sourceMappingURL=null.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"null.d.ts","sourceRoot":"","sources":["../../../src/ism/metadata/null.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqB,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAW,aAAa,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC7B,CAAC;AAEF,qBAAa,mBAAoB,YAAW,eAAe;IAC7C,SAAS,CAAC,aAAa,EAAE,aAAa;gBAA5B,aAAa,EAAE,aAAa;IAE5C,KAAK,CACT,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,GACnD,OAAO,CAAC,MAAM,CAAC;IAalB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY;CAGhD"}
@@ -1,20 +0,0 @@
1
- import { assert, eqAddress } from '@hyperlane-xyz/utils';
2
- import { IsmType } from '../types.js';
3
- export const NULL_METADATA = '0x';
4
- export class NullMetadataBuilder {
5
- multiProvider;
6
- constructor(multiProvider) {
7
- this.multiProvider = multiProvider;
8
- }
9
- async build(context) {
10
- if (context.ism.type === IsmType.TRUSTED_RELAYER) {
11
- const destinationSigner = await this.multiProvider.getSignerAddress(context.message.parsed.destination);
12
- assert(eqAddress(destinationSigner, context.ism.relayer), `Destination signer ${destinationSigner} does not match trusted relayer ${context.ism.relayer}`);
13
- }
14
- return NULL_METADATA;
15
- }
16
- static decode(ism) {
17
- return { ...ism };
18
- }
19
- }
20
- //# sourceMappingURL=null.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"null.js","sourceRoot":"","sources":["../../../src/ism/metadata/null.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,MAAM,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtE,OAAO,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAC;AAIrD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAMlC,MAAM,OAAO,mBAAmB;IACR;IAAtB,YAAsB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAEtD,KAAK,CAAC,KAAK,CACT,OAAoD;QAEpD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC;YACjD,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CACjE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CACnC,CAAC;YACF,MAAM,CACJ,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EACjD,sBAAsB,iBAAiB,mCAAmC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAChG,CAAC;QACJ,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAkB;QAC9B,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC;IACpB,CAAC;CACF"}