@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.
- package/LICENSE.md +193 -0
- package/dist/AltVMFileSubmitter.d.ts +12 -0
- package/dist/AltVMFileSubmitter.d.ts.map +1 -0
- package/dist/AltVMFileSubmitter.js +35 -0
- package/dist/AltVMFileSubmitter.js.map +1 -0
- package/dist/AltVMFileSubmitter.test.d.ts +2 -0
- package/dist/AltVMFileSubmitter.test.d.ts.map +1 -0
- package/dist/AltVMFileSubmitter.test.js +46 -0
- package/dist/AltVMFileSubmitter.test.js.map +1 -0
- package/dist/AltVMJsonRpcSubmitter.d.ts +2 -0
- package/dist/AltVMJsonRpcSubmitter.d.ts.map +1 -0
- package/dist/AltVMJsonRpcSubmitter.js +2 -0
- package/dist/AltVMJsonRpcSubmitter.js.map +1 -0
- package/dist/core/core-artifact-reader.d.ts +67 -0
- package/dist/core/core-artifact-reader.d.ts.map +1 -0
- package/dist/core/core-artifact-reader.js +118 -0
- package/dist/core/core-artifact-reader.js.map +1 -0
- package/dist/core/core-artifact-reader.test.d.ts +2 -0
- package/dist/core/core-artifact-reader.test.d.ts.map +1 -0
- package/dist/core/core-artifact-reader.test.js +310 -0
- package/dist/core/core-artifact-reader.test.js.map +1 -0
- package/dist/core/core-writer.d.ts +43 -0
- package/dist/core/core-writer.d.ts.map +1 -0
- package/dist/core/core-writer.js +238 -0
- package/dist/core/core-writer.js.map +1 -0
- package/dist/core/core-writer.test.d.ts +2 -0
- package/dist/core/core-writer.test.d.ts.map +1 -0
- package/dist/core/core-writer.test.js +1315 -0
- package/dist/core/core-writer.test.js.map +1 -0
- package/dist/fee/fee-reader.d.ts +25 -0
- package/dist/fee/fee-reader.d.ts.map +1 -0
- package/dist/fee/fee-reader.js +35 -0
- package/dist/fee/fee-reader.js.map +1 -0
- package/dist/fee/fee-writer.d.ts +31 -0
- package/dist/fee/fee-writer.d.ts.map +1 -0
- package/dist/fee/fee-writer.js +45 -0
- package/dist/fee/fee-writer.js.map +1 -0
- package/dist/hook/hook-reader.d.ts +41 -0
- package/dist/hook/hook-reader.d.ts.map +1 -0
- package/dist/hook/hook-reader.js +52 -0
- package/dist/hook/hook-reader.js.map +1 -0
- package/dist/hook/hook-writer.d.ts +101 -0
- package/dist/hook/hook-writer.d.ts.map +1 -0
- package/dist/hook/hook-writer.js +140 -0
- package/dist/hook/hook-writer.js.map +1 -0
- package/dist/hook/hook-writer.test.d.ts +2 -0
- package/dist/hook/hook-writer.test.d.ts.map +1 -0
- package/dist/hook/hook-writer.test.js +70 -0
- package/dist/hook/hook-writer.test.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/ism/generic-ism-context.test.d.ts +2 -0
- package/dist/ism/generic-ism-context.test.d.ts.map +1 -0
- package/dist/ism/generic-ism-context.test.js +112 -0
- package/dist/ism/generic-ism-context.test.js.map +1 -0
- package/dist/ism/generic-ism-writer.d.ts +62 -0
- package/dist/ism/generic-ism-writer.d.ts.map +1 -0
- package/dist/ism/generic-ism-writer.js +100 -0
- package/dist/ism/generic-ism-writer.js.map +1 -0
- package/dist/ism/generic-ism.d.ts +43 -0
- package/dist/ism/generic-ism.d.ts.map +1 -0
- package/dist/ism/generic-ism.js +105 -0
- package/dist/ism/generic-ism.js.map +1 -0
- package/dist/ism/generic-ism.test.d.ts +2 -0
- package/dist/ism/generic-ism.test.d.ts.map +1 -0
- package/dist/ism/generic-ism.test.js +145 -0
- package/dist/ism/generic-ism.test.js.map +1 -0
- package/dist/ism/routing-ism.d.ts +21 -0
- package/dist/ism/routing-ism.d.ts.map +1 -0
- package/dist/ism/routing-ism.js +149 -0
- package/dist/ism/routing-ism.js.map +1 -0
- package/dist/protocol.d.ts +3 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +38 -0
- package/dist/protocol.js.map +1 -0
- package/dist/protocol.test.d.ts +2 -0
- package/dist/protocol.test.d.ts.map +1 -0
- package/dist/protocol.test.js +14 -0
- package/dist/protocol.test.js.map +1 -0
- package/dist/utils/validation.d.ts +46 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +132 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils/validation.test.d.ts +2 -0
- package/dist/utils/validation.test.d.ts.map +1 -0
- package/dist/utils/validation.test.js +160 -0
- package/dist/utils/validation.test.js.map +1 -0
- package/dist/warp/warp-reader.d.ts +57 -0
- package/dist/warp/warp-reader.d.ts.map +1 -0
- package/dist/warp/warp-reader.js +135 -0
- package/dist/warp/warp-reader.js.map +1 -0
- package/dist/warp/warp-writer.d.ts +67 -0
- package/dist/warp/warp-writer.d.ts.map +1 -0
- package/dist/warp/warp-writer.js +381 -0
- package/dist/warp/warp-writer.js.map +1 -0
- package/dist/warp/warp-writer.test.d.ts +2 -0
- package/dist/warp/warp-writer.test.d.ts.map +1 -0
- package/dist/warp/warp-writer.test.js +1855 -0
- package/dist/warp/warp-writer.test.js.map +1 -0
- package/package.json +54 -3
- package/README.md +0 -3
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import sinon from 'sinon';
|
|
3
|
+
import { AltVM } from '@recoillink/provider-sdk';
|
|
4
|
+
import { ArtifactState } from '@recoillink/provider-sdk/artifact';
|
|
5
|
+
import { HookWriter } from './hook-writer.js';
|
|
6
|
+
const chainLookup = {
|
|
7
|
+
getChainMetadata: () => {
|
|
8
|
+
throw new Error('not needed');
|
|
9
|
+
},
|
|
10
|
+
getDomainId: () => null,
|
|
11
|
+
getChainName: () => null,
|
|
12
|
+
getKnownChainNames: () => [],
|
|
13
|
+
getKnownDomainIds: () => new Set(),
|
|
14
|
+
};
|
|
15
|
+
describe('HookWriter', () => {
|
|
16
|
+
it('delegates protocolFee updates to the protocol writer', async () => {
|
|
17
|
+
const expectedTxs = [
|
|
18
|
+
{ annotation: 'protocol fee update' },
|
|
19
|
+
];
|
|
20
|
+
const update = sinon.stub().resolves(expectedTxs);
|
|
21
|
+
const createWriter = sinon.stub().returns({
|
|
22
|
+
create: sinon.stub(),
|
|
23
|
+
read: sinon.stub(),
|
|
24
|
+
update,
|
|
25
|
+
});
|
|
26
|
+
const artifactManager = {
|
|
27
|
+
createReader: sinon.stub(),
|
|
28
|
+
createWriter,
|
|
29
|
+
readHook: sinon.stub(),
|
|
30
|
+
};
|
|
31
|
+
const signer = {};
|
|
32
|
+
const writer = new HookWriter(artifactManager, chainLookup, signer);
|
|
33
|
+
const artifact = {
|
|
34
|
+
artifactState: ArtifactState.DEPLOYED,
|
|
35
|
+
config: {
|
|
36
|
+
type: AltVM.HookType.PROTOCOL_FEE,
|
|
37
|
+
owner: '0xowner',
|
|
38
|
+
beneficiary: '0xbeneficiary',
|
|
39
|
+
maxProtocolFee: '100',
|
|
40
|
+
protocolFee: '10',
|
|
41
|
+
},
|
|
42
|
+
deployed: { address: '0x123' },
|
|
43
|
+
};
|
|
44
|
+
const txs = await writer.update(artifact);
|
|
45
|
+
expect(createWriter.calledOnceWith(AltVM.HookType.PROTOCOL_FEE, signer)).to.equal(true);
|
|
46
|
+
expect(update.calledOnceWith(artifact)).to.equal(true);
|
|
47
|
+
expect(txs).to.deep.equal(expectedTxs);
|
|
48
|
+
});
|
|
49
|
+
it('treats unknownHook updates as a no-op', async () => {
|
|
50
|
+
const createWriter = sinon.stub();
|
|
51
|
+
const artifactManager = {
|
|
52
|
+
createReader: sinon.stub(),
|
|
53
|
+
createWriter,
|
|
54
|
+
readHook: sinon.stub(),
|
|
55
|
+
};
|
|
56
|
+
const signer = {};
|
|
57
|
+
const writer = new HookWriter(artifactManager, chainLookup, signer);
|
|
58
|
+
const artifact = {
|
|
59
|
+
artifactState: ArtifactState.DEPLOYED,
|
|
60
|
+
config: {
|
|
61
|
+
type: 'unknownHook',
|
|
62
|
+
},
|
|
63
|
+
deployed: { address: '0x123' },
|
|
64
|
+
};
|
|
65
|
+
const txs = await writer.update(artifact);
|
|
66
|
+
expect(createWriter.called).to.equal(false);
|
|
67
|
+
expect(txs).to.deep.equal([]);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=hook-writer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-writer.test.js","sourceRoot":"","sources":["../../src/hook/hook-writer.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { AltVMJsonRpcSubmitter } from './AltVMJsonRpcSubmitter.js';
|
|
2
|
+
export { createFeeReader, FeeReader } from './fee/fee-reader.js';
|
|
3
|
+
export { createFeeWriter, FeeWriter } from './fee/fee-writer.js';
|
|
4
|
+
export { CoreArtifactReader, createCoreReader, } from './core/core-artifact-reader.js';
|
|
5
|
+
export { CoreWriter, createCoreWriter } from './core/core-writer.js';
|
|
6
|
+
export { createHookReader } from './hook/hook-reader.js';
|
|
7
|
+
export { createHookWriter, HookWriter } from './hook/hook-writer.js';
|
|
8
|
+
export { createIsmWriter, IsmWriter } from './ism/generic-ism-writer.js';
|
|
9
|
+
export { createIsmReader } from './ism/generic-ism.js';
|
|
10
|
+
export { loadProtocolProviders } from './protocol.js';
|
|
11
|
+
export { UnsupportedIsmTypeError, validateIsmConfig, validateIsmType, } from './utils/validation.js';
|
|
12
|
+
export { createWarpTokenReader, WarpTokenReader } from './warp/warp-reader.js';
|
|
13
|
+
export { createWarpTokenWriter, WarpTokenWriter } from './warp/warp-writer.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// AltVMFileSubmitter removed from public exports as it uses Node.js fs module
|
|
2
|
+
// and should not be bundled for browser use. CLI can import directly:
|
|
3
|
+
// import { AltVMFileSubmitter } from '@recoillink/deploy-sdk/AltVMFileSubmitter';
|
|
4
|
+
export { AltVMJsonRpcSubmitter } from './AltVMJsonRpcSubmitter.js';
|
|
5
|
+
export { createFeeReader, FeeReader } from './fee/fee-reader.js';
|
|
6
|
+
export { createFeeWriter, FeeWriter } from './fee/fee-writer.js';
|
|
7
|
+
export { CoreArtifactReader, createCoreReader, } from './core/core-artifact-reader.js';
|
|
8
|
+
export { CoreWriter, createCoreWriter } from './core/core-writer.js';
|
|
9
|
+
export { createHookReader } from './hook/hook-reader.js';
|
|
10
|
+
export { createHookWriter, HookWriter } from './hook/hook-writer.js';
|
|
11
|
+
export { createIsmWriter, IsmWriter } from './ism/generic-ism-writer.js';
|
|
12
|
+
export { createIsmReader } from './ism/generic-ism.js';
|
|
13
|
+
export { loadProtocolProviders } from './protocol.js';
|
|
14
|
+
export { UnsupportedIsmTypeError, validateIsmConfig, validateIsmType, } from './utils/validation.js';
|
|
15
|
+
export { createWarpTokenReader, WarpTokenReader } from './warp/warp-reader.js';
|
|
16
|
+
export { createWarpTokenWriter, WarpTokenWriter } from './warp/warp-writer.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,kFAAkF;AAElF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-ism-context.test.d.ts","sourceRoot":"","sources":["../../src/ism/generic-ism-context.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,112 @@
|
|
|
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 { createIsmReader } from './generic-ism.js';
|
|
6
|
+
import { IsmWriter, createIsmWriter } from './generic-ism-writer.js';
|
|
7
|
+
// CAST: registers a synthetic protocol so the test cannot collide with a real
|
|
8
|
+
// protocol provider registered by another suite in the same process.
|
|
9
|
+
const TestProtocol = 'test-ism-context';
|
|
10
|
+
const createIsmArtifactManager = sinon.stub();
|
|
11
|
+
const mockProtocolProvider = {
|
|
12
|
+
createProvider: sinon.stub(),
|
|
13
|
+
createSigner: sinon.stub(),
|
|
14
|
+
createSubmitter: sinon.stub(),
|
|
15
|
+
createIsmArtifactManager,
|
|
16
|
+
createHookArtifactManager: sinon.stub(),
|
|
17
|
+
createMailboxArtifactManager: sinon.stub(),
|
|
18
|
+
createValidatorAnnounceArtifactManager: sinon.stub(),
|
|
19
|
+
createFeeArtifactManager: sinon.stub(),
|
|
20
|
+
getMinGas: sinon.stub(),
|
|
21
|
+
createWarpArtifactManager: sinon.stub(),
|
|
22
|
+
};
|
|
23
|
+
if (!hasProtocol(TestProtocol)) {
|
|
24
|
+
registerProtocol(TestProtocol, () => mockProtocolProvider);
|
|
25
|
+
}
|
|
26
|
+
const chainMetadata = {
|
|
27
|
+
name: 'solanatest',
|
|
28
|
+
chainId: 1,
|
|
29
|
+
domainId: 1399811149,
|
|
30
|
+
protocol: TestProtocol,
|
|
31
|
+
};
|
|
32
|
+
const domainIds = {
|
|
33
|
+
solanatest: 1399811149,
|
|
34
|
+
ethereum: 1,
|
|
35
|
+
polygon: 137,
|
|
36
|
+
};
|
|
37
|
+
const chainLookup = {
|
|
38
|
+
getChainMetadata: () => chainMetadata,
|
|
39
|
+
getChainName: () => null,
|
|
40
|
+
getDomainId: (chain) => domainIds[String(chain)] ?? null,
|
|
41
|
+
getKnownChainNames: () => Object.keys(domainIds),
|
|
42
|
+
getKnownDomainIds: () => new Set([1399811149, 1, 137]),
|
|
43
|
+
};
|
|
44
|
+
describe('ISM artifact manager context', () => {
|
|
45
|
+
beforeEach(() => {
|
|
46
|
+
createIsmArtifactManager.reset();
|
|
47
|
+
createIsmArtifactManager.returns({});
|
|
48
|
+
});
|
|
49
|
+
it('createIsmReader passes the unique known domain ids', () => {
|
|
50
|
+
createIsmReader(chainMetadata, chainLookup);
|
|
51
|
+
expect(createIsmArtifactManager.calledOnce).to.equal(true);
|
|
52
|
+
expect(createIsmArtifactManager.firstCall.args).to.deep.equal([
|
|
53
|
+
chainMetadata,
|
|
54
|
+
{ knownDomainIds: [1399811149, 1, 137] },
|
|
55
|
+
]);
|
|
56
|
+
});
|
|
57
|
+
it('createIsmWriter passes the unique known domain ids', () => {
|
|
58
|
+
// CAST: test double, the writer only stores the signer.
|
|
59
|
+
const signer = {};
|
|
60
|
+
createIsmWriter(chainMetadata, chainLookup, signer);
|
|
61
|
+
expect(createIsmArtifactManager.calledOnce).to.equal(true);
|
|
62
|
+
expect(createIsmArtifactManager.firstCall.args).to.deep.equal([
|
|
63
|
+
chainMetadata,
|
|
64
|
+
{ knownDomainIds: [1399811149, 1, 137] },
|
|
65
|
+
]);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('ISM artifact manager context without known domains', () => {
|
|
69
|
+
it('creates managers without a context when the lookup has no domains', () => {
|
|
70
|
+
createIsmArtifactManager.reset();
|
|
71
|
+
createIsmArtifactManager.returns({});
|
|
72
|
+
const emptyLookup = {
|
|
73
|
+
getChainMetadata: () => chainMetadata,
|
|
74
|
+
getChainName: () => null,
|
|
75
|
+
getDomainId: () => null,
|
|
76
|
+
getKnownChainNames: () => [],
|
|
77
|
+
getKnownDomainIds: () => new Set(),
|
|
78
|
+
};
|
|
79
|
+
// CAST: test double, the writer only stores the signer.
|
|
80
|
+
const signer = {};
|
|
81
|
+
createIsmReader(chainMetadata, emptyLookup);
|
|
82
|
+
createIsmWriter(chainMetadata, emptyLookup, signer);
|
|
83
|
+
expect(createIsmArtifactManager.callCount).to.equal(2);
|
|
84
|
+
for (const call of createIsmArtifactManager.getCalls()) {
|
|
85
|
+
expect(call.args).to.deep.equal([chainMetadata, undefined]);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('IsmWriter.update routingMessageIdMultisigIsm', () => {
|
|
90
|
+
it('delegates to the typed writer rather than treating the ISM as immutable', async () => {
|
|
91
|
+
const txs = [{ annotation: 'set validators' }];
|
|
92
|
+
const update = sinon.stub().resolves(txs);
|
|
93
|
+
const createWriter = sinon.stub().returns({ update });
|
|
94
|
+
// CAST: test doubles exposing only the members IsmWriter.update uses.
|
|
95
|
+
const manager = { createWriter };
|
|
96
|
+
const signer = {};
|
|
97
|
+
const artifact = {
|
|
98
|
+
artifactState: ArtifactState.DEPLOYED,
|
|
99
|
+
config: {
|
|
100
|
+
type: 'routingMessageIdMultisigIsm',
|
|
101
|
+
owner: 'owner',
|
|
102
|
+
domains: { 1: { validators: ['0x1'], threshold: 1 } },
|
|
103
|
+
},
|
|
104
|
+
deployed: { address: 'program' },
|
|
105
|
+
};
|
|
106
|
+
const result = await new IsmWriter(manager, chainLookup, signer).update(artifact);
|
|
107
|
+
expect(result).to.equal(txs);
|
|
108
|
+
expect(createWriter.firstCall.args[0]).to.equal('routingMessageIdMultisigIsm');
|
|
109
|
+
expect(update.firstCall.args[0]).to.deep.equal(artifact);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=generic-ism-context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-ism-context.test.js","sourceRoot":"","sources":["../../src/ism/generic-ism-context.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ChainMetadataForAltVM } from '@recoillink/provider-sdk';
|
|
2
|
+
import { ISigner } from '@recoillink/provider-sdk/altvm';
|
|
3
|
+
import { ArtifactNew, ArtifactWriter } from '@recoillink/provider-sdk/artifact';
|
|
4
|
+
import { ChainLookup } from '@recoillink/provider-sdk/chain';
|
|
5
|
+
import { DeployedIsmAddress, DeployedIsmArtifact, IRawIsmArtifactManager, IsmArtifactConfig } from '@recoillink/provider-sdk/ism';
|
|
6
|
+
import { AnnotatedTx, TxReceipt } from '@recoillink/provider-sdk/module';
|
|
7
|
+
import { IsmReader } from './generic-ism.js';
|
|
8
|
+
/**
|
|
9
|
+
* Factory function to create an IsmWriter instance.
|
|
10
|
+
* This helper centralizes the creation of artifact managers and ISM writers,
|
|
11
|
+
* making it easier to instantiate writers across the codebase.
|
|
12
|
+
*
|
|
13
|
+
* @param chainMetadata Chain metadata for the target chain (protocol type is extracted from metadata.protocol)
|
|
14
|
+
* @param chainLookup Chain lookup interface for resolving chain names and domain IDs
|
|
15
|
+
* @param signer Signer interface for signing transactions
|
|
16
|
+
* @returns An IsmWriter instance
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const writer = createIsmWriter(chainMetadata, chainLookup, signer);
|
|
21
|
+
* const [deployed, receipts] = await writer.create({ config: ismConfig });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function createIsmWriter(chainMetadata: ChainMetadataForAltVM, chainLookup: ChainLookup, signer: ISigner<AnnotatedTx, TxReceipt>): IsmWriter;
|
|
25
|
+
/**
|
|
26
|
+
* IsmWriter handles creation and updates of ISMs using the Artifact API.
|
|
27
|
+
* It delegates to protocol-specific artifact writers for individual ISM types.
|
|
28
|
+
*
|
|
29
|
+
* Key features:
|
|
30
|
+
* - Extends IsmReader to inherit read() functionality
|
|
31
|
+
* - Works with pure Artifact API (IsmArtifactConfig)
|
|
32
|
+
* - Delegates to typed writers from artifact manager for specific ISM types
|
|
33
|
+
* - Uses RoutingIsmWriter for composite routing ISM operations
|
|
34
|
+
* - Protocol-agnostic through artifact manager abstraction
|
|
35
|
+
*/
|
|
36
|
+
export declare class IsmWriter extends IsmReader implements ArtifactWriter<IsmArtifactConfig, DeployedIsmAddress> {
|
|
37
|
+
protected readonly artifactManager: IRawIsmArtifactManager;
|
|
38
|
+
protected readonly chainLookup: ChainLookup;
|
|
39
|
+
protected readonly signer: ISigner<AnnotatedTx, TxReceipt>;
|
|
40
|
+
private readonly routingWriter;
|
|
41
|
+
constructor(artifactManager: IRawIsmArtifactManager, chainLookup: ChainLookup, signer: ISigner<AnnotatedTx, TxReceipt>);
|
|
42
|
+
/**
|
|
43
|
+
* Creates a new ISM by deploying it on-chain.
|
|
44
|
+
* For routing ISMs, delegates to RoutingIsmWriter to handle nested ISM deployments.
|
|
45
|
+
* For other ISM types, requests a typed writer from the artifact manager.
|
|
46
|
+
*
|
|
47
|
+
* @param artifact The ISM configuration to deploy (can be new or reference existing)
|
|
48
|
+
* @returns A tuple of [deployed artifact, transaction receipts]
|
|
49
|
+
*/
|
|
50
|
+
create(artifact: ArtifactNew<IsmArtifactConfig>): Promise<[DeployedIsmArtifact, TxReceipt[]]>;
|
|
51
|
+
/**
|
|
52
|
+
* Updates an existing ISM to match the desired configuration.
|
|
53
|
+
* Routing ISMs (domain enrollment/unenrollment, owner changes), composite ISMs and
|
|
54
|
+
* routing message-id multisig ISMs support updates.
|
|
55
|
+
* Static multisig and test ISMs are immutable - returns empty array.
|
|
56
|
+
*
|
|
57
|
+
* @param artifact The desired ISM state (must include deployed address)
|
|
58
|
+
* @returns Array of transactions needed to perform the update
|
|
59
|
+
*/
|
|
60
|
+
update(artifact: DeployedIsmArtifact): Promise<AnnotatedTx[]>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=generic-ism-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-ism-writer.d.ts","sourceRoot":"","sources":["../../src/ism/generic-ism-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGzE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,qBAAqB,EACpC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,GACtC,SAAS,CAUX;AAED;;;;;;;;;;GAUG;AACH,qBAAa,SACX,SAAQ,SACR,YAAW,cAAc,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;uBAKlC,eAAe,EAAE,sBAAsB;uBACvC,WAAW,EAAE,WAAW;IACpD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;IAL5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IAEjD,YAC8B,eAAe,EAAE,sBAAsB,EACvC,WAAW,EAAE,WAAW,EACjC,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,EAQ3D;IAED;;;;;;;OAOG;IACG,MAAM,CACV,QAAQ,EAAE,WAAW,CAAC,iBAAiB,CAAC,GACvC,OAAO,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,CAAC,CAAC,CAgB7C;IAED;;;;;;;;OAQG;IACG,MAAM,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA8BlE;CACF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { AltVM, getProtocolProvider, } from '@recoillink/provider-sdk';
|
|
2
|
+
import { assert, isNonEmptyArray } from '@recoillink/utils';
|
|
3
|
+
import { IsmReader } from './generic-ism.js';
|
|
4
|
+
import { RoutingIsmWriter } from './routing-ism.js';
|
|
5
|
+
/**
|
|
6
|
+
* Factory function to create an IsmWriter instance.
|
|
7
|
+
* This helper centralizes the creation of artifact managers and ISM writers,
|
|
8
|
+
* making it easier to instantiate writers across the codebase.
|
|
9
|
+
*
|
|
10
|
+
* @param chainMetadata Chain metadata for the target chain (protocol type is extracted from metadata.protocol)
|
|
11
|
+
* @param chainLookup Chain lookup interface for resolving chain names and domain IDs
|
|
12
|
+
* @param signer Signer interface for signing transactions
|
|
13
|
+
* @returns An IsmWriter instance
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const writer = createIsmWriter(chainMetadata, chainLookup, signer);
|
|
18
|
+
* const [deployed, receipts] = await writer.create({ config: ismConfig });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function createIsmWriter(chainMetadata, chainLookup, signer) {
|
|
22
|
+
const protocolProvider = getProtocolProvider(chainMetadata.protocol);
|
|
23
|
+
const knownDomainIds = [...chainLookup.getKnownDomainIds()];
|
|
24
|
+
const artifactManager = protocolProvider.createIsmArtifactManager(chainMetadata, isNonEmptyArray(knownDomainIds) ? { knownDomainIds } : undefined);
|
|
25
|
+
return new IsmWriter(artifactManager, chainLookup, signer);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* IsmWriter handles creation and updates of ISMs using the Artifact API.
|
|
29
|
+
* It delegates to protocol-specific artifact writers for individual ISM types.
|
|
30
|
+
*
|
|
31
|
+
* Key features:
|
|
32
|
+
* - Extends IsmReader to inherit read() functionality
|
|
33
|
+
* - Works with pure Artifact API (IsmArtifactConfig)
|
|
34
|
+
* - Delegates to typed writers from artifact manager for specific ISM types
|
|
35
|
+
* - Uses RoutingIsmWriter for composite routing ISM operations
|
|
36
|
+
* - Protocol-agnostic through artifact manager abstraction
|
|
37
|
+
*/
|
|
38
|
+
export class IsmWriter extends IsmReader {
|
|
39
|
+
artifactManager;
|
|
40
|
+
chainLookup;
|
|
41
|
+
signer;
|
|
42
|
+
routingWriter;
|
|
43
|
+
constructor(artifactManager, chainLookup, signer) {
|
|
44
|
+
super(artifactManager, chainLookup);
|
|
45
|
+
this.artifactManager = artifactManager;
|
|
46
|
+
this.chainLookup = chainLookup;
|
|
47
|
+
this.signer = signer;
|
|
48
|
+
this.routingWriter = new RoutingIsmWriter(artifactManager, chainLookup, signer);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates a new ISM by deploying it on-chain.
|
|
52
|
+
* For routing ISMs, delegates to RoutingIsmWriter to handle nested ISM deployments.
|
|
53
|
+
* For other ISM types, requests a typed writer from the artifact manager.
|
|
54
|
+
*
|
|
55
|
+
* @param artifact The ISM configuration to deploy (can be new or reference existing)
|
|
56
|
+
* @returns A tuple of [deployed artifact, transaction receipts]
|
|
57
|
+
*/
|
|
58
|
+
async create(artifact) {
|
|
59
|
+
const { artifactState, config } = artifact;
|
|
60
|
+
assert(config.type !== AltVM.IsmType.AGGREGATION &&
|
|
61
|
+
config.type !== AltVM.IsmType.PAUSABLE, 'Aggregation and pausable ISM artifacts currently support reading only');
|
|
62
|
+
// Routing ISMs are composite - use RoutingIsmWriter for nested deployments
|
|
63
|
+
if (config.type === AltVM.IsmType.ROUTING) {
|
|
64
|
+
return this.routingWriter.create({ artifactState, config });
|
|
65
|
+
}
|
|
66
|
+
// For other ISM types, request typed writer from artifact manager
|
|
67
|
+
const writer = this.artifactManager.createWriter(config.type, this.signer);
|
|
68
|
+
return writer.create({ artifactState, config });
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Updates an existing ISM to match the desired configuration.
|
|
72
|
+
* Routing ISMs (domain enrollment/unenrollment, owner changes), composite ISMs and
|
|
73
|
+
* routing message-id multisig ISMs support updates.
|
|
74
|
+
* Static multisig and test ISMs are immutable - returns empty array.
|
|
75
|
+
*
|
|
76
|
+
* @param artifact The desired ISM state (must include deployed address)
|
|
77
|
+
* @returns Array of transactions needed to perform the update
|
|
78
|
+
*/
|
|
79
|
+
async update(artifact) {
|
|
80
|
+
const { artifactState, config, deployed } = artifact;
|
|
81
|
+
assert(config.type !== AltVM.IsmType.AGGREGATION &&
|
|
82
|
+
config.type !== AltVM.IsmType.PAUSABLE, 'Aggregation and pausable ISM artifacts currently support reading only');
|
|
83
|
+
// Routing ISMs are mutable - support domain updates and owner changes
|
|
84
|
+
if (config.type === AltVM.IsmType.ROUTING) {
|
|
85
|
+
return this.routingWriter.update({ artifactState, config, deployed });
|
|
86
|
+
}
|
|
87
|
+
// Composite and routing message-id multisig ISMs are mutable too, but
|
|
88
|
+
// self-contained: they diff their own state against on-chain state
|
|
89
|
+
// (re-read internally), so they're delegated to directly rather than
|
|
90
|
+
// routed through RoutingIsmWriter's nested-artifact recursion.
|
|
91
|
+
if (config.type === AltVM.IsmType.COMPOSITE ||
|
|
92
|
+
config.type === AltVM.IsmType.ROUTING_MESSAGE_ID_MULTISIG) {
|
|
93
|
+
const writer = this.artifactManager.createWriter(config.type, this.signer);
|
|
94
|
+
return writer.update({ artifactState, config, deployed });
|
|
95
|
+
}
|
|
96
|
+
// Static multisig and test ISMs are immutable - no updates possible
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=generic-ism-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-ism-writer.js","sourceRoot":"","sources":["../../src/ism/generic-ism-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAEL,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAWlC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAC7B,aAAoC,EACpC,WAAwB,EACxB,MAAuC;IAEvC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrE,MAAM,cAAc,GAAG,CAAC,GAAG,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC5D,MAAM,eAAe,GACnB,gBAAgB,CAAC,wBAAwB,CACvC,aAAa,EACb,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CACjE,CAAC;IAEJ,OAAO,IAAI,SAAS,CAAC,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,SACX,SAAQ,SAAS;IAMa,eAAe;IACf,WAAW;IACpB,MAAM;IALV,aAAa,CAAmB;IAEjD,YAC8B,eAAuC,EACvC,WAAwB,EACjC,MAAuC;QAE1D,KAAK,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;+BAJR,eAAe;2BACf,WAAW;sBACpB,MAAM;QAGzB,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CACvC,eAAe,EACf,WAAW,EACX,MAAM,CACP,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,CACV,QAAwC;QAExC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QAC3C,MAAM,CACJ,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,WAAW;YACvC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,EACxC,uEAAuE,CACxE,CAAC;QAEF,2EAA2E;QAC3E,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,kEAAkE;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM,CAAC,QAA6B;QACxC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QACrD,MAAM,CACJ,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,WAAW;YACvC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,EACxC,uEAAuE,CACxE,CAAC;QAEF,sEAAsE;QACtE,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,sEAAsE;QACtE,mEAAmE;QACnE,qEAAqE;QACrE,+DAA+D;QAC/D,IACE,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,SAAS;YACvC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,2BAA2B,EACzD,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAC9C,MAAM,CAAC,IAAI,EACX,IAAI,CAAC,MAAM,CACZ,CAAC;YACF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,oEAAoE;QACpE,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ChainMetadataForAltVM } from '@recoillink/provider-sdk';
|
|
2
|
+
import { ArtifactReader } from '@recoillink/provider-sdk/artifact';
|
|
3
|
+
import { ChainLookup } from '@recoillink/provider-sdk/chain';
|
|
4
|
+
import { DeployedIsmAddress, DeployedIsmArtifact, DerivedIsmConfig, IRawIsmArtifactManager, IsmArtifactConfig } from '@recoillink/provider-sdk/ism';
|
|
5
|
+
import { Logger } from '@recoillink/utils';
|
|
6
|
+
/**
|
|
7
|
+
* Factory function to create an IsmReader instance.
|
|
8
|
+
* This helper centralizes the creation of artifact managers and ISM readers,
|
|
9
|
+
* making it easier to instantiate readers across the codebase.
|
|
10
|
+
*
|
|
11
|
+
* @param chainMetadata Chain metadata for the target chain (protocol type is extracted from metadata.protocol)
|
|
12
|
+
* @param chainLookup Chain lookup interface for resolving chain names and domain IDs
|
|
13
|
+
* @returns An IsmReader instance
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const reader = createIsmReader(chainMetadata, chainLookup);
|
|
18
|
+
* const ismConfig = await reader.read(ismAddress);
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function createIsmReader(chainMetadata: ChainMetadataForAltVM, chainLookup: ChainLookup): IsmReader;
|
|
22
|
+
/**
|
|
23
|
+
* Generic ISM Reader that can read any ISM type by detecting its type
|
|
24
|
+
* and recursively expanding nested ISMs (e.g., for routing ISMs).
|
|
25
|
+
*/
|
|
26
|
+
export declare class IsmReader implements ArtifactReader<IsmArtifactConfig, DeployedIsmAddress> {
|
|
27
|
+
protected readonly artifactManager: IRawIsmArtifactManager;
|
|
28
|
+
protected readonly chainLookup: ChainLookup;
|
|
29
|
+
protected readonly logger: Logger;
|
|
30
|
+
constructor(artifactManager: IRawIsmArtifactManager, chainLookup: ChainLookup);
|
|
31
|
+
read(address: string): Promise<DeployedIsmArtifact>;
|
|
32
|
+
/**
|
|
33
|
+
* Expands a raw routing ISM config by recursively reading the domain ISMs.
|
|
34
|
+
* Takes a pre-read raw artifact to avoid double reading.
|
|
35
|
+
*/
|
|
36
|
+
private expandRoutingIsm;
|
|
37
|
+
/**
|
|
38
|
+
* Backward compatibility method that converts DeployedIsmArtifact to DerivedIsmConfig.
|
|
39
|
+
* This allows IsmReader to be used as a drop-in replacement for the old AltVMIsmReader.
|
|
40
|
+
*/
|
|
41
|
+
deriveIsmConfig(address: string): Promise<DerivedIsmConfig>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=generic-ism.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-ism.d.ts","sourceRoot":"","sources":["../../src/ism/generic-ism.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,cAAc,EAEf,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EAIlB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,MAAM,EAA+B,MAAM,mBAAmB,CAAC;AAExE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,qBAAqB,EACpC,WAAW,EAAE,WAAW,GACvB,SAAS,CAUX;AAED;;;GAGG;AACH,qBAAa,SAAU,YAAW,cAAc,CAC9C,iBAAiB,EACjB,kBAAkB,CACnB;IAMG,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,sBAAsB;IAC1D,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW;IAN7C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAE9B;IAEH,YACqB,eAAe,EAAE,sBAAsB,EACvC,WAAW,EAAE,WAAW,EACzC;IAEE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA4BxD;IAED;;;OAGG;YACW,gBAAgB;IAwC9B;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAGhE;CACF"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { AltVM, getProtocolProvider, } from '@recoillink/provider-sdk';
|
|
2
|
+
import { isArtifactDeployed, } from '@recoillink/provider-sdk/artifact';
|
|
3
|
+
import { ismArtifactToDerivedConfig, } from '@recoillink/provider-sdk/ism';
|
|
4
|
+
import { rootLogger, isNonEmptyArray } from '@recoillink/utils';
|
|
5
|
+
/**
|
|
6
|
+
* Factory function to create an IsmReader instance.
|
|
7
|
+
* This helper centralizes the creation of artifact managers and ISM readers,
|
|
8
|
+
* making it easier to instantiate readers across the codebase.
|
|
9
|
+
*
|
|
10
|
+
* @param chainMetadata Chain metadata for the target chain (protocol type is extracted from metadata.protocol)
|
|
11
|
+
* @param chainLookup Chain lookup interface for resolving chain names and domain IDs
|
|
12
|
+
* @returns An IsmReader instance
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const reader = createIsmReader(chainMetadata, chainLookup);
|
|
17
|
+
* const ismConfig = await reader.read(ismAddress);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export function createIsmReader(chainMetadata, chainLookup) {
|
|
21
|
+
const protocolProvider = getProtocolProvider(chainMetadata.protocol);
|
|
22
|
+
const knownDomainIds = [...chainLookup.getKnownDomainIds()];
|
|
23
|
+
const artifactManager = protocolProvider.createIsmArtifactManager(chainMetadata, isNonEmptyArray(knownDomainIds) ? { knownDomainIds } : undefined);
|
|
24
|
+
return new IsmReader(artifactManager, chainLookup);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generic ISM Reader that can read any ISM type by detecting its type
|
|
28
|
+
* and recursively expanding nested ISMs (e.g., for routing ISMs).
|
|
29
|
+
*/
|
|
30
|
+
export class IsmReader {
|
|
31
|
+
artifactManager;
|
|
32
|
+
chainLookup;
|
|
33
|
+
logger = rootLogger.child({
|
|
34
|
+
module: IsmReader.name,
|
|
35
|
+
});
|
|
36
|
+
constructor(artifactManager, chainLookup) {
|
|
37
|
+
this.artifactManager = artifactManager;
|
|
38
|
+
this.chainLookup = chainLookup;
|
|
39
|
+
}
|
|
40
|
+
async read(address) {
|
|
41
|
+
// Read once via readIsm() - detects type
|
|
42
|
+
const { artifactState, config, deployed } = await this.artifactManager.readIsm(address);
|
|
43
|
+
// For routing ISMs, expand nested domain ISMs recursively
|
|
44
|
+
if (config.type === AltVM.IsmType.ROUTING) {
|
|
45
|
+
return this.expandRoutingIsm({ artifactState, config, deployed });
|
|
46
|
+
}
|
|
47
|
+
if (config.type === AltVM.IsmType.AGGREGATION) {
|
|
48
|
+
const modules = [];
|
|
49
|
+
for (const module of config.modules) {
|
|
50
|
+
modules.push(isArtifactDeployed(module)
|
|
51
|
+
? module
|
|
52
|
+
: await this.read(module.deployed.address));
|
|
53
|
+
}
|
|
54
|
+
return { artifactState, config: { ...config, modules }, deployed };
|
|
55
|
+
}
|
|
56
|
+
// For non-routing ISMs, the raw and expanded configs are identical
|
|
57
|
+
return {
|
|
58
|
+
artifactState,
|
|
59
|
+
config,
|
|
60
|
+
deployed,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Expands a raw routing ISM config by recursively reading the domain ISMs.
|
|
65
|
+
* Takes a pre-read raw artifact to avoid double reading.
|
|
66
|
+
*/
|
|
67
|
+
async expandRoutingIsm(rawArtifact) {
|
|
68
|
+
const { artifactState, config, deployed } = rawArtifact;
|
|
69
|
+
const domains = {};
|
|
70
|
+
for (const [domainId, domainIsmConfig] of Object.entries(config.domains)) {
|
|
71
|
+
if (!this.chainLookup.getChainName(parseInt(domainId))) {
|
|
72
|
+
this.logger.warn(`Skipping derivation of unknown ${AltVM.IsmType.ROUTING} domain ${domainId}`);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
let nestedIsm;
|
|
76
|
+
if (isArtifactDeployed(domainIsmConfig)) {
|
|
77
|
+
// Already a full deployed artifact, use as-is
|
|
78
|
+
nestedIsm = domainIsmConfig;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// ArtifactUnderived - recursively read using self to get full config
|
|
82
|
+
nestedIsm = await this.read(domainIsmConfig.deployed.address);
|
|
83
|
+
}
|
|
84
|
+
domains[parseInt(domainId)] = nestedIsm;
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
artifactState,
|
|
88
|
+
config: {
|
|
89
|
+
type: AltVM.IsmType.ROUTING,
|
|
90
|
+
owner: config.owner,
|
|
91
|
+
domains,
|
|
92
|
+
},
|
|
93
|
+
deployed,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Backward compatibility method that converts DeployedIsmArtifact to DerivedIsmConfig.
|
|
98
|
+
* This allows IsmReader to be used as a drop-in replacement for the old AltVMIsmReader.
|
|
99
|
+
*/
|
|
100
|
+
async deriveIsmConfig(address) {
|
|
101
|
+
const artifact = await this.read(address);
|
|
102
|
+
return ismArtifactToDerivedConfig(artifact, this.chainLookup);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=generic-ism.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-ism.js","sourceRoot":"","sources":["../../src/ism/generic-ism.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-ism.test.d.ts","sourceRoot":"","sources":["../../src/ism/generic-ism.test.ts"],"names":[],"mappings":""}
|