@typeberry/lib 0.5.9 → 0.5.10-6923c44

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 (137) hide show
  1. package/package.json +1 -1
  2. package/packages/core/codec/encoder.d.ts +1 -1
  3. package/packages/core/codec/encoder.d.ts.map +1 -1
  4. package/packages/core/codec/encoder.js +3 -2
  5. package/packages/core/pvm-interface/pvm.d.ts +2 -0
  6. package/packages/core/pvm-interface/pvm.d.ts.map +1 -1
  7. package/packages/jam/block/block.d.ts +3 -3
  8. package/packages/jam/block/header.d.ts +6 -6
  9. package/packages/jam/block/test-helpers.d.ts +2 -2
  10. package/packages/jam/block/tickets.d.ts +5 -6
  11. package/packages/jam/block/tickets.d.ts.map +1 -1
  12. package/packages/jam/block/tickets.js +2 -10
  13. package/packages/jam/block/work-item-segment.d.ts +23 -6
  14. package/packages/jam/block/work-item-segment.d.ts.map +1 -1
  15. package/packages/jam/block/work-item-segment.js +24 -7
  16. package/packages/jam/block/work-item.d.ts +3 -3
  17. package/packages/jam/block/work-item.d.ts.map +1 -1
  18. package/packages/jam/block/work-item.js +7 -3
  19. package/packages/jam/block/work-package.d.ts +2 -2
  20. package/packages/jam/block/work-package.d.ts.map +1 -1
  21. package/packages/jam/block/work-package.js +2 -6
  22. package/packages/jam/block-json/block.d.ts +2 -2
  23. package/packages/jam/block-json/block.js +1 -1
  24. package/packages/jam/block-json/common.d.ts +1 -2
  25. package/packages/jam/block-json/common.d.ts.map +1 -1
  26. package/packages/jam/block-json/common.js +2 -2
  27. package/packages/jam/block-json/extrinsic.js +1 -1
  28. package/packages/jam/block-json/header.d.ts +1 -2
  29. package/packages/jam/block-json/header.d.ts.map +1 -1
  30. package/packages/jam/block-json/header.js +32 -34
  31. package/packages/jam/block-json/tickets-extrinsic.d.ts +1 -2
  32. package/packages/jam/block-json/tickets-extrinsic.d.ts.map +1 -1
  33. package/packages/jam/block-json/tickets-extrinsic.js +5 -7
  34. package/packages/jam/block-json/work-result.js +2 -2
  35. package/packages/jam/database/blocks.d.ts +3 -0
  36. package/packages/jam/database/blocks.d.ts.map +1 -1
  37. package/packages/jam/database/blocks.js +5 -0
  38. package/packages/jam/database-lmdb/blocks.d.ts +1 -0
  39. package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
  40. package/packages/jam/database-lmdb/blocks.js +5 -0
  41. package/packages/jam/database-lmdb/states.js +1 -1
  42. package/packages/jam/executor/pvm-executor.d.ts +2 -2
  43. package/packages/jam/executor/pvm-executor.d.ts.map +1 -1
  44. package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
  45. package/packages/jam/in-core/externalities/refine.d.ts +42 -11
  46. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
  47. package/packages/jam/in-core/externalities/refine.js +95 -11
  48. package/packages/jam/in-core/externalities/refine.test.d.ts +2 -0
  49. package/packages/jam/in-core/externalities/refine.test.d.ts.map +1 -0
  50. package/packages/jam/in-core/externalities/refine.test.js +263 -0
  51. package/packages/jam/in-core/in-core.d.ts +1 -1
  52. package/packages/jam/in-core/in-core.d.ts.map +1 -1
  53. package/packages/jam/in-core/in-core.js +17 -10
  54. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +3 -1
  55. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
  56. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts +2 -0
  57. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts.map +1 -1
  58. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +5 -0
  59. package/packages/jam/jam-host-calls/general/fetch.d.ts +159 -98
  60. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  61. package/packages/jam/jam-host-calls/general/fetch.js +110 -16
  62. package/packages/jam/jam-host-calls/general/fetch.test.js +87 -56
  63. package/packages/jam/jam-host-calls/refine/export.d.ts +1 -1
  64. package/packages/jam/jam-host-calls/refine/export.js +1 -1
  65. package/packages/jam/jam-host-calls/refine/export.test.js +3 -0
  66. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +1 -1
  67. package/packages/jam/jam-host-calls/refine/historical-lookup.js +1 -1
  68. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +1 -1
  69. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +1 -1
  70. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +1 -1
  71. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  72. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
  73. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  74. package/packages/jam/node/main-fuzz.js +1 -0
  75. package/packages/jam/node/main-importer.d.ts +1 -0
  76. package/packages/jam/node/main-importer.d.ts.map +1 -1
  77. package/packages/jam/node/main-importer.js +1 -0
  78. package/packages/jam/node/main.d.ts.map +1 -1
  79. package/packages/jam/node/main.js +1 -0
  80. package/packages/jam/node/reader.d.ts +2 -2
  81. package/packages/jam/node/workers.d.ts +22 -22
  82. package/packages/jam/safrole/bandersnatch-vrf.d.ts +1 -2
  83. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  84. package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
  85. package/packages/jam/safrole/bandersnatch-vrf.test.js +2 -3
  86. package/packages/jam/safrole/safrole.test.js +72 -80
  87. package/packages/jam/state/safrole-data.d.ts +1 -1
  88. package/packages/jam/state/test.utils.js +1 -1
  89. package/packages/jam/state-json/dump.js +2 -2
  90. package/packages/jam/state-json/safrole.d.ts +2 -2
  91. package/packages/jam/state-json/safrole.d.ts.map +1 -1
  92. package/packages/jam/state-json/safrole.js +4 -4
  93. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
  94. package/packages/jam/state-vectors/index.d.ts +7 -8
  95. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  96. package/packages/jam/state-vectors/index.js +4 -6
  97. package/packages/jam/transition/accumulate/accumulate.js +2 -2
  98. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts +19 -0
  99. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
  100. package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
  101. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
  102. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
  103. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
  104. package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -39
  105. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  106. package/packages/jam/transition/externalities/fetch-externalities.js +2 -88
  107. package/packages/jam/transition/externalities/index.d.ts +2 -0
  108. package/packages/jam/transition/externalities/index.d.ts.map +1 -1
  109. package/packages/jam/transition/externalities/index.js +2 -0
  110. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +23 -0
  111. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -0
  112. package/packages/jam/transition/externalities/refine-fetch-externalities.js +48 -0
  113. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts +2 -0
  114. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts.map +1 -0
  115. package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +32 -0
  116. package/packages/jam/transition/hasher.test.js +1 -1
  117. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  118. package/packages/workers/block-authorship/main.js +1 -1
  119. package/packages/workers/block-authorship/protocol.d.ts +4 -4
  120. package/packages/workers/block-authorship/ticket-generator.d.ts +1 -2
  121. package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
  122. package/packages/workers/block-authorship/ticket-generator.js +2 -2
  123. package/packages/workers/block-authorship/ticket-generator.test.js +10 -11
  124. package/packages/workers/comms-authorship-network/protocol.d.ts +1 -1
  125. package/packages/workers/comms-authorship-network/tickets-message.d.ts +1 -1
  126. package/packages/workers/importer/importer.d.ts +1 -0
  127. package/packages/workers/importer/importer.d.ts.map +1 -1
  128. package/packages/workers/importer/importer.js +7 -2
  129. package/packages/workers/importer/main.d.ts.map +1 -1
  130. package/packages/workers/importer/main.js +2 -0
  131. package/packages/workers/importer/protocol.d.ts +12 -9
  132. package/packages/workers/importer/protocol.d.ts.map +1 -1
  133. package/packages/workers/importer/protocol.js +8 -3
  134. package/packages/workers/jam-network/protocol.d.ts +10 -10
  135. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
  136. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
  137. package/packages/jam/transition/externalities/fetch-externalities.test.js +0 -254
@@ -0,0 +1,263 @@
1
+ import assert from "node:assert";
2
+ import { describe, it } from "node:test";
3
+ import { MAX_NUMBER_OF_EXPORTS_WP, SEGMENT_BYTES, tryAsServiceGas, tryAsServiceId, tryAsTimeSlot, } from "#@typeberry/block";
4
+ import { Bytes, BytesBlob } from "#@typeberry/bytes";
5
+ import { HashDictionary } from "#@typeberry/collections";
6
+ import { PvmBackend, tinyChainSpec } from "#@typeberry/config";
7
+ import { HASH_SIZE } from "#@typeberry/hash";
8
+ import { SegmentExportError, tryAsMachineId, tryAsProgramCounter } from "#@typeberry/jam-host-calls";
9
+ import { tryAsU32, tryAsU64 } from "#@typeberry/numbers";
10
+ import { InMemoryService, InMemoryState, PreimageItem, ServiceAccountInfo } from "#@typeberry/state";
11
+ import { RefineExternalitiesImpl } from "./refine.js";
12
+ const MINIMAL_PROGRAM = new Uint8Array([0, 1, 1, 0, 0x00]);
13
+ function createSegment(byte = 0xab) {
14
+ return Bytes.fill(SEGMENT_BYTES, byte);
15
+ }
16
+ function createSmallSegment(bytes) {
17
+ const data = new Uint8Array(SEGMENT_BYTES);
18
+ data.set(bytes);
19
+ return Bytes.fromBlob(data, SEGMENT_BYTES);
20
+ }
21
+ /**
22
+ * Create a mock State that has specified services with preimages.
23
+ */
24
+ function createMockState(services) {
25
+ const serviceMap = new Map();
26
+ for (const svc of services) {
27
+ const preimages = HashDictionary.new();
28
+ for (const p of svc.preimages ?? []) {
29
+ const hash = Bytes.parseBytes(p.hash, HASH_SIZE).asOpaque();
30
+ const item = PreimageItem.create({
31
+ hash,
32
+ blob: BytesBlob.parseBlob(p.blob),
33
+ });
34
+ preimages.set(hash, item);
35
+ }
36
+ const serviceId = tryAsServiceId(svc.id);
37
+ serviceMap.set(serviceId, new InMemoryService(serviceId, {
38
+ info: ServiceAccountInfo.create({
39
+ codeHash: Bytes.zero(HASH_SIZE).asOpaque(),
40
+ balance: tryAsU64(1000000000n),
41
+ accumulateMinGas: tryAsServiceGas(100),
42
+ onTransferMinGas: tryAsServiceGas(100),
43
+ storageUtilisationBytes: tryAsU64(0),
44
+ storageUtilisationCount: tryAsU32(0),
45
+ gratisStorage: tryAsU64(0),
46
+ created: tryAsTimeSlot(0),
47
+ lastAccumulation: tryAsTimeSlot(0),
48
+ parentService: tryAsServiceId(0),
49
+ }),
50
+ preimages,
51
+ lookupHistory: HashDictionary.new(),
52
+ storage: new Map(),
53
+ }));
54
+ }
55
+ return InMemoryState.partial(tinyChainSpec, { services: serviceMap });
56
+ }
57
+ function createExt(overrides = {}) {
58
+ const defaultState = createMockState([]);
59
+ return RefineExternalitiesImpl.create({
60
+ currentServiceId: tryAsServiceId(42),
61
+ lookupState: overrides.lookupState ?? defaultState,
62
+ exportOffset: overrides.exportOffset ?? 0,
63
+ pvmBackend: PvmBackend.BuiltIn,
64
+ ...overrides,
65
+ });
66
+ }
67
+ describe("RefineExternalitiesImpl", () => {
68
+ describe("historicalLookup", () => {
69
+ const PREIMAGE_HASH = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
70
+ const PREIMAGE_DATA = "0xdeadbeef";
71
+ it("should return preimage data for existing service and hash", async () => {
72
+ const lookupState = createMockState([{ id: 42, preimages: [{ hash: PREIMAGE_HASH, blob: PREIMAGE_DATA }] }]);
73
+ const ext = createExt({ lookupState });
74
+ const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
75
+ const result = await ext.historicalLookup(tryAsServiceId(42), hash);
76
+ assert.strictEqual(result?.toString(), BytesBlob.parseBlob(PREIMAGE_DATA).toString());
77
+ });
78
+ it("should use currentServiceId when serviceId is null", async () => {
79
+ const lookupState = createMockState([{ id: 42, preimages: [{ hash: PREIMAGE_HASH, blob: PREIMAGE_DATA }] }]);
80
+ const ext = createExt({ lookupState });
81
+ const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
82
+ const result = await ext.historicalLookup(null, hash);
83
+ assert.notStrictEqual(result, null);
84
+ });
85
+ it("should return null for non-existent service", async () => {
86
+ const ext = createExt();
87
+ const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
88
+ const result = await ext.historicalLookup(tryAsServiceId(999), hash);
89
+ assert.strictEqual(result, null);
90
+ });
91
+ it("should return null for non-existent preimage hash", async () => {
92
+ const lookupState = createMockState([{ id: 42 }]);
93
+ const ext = createExt({ lookupState });
94
+ const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
95
+ const result = await ext.historicalLookup(tryAsServiceId(42), hash);
96
+ assert.strictEqual(result, null);
97
+ });
98
+ it("should look up from the correct service when multiple exist", async () => {
99
+ const lookupState = createMockState([
100
+ { id: 1, preimages: [{ hash: PREIMAGE_HASH, blob: "0x01" }] },
101
+ { id: 2, preimages: [{ hash: PREIMAGE_HASH, blob: "0x02" }] },
102
+ ]);
103
+ const ext = createExt({ lookupState });
104
+ const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
105
+ const r1 = await ext.historicalLookup(tryAsServiceId(1), hash);
106
+ const r2 = await ext.historicalLookup(tryAsServiceId(2), hash);
107
+ assert.strictEqual(r1?.raw[0], 0x01);
108
+ assert.strictEqual(r2?.raw[0], 0x02);
109
+ });
110
+ });
111
+ describe("exportSegment", () => {
112
+ it("should export a segment and return its index", () => {
113
+ const ext = createExt();
114
+ const segment = createSegment(0x01);
115
+ const result = ext.exportSegment(segment);
116
+ assert.strictEqual(result.isOk, true);
117
+ assert.strictEqual(result.ok, 0); // first export at offset 0
118
+ assert.strictEqual(ext.getExportedSegments().length, 1);
119
+ });
120
+ it("should return sequential indices for multiple exports", () => {
121
+ const ext = createExt();
122
+ const r1 = ext.exportSegment(createSegment(0x01));
123
+ const r2 = ext.exportSegment(createSegment(0x02));
124
+ const r3 = ext.exportSegment(createSegment(0x03));
125
+ assert.strictEqual(r1.isOk, true);
126
+ assert.strictEqual(r1.ok, 0);
127
+ assert.strictEqual(r2.isOk, true);
128
+ assert.strictEqual(r2.ok, 1);
129
+ assert.strictEqual(r3.isOk, true);
130
+ assert.strictEqual(r3.ok, 2);
131
+ assert.strictEqual(ext.getExportedSegments().length, 3);
132
+ });
133
+ it("should apply exportOffset to segment indices", () => {
134
+ const ext = createExt({ exportOffset: 100 });
135
+ const result = ext.exportSegment(createSegment());
136
+ assert.strictEqual(result.isOk, true);
137
+ assert.strictEqual(result.ok, 100);
138
+ });
139
+ it("should return SegmentExportError when MAX_NUMBER_OF_EXPORTS_WP exceeded", () => {
140
+ const ext = createExt({ exportOffset: MAX_NUMBER_OF_EXPORTS_WP });
141
+ const result = ext.exportSegment(createSegment());
142
+ assert.strictEqual(result.isError, true);
143
+ assert.strictEqual(result.error, SegmentExportError);
144
+ });
145
+ it("should return SegmentExportError at exactly MAX_NUMBER_OF_EXPORTS_WP - 1 + 1", () => {
146
+ const ext = createExt({ exportOffset: MAX_NUMBER_OF_EXPORTS_WP - 1 });
147
+ // This one should succeed (index = MAX_NUMBER_OF_EXPORTS_WP - 1)
148
+ const r1 = ext.exportSegment(createSegment(0x01));
149
+ assert.strictEqual(r1.isOk, true);
150
+ assert.strictEqual(r1.ok, MAX_NUMBER_OF_EXPORTS_WP - 1);
151
+ // This one should fail
152
+ const r2 = ext.exportSegment(createSegment(0x02));
153
+ assert.strictEqual(r2.isError, true);
154
+ assert.strictEqual(r2.error, SegmentExportError);
155
+ });
156
+ it("should store exact segment data", () => {
157
+ const ext = createExt();
158
+ const segment = createSmallSegment([1, 2, 3, 4, 5]);
159
+ ext.exportSegment(segment);
160
+ const exported = ext.getExportedSegments();
161
+ assert.strictEqual(exported.length, 1);
162
+ assert.deepStrictEqual(exported[0].raw.subarray(0, 5), new Uint8Array([1, 2, 3, 4, 5]));
163
+ });
164
+ });
165
+ describe("machineInit", () => {
166
+ it("should create a new inner PVM and return a machine ID", async () => {
167
+ const ext = createExt();
168
+ const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
169
+ const pc = tryAsProgramCounter(0);
170
+ const result = await ext.machineInit(code, pc);
171
+ assert.strictEqual(result.isOk, true);
172
+ assert.strictEqual(result.ok, tryAsMachineId(0));
173
+ });
174
+ it("should assign sequential machine IDs", async () => {
175
+ const ext = createExt();
176
+ const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
177
+ const pc = tryAsProgramCounter(0);
178
+ const r1 = await ext.machineInit(code, pc);
179
+ const r2 = await ext.machineInit(code, pc);
180
+ const r3 = await ext.machineInit(code, pc);
181
+ assert.strictEqual(r1.isOk, true);
182
+ assert.strictEqual(r1.ok, tryAsMachineId(0));
183
+ assert.strictEqual(r2.isOk, true);
184
+ assert.strictEqual(r2.ok, tryAsMachineId(1));
185
+ assert.strictEqual(r3.isOk, true);
186
+ assert.strictEqual(r3.ok, tryAsMachineId(2));
187
+ });
188
+ it("should return error for invalid program blob", async () => {
189
+ const ext = createExt();
190
+ const invalidCode = BytesBlob.blobFrom(new Uint8Array([0xff, 0xff, 0xff]));
191
+ const pc = tryAsProgramCounter(0);
192
+ const result = await ext.machineInit(invalidCode, pc);
193
+ assert.strictEqual(result.isError, true);
194
+ });
195
+ it("should return error for empty program blob", async () => {
196
+ const ext = createExt();
197
+ const emptyCode = BytesBlob.blobFrom(new Uint8Array([]));
198
+ const pc = tryAsProgramCounter(0);
199
+ const result = await ext.machineInit(emptyCode, pc);
200
+ assert.strictEqual(result.isError, true);
201
+ });
202
+ it("should accept a non-zero program counter", async () => {
203
+ const ext = createExt();
204
+ const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
205
+ const pc = tryAsProgramCounter(1);
206
+ const result = await ext.machineInit(code, pc);
207
+ assert.strictEqual(result.isOk, true);
208
+ });
209
+ });
210
+ describe("machineExpunge", () => {
211
+ it("should remove machine and return its program counter (0)", async () => {
212
+ const ext = createExt();
213
+ const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
214
+ const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
215
+ assert.strictEqual(initResult.isOk, true);
216
+ const machineId = initResult.ok;
217
+ const result = await ext.machineExpunge(machineId);
218
+ assert.strictEqual(result.isOk, true);
219
+ // PC should be 0 since we initialized with PC=0
220
+ assert.strictEqual(result.ok, tryAsProgramCounter(0));
221
+ });
222
+ it("should remove machine and return its program counter (10)", async () => {
223
+ const ext = createExt();
224
+ const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
225
+ const initResult = await ext.machineInit(code, tryAsProgramCounter(10));
226
+ assert.strictEqual(initResult.isOk, true);
227
+ const machineId = initResult.ok;
228
+ const result = await ext.machineExpunge(machineId);
229
+ assert.strictEqual(result.isOk, true);
230
+ // PC should be 10 since we initialized with PC=10
231
+ assert.strictEqual(result.ok, tryAsProgramCounter(10));
232
+ });
233
+ it("should return NoMachineError for non-existent machine", async () => {
234
+ const ext = createExt();
235
+ const result = await ext.machineExpunge(tryAsMachineId(999));
236
+ assert.strictEqual(result.isError, true);
237
+ });
238
+ it("should not allow double expunge", async () => {
239
+ const ext = createExt();
240
+ const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
241
+ const initResult = await ext.machineInit(code, tryAsProgramCounter(0));
242
+ assert.strictEqual(initResult.isOk, true);
243
+ const machineId = initResult.ok;
244
+ const r1 = await ext.machineExpunge(machineId);
245
+ assert.strictEqual(r1.isOk, true);
246
+ const r2 = await ext.machineExpunge(machineId);
247
+ assert.strictEqual(r2.isError, true);
248
+ });
249
+ it("should remove exact machine from multiple and return its program counter (10)", async () => {
250
+ const ext = createExt();
251
+ const code = BytesBlob.blobFrom(MINIMAL_PROGRAM);
252
+ await ext.machineInit(code, tryAsProgramCounter(0));
253
+ const initResult = await ext.machineInit(code, tryAsProgramCounter(10));
254
+ await ext.machineInit(code, tryAsProgramCounter(20));
255
+ assert.strictEqual(initResult.isOk, true);
256
+ const machineId = initResult.ok;
257
+ const result = await ext.machineExpunge(machineId);
258
+ assert.strictEqual(result.isOk, true);
259
+ // PC should be 10 since we initialized with PC=10
260
+ assert.strictEqual(result.ok, tryAsProgramCounter(10));
261
+ });
262
+ });
263
+ });
@@ -16,7 +16,7 @@ export type RefineResult = {
16
16
  };
17
17
  export type RefineItemResult = {
18
18
  result: WorkResult;
19
- exports: Segment[];
19
+ exports: readonly Segment[];
20
20
  };
21
21
  export declare enum RefineError {
22
22
  /** State for context anchor block or lookup anchor is not found in the DB. */
@@ -1 +1 @@
1
- {"version":3,"file":"in-core.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/in-core/in-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EAIhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAY,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAmB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAsC,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAGjH,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAA+D,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpH,OAAO,EAAE,KAAK,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAKzE,OAAO,EAA4B,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGpE,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,OAAO,EAAE,CAAC;CACpB,CAAC;AAEF,oBAAY,WAAW;IACrB,8EAA8E;IAC9E,YAAY,IAAI;IAChB,qFAAqF;IACrF,iBAAiB,IAAI;IACrB,wEAAwE;IACxE,uBAAuB,IAAI;IAC3B,2BAA2B;IAC3B,kBAAkB,IAAI;CACvB;AAqBD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAgBF,qBAAa,MAAM;aAEC,SAAS,EAAE,SAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHR,SAAS,EAAE,SAAS,EACnB,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO;IAGnC;;;;;;;;;OASG;IACG,MAAM,CACV,kBAAkB,EAAE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,EAC1D,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,EACvC,UAAU,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAmE7C,OAAO,CAAC,oBAAoB;YAuDd,gBAAgB;YAkBhB,UAAU;IAgGxB,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;IAiBrD,OAAO,CAAC,cAAc;IAyCtB,OAAO,CAAC,yBAAyB;CAoBlC"}
1
+ {"version":3,"file":"in-core.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/in-core/in-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EAIhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAY,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAmB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAsC,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAGjH,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAA+D,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpH,OAAO,EAAE,KAAK,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAKzE,OAAO,EAA4B,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGpE,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;CAC7B,CAAC;AAEF,oBAAY,WAAW;IACrB,8EAA8E;IAC9E,YAAY,IAAI;IAChB,qFAAqF;IACrF,iBAAiB,IAAI;IACrB,wEAAwE;IACxE,uBAAuB,IAAI;IAC3B,2BAA2B;IAC3B,kBAAkB,IAAI;CACvB;AAqBD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAgBF,qBAAa,MAAM;aAEC,SAAS,EAAE,SAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHR,SAAS,EAAE,SAAS,EACnB,MAAM,EAAE,QAAQ,EAChB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO;IAGnC;;;;;;;;;OASG;IACG,MAAM,CACV,kBAAkB,EAAE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,EAC1D,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,EACvC,UAAU,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAgF7C,OAAO,CAAC,oBAAoB;YAuDd,gBAAgB;YAkBhB,UAAU;IAoGxB,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;IAiBrD,OAAO,CAAC,cAAc;IAyCtB,OAAO,CAAC,yBAAyB;CAsBlC"}
@@ -10,7 +10,7 @@ import { PvmExecutor, ReturnStatus } from "#@typeberry/executor";
10
10
  import { HASH_SIZE } from "#@typeberry/hash";
11
11
  import { Logger } from "#@typeberry/logger";
12
12
  import { tryAsU8, tryAsU16, tryAsU32 } from "#@typeberry/numbers";
13
- import { FetchExternalities } from "#@typeberry/transition/externalities/fetch-externalities.js";
13
+ import { RefineFetchExternalities } from "#@typeberry/transition/externalities/refine-fetch-externalities.js";
14
14
  import { assertEmpty, assertNever, Result } from "#@typeberry/utils";
15
15
  import { RefineExternalitiesImpl } from "./externalities/refine.js";
16
16
  export var RefineError;
@@ -102,10 +102,13 @@ export class InCore {
102
102
  }
103
103
  logger.log `[core:${core}] Authorized. Proceeding with work items verification. Anchor=${context.anchor}`;
104
104
  // Verify the work items
105
+ let exportOffset = 0;
105
106
  const refineResults = [];
106
107
  for (const [idx, item] of items.entries()) {
107
108
  logger.info `[core:${core}][i:${idx}] Refining item for service ${item.service}.`;
108
- refineResults.push(await this.refineItem(state, idx, item, imports, extrinsics, core, workPackageHash));
109
+ const result = await this.refineItem(state, lookupState, idx, item, imports, extrinsics, core, workPackageHash, exportOffset);
110
+ refineResults.push(result);
111
+ exportOffset += result.exports.length;
109
112
  }
110
113
  // amalgamate the work report now
111
114
  return Result.ok(this.amalgamateWorkReport(asKnownSize(refineResults), authResult.ok, workPackageHash, context, core));
@@ -164,7 +167,7 @@ export class InCore {
164
167
  authorizationOutput,
165
168
  });
166
169
  }
167
- async refineItem(state, idx, item, allImports, allExtrinsics, coreIndex, workPackageHash) {
170
+ async refineItem(state, lookupState, idx, item, allImports, allExtrinsics, coreIndex, workPackageHash, exportOffset) {
168
171
  const payloadHash = this.blake2b.hashBytes(item.payload);
169
172
  const baseResult = {
170
173
  serviceId: item.service,
@@ -202,6 +205,9 @@ export class InCore {
202
205
  payload: item.payload,
203
206
  imports: allImports,
204
207
  extrinsics: allExtrinsics,
208
+ currentServiceId: item.service,
209
+ lookupState,
210
+ exportOffset,
205
211
  });
206
212
  const executor = await PvmExecutor.createRefineExecutor(item.service, code, externalities, this.pvmBackend);
207
213
  const args = Encoder.encodeObject(ARGS_CODEC, {
@@ -212,8 +218,7 @@ export class InCore {
212
218
  packageHash: workPackageHash,
213
219
  });
214
220
  const execResult = await executor.run(args, item.refineGasLimit);
215
- // TODO [ToDr] get exports from externalities
216
- const exports = [];
221
+ const exports = externalities.refine.getExportedSegments();
217
222
  if (exports.length !== item.exportCount) {
218
223
  return {
219
224
  exports,
@@ -281,11 +286,13 @@ export class InCore {
281
286
  }
282
287
  createRefineExternalities(args) {
283
288
  // TODO [ToDr] Pass all required fetch data
284
- const fetchExternalities = FetchExternalities.createForRefine({
285
- entropy: undefined,
286
- ...args,
287
- }, this.chainSpec);
288
- const refine = RefineExternalitiesImpl.create();
289
+ const fetchExternalities = new RefineFetchExternalities(this.chainSpec);
290
+ const refine = RefineExternalitiesImpl.create({
291
+ currentServiceId: args.currentServiceId,
292
+ lookupState: args.lookupState,
293
+ exportOffset: args.exportOffset,
294
+ pvmBackend: this.pvmBackend,
295
+ });
289
296
  return {
290
297
  fetchExternalities,
291
298
  refine,
@@ -82,7 +82,9 @@ export declare const SegmentExportError: unique symbol;
82
82
  export type SegmentExportError = typeof SegmentExportError;
83
83
  /** Host functions external invocations available during refine phase. */
84
84
  export interface RefineExternalities {
85
- /** Forget a previously started nested VM. */
85
+ /** Get the segments exported during this work item's refinement. */
86
+ getExportedSegments(): readonly Segment[];
87
+ /** Forget a previously started nested VM. Return its current program counter.*/
86
88
  machineExpunge(machineIndex: MachineId): Promise<Result<ProgramCounter, NoMachineError>>;
87
89
  /** Set given range of pages as non-accessible and re-initialize them with zeros. */
88
90
  machineVoidPages(machineIndex: MachineId, pageStart: U64, pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
@@ -1 +1 @@
1
- {"version":3,"file":"refine-externalities.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/externalities/refine-externalities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+DAA+D,CAAC;AACzG,OAAO,EAAgB,KAAK,EAAE,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;AAChE,4CAA4C;AAC5C,eAAO,MAAM,mBAAmB,GAAI,GAAG,MAAM,GAAG,MAAM,KAAG,cAA2C,CAAC;AAErG,uCAAuC;AACvC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;AACtD,qDAAqD;AACrD,eAAO,MAAM,cAAc,GAAI,GAAG,MAAM,GAAG,MAAM,KAAG,SAAsC,CAAC;AAE3F,qBAAa,eAAe;IACpB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;CAS7E;AAED,MAAM,MAAM,aAAa,GACrB;IACE,MAAM,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAC3B,aAAa,EAAE,GAAG,CAAC;CACpB,GACD;IACE,MAAM,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAC5B,OAAO,EAAE,GAAG,CAAC;CACd,GACD;IACE,MAAM,EAAE,OAAO,MAAM,CAAC,EAAE,GAAG,OAAO,MAAM,CAAC,IAAI,GAAG,OAAO,MAAM,CAAC,KAAK,GAAG,OAAO,MAAM,CAAC,GAAG,CAAC;CACzF,CAAC;AAEN,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,iBAAiB,CAAC;CAC9B,CAAC;AAEF,kEAAkE;AAClE,oBAAY,eAAe;IACzB,kDAAkD;IAClD,IAAI,IAAI;IACR,iDAAiD;IACjD,QAAQ,IAAI;IACZ,kDAAkD;IAClD,SAAS,IAAI;IACb,mDAAmD;IACnD,IAAI,IAAI;IACR,oDAAoD;IACpD,KAAK,IAAI;CACV;AAED,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,GAAI,GAAG,MAAM,GAAG,MAAM,KAAG,eAAe,GAAG,IACG,CAAC;AAE7E,iEAAiE;AACjE,oBAAY,aAAa;IACvB,yBAAyB;IACzB,eAAe,IAAI;IACnB,8BAA8B;IAC9B,oBAAoB,IAAI;IACxB,4CAA4C;IAC5C,SAAS,IAAI;CACd;AAED,oBAAY,aAAa;IACvB,4CAA4C;IAC5C,SAAS,IAAI;IACb,sDAAsD;IACtD,WAAW,IAAI;CAChB;AAED,oBAAY,UAAU;IACpB,4CAA4C;IAC5C,SAAS,IAAI;IACb,gCAAgC;IAChC,gBAAgB,IAAI;IACpB,2FAA2F;IAC3F,WAAW,IAAI;CAChB;AAED,kCAAkC;AAClC,eAAO,MAAM,cAAc,eAAqC,CAAC;AACjE,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC;AAEnD,0CAA0C;AAC1C,eAAO,MAAM,kBAAkB,eAAgD,CAAC;AAChF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC;AAE3D,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,cAAc,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;IAEzF,oFAAoF;IACpF,gBAAgB,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9G,4EAA4E;IAC5E,gBAAgB,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9G,mFAAmF;IACnF,eAAe,CACb,YAAY,EAAE,SAAS,EACvB,gBAAgB,EAAE,GAAG,EACrB,WAAW,EAAE,GAAG,EAChB,MAAM,EAAE,GAAG,EACX,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAEtC,+EAA+E;IAC/E,eAAe,CACb,YAAY,EAAE,SAAS,EACvB,WAAW,EAAE,GAAG,EAChB,gBAAgB,EAAE,GAAG,EACrB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAEtC,4EAA4E;IAC5E,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE9G,8EAA8E;IAC9E,aAAa,CACX,YAAY,EAAE,SAAS,EACvB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;IAElD;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAE1E,oCAAoC;IACpC,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAE5F,wDAAwD;IACxD,YAAY,CACV,YAAY,EAAE,SAAS,EACvB,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,EACd,WAAW,EAAE,eAAe,GAAG,IAAI,GAClC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;CACpC"}
1
+ {"version":3,"file":"refine-externalities.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/externalities/refine-externalities.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,8 @@ export declare class TestRefineExt implements RefineExternalities {
20
20
  readonly machineZeroPagesData: MultiMap<Parameters<TestRefineExt["machineZeroPages"]>, Result<OK, ZeroVoidError>>;
21
21
  readonly machinePagesData: MultiMap<Parameters<TestRefineExt["machinePages"]>, Result<OK, PagesError>>;
22
22
  machineInvokeStatus: MachineStatus;
23
+ private readonly exportSegments;
24
+ getExportedSegments(): readonly Segment[];
23
25
  machineExpunge(machineIndex: MachineId): Promise<Result<ProgramCounter, NoMachineError>>;
24
26
  machineVoidPages(machineIndex: MachineId, pageStart: U64, pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
25
27
  machineZeroPages(machineIndex: MachineId, pageStart: U64, pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
@@ -1 +1 @@
1
- {"version":3,"file":"refine-externalities.test.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/externalities/refine-externalities.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"refine-externalities.test.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jam-host-calls/externalities/refine-externalities.test.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,10 @@ export class TestRefineExt {
23
23
  machineZeroPagesData = new MultiMap(3);
24
24
  machinePagesData = new MultiMap(4);
25
25
  machineInvokeStatus = { status: Status.OK };
26
+ exportSegments = [];
27
+ getExportedSegments() {
28
+ return this.exportSegments;
29
+ }
26
30
  machineExpunge(machineIndex) {
27
31
  const val = this.machineExpungeData.get(machineIndex);
28
32
  if (val === undefined) {
@@ -86,6 +90,7 @@ export class TestRefineExt {
86
90
  if (result === undefined) {
87
91
  throw new Error(`Unexpected call to exportSegment with: ${segment}`);
88
92
  }
93
+ this.exportSegments.push(segment);
89
94
  return result;
90
95
  }
91
96
  historicalLookup(serviceId, hash) {