@typeberry/lib 0.5.8 → 0.5.9-115148
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/pvm-host-calls/host-calls-executor.js +3 -3
- package/packages/core/utils/debug.d.ts.map +1 -1
- package/packages/core/utils/debug.js +14 -3
- 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 +1 -1
- 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/serialized-states-db.d.ts +1 -0
- package/packages/jam/database/serialized-states-db.d.ts.map +1 -1
- package/packages/jam/database/serialized-states-db.js +3 -0
- package/packages/jam/database/states.d.ts +3 -0
- package/packages/jam/database/states.d.ts.map +1 -1
- package/packages/jam/database/states.js +3 -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.d.ts +1 -0
- package/packages/jam/database-lmdb/states.d.ts.map +1 -1
- package/packages/jam/database-lmdb/states.js +3 -0
- package/packages/jam/in-core/externalities/refine.d.ts +27 -6
- package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
- package/packages/jam/in-core/externalities/refine.js +40 -7
- 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 +163 -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 +14 -5
- package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +2 -0
- 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/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-133-work-package-submission.d.ts +1 -1
- package/packages/jam/node/main-fuzz.d.ts.map +1 -1
- package/packages/jam/node/main-fuzz.js +5 -1
- package/packages/jam/node/main-importer.d.ts +2 -0
- package/packages/jam/node/main-importer.d.ts.map +1 -1
- package/packages/jam/node/main-importer.js +9 -7
- package/packages/jam/node/main.d.ts.map +1 -1
- package/packages/jam/node/main.js +2 -0
- package/packages/workers/block-authorship/main.d.ts.map +1 -1
- package/packages/workers/block-authorship/main.js +26 -0
- package/packages/workers/importer/finality.d.ts +32 -0
- package/packages/workers/importer/finality.d.ts.map +1 -0
- package/packages/workers/importer/finality.js +105 -0
- package/packages/workers/importer/finality.test.d.ts +2 -0
- package/packages/workers/importer/finality.test.d.ts.map +1 -0
- package/packages/workers/importer/finality.test.js +369 -0
- package/packages/workers/importer/importer.d.ts +3 -0
- package/packages/workers/importer/importer.d.ts.map +1 -1
- package/packages/workers/importer/importer.js +13 -0
- package/packages/workers/importer/main.d.ts.map +1 -1
- package/packages/workers/importer/main.js +9 -1
- package/packages/workers/importer/protocol.d.ts +10 -3
- package/packages/workers/importer/protocol.d.ts.map +1 -1
- package/packages/workers/importer/protocol.js +14 -4
|
@@ -0,0 +1,163 @@
|
|
|
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 { tinyChainSpec } from "#@typeberry/config";
|
|
7
|
+
import { HASH_SIZE } from "#@typeberry/hash";
|
|
8
|
+
import { SegmentExportError } 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
|
+
function createSegment(byte = 0xab) {
|
|
13
|
+
return Bytes.fill(SEGMENT_BYTES, byte);
|
|
14
|
+
}
|
|
15
|
+
function createSmallSegment(bytes) {
|
|
16
|
+
const data = new Uint8Array(SEGMENT_BYTES);
|
|
17
|
+
data.set(bytes);
|
|
18
|
+
return Bytes.fromBlob(data, SEGMENT_BYTES);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Create a mock State that has specified services with preimages.
|
|
22
|
+
*/
|
|
23
|
+
function createMockState(services) {
|
|
24
|
+
const serviceMap = new Map();
|
|
25
|
+
for (const svc of services) {
|
|
26
|
+
const preimages = HashDictionary.new();
|
|
27
|
+
for (const p of svc.preimages ?? []) {
|
|
28
|
+
const hash = Bytes.parseBytes(p.hash, HASH_SIZE).asOpaque();
|
|
29
|
+
const item = PreimageItem.create({
|
|
30
|
+
hash,
|
|
31
|
+
blob: BytesBlob.parseBlob(p.blob),
|
|
32
|
+
});
|
|
33
|
+
preimages.set(hash, item);
|
|
34
|
+
}
|
|
35
|
+
const serviceId = tryAsServiceId(svc.id);
|
|
36
|
+
serviceMap.set(serviceId, new InMemoryService(serviceId, {
|
|
37
|
+
info: ServiceAccountInfo.create({
|
|
38
|
+
codeHash: Bytes.zero(HASH_SIZE).asOpaque(),
|
|
39
|
+
balance: tryAsU64(1000000000n),
|
|
40
|
+
accumulateMinGas: tryAsServiceGas(100),
|
|
41
|
+
onTransferMinGas: tryAsServiceGas(100),
|
|
42
|
+
storageUtilisationBytes: tryAsU64(0),
|
|
43
|
+
storageUtilisationCount: tryAsU32(0),
|
|
44
|
+
gratisStorage: tryAsU64(0),
|
|
45
|
+
created: tryAsTimeSlot(0),
|
|
46
|
+
lastAccumulation: tryAsTimeSlot(0),
|
|
47
|
+
parentService: tryAsServiceId(0),
|
|
48
|
+
}),
|
|
49
|
+
preimages,
|
|
50
|
+
lookupHistory: HashDictionary.new(),
|
|
51
|
+
storage: new Map(),
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
return InMemoryState.partial(tinyChainSpec, { services: serviceMap });
|
|
55
|
+
}
|
|
56
|
+
function createExt(overrides = {}) {
|
|
57
|
+
const defaultState = createMockState([]);
|
|
58
|
+
return RefineExternalitiesImpl.create({
|
|
59
|
+
currentServiceId: tryAsServiceId(42),
|
|
60
|
+
lookupState: overrides.lookupState ?? defaultState,
|
|
61
|
+
exportOffset: overrides.exportOffset ?? 0,
|
|
62
|
+
...overrides,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
describe("RefineExternalitiesImpl", () => {
|
|
66
|
+
describe("historicalLookup", () => {
|
|
67
|
+
const PREIMAGE_HASH = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
|
68
|
+
const PREIMAGE_DATA = "0xdeadbeef";
|
|
69
|
+
it("should return preimage data for existing service and hash", async () => {
|
|
70
|
+
const lookupState = createMockState([{ id: 42, preimages: [{ hash: PREIMAGE_HASH, blob: PREIMAGE_DATA }] }]);
|
|
71
|
+
const ext = createExt({ lookupState });
|
|
72
|
+
const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
|
|
73
|
+
const result = await ext.historicalLookup(tryAsServiceId(42), hash);
|
|
74
|
+
assert.strictEqual(result?.toString(), BytesBlob.parseBlob(PREIMAGE_DATA).toString());
|
|
75
|
+
});
|
|
76
|
+
it("should use currentServiceId when serviceId is null", async () => {
|
|
77
|
+
const lookupState = createMockState([{ id: 42, preimages: [{ hash: PREIMAGE_HASH, blob: PREIMAGE_DATA }] }]);
|
|
78
|
+
const ext = createExt({ lookupState });
|
|
79
|
+
const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
|
|
80
|
+
const result = await ext.historicalLookup(null, hash);
|
|
81
|
+
assert.notStrictEqual(result, null);
|
|
82
|
+
});
|
|
83
|
+
it("should return null for non-existent service", async () => {
|
|
84
|
+
const ext = createExt();
|
|
85
|
+
const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
|
|
86
|
+
const result = await ext.historicalLookup(tryAsServiceId(999), hash);
|
|
87
|
+
assert.strictEqual(result, null);
|
|
88
|
+
});
|
|
89
|
+
it("should return null for non-existent preimage hash", async () => {
|
|
90
|
+
const lookupState = createMockState([{ id: 42 }]);
|
|
91
|
+
const ext = createExt({ lookupState });
|
|
92
|
+
const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
|
|
93
|
+
const result = await ext.historicalLookup(tryAsServiceId(42), hash);
|
|
94
|
+
assert.strictEqual(result, null);
|
|
95
|
+
});
|
|
96
|
+
it("should look up from the correct service when multiple exist", async () => {
|
|
97
|
+
const lookupState = createMockState([
|
|
98
|
+
{ id: 1, preimages: [{ hash: PREIMAGE_HASH, blob: "0x01" }] },
|
|
99
|
+
{ id: 2, preimages: [{ hash: PREIMAGE_HASH, blob: "0x02" }] },
|
|
100
|
+
]);
|
|
101
|
+
const ext = createExt({ lookupState });
|
|
102
|
+
const hash = Bytes.parseBytes(PREIMAGE_HASH, HASH_SIZE).asOpaque();
|
|
103
|
+
const r1 = await ext.historicalLookup(tryAsServiceId(1), hash);
|
|
104
|
+
const r2 = await ext.historicalLookup(tryAsServiceId(2), hash);
|
|
105
|
+
assert.strictEqual(r1?.raw[0], 0x01);
|
|
106
|
+
assert.strictEqual(r2?.raw[0], 0x02);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
describe("exportSegment", () => {
|
|
110
|
+
it("should export a segment and return its index", () => {
|
|
111
|
+
const ext = createExt();
|
|
112
|
+
const segment = createSegment(0x01);
|
|
113
|
+
const result = ext.exportSegment(segment);
|
|
114
|
+
assert.strictEqual(result.isOk, true);
|
|
115
|
+
assert.strictEqual(result.ok, 0); // first export at offset 0
|
|
116
|
+
assert.strictEqual(ext.getExportedSegments().length, 1);
|
|
117
|
+
});
|
|
118
|
+
it("should return sequential indices for multiple exports", () => {
|
|
119
|
+
const ext = createExt();
|
|
120
|
+
const r1 = ext.exportSegment(createSegment(0x01));
|
|
121
|
+
const r2 = ext.exportSegment(createSegment(0x02));
|
|
122
|
+
const r3 = ext.exportSegment(createSegment(0x03));
|
|
123
|
+
assert.strictEqual(r1.isOk, true);
|
|
124
|
+
assert.strictEqual(r1.ok, 0);
|
|
125
|
+
assert.strictEqual(r2.isOk, true);
|
|
126
|
+
assert.strictEqual(r2.ok, 1);
|
|
127
|
+
assert.strictEqual(r3.isOk, true);
|
|
128
|
+
assert.strictEqual(r3.ok, 2);
|
|
129
|
+
assert.strictEqual(ext.getExportedSegments().length, 3);
|
|
130
|
+
});
|
|
131
|
+
it("should apply exportOffset to segment indices", () => {
|
|
132
|
+
const ext = createExt({ exportOffset: 100 });
|
|
133
|
+
const result = ext.exportSegment(createSegment());
|
|
134
|
+
assert.strictEqual(result.isOk, true);
|
|
135
|
+
assert.strictEqual(result.ok, 100);
|
|
136
|
+
});
|
|
137
|
+
it("should return SegmentExportError when MAX_NUMBER_OF_EXPORTS_WP exceeded", () => {
|
|
138
|
+
const ext = createExt({ exportOffset: MAX_NUMBER_OF_EXPORTS_WP });
|
|
139
|
+
const result = ext.exportSegment(createSegment());
|
|
140
|
+
assert.strictEqual(result.isError, true);
|
|
141
|
+
assert.strictEqual(result.error, SegmentExportError);
|
|
142
|
+
});
|
|
143
|
+
it("should return SegmentExportError at exactly MAX_NUMBER_OF_EXPORTS_WP - 1 + 1", () => {
|
|
144
|
+
const ext = createExt({ exportOffset: MAX_NUMBER_OF_EXPORTS_WP - 1 });
|
|
145
|
+
// This one should succeed (index = MAX_NUMBER_OF_EXPORTS_WP - 1)
|
|
146
|
+
const r1 = ext.exportSegment(createSegment(0x01));
|
|
147
|
+
assert.strictEqual(r1.isOk, true);
|
|
148
|
+
assert.strictEqual(r1.ok, MAX_NUMBER_OF_EXPORTS_WP - 1);
|
|
149
|
+
// This one should fail
|
|
150
|
+
const r2 = ext.exportSegment(createSegment(0x02));
|
|
151
|
+
assert.strictEqual(r2.isError, true);
|
|
152
|
+
assert.strictEqual(r2.error, SegmentExportError);
|
|
153
|
+
});
|
|
154
|
+
it("should store exact segment data", () => {
|
|
155
|
+
const ext = createExt();
|
|
156
|
+
const segment = createSmallSegment([1, 2, 3, 4, 5]);
|
|
157
|
+
ext.exportSegment(segment);
|
|
158
|
+
const exported = ext.getExportedSegments();
|
|
159
|
+
assert.strictEqual(exported.length, 1);
|
|
160
|
+
assert.deepStrictEqual(exported[0].raw.subarray(0, 5), new Uint8Array([1, 2, 3, 4, 5]));
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
});
|
|
@@ -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;CA2BlC"}
|
|
@@ -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,
|
|
@@ -285,7 +290,11 @@ export class InCore {
|
|
|
285
290
|
entropy: undefined,
|
|
286
291
|
...args,
|
|
287
292
|
}, this.chainSpec);
|
|
288
|
-
const refine = RefineExternalitiesImpl.create(
|
|
293
|
+
const refine = RefineExternalitiesImpl.create({
|
|
294
|
+
currentServiceId: args.currentServiceId,
|
|
295
|
+
lookupState: args.lookupState,
|
|
296
|
+
exportOffset: args.exportOffset,
|
|
297
|
+
});
|
|
289
298
|
return {
|
|
290
299
|
fetchExternalities,
|
|
291
300
|
refine,
|
|
@@ -82,6 +82,8 @@ 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
|
+
/** Get the segments exported during this work item's refinement. */
|
|
86
|
+
getExportedSegments(): readonly Segment[];
|
|
85
87
|
/** Forget a previously started nested VM. */
|
|
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. */
|
|
@@ -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":"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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) {
|
|
@@ -4,7 +4,7 @@ import type { RefineExternalities } from "../externalities/refine-externalities.
|
|
|
4
4
|
/**
|
|
5
5
|
* Export a segment to be imported by some future `refine` invokation.
|
|
6
6
|
*
|
|
7
|
-
* https://graypaper.fluffylabs.dev/#/
|
|
7
|
+
* https://graypaper.fluffylabs.dev/#/ab2cdbd/33db0233db02?v=0.7.2
|
|
8
8
|
*/
|
|
9
9
|
export declare class Export implements HostCallHandler {
|
|
10
10
|
private readonly refine;
|
|
@@ -11,7 +11,7 @@ const IN_OUT_REG = 7;
|
|
|
11
11
|
/**
|
|
12
12
|
* Export a segment to be imported by some future `refine` invokation.
|
|
13
13
|
*
|
|
14
|
-
* https://graypaper.fluffylabs.dev/#/
|
|
14
|
+
* https://graypaper.fluffylabs.dev/#/ab2cdbd/33db0233db02?v=0.7.2
|
|
15
15
|
*/
|
|
16
16
|
export class Export {
|
|
17
17
|
refine;
|
|
@@ -47,6 +47,7 @@ describe("HostCalls: Export", () => {
|
|
|
47
47
|
// then
|
|
48
48
|
assert.deepStrictEqual(result, undefined);
|
|
49
49
|
assert.deepStrictEqual(registers.get(RESULT_REG), 15n);
|
|
50
|
+
assert.strictEqual(refine.getExportedSegments().length, 1);
|
|
50
51
|
});
|
|
51
52
|
it("should zero-pad when exported value is small", async () => {
|
|
52
53
|
const refine = new TestRefineExt();
|
|
@@ -63,6 +64,7 @@ describe("HostCalls: Export", () => {
|
|
|
63
64
|
// then
|
|
64
65
|
assert.deepStrictEqual(result, undefined);
|
|
65
66
|
assert.deepStrictEqual(registers.get(RESULT_REG), 5n);
|
|
67
|
+
assert.strictEqual(refine.getExportedSegments().length, 1);
|
|
66
68
|
});
|
|
67
69
|
it("should panic if memory is not readable", async () => {
|
|
68
70
|
const refine = new TestRefineExt();
|
|
@@ -74,6 +76,7 @@ describe("HostCalls: Export", () => {
|
|
|
74
76
|
const result = await exp.execute(gas, registers, memory);
|
|
75
77
|
// then
|
|
76
78
|
assert.deepStrictEqual(result, PvmExecution.Panic);
|
|
79
|
+
assert.strictEqual(refine.getExportedSegments().length, 0);
|
|
77
80
|
});
|
|
78
81
|
it("should fail with FULL if export limit is reached", async () => {
|
|
79
82
|
const refine = new TestRefineExt();
|
|
@@ -4,7 +4,7 @@ import type { RefineExternalities } from "../externalities/refine-externalities.
|
|
|
4
4
|
/**
|
|
5
5
|
* Lookup a historical preimage.
|
|
6
6
|
*
|
|
7
|
-
* https://graypaper.fluffylabs.dev/#/
|
|
7
|
+
* https://graypaper.fluffylabs.dev/#/ab2cdbd/33c90133c901?v=0.7.2
|
|
8
8
|
*/
|
|
9
9
|
export declare class HistoricalLookup implements HostCallHandler {
|
|
10
10
|
private readonly refine;
|
|
@@ -38,7 +38,7 @@ export declare class CoreWorkPackage extends WithDebug {
|
|
|
38
38
|
accumulateGasLimit: import("@typeberry/codec").Descriptor<bigint & import("@typeberry/numbers").WithBytesRepresentation<8> & import("@typeberry/utils").WithOpaque<"ServiceGas[u64]">, import("@typeberry/bytes").Bytes<8>>;
|
|
39
39
|
exportCount: import("@typeberry/codec").Descriptor<import("@typeberry/numbers").U16, import("@typeberry/bytes").Bytes<2>>;
|
|
40
40
|
payload: import("@typeberry/codec").Descriptor<BytesBlob, BytesBlob>;
|
|
41
|
-
importSegments: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").ImportSpec[] & import("@typeberry/utils").WithOpaque<"Less than
|
|
41
|
+
importSegments: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").ImportSpec[] & import("@typeberry/utils").WithOpaque<"Less than 3072">, import("@typeberry/codec").SequenceView<import("@typeberry/block").ImportSpec, import("@typeberry/codec").ViewOf<import("@typeberry/block").ImportSpec, {
|
|
42
42
|
treeRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
|
|
43
43
|
index: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"Segment Index [U16]">, import("@typeberry/bytes").Bytes<2>>;
|
|
44
44
|
}>>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main-fuzz.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main-fuzz.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAMrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,SAAS,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uBAAuB,EAAE,OAAO,CAAC;CAClC,CAAC;AAIF,wBAAgB,cAAc;;;;EAM7B;AAED,wBAAsB,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"main-fuzz.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main-fuzz.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAMrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,SAAS,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uBAAuB,EAAE,OAAO,CAAC;CAClC,CAAC;AAIF,wBAAgB,cAAc;;;;EAM7B;AAED,wBAAsB,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,uBAwExF"}
|
|
@@ -66,7 +66,11 @@ export async function mainFuzz(fuzzConfig, withRelPath) {
|
|
|
66
66
|
},
|
|
67
67
|
ancestry,
|
|
68
68
|
network: null,
|
|
69
|
-
}, withRelPath, {
|
|
69
|
+
}, withRelPath, {
|
|
70
|
+
initGenesisFromAncestry: fuzzConfig.initGenesisFromAncestry,
|
|
71
|
+
dummyFinalityDepth: 10_000,
|
|
72
|
+
pruneBlocks: true,
|
|
73
|
+
});
|
|
70
74
|
runningNode = newNode;
|
|
71
75
|
return await newNode.getBestStateRootHash();
|
|
72
76
|
},
|
|
@@ -2,6 +2,8 @@ import type { JamConfig } from "./jam-config.js";
|
|
|
2
2
|
import type { NodeApi } from "./main.js";
|
|
3
3
|
export type ImporterOptions = {
|
|
4
4
|
initGenesisFromAncestry?: boolean;
|
|
5
|
+
dummyFinalityDepth?: number;
|
|
6
|
+
pruneBlocks?: boolean;
|
|
5
7
|
};
|
|
6
8
|
export declare function mainImporter(config: JamConfig, withRelPath: (v: string) => string, options?: ImporterOptions): Promise<NodeApi>;
|
|
7
9
|
//# sourceMappingURL=main-importer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main-importer.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main-importer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main-importer.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main-importer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,MAAM,MAAM,eAAe,GAAG;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAClC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAgFlB"}
|
|
@@ -2,7 +2,8 @@ import { Bytes } from "#@typeberry/bytes";
|
|
|
2
2
|
import { PvmBackend } from "#@typeberry/config";
|
|
3
3
|
import { bandersnatch, initWasm } from "#@typeberry/crypto";
|
|
4
4
|
import { Blake2b, HASH_SIZE } from "#@typeberry/hash";
|
|
5
|
-
import { createImporter } from "#@typeberry/importer";
|
|
5
|
+
import { createImporter, ImporterConfig } from "#@typeberry/importer";
|
|
6
|
+
import { tryAsU16 } from "#@typeberry/numbers";
|
|
6
7
|
import { CURRENT_SUITE, CURRENT_VERSION, Result, resultToString, version } from "#@typeberry/utils";
|
|
7
8
|
import { InMemWorkerConfig, LmdbWorkerConfig } from "#@typeberry/workers-api-node";
|
|
8
9
|
import { getChainSpec, getDatabasePath, initializeDatabase, logger } from "./common.js";
|
|
@@ -18,23 +19,24 @@ export async function mainImporter(config, withRelPath, options = {}) {
|
|
|
18
19
|
const blake2b = await Blake2b.createHasher();
|
|
19
20
|
const nodeName = config.nodeName;
|
|
20
21
|
const { dbPath, genesisHeaderHash } = getDatabasePath(blake2b, config.nodeName, config.node.chainSpec.genesisHeader, withRelPath(config.node.databaseBasePath ?? "<in-memory>"));
|
|
22
|
+
const workerParams = ImporterConfig.create({
|
|
23
|
+
pvm: config.pvmBackend,
|
|
24
|
+
dummyFinalityDepth: tryAsU16(options.dummyFinalityDepth ?? 0),
|
|
25
|
+
pruneBlocks: options.pruneBlocks ?? false,
|
|
26
|
+
});
|
|
21
27
|
const workerConfig = config.node.databaseBasePath === undefined
|
|
22
28
|
? InMemWorkerConfig.new({
|
|
23
29
|
nodeName,
|
|
24
30
|
chainSpec,
|
|
25
31
|
blake2b,
|
|
26
|
-
workerParams
|
|
27
|
-
pvm: config.pvmBackend,
|
|
28
|
-
},
|
|
32
|
+
workerParams,
|
|
29
33
|
})
|
|
30
34
|
: LmdbWorkerConfig.new({
|
|
31
35
|
nodeName,
|
|
32
36
|
chainSpec,
|
|
33
37
|
blake2b,
|
|
34
38
|
dbPath,
|
|
35
|
-
workerParams
|
|
36
|
-
pvm: config.pvmBackend,
|
|
37
|
-
},
|
|
39
|
+
workerParams,
|
|
38
40
|
});
|
|
39
41
|
// Initialize the database with genesis state and block if there isn't one.
|
|
40
42
|
logger.info `🛢️ Opening database at ${dbPath}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAe/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAkC,MAAM,EAAW,MAAM,kBAAkB,CAAC;AAKnF,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAWhE,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChE,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAsB,IAAI,CACxB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAClC,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAe/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAkC,MAAM,EAAW,MAAM,kBAAkB,CAAC;AAKnF,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAWhE,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChE,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAsB,IAAI,CACxB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAClC,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,OAAO,CAAC,OAAO,CAAC,CAyKlB"}
|
|
@@ -34,6 +34,8 @@ export async function main(config, withRelPath, telemetry) {
|
|
|
34
34
|
...baseConfig,
|
|
35
35
|
workerParams: ImporterConfig.create({
|
|
36
36
|
pvm: config.pvmBackend,
|
|
37
|
+
dummyFinalityDepth: tryAsU16(config.devValidatorIndex !== null ? 100 : 0),
|
|
38
|
+
pruneBlocks: false,
|
|
37
39
|
}),
|
|
38
40
|
};
|
|
39
41
|
const importerConfig = isInMemory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/main.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/main.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAgB3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAK9E,KAAK,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAkBlD,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,iBAgPpG"}
|
|
@@ -41,7 +41,15 @@ export async function main(config, comms, networkingComms) {
|
|
|
41
41
|
ed25519Secret: secrets.ed25519,
|
|
42
42
|
ed25519Public: await deriveEd25519PublicKey(secrets.ed25519),
|
|
43
43
|
})));
|
|
44
|
+
const initialHash = blocks.getBestHeaderHash();
|
|
45
|
+
const initialState = states.getState(initialHash);
|
|
44
46
|
logger.info `Block authorship validator keys: ${keys.map(({ bandersnatchPublic }, index) => `\n ${index}: ${bandersnatchPublic.toString()}`)}`;
|
|
47
|
+
if (initialState !== null) {
|
|
48
|
+
const initialKeys = await getSealingKeySeries(startTimeSlot % chainSpec.epochLength === 0, startTimeSlot, initialState);
|
|
49
|
+
if (initialKeys.isOk) {
|
|
50
|
+
logEpochBlockCreation(tryAsEpoch(Math.floor(startTimeSlot / chainSpec.epochLength)), initialKeys.ok);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
45
53
|
function getTime() {
|
|
46
54
|
const currentTime = process.hrtime.bigint() / 1000000n;
|
|
47
55
|
const timeFromStart = currentTime - startTime;
|
|
@@ -77,6 +85,21 @@ export async function main(config, comms, networkingComms) {
|
|
|
77
85
|
const currentEpoch = Math.floor(currentTimeslot / chainSpec.epochLength);
|
|
78
86
|
return currentEpoch > lastEpoch;
|
|
79
87
|
}
|
|
88
|
+
function logEpochBlockCreation(epoch, sealingKeySeries) {
|
|
89
|
+
let isCreating = false;
|
|
90
|
+
const epochStart = epoch * chainSpec.epochLength;
|
|
91
|
+
const epochEnd = epochStart + chainSpec.epochLength;
|
|
92
|
+
for (let slot = epochStart; slot < epochEnd; slot++) {
|
|
93
|
+
const key = getKeyForCurrentSlot(sealingKeySeries, keys, tryAsTimeSlot(slot));
|
|
94
|
+
if (key !== null) {
|
|
95
|
+
isCreating = true;
|
|
96
|
+
logger.info `[EPOCH ${epoch}] Validator ${key.bandersnatchPublic.toString()} will author block at slot ${slot}`;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (isCreating === false) {
|
|
100
|
+
logger.info `[EPOCH ${epoch}] No blocks to author for this epoch.`;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
80
103
|
async function getSealingKeySeries(isNewEpoch, timeSlot, state) {
|
|
81
104
|
if (isNewEpoch) {
|
|
82
105
|
const safrole = new Safrole(chainSpec, blake2bHasher, state);
|
|
@@ -145,6 +168,9 @@ export async function main(config, comms, networkingComms) {
|
|
|
145
168
|
if (selingKeySeriesResult.isError) {
|
|
146
169
|
continue;
|
|
147
170
|
}
|
|
171
|
+
if (isNewEpoch) {
|
|
172
|
+
logEpochBlockCreation(epoch, selingKeySeriesResult.ok);
|
|
173
|
+
}
|
|
148
174
|
const key = getKeyForCurrentSlot(selingKeySeriesResult.ok, keys, timeSlot);
|
|
149
175
|
if (key !== null && currentValidatorData !== undefined) {
|
|
150
176
|
const validatorIndex = getValidatorIndex(key, currentValidatorData);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { HeaderHash } from "#@typeberry/block";
|
|
2
|
+
import type { BlocksDb } from "#@typeberry/database";
|
|
3
|
+
/** Result returned when a new block is finalized. */
|
|
4
|
+
export interface FinalityResult {
|
|
5
|
+
/** The newly finalized block hash. */
|
|
6
|
+
finalizedHash: HeaderHash;
|
|
7
|
+
/** Block hashes whose states are no longer needed and can be pruned. */
|
|
8
|
+
prunableStateHashes: HeaderHash[];
|
|
9
|
+
}
|
|
10
|
+
/** An abstraction for deciding which blocks are finalized. */
|
|
11
|
+
export interface Finalizer {
|
|
12
|
+
/** Called after block import. Returns finality info if a new block was finalized, or null. */
|
|
13
|
+
onBlockImported(headerHash: HeaderHash): FinalityResult | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A simple finalizer that considers a block finalized when N blocks
|
|
17
|
+
* have been built on top of it.
|
|
18
|
+
*
|
|
19
|
+
* Maintains an array of fork chains starting from the last finalized block.
|
|
20
|
+
* When any chain reaches `depth`, the earliest blocks are finalized and
|
|
21
|
+
* dead forks (branching from before the finalized point) are discarded.
|
|
22
|
+
*/
|
|
23
|
+
export declare class DummyFinalizer implements Finalizer {
|
|
24
|
+
private readonly blocks;
|
|
25
|
+
private readonly depth;
|
|
26
|
+
private lastFinalizedHash;
|
|
27
|
+
private unfinalized;
|
|
28
|
+
static create(blocks: BlocksDb, depth: number): DummyFinalizer;
|
|
29
|
+
private constructor();
|
|
30
|
+
onBlockImported(headerHash: HeaderHash): FinalityResult | null;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=finality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finality.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/finality.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKpD,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,aAAa,EAAE,UAAU,CAAC;IAC1B,wEAAwE;IACxE,mBAAmB,EAAE,UAAU,EAAE,CAAC;CACnC;AAED,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IACxB,8FAA8F;IAC9F,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,GAAG,IAAI,CAAC;CAChE;AAKD;;;;;;;GAOG;AACH,qBAAa,cAAe,YAAW,SAAS;IAS5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IATxB,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,WAAW,CAAe;IAElC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc;IAI9D,OAAO;IAQP,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,GAAG,IAAI;CAyF/D"}
|