@recoillink/deploy-sdk 0.0.0-stage → 11.0.1

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 (103) hide show
  1. package/LICENSE.md +193 -0
  2. package/dist/AltVMFileSubmitter.d.ts +12 -0
  3. package/dist/AltVMFileSubmitter.d.ts.map +1 -0
  4. package/dist/AltVMFileSubmitter.js +35 -0
  5. package/dist/AltVMFileSubmitter.js.map +1 -0
  6. package/dist/AltVMFileSubmitter.test.d.ts +2 -0
  7. package/dist/AltVMFileSubmitter.test.d.ts.map +1 -0
  8. package/dist/AltVMFileSubmitter.test.js +46 -0
  9. package/dist/AltVMFileSubmitter.test.js.map +1 -0
  10. package/dist/AltVMJsonRpcSubmitter.d.ts +2 -0
  11. package/dist/AltVMJsonRpcSubmitter.d.ts.map +1 -0
  12. package/dist/AltVMJsonRpcSubmitter.js +2 -0
  13. package/dist/AltVMJsonRpcSubmitter.js.map +1 -0
  14. package/dist/core/core-artifact-reader.d.ts +67 -0
  15. package/dist/core/core-artifact-reader.d.ts.map +1 -0
  16. package/dist/core/core-artifact-reader.js +118 -0
  17. package/dist/core/core-artifact-reader.js.map +1 -0
  18. package/dist/core/core-artifact-reader.test.d.ts +2 -0
  19. package/dist/core/core-artifact-reader.test.d.ts.map +1 -0
  20. package/dist/core/core-artifact-reader.test.js +310 -0
  21. package/dist/core/core-artifact-reader.test.js.map +1 -0
  22. package/dist/core/core-writer.d.ts +43 -0
  23. package/dist/core/core-writer.d.ts.map +1 -0
  24. package/dist/core/core-writer.js +238 -0
  25. package/dist/core/core-writer.js.map +1 -0
  26. package/dist/core/core-writer.test.d.ts +2 -0
  27. package/dist/core/core-writer.test.d.ts.map +1 -0
  28. package/dist/core/core-writer.test.js +1315 -0
  29. package/dist/core/core-writer.test.js.map +1 -0
  30. package/dist/fee/fee-reader.d.ts +25 -0
  31. package/dist/fee/fee-reader.d.ts.map +1 -0
  32. package/dist/fee/fee-reader.js +35 -0
  33. package/dist/fee/fee-reader.js.map +1 -0
  34. package/dist/fee/fee-writer.d.ts +31 -0
  35. package/dist/fee/fee-writer.d.ts.map +1 -0
  36. package/dist/fee/fee-writer.js +45 -0
  37. package/dist/fee/fee-writer.js.map +1 -0
  38. package/dist/hook/hook-reader.d.ts +41 -0
  39. package/dist/hook/hook-reader.d.ts.map +1 -0
  40. package/dist/hook/hook-reader.js +52 -0
  41. package/dist/hook/hook-reader.js.map +1 -0
  42. package/dist/hook/hook-writer.d.ts +101 -0
  43. package/dist/hook/hook-writer.d.ts.map +1 -0
  44. package/dist/hook/hook-writer.js +140 -0
  45. package/dist/hook/hook-writer.js.map +1 -0
  46. package/dist/hook/hook-writer.test.d.ts +2 -0
  47. package/dist/hook/hook-writer.test.d.ts.map +1 -0
  48. package/dist/hook/hook-writer.test.js +70 -0
  49. package/dist/hook/hook-writer.test.js.map +1 -0
  50. package/dist/index.d.ts +14 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +17 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/ism/generic-ism-context.test.d.ts +2 -0
  55. package/dist/ism/generic-ism-context.test.d.ts.map +1 -0
  56. package/dist/ism/generic-ism-context.test.js +112 -0
  57. package/dist/ism/generic-ism-context.test.js.map +1 -0
  58. package/dist/ism/generic-ism-writer.d.ts +62 -0
  59. package/dist/ism/generic-ism-writer.d.ts.map +1 -0
  60. package/dist/ism/generic-ism-writer.js +100 -0
  61. package/dist/ism/generic-ism-writer.js.map +1 -0
  62. package/dist/ism/generic-ism.d.ts +43 -0
  63. package/dist/ism/generic-ism.d.ts.map +1 -0
  64. package/dist/ism/generic-ism.js +105 -0
  65. package/dist/ism/generic-ism.js.map +1 -0
  66. package/dist/ism/generic-ism.test.d.ts +2 -0
  67. package/dist/ism/generic-ism.test.d.ts.map +1 -0
  68. package/dist/ism/generic-ism.test.js +145 -0
  69. package/dist/ism/generic-ism.test.js.map +1 -0
  70. package/dist/ism/routing-ism.d.ts +21 -0
  71. package/dist/ism/routing-ism.d.ts.map +1 -0
  72. package/dist/ism/routing-ism.js +149 -0
  73. package/dist/ism/routing-ism.js.map +1 -0
  74. package/dist/protocol.d.ts +3 -0
  75. package/dist/protocol.d.ts.map +1 -0
  76. package/dist/protocol.js +38 -0
  77. package/dist/protocol.js.map +1 -0
  78. package/dist/protocol.test.d.ts +2 -0
  79. package/dist/protocol.test.d.ts.map +1 -0
  80. package/dist/protocol.test.js +14 -0
  81. package/dist/protocol.test.js.map +1 -0
  82. package/dist/utils/validation.d.ts +46 -0
  83. package/dist/utils/validation.d.ts.map +1 -0
  84. package/dist/utils/validation.js +132 -0
  85. package/dist/utils/validation.js.map +1 -0
  86. package/dist/utils/validation.test.d.ts +2 -0
  87. package/dist/utils/validation.test.d.ts.map +1 -0
  88. package/dist/utils/validation.test.js +160 -0
  89. package/dist/utils/validation.test.js.map +1 -0
  90. package/dist/warp/warp-reader.d.ts +57 -0
  91. package/dist/warp/warp-reader.d.ts.map +1 -0
  92. package/dist/warp/warp-reader.js +135 -0
  93. package/dist/warp/warp-reader.js.map +1 -0
  94. package/dist/warp/warp-writer.d.ts +67 -0
  95. package/dist/warp/warp-writer.d.ts.map +1 -0
  96. package/dist/warp/warp-writer.js +381 -0
  97. package/dist/warp/warp-writer.js.map +1 -0
  98. package/dist/warp/warp-writer.test.d.ts +2 -0
  99. package/dist/warp/warp-writer.test.d.ts.map +1 -0
  100. package/dist/warp/warp-writer.test.js +1855 -0
  101. package/dist/warp/warp-writer.test.js.map +1 -0
  102. package/package.json +54 -3
  103. package/README.md +0 -3
@@ -0,0 +1,310 @@
1
+ import { expect } from 'chai';
2
+ import sinon from 'sinon';
3
+ import { hasProtocol, registerProtocol, } from '@recoillink/provider-sdk';
4
+ import { ArtifactState } from '@recoillink/provider-sdk/artifact';
5
+ import { ZERO_ADDRESS_HEX_32 } from '@recoillink/utils';
6
+ import { CoreArtifactReader } from './core-artifact-reader.js';
7
+ // Test protocol
8
+ const TestProtocol = 'test-core-reader';
9
+ const mockProtocolProvider = {
10
+ createProvider: sinon.stub(),
11
+ createSigner: sinon.stub(),
12
+ createSubmitter: sinon.stub(),
13
+ createIsmArtifactManager: sinon.stub(),
14
+ createHookArtifactManager: sinon.stub(),
15
+ createMailboxArtifactManager: sinon.stub(),
16
+ createValidatorAnnounceArtifactManager: sinon.stub(),
17
+ createFeeArtifactManager: sinon.stub(),
18
+ getMinGas: sinon.stub(),
19
+ createWarpArtifactManager: sinon.stub(),
20
+ };
21
+ if (!hasProtocol(TestProtocol)) {
22
+ registerProtocol(TestProtocol, () => mockProtocolProvider);
23
+ }
24
+ describe('CoreArtifactReader', () => {
25
+ const mockMailboxAddress = '0xMAILBOX';
26
+ const mockIsmAddress = '0xISM';
27
+ const mockDefaultHookAddress = '0xDEFAULTHOOK';
28
+ const mockRequiredHookAddress = '0xREQUIREDHOOK';
29
+ const mockOwner = '0xOWNER';
30
+ const mockDomainId = 1;
31
+ const chainName = 'test-chain';
32
+ let readMailboxStub;
33
+ let mailboxArtifactManager;
34
+ let chainLookup;
35
+ let chainMetadata;
36
+ let coreReader;
37
+ const mockContractVersion = '1.2.3';
38
+ const mockRawMailbox = {
39
+ artifactState: ArtifactState.DEPLOYED,
40
+ config: {
41
+ owner: mockOwner,
42
+ defaultIsm: {
43
+ artifactState: ArtifactState.UNDERIVED,
44
+ deployed: { address: mockIsmAddress },
45
+ },
46
+ defaultHook: {
47
+ artifactState: ArtifactState.UNDERIVED,
48
+ deployed: { address: mockDefaultHookAddress },
49
+ },
50
+ requiredHook: {
51
+ artifactState: ArtifactState.UNDERIVED,
52
+ deployed: { address: mockRequiredHookAddress },
53
+ },
54
+ contractVersion: mockContractVersion,
55
+ },
56
+ deployed: { address: mockMailboxAddress, domainId: mockDomainId },
57
+ };
58
+ const mockExpandedIsm = {
59
+ artifactState: ArtifactState.DEPLOYED,
60
+ config: {
61
+ type: 'merkleRootMultisigIsm',
62
+ validators: ['0xVALIDATOR1'],
63
+ threshold: 1,
64
+ },
65
+ deployed: { address: mockIsmAddress },
66
+ };
67
+ const mockExpandedDefaultHook = {
68
+ artifactState: ArtifactState.DEPLOYED,
69
+ config: {
70
+ type: 'merkleTreeHook',
71
+ },
72
+ deployed: { address: mockDefaultHookAddress },
73
+ };
74
+ const mockExpandedRequiredHook = {
75
+ artifactState: ArtifactState.DEPLOYED,
76
+ config: {
77
+ type: 'interchainGasPaymaster',
78
+ owner: mockOwner,
79
+ beneficiary: '0xBENEFICIARY',
80
+ oracleKey: '0xORACLE',
81
+ overhead: {},
82
+ oracleConfig: {},
83
+ },
84
+ deployed: { address: mockRequiredHookAddress },
85
+ };
86
+ let mockIsmReader;
87
+ let mockHookReader;
88
+ beforeEach(() => {
89
+ readMailboxStub = sinon
90
+ .stub()
91
+ .resolves(mockRawMailbox);
92
+ mailboxArtifactManager = {
93
+ readMailbox: readMailboxStub,
94
+ createReader: sinon.stub(),
95
+ createWriter: sinon.stub(),
96
+ };
97
+ chainMetadata = {
98
+ name: chainName,
99
+ domainId: mockDomainId,
100
+ protocol: TestProtocol,
101
+ chainId: mockDomainId,
102
+ };
103
+ chainLookup = {
104
+ getChainMetadata: sinon
105
+ .stub()
106
+ .returns(chainMetadata),
107
+ getChainName: sinon.stub().returns(chainName),
108
+ getDomainId: sinon
109
+ .stub()
110
+ .returns(mockDomainId),
111
+ getKnownChainNames: sinon.stub().returns([chainName]),
112
+ getKnownDomainIds: sinon
113
+ .stub()
114
+ .returns(new Set([mockDomainId])),
115
+ };
116
+ mockIsmReader = {
117
+ read: sinon.stub(),
118
+ };
119
+ mockHookReader = {
120
+ read: sinon.stub(),
121
+ };
122
+ coreReader = Object.create(CoreArtifactReader.prototype);
123
+ Object.assign(coreReader, {
124
+ mailboxArtifactManager,
125
+ chainMetadata,
126
+ chainLookup,
127
+ ismReader: mockIsmReader,
128
+ hookReaderFactory: () => mockHookReader,
129
+ });
130
+ });
131
+ afterEach(() => {
132
+ sinon.restore();
133
+ });
134
+ describe('read', () => {
135
+ it('should read mailbox and expand nested ISM/hook artifacts', async () => {
136
+ // ARRANGE
137
+ mockIsmReader.read.resolves(mockExpandedIsm);
138
+ mockHookReader.read
139
+ .onFirstCall()
140
+ .resolves(mockExpandedDefaultHook)
141
+ .onSecondCall()
142
+ .resolves(mockExpandedRequiredHook);
143
+ // ACT
144
+ const result = await coreReader.read(mockMailboxAddress);
145
+ // ASSERT
146
+ expect(result.artifactState).to.equal(ArtifactState.DEPLOYED);
147
+ expect(result.config.owner).to.equal(mockOwner);
148
+ expect(result.deployed.address).to.equal(mockMailboxAddress);
149
+ expect(result.deployed.domainId).to.equal(mockDomainId);
150
+ expect(result.config.defaultIsm).to.deep.equal(mockExpandedIsm);
151
+ expect(result.config.defaultHook).to.deep.equal(mockExpandedDefaultHook);
152
+ expect(result.config.requiredHook).to.deep.equal(mockExpandedRequiredHook);
153
+ expect(result.config.contractVersion).to.equal(mockContractVersion);
154
+ sinon.assert.calledOnceWithExactly(readMailboxStub, mockMailboxAddress);
155
+ sinon.assert.calledOnceWithExactly(mockIsmReader.read, mockIsmAddress);
156
+ sinon.assert.calledWith(mockHookReader.read.firstCall, mockDefaultHookAddress);
157
+ sinon.assert.calledWith(mockHookReader.read.secondCall, mockRequiredHookAddress);
158
+ });
159
+ it('should read ISM and hooks in parallel via Promise.all', async () => {
160
+ // ARRANGE
161
+ const callOrder = [];
162
+ mockIsmReader.read.callsFake(async () => {
163
+ callOrder.push('ism');
164
+ return mockExpandedIsm;
165
+ });
166
+ mockHookReader.read.callsFake(async (address) => {
167
+ if (address === mockDefaultHookAddress) {
168
+ callOrder.push('defaultHook');
169
+ return mockExpandedDefaultHook;
170
+ }
171
+ callOrder.push('requiredHook');
172
+ return mockExpandedRequiredHook;
173
+ });
174
+ // ACT
175
+ await coreReader.read(mockMailboxAddress);
176
+ // ASSERT
177
+ expect(callOrder).to.have.lengthOf(3);
178
+ expect(callOrder).to.include.members([
179
+ 'ism',
180
+ 'defaultHook',
181
+ 'requiredHook',
182
+ ]);
183
+ });
184
+ it('should propagate mailbox reading errors', async () => {
185
+ // ARRANGE
186
+ const error = new Error('Failed to read mailbox');
187
+ readMailboxStub.rejects(error);
188
+ // ACT & ASSERT
189
+ await expect(coreReader.read(mockMailboxAddress)).to.be.rejectedWith('Failed to read mailbox');
190
+ });
191
+ it('should skip ISM/hook reader expansion for zero-address artifacts', async () => {
192
+ // ARRANGE
193
+ const zeroAddressMailbox = {
194
+ artifactState: ArtifactState.DEPLOYED,
195
+ config: {
196
+ owner: mockOwner,
197
+ defaultIsm: {
198
+ artifactState: ArtifactState.UNDERIVED,
199
+ deployed: { address: ZERO_ADDRESS_HEX_32 },
200
+ },
201
+ defaultHook: {
202
+ artifactState: ArtifactState.UNDERIVED,
203
+ deployed: { address: ZERO_ADDRESS_HEX_32 },
204
+ },
205
+ requiredHook: {
206
+ artifactState: ArtifactState.UNDERIVED,
207
+ deployed: { address: ZERO_ADDRESS_HEX_32 },
208
+ },
209
+ contractVersion: mockContractVersion,
210
+ },
211
+ deployed: { address: mockMailboxAddress, domainId: mockDomainId },
212
+ };
213
+ readMailboxStub.resolves(zeroAddressMailbox);
214
+ mockIsmReader.read.resolves(mockExpandedIsm);
215
+ mockHookReader.read.resolves(mockExpandedDefaultHook);
216
+ // ACT
217
+ const result = await coreReader.read(mockMailboxAddress);
218
+ // ASSERT
219
+ expect(result.artifactState).to.equal(ArtifactState.DEPLOYED);
220
+ expect(result.config.owner).to.equal(mockOwner);
221
+ expect(result.config.contractVersion).to.equal(mockContractVersion);
222
+ // Nested artifacts should remain UNDERIVED (not expanded)
223
+ expect(result.config.defaultIsm.artifactState).to.equal(ArtifactState.UNDERIVED);
224
+ expect(result.config.defaultHook.artifactState).to.equal(ArtifactState.UNDERIVED);
225
+ expect(result.config.requiredHook.artifactState).to.equal(ArtifactState.UNDERIVED);
226
+ // Readers should NOT have been called
227
+ sinon.assert.notCalled(mockIsmReader.read);
228
+ sinon.assert.notCalled(mockHookReader.read);
229
+ });
230
+ it('should propagate ISM reader errors', async () => {
231
+ // ARRANGE
232
+ const error = new Error('ISM read failed');
233
+ mockIsmReader.read.rejects(error);
234
+ mockHookReader.read.resolves(mockExpandedDefaultHook);
235
+ // ACT & ASSERT
236
+ await expect(coreReader.read(mockMailboxAddress)).to.be.rejectedWith('ISM read failed');
237
+ });
238
+ it('should propagate hook reader errors', async () => {
239
+ // ARRANGE
240
+ const error = new Error('Hook read failed');
241
+ mockIsmReader.read.resolves(mockExpandedIsm);
242
+ mockHookReader.read.rejects(error);
243
+ // ACT & ASSERT
244
+ await expect(coreReader.read(mockMailboxAddress)).to.be.rejectedWith('Hook read failed');
245
+ });
246
+ });
247
+ describe('deriveCoreConfig', () => {
248
+ it('should convert artifact to DerivedCoreConfig format', async () => {
249
+ // ARRANGE
250
+ mockIsmReader.read.resolves(mockExpandedIsm);
251
+ mockHookReader.read
252
+ .onFirstCall()
253
+ .resolves(mockExpandedDefaultHook)
254
+ .onSecondCall()
255
+ .resolves(mockExpandedRequiredHook);
256
+ // ACT
257
+ const result = await coreReader.deriveCoreConfig(mockMailboxAddress);
258
+ // ASSERT
259
+ expect(result.owner).to.equal(mockOwner);
260
+ expect(result.defaultIsm).to.be.an('object');
261
+ expect(result.defaultHook).to.be.an('object');
262
+ expect(result.requiredHook).to.be.an('object');
263
+ expect(result.contractVersion).to.equal(mockContractVersion);
264
+ sinon.assert.calledOnce(readMailboxStub);
265
+ sinon.assert.calledOnce(mockIsmReader.read);
266
+ expect(mockHookReader.read.callCount).to.equal(2);
267
+ });
268
+ it('should propagate read errors', async () => {
269
+ // ARRANGE
270
+ const error = new Error('Mailbox read failed');
271
+ readMailboxStub.rejects(error);
272
+ // ACT & ASSERT
273
+ await expect(coreReader.deriveCoreConfig(mockMailboxAddress)).to.be.rejectedWith('Mailbox read failed');
274
+ });
275
+ it('should return ZERO_ADDRESS_HEX_32 for zero-address ISM/hooks', async () => {
276
+ // ARRANGE
277
+ const zeroAddressMailbox = {
278
+ artifactState: ArtifactState.DEPLOYED,
279
+ config: {
280
+ owner: mockOwner,
281
+ defaultIsm: {
282
+ artifactState: ArtifactState.UNDERIVED,
283
+ deployed: { address: ZERO_ADDRESS_HEX_32 },
284
+ },
285
+ defaultHook: {
286
+ artifactState: ArtifactState.UNDERIVED,
287
+ deployed: { address: ZERO_ADDRESS_HEX_32 },
288
+ },
289
+ requiredHook: {
290
+ artifactState: ArtifactState.UNDERIVED,
291
+ deployed: { address: ZERO_ADDRESS_HEX_32 },
292
+ },
293
+ },
294
+ deployed: { address: mockMailboxAddress, domainId: mockDomainId },
295
+ };
296
+ readMailboxStub.resolves(zeroAddressMailbox);
297
+ // ACT
298
+ const result = await coreReader.deriveCoreConfig(mockMailboxAddress);
299
+ // ASSERT
300
+ expect(result.owner).to.equal(mockOwner);
301
+ expect(result.defaultIsm).to.equal(ZERO_ADDRESS_HEX_32);
302
+ expect(result.defaultHook).to.equal(ZERO_ADDRESS_HEX_32);
303
+ expect(result.requiredHook).to.equal(ZERO_ADDRESS_HEX_32);
304
+ // Readers should NOT have been called
305
+ sinon.assert.notCalled(mockIsmReader.read);
306
+ sinon.assert.notCalled(mockHookReader.read);
307
+ });
308
+ });
309
+ });
310
+ //# sourceMappingURL=core-artifact-reader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-artifact-reader.test.js","sourceRoot":"","sources":["../../src/core/core-artifact-reader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { ChainMetadataForAltVM } from '@recoillink/provider-sdk';
2
+ import { ISigner } from '@recoillink/provider-sdk/altvm';
3
+ import { ArtifactDeployed, ArtifactNew } from '@recoillink/provider-sdk/artifact';
4
+ import { ChainLookup } from '@recoillink/provider-sdk/chain';
5
+ import { DeployedMailboxAddress, DeployedMailboxArtifact, IRawMailboxArtifactManager, MailboxArtifactConfig } from '@recoillink/provider-sdk/mailbox';
6
+ import { AnnotatedTx, TxReceipt } from '@recoillink/provider-sdk/module';
7
+ import { DeployedValidatorAnnounceArtifact, IRawValidatorAnnounceArtifactManager } from '@recoillink/provider-sdk/validator-announce';
8
+ import { Logger } from '@recoillink/utils';
9
+ import { CoreArtifactReader } from './core-artifact-reader.js';
10
+ export declare function createCoreWriter(chainMetadata: ChainMetadataForAltVM, chainLookup: ChainLookup, signer: ISigner<AnnotatedTx, TxReceipt>): CoreWriter;
11
+ /**
12
+ * Orchestrates core deployment (mailbox, ISM, hooks, validator announce)
13
+ * using the Artifact API. Extends CoreArtifactReader for read().
14
+ *
15
+ * Does not implement ArtifactWriter<MailboxArtifactConfig, DeployedMailboxAddress>
16
+ * because create() returns a composite result (mailbox + validator announce) rather
17
+ * than a single [ArtifactDeployed, TxReceipt[]] tuple. The update() signature does
18
+ * conform to the standard pattern.
19
+ */
20
+ export declare class CoreWriter extends CoreArtifactReader {
21
+ protected readonly validatorAnnounceArtifactManager: IRawValidatorAnnounceArtifactManager | null;
22
+ protected readonly signer: ISigner<AnnotatedTx, TxReceipt>;
23
+ protected readonly logger: Logger;
24
+ private readonly ismWriter;
25
+ constructor(mailboxArtifactManager: IRawMailboxArtifactManager, validatorAnnounceArtifactManager: IRawValidatorAnnounceArtifactManager | null, chainMetadata: ChainMetadataForAltVM, chainLookup: ChainLookup, signer: ISigner<AnnotatedTx, TxReceipt>);
26
+ private getInitialHookArtifact;
27
+ create(artifact: ArtifactNew<MailboxArtifactConfig>): Promise<[
28
+ {
29
+ mailbox: DeployedMailboxArtifact;
30
+ validatorAnnounce: DeployedValidatorAnnounceArtifact | null;
31
+ },
32
+ TxReceipt[]
33
+ ]>;
34
+ /**
35
+ * Returns mailbox update transactions for the caller to submit.
36
+ * Note: may perform on-chain writes as a side effect when sub-components
37
+ * (ISM, hooks) require fresh deployment via `create()`.
38
+ */
39
+ update(expectedArtifact: ArtifactDeployed<MailboxArtifactConfig, DeployedMailboxAddress>): Promise<AnnotatedTx[]>;
40
+ private deployOrUpdateIsm;
41
+ private deployOrUpdateHook;
42
+ }
43
+ //# sourceMappingURL=core-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-writer.d.ts","sourceRoot":"","sources":["../../src/core/core-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAGtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAEL,gBAAgB,EAChB,WAAW,EAMZ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAc7D,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EAEtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EACL,iCAAiC,EACjC,oCAAoC,EAErC,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,MAAM,EAAmC,MAAM,mBAAmB,CAAC;AAK5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,qBAAqB,EACpC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,GACtC,UAAU,CAgBZ;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAW,SAAQ,kBAAkB;IAS9C,SAAS,CAAC,QAAQ,CAAC,gCAAgC,EAAE,oCAAoC,GAAG,IAAI;IAGhG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;IAX5D,mBAA4B,MAAM,EAAE,MAAM,CAEvC;IAEH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAEtC,YACE,sBAAsB,EAAE,0BAA0B,EAC/B,gCAAgC,EAAE,oCAAoC,GAAG,IAAI,EAChG,aAAa,EAAE,qBAAqB,EACpC,WAAW,EAAE,WAAW,EACL,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,EAS3D;IAED,OAAO,CAAC,sBAAsB;IAgBxB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,qBAAqB,CAAC,GAAG,OAAO,CACjE;QACE;YACE,OAAO,EAAE,uBAAuB,CAAC;YACjC,iBAAiB,EAAE,iCAAiC,GAAG,IAAI,CAAC;SAC7D;QACD,SAAS,EAAE;KACZ,CACF,CAqJA;IAED;;;;OAIG;IACG,MAAM,CACV,gBAAgB,EAAE,gBAAgB,CAChC,qBAAqB,EACrB,sBAAsB,CACvB,GACA,OAAO,CAAC,WAAW,EAAE,CAAC,CAkFxB;YAEa,iBAAiB;YA6BjB,kBAAkB;CAuCjC"}
@@ -0,0 +1,238 @@
1
+ import { ProtocolType, getProtocolProvider, } from '@recoillink/provider-sdk';
2
+ import { ArtifactState, isArtifactNew, isArtifactUnderived, toDeployedOrUndefined, } from '@recoillink/provider-sdk/artifact';
3
+ import { mergeHookArtifacts, } from '@recoillink/provider-sdk/hook';
4
+ import { assertIsmSupportedAsMailboxDefault, mergeIsmArtifacts, } from '@recoillink/provider-sdk/ism';
5
+ import { ZERO_ADDRESS_HEX_32, rootLogger } from '@recoillink/utils';
6
+ import { createHookWriter } from '../hook/hook-writer.js';
7
+ import { createIsmWriter } from '../ism/generic-ism-writer.js';
8
+ import { CoreArtifactReader } from './core-artifact-reader.js';
9
+ export function createCoreWriter(chainMetadata, chainLookup, signer) {
10
+ const protocolProvider = getProtocolProvider(chainMetadata.protocol);
11
+ const mailboxArtifactManager = protocolProvider.createMailboxArtifactManager(chainMetadata);
12
+ const validatorAnnounceArtifactManager = protocolProvider.createValidatorAnnounceArtifactManager(chainMetadata);
13
+ return new CoreWriter(mailboxArtifactManager, validatorAnnounceArtifactManager, chainMetadata, chainLookup, signer);
14
+ }
15
+ /**
16
+ * Orchestrates core deployment (mailbox, ISM, hooks, validator announce)
17
+ * using the Artifact API. Extends CoreArtifactReader for read().
18
+ *
19
+ * Does not implement ArtifactWriter<MailboxArtifactConfig, DeployedMailboxAddress>
20
+ * because create() returns a composite result (mailbox + validator announce) rather
21
+ * than a single [ArtifactDeployed, TxReceipt[]] tuple. The update() signature does
22
+ * conform to the standard pattern.
23
+ */
24
+ export class CoreWriter extends CoreArtifactReader {
25
+ validatorAnnounceArtifactManager;
26
+ signer;
27
+ logger = rootLogger.child({
28
+ module: CoreWriter.name,
29
+ });
30
+ ismWriter;
31
+ constructor(mailboxArtifactManager, validatorAnnounceArtifactManager, chainMetadata, chainLookup, signer) {
32
+ super(mailboxArtifactManager, chainMetadata, chainLookup);
33
+ this.validatorAnnounceArtifactManager = validatorAnnounceArtifactManager;
34
+ this.signer = signer;
35
+ this.ismWriter = createIsmWriter(this.chainMetadata, this.chainLookup, this.signer);
36
+ }
37
+ getInitialHookArtifact(hookArtifact) {
38
+ if (this.chainMetadata.protocol === ProtocolType.Starknet &&
39
+ !isArtifactNew(hookArtifact)) {
40
+ return hookArtifact;
41
+ }
42
+ return {
43
+ artifactState: ArtifactState.UNDERIVED,
44
+ deployed: { address: ZERO_ADDRESS_HEX_32 },
45
+ };
46
+ }
47
+ async create(artifact) {
48
+ const { config } = artifact;
49
+ const allReceipts = [];
50
+ const chainName = this.chainMetadata.name;
51
+ assertIsmSupportedAsMailboxDefault(config.defaultIsm, `the default ISM of ${chainName}`);
52
+ this.logger.info(`Starting core deployment on ${chainName}`);
53
+ // Step 1: Deploy ISM if NEW
54
+ let onChainIsmArtifact;
55
+ if (isArtifactNew(config.defaultIsm)) {
56
+ const [deployed, ismReceipts] = await this.ismWriter.create(config.defaultIsm);
57
+ allReceipts.push(...ismReceipts);
58
+ onChainIsmArtifact = deployed;
59
+ this.logger.info(`Default ISM deployed at ${deployed.deployed.address} on ${chainName}`);
60
+ }
61
+ else {
62
+ onChainIsmArtifact = config.defaultIsm;
63
+ }
64
+ // Step 2: Create mailbox with the ISM plus temporary hook placeholders.
65
+ const mailboxWriter = this.mailboxArtifactManager.createWriter('mailbox', this.signer);
66
+ // Hooks require the mailbox address for deployment (circular dependency),
67
+ // so we create mailbox first, deploy hooks in Step 3, then update mailbox in Step 4.
68
+ // Most protocols accept zero hooks for this bootstrap step; the Starknet
69
+ // mailbox writer materializes a temporary noop hook when it sees zero hooks.
70
+ const initialMailboxArtifact = {
71
+ artifactState: ArtifactState.NEW,
72
+ config: {
73
+ owner: this.signer.getSignerAddress(), // Signer owns initially; transferred in Step 4
74
+ defaultIsm: onChainIsmArtifact,
75
+ defaultHook: this.getInitialHookArtifact(config.defaultHook),
76
+ requiredHook: this.getInitialHookArtifact(config.requiredHook),
77
+ },
78
+ };
79
+ const [deployedMailbox, mailboxReceipts] = await mailboxWriter.create(initialMailboxArtifact);
80
+ allReceipts.push(...mailboxReceipts);
81
+ const mailboxAddress = deployedMailbox.deployed.address;
82
+ this.logger.info(`Mailbox deployed at ${mailboxAddress} on ${chainName}`);
83
+ const hookWriter = createHookWriter(this.chainMetadata, this.chainLookup, this.signer, { mailbox: mailboxAddress });
84
+ // Step 3: Deploy hooks if NEW (hooks need mailbox address)
85
+ let onChainDefaultHookArtifact;
86
+ if (isArtifactNew(config.defaultHook)) {
87
+ const [deployed, hookReceipts] = await hookWriter.create(config.defaultHook);
88
+ allReceipts.push(...hookReceipts);
89
+ onChainDefaultHookArtifact = deployed;
90
+ this.logger.info(`Default hook deployed at ${deployed.deployed.address} on ${chainName}`);
91
+ }
92
+ else {
93
+ onChainDefaultHookArtifact = config.defaultHook;
94
+ }
95
+ let onChainRequiredHookArtifact;
96
+ if (isArtifactNew(config.requiredHook)) {
97
+ const [deployed, hookReceipts] = await hookWriter.create(config.requiredHook);
98
+ allReceipts.push(...hookReceipts);
99
+ onChainRequiredHookArtifact = deployed;
100
+ this.logger.info(`Required hook deployed at ${deployed.deployed.address} on ${chainName}`);
101
+ }
102
+ else {
103
+ onChainRequiredHookArtifact = config.requiredHook;
104
+ }
105
+ // Step 4: Update mailbox with hooks + transfer owner
106
+ const updatedMailboxArtifact = {
107
+ artifactState: ArtifactState.DEPLOYED,
108
+ config: {
109
+ owner: config.owner,
110
+ defaultIsm: onChainIsmArtifact,
111
+ defaultHook: onChainDefaultHookArtifact,
112
+ requiredHook: onChainRequiredHookArtifact,
113
+ },
114
+ deployed: deployedMailbox.deployed,
115
+ };
116
+ const updateTxs = await mailboxWriter.update(updatedMailboxArtifact);
117
+ for (const tx of updateTxs) {
118
+ const receipt = await this.signer.sendAndConfirmTransaction(tx);
119
+ allReceipts.push(receipt);
120
+ }
121
+ // Step 5: Deploy validator announce (if supported by protocol)
122
+ let validatorAnnounceArtifact = null;
123
+ if (this.validatorAnnounceArtifactManager) {
124
+ const vaWriter = this.validatorAnnounceArtifactManager.createWriter('validatorAnnounce', this.signer);
125
+ const vaArtifact = {
126
+ artifactState: ArtifactState.NEW,
127
+ config: { mailboxAddress },
128
+ };
129
+ const [deployed, vaReceipts] = await vaWriter.create(vaArtifact);
130
+ allReceipts.push(...vaReceipts);
131
+ validatorAnnounceArtifact = deployed;
132
+ this.logger.info(`Validator announce deployed at ${deployed.deployed.address} on ${chainName}`);
133
+ }
134
+ else {
135
+ this.logger.info(`Validator announce not supported by protocol for ${chainName}`);
136
+ }
137
+ this.logger.info(`Core deployment complete on ${chainName}`);
138
+ return [
139
+ {
140
+ mailbox: updatedMailboxArtifact,
141
+ validatorAnnounce: validatorAnnounceArtifact,
142
+ },
143
+ allReceipts,
144
+ ];
145
+ }
146
+ /**
147
+ * Returns mailbox update transactions for the caller to submit.
148
+ * Note: may perform on-chain writes as a side effect when sub-components
149
+ * (ISM, hooks) require fresh deployment via `create()`.
150
+ */
151
+ async update(expectedArtifact) {
152
+ const { config: expectedConfig, deployed } = expectedArtifact;
153
+ const { address: mailboxAddress } = deployed;
154
+ const updateTxs = [];
155
+ assertIsmSupportedAsMailboxDefault(expectedConfig.defaultIsm, `the default ISM of ${this.chainMetadata.name}`);
156
+ // Read actual state (fully expanded)
157
+ const currentArtifact = await this.read(mailboxAddress);
158
+ const currentConfig = currentArtifact.config;
159
+ // Extract current artifacts: DEPLOYED if expanded, undefined if UNDERIVED (zero-address)
160
+ // Throws if UNDERIVED with non-zero address (unexpected state)
161
+ const currentIsm = toDeployedOrUndefined(currentConfig.defaultIsm, 'defaultIsm');
162
+ const currentDefaultHook = toDeployedOrUndefined(currentConfig.defaultHook, 'defaultHook');
163
+ const currentRequiredHook = toDeployedOrUndefined(currentConfig.requiredHook, 'requiredHook');
164
+ // Update ISM
165
+ const { address: newIsmAddress, transactions: ismTxs } = await this.deployOrUpdateIsm(currentIsm, expectedConfig.defaultIsm);
166
+ updateTxs.push(...ismTxs);
167
+ // Update default hook
168
+ const { address: newDefaultHookAddress, transactions: defaultHookTxs } = await this.deployOrUpdateHook(currentDefaultHook, expectedConfig.defaultHook, mailboxAddress);
169
+ updateTxs.push(...defaultHookTxs);
170
+ // Update required hook
171
+ const { address: newRequiredHookAddress, transactions: requiredHookTxs } = await this.deployOrUpdateHook(currentRequiredHook, expectedConfig.requiredHook, mailboxAddress);
172
+ updateTxs.push(...requiredHookTxs);
173
+ const mailboxWriter = this.mailboxArtifactManager.createWriter('mailbox', this.signer);
174
+ const updatedMailboxArtifact = {
175
+ artifactState: ArtifactState.DEPLOYED,
176
+ config: {
177
+ owner: expectedConfig.owner,
178
+ defaultIsm: {
179
+ artifactState: ArtifactState.UNDERIVED,
180
+ deployed: { address: newIsmAddress },
181
+ },
182
+ defaultHook: {
183
+ artifactState: ArtifactState.UNDERIVED,
184
+ deployed: { address: newDefaultHookAddress },
185
+ },
186
+ requiredHook: {
187
+ artifactState: ArtifactState.UNDERIVED,
188
+ deployed: { address: newRequiredHookAddress },
189
+ },
190
+ contractVersion: expectedConfig.contractVersion,
191
+ },
192
+ deployed: currentArtifact.deployed,
193
+ };
194
+ const mailboxUpdateTxs = await mailboxWriter.update(updatedMailboxArtifact);
195
+ updateTxs.push(...mailboxUpdateTxs);
196
+ return updateTxs;
197
+ }
198
+ async deployOrUpdateIsm(currentIsmArtifact, expectedIsm) {
199
+ const chainName = this.chainMetadata.name;
200
+ // If expected is UNDERIVED (just an address reference), use as-is
201
+ if (isArtifactUnderived(expectedIsm)) {
202
+ return { address: expectedIsm.deployed.address, transactions: [] };
203
+ }
204
+ // Merge current with expected (preserves DEPLOYED state for unchanged nested ISMs)
205
+ const mergedArtifact = mergeIsmArtifacts(currentIsmArtifact, expectedIsm);
206
+ if (isArtifactNew(mergedArtifact)) {
207
+ const [deployed] = await this.ismWriter.create(mergedArtifact);
208
+ this.logger.info(`ISM deployed at ${deployed.deployed.address} on ${chainName}`);
209
+ return { address: deployed.deployed.address, transactions: [] };
210
+ }
211
+ const updateTxs = await this.ismWriter.update(mergedArtifact);
212
+ return {
213
+ address: mergedArtifact.deployed.address,
214
+ transactions: updateTxs,
215
+ };
216
+ }
217
+ async deployOrUpdateHook(currentHookArtifact, expectedHook, mailboxAddress) {
218
+ const chainName = this.chainMetadata.name;
219
+ // If expected is UNDERIVED (just an address reference), use as-is
220
+ if (isArtifactUnderived(expectedHook)) {
221
+ return { address: expectedHook.deployed.address, transactions: [] };
222
+ }
223
+ const hookWriter = createHookWriter(this.chainMetadata, this.chainLookup, this.signer, { mailbox: mailboxAddress });
224
+ // Merge current with expected
225
+ const mergedArtifact = mergeHookArtifacts(currentHookArtifact, expectedHook);
226
+ if (isArtifactNew(mergedArtifact)) {
227
+ const [deployed] = await hookWriter.create(mergedArtifact);
228
+ this.logger.info(`Hook deployed at ${deployed.deployed.address} on ${chainName}`);
229
+ return { address: deployed.deployed.address, transactions: [] };
230
+ }
231
+ const updateTxs = await hookWriter.update(mergedArtifact);
232
+ return {
233
+ address: mergedArtifact.deployed.address,
234
+ transactions: updateTxs,
235
+ };
236
+ }
237
+ }
238
+ //# sourceMappingURL=core-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-writer.js","sourceRoot":"","sources":["../../src/core/core-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=core-writer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-writer.test.d.ts","sourceRoot":"","sources":["../../src/core/core-writer.test.ts"],"names":[],"mappings":""}