@typeberry/lib 0.5.9 → 0.5.10-44bf91a
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/package.json +1 -1
- package/packages/core/codec/encoder.d.ts +1 -1
- package/packages/core/codec/encoder.d.ts.map +1 -1
- package/packages/core/codec/encoder.js +3 -2
- package/packages/core/pvm-interface/pvm.d.ts +2 -0
- package/packages/core/pvm-interface/pvm.d.ts.map +1 -1
- package/packages/jam/block/block.d.ts +3 -3
- package/packages/jam/block/header.d.ts +6 -6
- package/packages/jam/block/test-helpers.d.ts +2 -2
- package/packages/jam/block/tickets.d.ts +5 -6
- package/packages/jam/block/tickets.d.ts.map +1 -1
- package/packages/jam/block/tickets.js +2 -10
- package/packages/jam/block/work-item-segment.d.ts +23 -6
- package/packages/jam/block/work-item-segment.d.ts.map +1 -1
- package/packages/jam/block/work-item-segment.js +24 -7
- package/packages/jam/block/work-item.d.ts +3 -3
- package/packages/jam/block/work-item.d.ts.map +1 -1
- package/packages/jam/block/work-item.js +7 -3
- package/packages/jam/block/work-package.d.ts +2 -2
- package/packages/jam/block/work-package.d.ts.map +1 -1
- package/packages/jam/block/work-package.js +2 -6
- package/packages/jam/block-json/block.d.ts +2 -2
- package/packages/jam/block-json/block.js +1 -1
- package/packages/jam/block-json/common.d.ts +1 -2
- package/packages/jam/block-json/common.d.ts.map +1 -1
- package/packages/jam/block-json/common.js +2 -2
- package/packages/jam/block-json/extrinsic.js +1 -1
- package/packages/jam/block-json/header.d.ts +1 -2
- package/packages/jam/block-json/header.d.ts.map +1 -1
- package/packages/jam/block-json/header.js +32 -34
- package/packages/jam/block-json/tickets-extrinsic.d.ts +1 -2
- package/packages/jam/block-json/tickets-extrinsic.d.ts.map +1 -1
- package/packages/jam/block-json/tickets-extrinsic.js +5 -7
- package/packages/jam/block-json/work-result.js +2 -2
- package/packages/jam/database/blocks.d.ts +3 -0
- package/packages/jam/database/blocks.d.ts.map +1 -1
- package/packages/jam/database/blocks.js +5 -0
- package/packages/jam/database-lmdb/blocks.d.ts +1 -0
- package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
- package/packages/jam/database-lmdb/blocks.js +5 -0
- package/packages/jam/database-lmdb/states.js +1 -1
- package/packages/jam/executor/pvm-executor.d.ts +2 -2
- package/packages/jam/executor/pvm-executor.d.ts.map +1 -1
- package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
- package/packages/jam/in-core/externalities/refine.d.ts +42 -11
- package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
- package/packages/jam/in-core/externalities/refine.js +95 -11
- package/packages/jam/in-core/externalities/refine.test.d.ts +2 -0
- package/packages/jam/in-core/externalities/refine.test.d.ts.map +1 -0
- package/packages/jam/in-core/externalities/refine.test.js +263 -0
- package/packages/jam/in-core/in-core.d.ts +1 -1
- package/packages/jam/in-core/in-core.d.ts.map +1 -1
- package/packages/jam/in-core/in-core.js +17 -10
- package/packages/jam/jam-host-calls/accumulate/bless.js +9 -9
- package/packages/jam/jam-host-calls/externalities/partial-state.d.ts +1 -1
- package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +3 -1
- package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts +2 -0
- package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +5 -0
- package/packages/jam/jam-host-calls/general/fetch.d.ts +159 -98
- package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/fetch.js +110 -16
- package/packages/jam/jam-host-calls/general/fetch.test.js +87 -56
- package/packages/jam/jam-host-calls/refine/export.d.ts +1 -1
- package/packages/jam/jam-host-calls/refine/export.js +1 -1
- package/packages/jam/jam-host-calls/refine/export.test.js +3 -0
- package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +1 -1
- package/packages/jam/jam-host-calls/refine/historical-lookup.js +1 -1
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +1 -1
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +1 -1
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +1 -1
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
- package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
- package/packages/jam/node/main-fuzz.d.ts.map +1 -1
- package/packages/jam/node/main-fuzz.js +1 -0
- package/packages/jam/node/main-importer.d.ts +1 -0
- package/packages/jam/node/main-importer.d.ts.map +1 -1
- package/packages/jam/node/main-importer.js +1 -0
- package/packages/jam/node/main.d.ts.map +1 -1
- package/packages/jam/node/main.js +1 -0
- package/packages/jam/node/reader.d.ts +2 -2
- package/packages/jam/node/workers.d.ts +22 -22
- package/packages/jam/safrole/bandersnatch-vrf.d.ts +1 -2
- package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
- package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
- package/packages/jam/safrole/bandersnatch-vrf.test.js +2 -3
- package/packages/jam/safrole/safrole.test.js +72 -80
- package/packages/jam/state/safrole-data.d.ts +1 -1
- package/packages/jam/state/test.utils.js +1 -1
- package/packages/jam/state-json/dump.js +2 -2
- package/packages/jam/state-json/safrole.d.ts +2 -2
- package/packages/jam/state-json/safrole.d.ts.map +1 -1
- package/packages/jam/state-json/safrole.js +4 -4
- package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
- package/packages/jam/state-vectors/index.d.ts +7 -8
- package/packages/jam/state-vectors/index.d.ts.map +1 -1
- package/packages/jam/state-vectors/index.js +4 -6
- package/packages/jam/transition/accumulate/accumulate.js +2 -2
- package/packages/jam/transition/accumulate/accumulation-result-merge-utils.js +48 -39
- package/packages/jam/transition/externalities/accumulate-externalities.d.ts +2 -2
- package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/accumulate-externalities.js +20 -7
- package/packages/jam/transition/externalities/accumulate-externalities.test.js +74 -4
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts +19 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
- package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -39
- package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/fetch-externalities.js +2 -88
- package/packages/jam/transition/externalities/index.d.ts +2 -0
- package/packages/jam/transition/externalities/index.d.ts.map +1 -1
- package/packages/jam/transition/externalities/index.js +2 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +23 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.js +48 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts +2 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts.map +1 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +32 -0
- package/packages/jam/transition/hasher.test.js +1 -1
- package/packages/workers/block-authorship/main.d.ts.map +1 -1
- package/packages/workers/block-authorship/main.js +1 -1
- package/packages/workers/block-authorship/protocol.d.ts +4 -4
- package/packages/workers/block-authorship/ticket-generator.d.ts +1 -2
- package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
- package/packages/workers/block-authorship/ticket-generator.js +2 -2
- package/packages/workers/block-authorship/ticket-generator.test.js +10 -11
- package/packages/workers/comms-authorship-network/protocol.d.ts +1 -1
- package/packages/workers/comms-authorship-network/tickets-message.d.ts +1 -1
- package/packages/workers/importer/importer.d.ts +1 -0
- package/packages/workers/importer/importer.d.ts.map +1 -1
- package/packages/workers/importer/importer.js +7 -2
- package/packages/workers/importer/main.d.ts.map +1 -1
- package/packages/workers/importer/main.js +2 -0
- package/packages/workers/importer/protocol.d.ts +12 -9
- package/packages/workers/importer/protocol.d.ts.map +1 -1
- package/packages/workers/importer/protocol.js +8 -3
- package/packages/workers/jam-network/protocol.d.ts +10 -10
- package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
- package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
- 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;
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
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,
|
|
@@ -34,8 +34,8 @@ export class Bless {
|
|
|
34
34
|
async execute(_gas, regs, memory) {
|
|
35
35
|
// `m`: manager service (can change privileged services)
|
|
36
36
|
const manager = getServiceId(regs.get(IN_OUT_REG));
|
|
37
|
-
// `a`:
|
|
38
|
-
const
|
|
37
|
+
// `a`: mem pointer for collection of auth queue assigners (one per core)
|
|
38
|
+
const assignersPtr = regs.get(8);
|
|
39
39
|
// `v`: manages validator keys
|
|
40
40
|
const delegator = getServiceId(regs.get(9));
|
|
41
41
|
// `r`: manages creation of new services with id within protected range
|
|
@@ -67,29 +67,29 @@ export class Bless {
|
|
|
67
67
|
}
|
|
68
68
|
// https://graypaper.fluffylabs.dev/#/7e6ff6a/367200367200?v=0.6.7
|
|
69
69
|
const res = safeAllocUint8Array(tryAsExactBytes(codec.u32.sizeHint) * this.chainSpec.coresCount);
|
|
70
|
-
const
|
|
71
|
-
const memoryReadResult = memory.loadInto(res,
|
|
70
|
+
const assignersDecoder = Decoder.fromBlob(res);
|
|
71
|
+
const memoryReadResult = memory.loadInto(res, assignersPtr);
|
|
72
72
|
if (memoryReadResult.isError) {
|
|
73
73
|
logger.trace `[${this.currentServiceId}] BLESS(m: ${manager}, v: ${delegator}, r: ${registrar}, ${lazyInspect(autoAccumulate)}) <- PANIC`;
|
|
74
74
|
return PvmExecution.Panic;
|
|
75
75
|
}
|
|
76
76
|
// `a`
|
|
77
|
-
const
|
|
78
|
-
const updateResult = this.partialState.updatePrivilegedServices(manager,
|
|
77
|
+
const assigners = tryAsPerCore(assignersDecoder.sequenceFixLen(codec.u32.asOpaque(), this.chainSpec.coresCount), this.chainSpec);
|
|
78
|
+
const updateResult = this.partialState.updatePrivilegedServices(manager, assigners, delegator, registrar, autoAccumulate);
|
|
79
79
|
if (updateResult.isOk) {
|
|
80
|
-
logger.trace `[${this.currentServiceId}] BLESS(m: ${manager}, a: [${
|
|
80
|
+
logger.trace `[${this.currentServiceId}] BLESS(m: ${manager}, a: [${assigners}], v: ${delegator}, r: ${registrar}, ${lazyInspect(autoAccumulate)}) <- OK`;
|
|
81
81
|
regs.set(IN_OUT_REG, HostCallResult.OK);
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
84
|
const e = updateResult.error;
|
|
85
85
|
// NOTE: `UpdatePrivilegesError.UnprivilegedService` won't happen in 0.7.1+
|
|
86
86
|
if (e === UpdatePrivilegesError.UnprivilegedService) {
|
|
87
|
-
logger.trace `[${this.currentServiceId}] BLESS(m: ${manager}, a: [${
|
|
87
|
+
logger.trace `[${this.currentServiceId}] BLESS(m: ${manager}, a: [${assigners}], v: ${delegator}, r: ${registrar}, ${lazyInspect(autoAccumulate)}) <- HUH`;
|
|
88
88
|
regs.set(IN_OUT_REG, HostCallResult.HUH);
|
|
89
89
|
return;
|
|
90
90
|
}
|
|
91
91
|
if (e === UpdatePrivilegesError.InvalidServiceId) {
|
|
92
|
-
logger.trace `[${this.currentServiceId}] BLESS(m: ${manager}, a: [${
|
|
92
|
+
logger.trace `[${this.currentServiceId}] BLESS(m: ${manager}, a: [${assigners}], v: ${delegator}, r: ${registrar}, ${lazyInspect(autoAccumulate)}) <- WHO`;
|
|
93
93
|
regs.set(IN_OUT_REG, HostCallResult.WHO);
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
@@ -185,7 +185,7 @@ export interface PartialState {
|
|
|
185
185
|
* Update priviliged services and their gas.
|
|
186
186
|
*
|
|
187
187
|
* `m`: manager service (can change privileged services)
|
|
188
|
-
* `a`:
|
|
188
|
+
* `a`: per-core manager of authorization queue
|
|
189
189
|
* `v`: manages validator keys
|
|
190
190
|
* `r`: manages create new services in protected id range.
|
|
191
191
|
* `z`: collection of serviceId -> gas that auto-accumulate every block
|
|
@@ -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
|
-
/**
|
|
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":"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
|
|
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":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,KAAK,MAAM,EAAU,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,+DAA+D,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,cAAc,EACd,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,2BAA2B,CAAC;AAEnC,qBAAa,aAAc,YAAW,mBAAmB;IACvD,SAAgB,iBAAiB,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAE7F;IACH,SAAgB,oBAAoB,EAAE,QAAQ,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,CAGvF;IAEH,SAAgB,iBAAiB,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAa;IAC/E,SAAgB,gBAAgB,EAAE,QAAQ,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,CAG/E;IACH,SAAgB,kBAAkB,EAAE,QAAQ,CAC1C,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,EAC3C,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CACvC,CAAmB;IACpB,SAAgB,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAChG;IAClB,SAAgB,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAChG;IAClB,SAAgB,oBAAoB,EAAE,QAAQ,CAC5C,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,EAC7C,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAC1B,CAAmB;IACpB,SAAgB,oBAAoB,EAAE,QAAQ,CAC5C,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,EAC7C,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAC1B,CAAmB;IACpB,SAAgB,gBAAgB,EAAE,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAC3F;IAEX,mBAAmB,EAAE,aAAa,CAAyB;IAElE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAEhD,mBAAmB,IAAI,SAAS,OAAO,EAAE;IAIzC,cAAc,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAQxF,gBAAgB,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAQ7G,gBAAgB,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAQ7G,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAc7G,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;IAUrC,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;IAU/B,aAAa,CACjB,YAAY,EAAE,SAAS,EACvB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAYjD,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC;IASzE,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAW3F,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;CASnC"}
|
|
@@ -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) {
|