@typeberry/lib 0.5.9 → 0.5.10-47fe638

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 (132) hide show
  1. package/package.json +1 -1
  2. package/packages/jam/block/block.d.ts +3 -3
  3. package/packages/jam/block/header.d.ts +6 -6
  4. package/packages/jam/block/test-helpers.d.ts +2 -2
  5. package/packages/jam/block/tickets.d.ts +5 -6
  6. package/packages/jam/block/tickets.d.ts.map +1 -1
  7. package/packages/jam/block/tickets.js +2 -10
  8. package/packages/jam/block/work-item-segment.d.ts +23 -6
  9. package/packages/jam/block/work-item-segment.d.ts.map +1 -1
  10. package/packages/jam/block/work-item-segment.js +24 -7
  11. package/packages/jam/block/work-item.d.ts +3 -3
  12. package/packages/jam/block/work-item.d.ts.map +1 -1
  13. package/packages/jam/block/work-item.js +7 -3
  14. package/packages/jam/block/work-package.d.ts +2 -2
  15. package/packages/jam/block/work-package.d.ts.map +1 -1
  16. package/packages/jam/block/work-package.js +2 -6
  17. package/packages/jam/block-json/block.d.ts +2 -2
  18. package/packages/jam/block-json/block.js +1 -1
  19. package/packages/jam/block-json/common.d.ts +1 -2
  20. package/packages/jam/block-json/common.d.ts.map +1 -1
  21. package/packages/jam/block-json/common.js +2 -2
  22. package/packages/jam/block-json/extrinsic.js +1 -1
  23. package/packages/jam/block-json/header.d.ts +1 -2
  24. package/packages/jam/block-json/header.d.ts.map +1 -1
  25. package/packages/jam/block-json/header.js +32 -34
  26. package/packages/jam/block-json/tickets-extrinsic.d.ts +1 -2
  27. package/packages/jam/block-json/tickets-extrinsic.d.ts.map +1 -1
  28. package/packages/jam/block-json/tickets-extrinsic.js +5 -7
  29. package/packages/jam/block-json/work-result.js +2 -2
  30. package/packages/jam/database/blocks.d.ts +3 -0
  31. package/packages/jam/database/blocks.d.ts.map +1 -1
  32. package/packages/jam/database/blocks.js +5 -0
  33. package/packages/jam/database-lmdb/blocks.d.ts +1 -0
  34. package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
  35. package/packages/jam/database-lmdb/blocks.js +5 -0
  36. package/packages/jam/database-lmdb/states.js +1 -1
  37. package/packages/jam/executor/pvm-executor.d.ts +2 -2
  38. package/packages/jam/executor/pvm-executor.d.ts.map +1 -1
  39. package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
  40. package/packages/jam/in-core/externalities/refine.d.ts +27 -6
  41. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
  42. package/packages/jam/in-core/externalities/refine.js +40 -7
  43. package/packages/jam/in-core/externalities/refine.test.d.ts +2 -0
  44. package/packages/jam/in-core/externalities/refine.test.d.ts.map +1 -0
  45. package/packages/jam/in-core/externalities/refine.test.js +163 -0
  46. package/packages/jam/in-core/in-core.d.ts +1 -1
  47. package/packages/jam/in-core/in-core.d.ts.map +1 -1
  48. package/packages/jam/in-core/in-core.js +16 -10
  49. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +2 -0
  50. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
  51. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts +2 -0
  52. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts.map +1 -1
  53. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +5 -0
  54. package/packages/jam/jam-host-calls/general/fetch.d.ts +159 -98
  55. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  56. package/packages/jam/jam-host-calls/general/fetch.js +110 -16
  57. package/packages/jam/jam-host-calls/general/fetch.test.js +87 -56
  58. package/packages/jam/jam-host-calls/refine/export.d.ts +1 -1
  59. package/packages/jam/jam-host-calls/refine/export.js +1 -1
  60. package/packages/jam/jam-host-calls/refine/export.test.js +3 -0
  61. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +1 -1
  62. package/packages/jam/jam-host-calls/refine/historical-lookup.js +1 -1
  63. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +1 -1
  64. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +1 -1
  65. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +1 -1
  66. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  67. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
  68. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  69. package/packages/jam/node/main-fuzz.js +1 -0
  70. package/packages/jam/node/main-importer.d.ts +1 -0
  71. package/packages/jam/node/main-importer.d.ts.map +1 -1
  72. package/packages/jam/node/main-importer.js +1 -0
  73. package/packages/jam/node/main.d.ts.map +1 -1
  74. package/packages/jam/node/main.js +1 -0
  75. package/packages/jam/node/reader.d.ts +2 -2
  76. package/packages/jam/node/workers.d.ts +22 -22
  77. package/packages/jam/safrole/bandersnatch-vrf.d.ts +1 -2
  78. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  79. package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
  80. package/packages/jam/safrole/bandersnatch-vrf.test.js +2 -3
  81. package/packages/jam/safrole/safrole.test.js +72 -80
  82. package/packages/jam/state/safrole-data.d.ts +1 -1
  83. package/packages/jam/state/test.utils.js +1 -1
  84. package/packages/jam/state-json/dump.js +2 -2
  85. package/packages/jam/state-json/safrole.d.ts +2 -2
  86. package/packages/jam/state-json/safrole.d.ts.map +1 -1
  87. package/packages/jam/state-json/safrole.js +4 -4
  88. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
  89. package/packages/jam/state-vectors/index.d.ts +7 -8
  90. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  91. package/packages/jam/state-vectors/index.js +4 -6
  92. package/packages/jam/transition/accumulate/accumulate.js +2 -2
  93. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts +19 -0
  94. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
  95. package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
  96. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
  97. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
  98. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
  99. package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -39
  100. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  101. package/packages/jam/transition/externalities/fetch-externalities.js +2 -88
  102. package/packages/jam/transition/externalities/index.d.ts +2 -0
  103. package/packages/jam/transition/externalities/index.d.ts.map +1 -1
  104. package/packages/jam/transition/externalities/index.js +2 -0
  105. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +23 -0
  106. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -0
  107. package/packages/jam/transition/externalities/refine-fetch-externalities.js +48 -0
  108. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts +2 -0
  109. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts.map +1 -0
  110. package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +32 -0
  111. package/packages/jam/transition/hasher.test.js +1 -1
  112. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  113. package/packages/workers/block-authorship/main.js +1 -1
  114. package/packages/workers/block-authorship/protocol.d.ts +4 -4
  115. package/packages/workers/block-authorship/ticket-generator.d.ts +1 -2
  116. package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
  117. package/packages/workers/block-authorship/ticket-generator.js +2 -2
  118. package/packages/workers/block-authorship/ticket-generator.test.js +10 -11
  119. package/packages/workers/comms-authorship-network/protocol.d.ts +1 -1
  120. package/packages/workers/comms-authorship-network/tickets-message.d.ts +1 -1
  121. package/packages/workers/importer/importer.d.ts +1 -0
  122. package/packages/workers/importer/importer.d.ts.map +1 -1
  123. package/packages/workers/importer/importer.js +7 -2
  124. package/packages/workers/importer/main.d.ts.map +1 -1
  125. package/packages/workers/importer/main.js +2 -0
  126. package/packages/workers/importer/protocol.d.ts +12 -9
  127. package/packages/workers/importer/protocol.d.ts.map +1 -1
  128. package/packages/workers/importer/protocol.js +8 -3
  129. package/packages/workers/jam-network/protocol.d.ts +10 -10
  130. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
  131. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
  132. package/packages/jam/transition/externalities/fetch-externalities.test.js +0 -254
@@ -1,14 +1,15 @@
1
1
  import assert from "node:assert";
2
2
  import { describe, it } from "node:test";
3
3
  import { tryAsServiceId } from "#@typeberry/block";
4
- import { BytesBlob } from "#@typeberry/bytes";
4
+ import { Bytes, BytesBlob } from "#@typeberry/bytes";
5
+ import { HASH_SIZE } from "#@typeberry/hash";
5
6
  import { tryAsU64 } from "#@typeberry/numbers";
6
7
  import { HostCallMemory, HostCallRegisters, PvmExecution } from "#@typeberry/pvm-host-calls";
7
8
  import { tryAsGas } from "#@typeberry/pvm-interface";
8
9
  import { gasCounter, MemoryBuilder, tryAsMemoryIndex, tryAsSbrkIndex } from "#@typeberry/pvm-interpreter";
9
10
  import { PAGE_SIZE } from "#@typeberry/pvm-interpreter/memory/memory-consts.js";
10
11
  import { emptyRegistersBuffer } from "../utils.js";
11
- import { Fetch, FetchKind } from "./fetch.js";
12
+ import { Fetch, FetchContext, FetchKind } from "./fetch.js";
12
13
  import { HostCallResult } from "./results.js";
13
14
  describe("Fetch", () => {
14
15
  const IN_OUT_REG = 7;
@@ -16,7 +17,7 @@ describe("Fetch", () => {
16
17
  it("should return PvmExecution.Panic if memory write fails", async () => {
17
18
  const currentServiceId = tryAsServiceId(10_000);
18
19
  const blob = BytesBlob.blobFromNumbers([1, 2, 3]);
19
- const fetchMock = new FetchMock();
20
+ const fetchMock = new RefineFetchMock();
20
21
  fetchMock.constantsResponse = blob;
21
22
  const badOffset = tryAsU64(0xfffff);
22
23
  const registers = new HostCallRegisters(emptyRegistersBuffer());
@@ -33,10 +34,10 @@ describe("Fetch", () => {
33
34
  });
34
35
  it("should write empty result and set IN_OUT_REG to NONE if fetch returns null", async () => {
35
36
  const currentServiceId = tryAsServiceId(10_000);
36
- const fetchMock = new FetchMock();
37
- fetchMock.entropyResponse = null;
37
+ const fetchMock = new RefineFetchMock();
38
+ // authorizerTraceResponse is null by default — Kind 2 legitimately returns null
38
39
  const blob = BytesBlob.blobFromNumbers([]);
39
- const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.Entropy);
40
+ const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.AuthorizerTrace);
40
41
  const fetch = new Fetch(currentServiceId, fetchMock);
41
42
  const result = await fetch.execute(gas, registers, memory);
42
43
  assert.strictEqual(result, undefined);
@@ -47,7 +48,7 @@ describe("Fetch", () => {
47
48
  it("should write nothing if offset >= blob length", async () => {
48
49
  const currentServiceId = tryAsServiceId(10_000);
49
50
  const blob = BytesBlob.blobFromNumbers([1, 2, 3]);
50
- const fetchMock = new FetchMock();
51
+ const fetchMock = new RefineFetchMock();
51
52
  fetchMock.constantsResponse = blob;
52
53
  const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.Constants, 5, 2);
53
54
  const fetch = new Fetch(currentServiceId, fetchMock);
@@ -59,7 +60,7 @@ describe("Fetch", () => {
59
60
  it("should clamp offset + length to blob end", async () => {
60
61
  const currentServiceId = tryAsServiceId(10_000);
61
62
  const blob = BytesBlob.blobFromNumbers([9, 8, 7, 6, 5]);
62
- const fetchMock = new FetchMock();
63
+ const fetchMock = new RefineFetchMock();
63
64
  fetchMock.constantsResponse = blob;
64
65
  const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.Constants, 3, 10);
65
66
  const fetch = new Fetch(currentServiceId, fetchMock);
@@ -71,7 +72,7 @@ describe("Fetch", () => {
71
72
  it("should return NONE and write nothing if fetch kind is unknown", async () => {
72
73
  const currentServiceId = tryAsServiceId(10_000);
73
74
  const blob = BytesBlob.empty();
74
- const fetchMock = new FetchMock();
75
+ const fetchMock = new RefineFetchMock();
75
76
  fetchMock.constantsResponse = blob;
76
77
  const { registers, memory, readBack } = prepareRegsAndMemory(blob, FetchKind.Constants);
77
78
  registers.set(10, tryAsU64(999));
@@ -84,7 +85,7 @@ describe("Fetch", () => {
84
85
  it("should fetch constants and write result to memory", async () => {
85
86
  const currentServiceId = tryAsServiceId(10_000);
86
87
  const blob = BytesBlob.blobFromNumbers([1, 2, 3, 4, 5]);
87
- const fetchMock = new FetchMock();
88
+ const fetchMock = new RefineFetchMock();
88
89
  fetchMock.constantsResponse = blob;
89
90
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.Constants);
90
91
  const fetch = new Fetch(currentServiceId, fetchMock);
@@ -95,8 +96,8 @@ describe("Fetch", () => {
95
96
  });
96
97
  it("should fetch entropy and write result to memory", async () => {
97
98
  const currentServiceId = tryAsServiceId(10_000);
98
- const blob = BytesBlob.blobFromNumbers([10, 20, 30, 40]);
99
- const fetchMock = new FetchMock();
99
+ const blob = Bytes.fill(HASH_SIZE, 10).asOpaque();
100
+ const fetchMock = new RefineFetchMock();
100
101
  fetchMock.entropyResponse = blob;
101
102
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.Entropy);
102
103
  const fetch = new Fetch(currentServiceId, fetchMock);
@@ -108,7 +109,7 @@ describe("Fetch", () => {
108
109
  it("should fetch authorizer trace and write result to memory", async () => {
109
110
  const currentServiceId = tryAsServiceId(10_000);
110
111
  const blob = BytesBlob.blobFromNumbers([9, 9, 9]);
111
- const fetchMock = new FetchMock();
112
+ const fetchMock = new RefineFetchMock();
112
113
  fetchMock.authorizerTraceResponse = blob;
113
114
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AuthorizerTrace);
114
115
  const fetch = new Fetch(currentServiceId, fetchMock);
@@ -120,7 +121,7 @@ describe("Fetch", () => {
120
121
  it("should fetch other work item extrinsics and write result to memory", async () => {
121
122
  const currentServiceId = tryAsServiceId(10_000);
122
123
  const blob = BytesBlob.blobFromNumbers([42, 43, 44]);
123
- const fetchMock = new FetchMock();
124
+ const fetchMock = new RefineFetchMock();
124
125
  const workItem = tryAsU64(123);
125
126
  const index = tryAsU64(7);
126
127
  const key = `${workItem}:${index}`;
@@ -138,7 +139,7 @@ describe("Fetch", () => {
138
139
  it("should fetch my extrinsics and write result to memory", async () => {
139
140
  const currentServiceId = tryAsServiceId(10_000);
140
141
  const blob = BytesBlob.blobFromNumbers([11, 12, 13]);
141
- const fetchMock = new FetchMock();
142
+ const fetchMock = new RefineFetchMock();
142
143
  const index = tryAsU64(5);
143
144
  const key = `null:${index}`;
144
145
  fetchMock.workItemExtrinsicResponses.set(key, blob);
@@ -154,7 +155,7 @@ describe("Fetch", () => {
154
155
  it("should fetch other work item imports and write result to memory", async () => {
155
156
  const currentServiceId = tryAsServiceId(10_000);
156
157
  const blob = BytesBlob.blobFromNumbers([21, 22, 23]);
157
- const fetchMock = new FetchMock();
158
+ const fetchMock = new RefineFetchMock();
158
159
  const workItem = tryAsU64(42);
159
160
  const index = tryAsU64(3);
160
161
  const key = `${workItem}:${index}`;
@@ -172,7 +173,7 @@ describe("Fetch", () => {
172
173
  it("should fetch my imports and write result to memory", async () => {
173
174
  const currentServiceId = tryAsServiceId(10_000);
174
175
  const blob = BytesBlob.blobFromNumbers([31, 32, 33]);
175
- const fetchMock = new FetchMock();
176
+ const fetchMock = new RefineFetchMock();
176
177
  const index = tryAsU64(8);
177
178
  const key = `null:${index}`;
178
179
  fetchMock.workItemImportResponses.set(key, blob);
@@ -188,7 +189,7 @@ describe("Fetch", () => {
188
189
  it("should fetch work package and write result to memory", async () => {
189
190
  const currentServiceId = tryAsServiceId(10_000);
190
191
  const blob = BytesBlob.blobFromNumbers([100, 101, 102]);
191
- const fetchMock = new FetchMock();
192
+ const fetchMock = new RefineFetchMock();
192
193
  fetchMock.workPackageResponse = blob;
193
194
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.WorkPackage);
194
195
  const fetch = new Fetch(currentServiceId, fetchMock);
@@ -200,7 +201,7 @@ describe("Fetch", () => {
200
201
  it("should fetch authorizer and write result to memory", async () => {
201
202
  const currentServiceId = tryAsServiceId(10_000);
202
203
  const blob = BytesBlob.blobFromNumbers([201, 202, 203]);
203
- const fetchMock = new FetchMock();
204
+ const fetchMock = new RefineFetchMock();
204
205
  fetchMock.authorizerResponse = blob;
205
206
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.Authorizer);
206
207
  const fetch = new Fetch(currentServiceId, fetchMock);
@@ -212,7 +213,7 @@ describe("Fetch", () => {
212
213
  it("should fetch authorization token and write result to memory", async () => {
213
214
  const currentServiceId = tryAsServiceId(10_000);
214
215
  const blob = BytesBlob.blobFromNumbers([210, 211, 212]);
215
- const fetchMock = new FetchMock();
216
+ const fetchMock = new RefineFetchMock();
216
217
  fetchMock.authorizationTokenResponse = blob;
217
218
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AuthorizationToken);
218
219
  const fetch = new Fetch(currentServiceId, fetchMock);
@@ -224,7 +225,7 @@ describe("Fetch", () => {
224
225
  it("should fetch refine context and write result to memory", async () => {
225
226
  const currentServiceId = tryAsServiceId(10_000);
226
227
  const blob = BytesBlob.blobFromNumbers([88, 89, 90]);
227
- const fetchMock = new FetchMock();
228
+ const fetchMock = new RefineFetchMock();
228
229
  fetchMock.refineContextResponse = blob;
229
230
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.RefineContext);
230
231
  const fetch = new Fetch(currentServiceId, fetchMock);
@@ -236,7 +237,7 @@ describe("Fetch", () => {
236
237
  it("should fetch all work items and write result to memory", async () => {
237
238
  const currentServiceId = tryAsServiceId(10_000);
238
239
  const blob = BytesBlob.blobFromNumbers([70, 71, 72]);
239
- const fetchMock = new FetchMock();
240
+ const fetchMock = new RefineFetchMock();
240
241
  fetchMock.allWorkItemsResponse = blob;
241
242
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AllWorkItems);
242
243
  const fetch = new Fetch(currentServiceId, fetchMock);
@@ -248,7 +249,7 @@ describe("Fetch", () => {
248
249
  it("should fetch one work item and write result to memory", async () => {
249
250
  const currentServiceId = tryAsServiceId(10_000);
250
251
  const blob = BytesBlob.blobFromNumbers([33, 34, 35]);
251
- const fetchMock = new FetchMock();
252
+ const fetchMock = new RefineFetchMock();
252
253
  const workItem = tryAsU64(55);
253
254
  fetchMock.oneWorkItemResponses.set(workItem.toString(), blob);
254
255
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.OneWorkItem);
@@ -263,7 +264,7 @@ describe("Fetch", () => {
263
264
  it("should fetch work item payload and write result to memory", async () => {
264
265
  const currentServiceId = tryAsServiceId(10_000);
265
266
  const blob = BytesBlob.blobFromNumbers([60, 61, 62]);
266
- const fetchMock = new FetchMock();
267
+ const fetchMock = new RefineFetchMock();
267
268
  const workItem = tryAsU64(77);
268
269
  fetchMock.workItemPayloadResponses.set(workItem.toString(), blob);
269
270
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.WorkItemPayload);
@@ -278,8 +279,8 @@ describe("Fetch", () => {
278
279
  it("should fetch all transfers and operands and write result to memory", async () => {
279
280
  const currentServiceId = tryAsServiceId(10_000);
280
281
  const blob = BytesBlob.blobFromNumbers([101, 102, 103]);
281
- const fetchMock = new FetchMock();
282
- fetchMock.allTransfersAndOperandsResponses = blob;
282
+ const fetchMock = new AccumulateFetchMock();
283
+ fetchMock.allTransfersAndOperandsResponse = blob;
283
284
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.AllTransfersAndOperands);
284
285
  const fetch = new Fetch(currentServiceId, fetchMock);
285
286
  const result = await fetch.execute(gas, registers, memory);
@@ -290,7 +291,7 @@ describe("Fetch", () => {
290
291
  it("should fetch one operand or transfer and write result to memory", async () => {
291
292
  const currentServiceId = tryAsServiceId(10_000);
292
293
  const blob = BytesBlob.blobFromNumbers([115, 116, 117]);
293
- const fetchMock = new FetchMock();
294
+ const fetchMock = new AccumulateFetchMock();
294
295
  const index = tryAsU64(9);
295
296
  fetchMock.oneTransferOrOperandResponses.set(index.toString(), blob);
296
297
  const { registers, memory, readBack, expectedLength } = prepareRegsAndMemory(blob, FetchKind.OneTransferOrOperand);
@@ -302,6 +303,43 @@ describe("Fetch", () => {
302
303
  assert.deepStrictEqual(readBack(), blob.raw);
303
304
  assert.deepStrictEqual(fetchMock.oneTransferOrOperandData, [[index]]);
304
305
  });
306
+ it("should return NONE for refine-only kinds in accumulate context", async () => {
307
+ const currentServiceId = tryAsServiceId(10_000);
308
+ const fetchMock = new AccumulateFetchMock();
309
+ const blob = BytesBlob.empty();
310
+ for (const kind of [
311
+ FetchKind.AuthorizerTrace,
312
+ FetchKind.OtherWorkItemExtrinsics,
313
+ FetchKind.MyExtrinsics,
314
+ FetchKind.OtherWorkItemImports,
315
+ FetchKind.MyImports,
316
+ FetchKind.WorkPackage,
317
+ FetchKind.Authorizer,
318
+ FetchKind.AuthorizationToken,
319
+ FetchKind.RefineContext,
320
+ FetchKind.AllWorkItems,
321
+ FetchKind.OneWorkItem,
322
+ FetchKind.WorkItemPayload,
323
+ ]) {
324
+ const { registers, memory } = prepareRegsAndMemory(blob, kind);
325
+ const fetch = new Fetch(currentServiceId, fetchMock);
326
+ const result = await fetch.execute(gas, registers, memory);
327
+ assert.strictEqual(result, undefined, `Expected undefined for kind ${kind}`);
328
+ assert.strictEqual(registers.get(IN_OUT_REG), HostCallResult.NONE, `Expected NONE for kind ${kind}`);
329
+ }
330
+ });
331
+ it("should return NONE for accumulate-only kinds in refine context", async () => {
332
+ const currentServiceId = tryAsServiceId(10_000);
333
+ const fetchMock = new RefineFetchMock();
334
+ const blob = BytesBlob.empty();
335
+ for (const kind of [FetchKind.AllTransfersAndOperands, FetchKind.OneTransferOrOperand]) {
336
+ const { registers, memory } = prepareRegsAndMemory(blob, kind);
337
+ const fetch = new Fetch(currentServiceId, fetchMock);
338
+ const result = await fetch.execute(gas, registers, memory);
339
+ assert.strictEqual(result, undefined, `Expected undefined for kind ${kind}`);
340
+ assert.strictEqual(registers.get(IN_OUT_REG), HostCallResult.NONE, `Expected NONE for kind ${kind}`);
341
+ }
342
+ });
305
343
  function prepareRegsAndMemory(blob, fetchKind, offset = 0, length = blob.length) {
306
344
  const pageStart = 2 ** 16;
307
345
  const memOffset = tryAsU64(pageStart + 1234);
@@ -327,14 +365,12 @@ describe("Fetch", () => {
327
365
  };
328
366
  }
329
367
  });
330
- class FetchMock {
368
+ class RefineFetchMock {
369
+ context = FetchContext.Refine;
331
370
  workItemExtrinsicData = [];
332
371
  workItemImportData = [];
333
372
  oneWorkItemData = [];
334
373
  workItemPayloadData = [];
335
- oneOperandData = [];
336
- oneTransferData = [];
337
- oneTransferOrOperandData = [];
338
374
  constantsResponse = null;
339
375
  entropyResponse = null;
340
376
  authorizerTraceResponse = null;
@@ -347,12 +383,6 @@ class FetchMock {
347
383
  allWorkItemsResponse = null;
348
384
  oneWorkItemResponses = new Map();
349
385
  workItemPayloadResponses = new Map();
350
- allOperandsResponse = null;
351
- oneOperandResponses = new Map();
352
- allTransfersResponse = null;
353
- oneTransferResponses = new Map();
354
- allTransfersAndOperandsResponses = null;
355
- oneTransferOrOperandResponses = new Map();
356
386
  constants() {
357
387
  if (this.constantsResponse === null) {
358
388
  throw new Error("Unexpected call to constants.");
@@ -360,6 +390,9 @@ class FetchMock {
360
390
  return this.constantsResponse;
361
391
  }
362
392
  entropy() {
393
+ if (this.entropyResponse === null) {
394
+ throw new Error("Unexpected call to entropy.");
395
+ }
363
396
  return this.entropyResponse;
364
397
  }
365
398
  authorizerTrace() {
@@ -412,30 +445,28 @@ class FetchMock {
412
445
  }
413
446
  return this.workItemPayloadResponses.get(key) ?? null;
414
447
  }
415
- allOperands() {
416
- return this.allOperandsResponse;
417
- }
418
- oneOperand(operandIndex) {
419
- this.oneOperandData.push([operandIndex]);
420
- const key = operandIndex.toString();
421
- if (!this.oneOperandResponses.has(key)) {
422
- throw new Error(`Missing mock response for oneOperand(${key})`);
448
+ }
449
+ class AccumulateFetchMock {
450
+ context = FetchContext.Accumulate;
451
+ oneTransferOrOperandData = [];
452
+ constantsResponse = null;
453
+ entropyResponse = null;
454
+ allTransfersAndOperandsResponse = null;
455
+ oneTransferOrOperandResponses = new Map();
456
+ constants() {
457
+ if (this.constantsResponse === null) {
458
+ throw new Error("Unexpected call to constants.");
423
459
  }
424
- return this.oneOperandResponses.get(key) ?? null;
425
- }
426
- allTransfers() {
427
- return this.allTransfersResponse;
460
+ return this.constantsResponse;
428
461
  }
429
- oneTransfer(transferIndex) {
430
- this.oneTransferData.push([transferIndex]);
431
- const key = transferIndex.toString();
432
- if (!this.oneTransferResponses.has(key)) {
433
- throw new Error(`Missing mock response for oneTransfer(${key})`);
462
+ entropy() {
463
+ if (this.entropyResponse === null) {
464
+ throw new Error("Unexpected call to entropy.");
434
465
  }
435
- return this.oneTransferResponses.get(key) ?? null;
466
+ return this.entropyResponse;
436
467
  }
437
468
  allTransfersAndOperands() {
438
- return this.allTransfersAndOperandsResponses;
469
+ return this.allTransfersAndOperandsResponse;
439
470
  }
440
471
  oneTransferOrOperand(index) {
441
472
  this.oneTransferOrOperandData.push([index]);
@@ -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/#/7e6ff6a/341d01341d01?v=0.6.7
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/#/7e6ff6a/341d01341d01?v=0.6.7
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/#/7e6ff6a/343b00343b00?v=0.6.7
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;
@@ -10,7 +10,7 @@ const IN_OUT_REG = 7;
10
10
  /**
11
11
  * Lookup a historical preimage.
12
12
  *
13
- * https://graypaper.fluffylabs.dev/#/7e6ff6a/343b00343b00?v=0.6.7
13
+ * https://graypaper.fluffylabs.dev/#/ab2cdbd/33c90133c901?v=0.7.2
14
14
  */
15
15
  export class HistoricalLookup {
16
16
  refine;
@@ -25,7 +25,7 @@ export declare class TicketDistributionRequest extends WithDebug {
25
25
  static Codec: import("@typeberry/codec").Descriptor<TicketDistributionRequest, import("@typeberry/codec").ViewOf<TicketDistributionRequest, {
26
26
  epochIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"Epoch">, import("@typeberry/bytes").Bytes<4>>;
27
27
  ticket: import("@typeberry/codec").Descriptor<SignedTicket, import("@typeberry/codec").ViewOf<SignedTicket, {
28
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
28
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, import("@typeberry/numbers").U32>;
29
29
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
30
30
  }>>;
31
31
  }>>;
@@ -10,7 +10,7 @@ import { ClientHandler, ServerHandler, STREAM_KIND_GENERATOR_TO_PROXY, } from ".
10
10
  import { testClientServer } from "./test-utils.js";
11
11
  const TEST_EPOCH = tryAsEpoch(1);
12
12
  const TEST_TICKET = SignedTicket.create({
13
- attempt: tryAsTicketAttempt(0, tinyChainSpec),
13
+ attempt: tryAsTicketAttempt(0),
14
14
  signature: Bytes.zero(BANDERSNATCH_PROOF_BYTES).asOpaque(),
15
15
  });
16
16
  describe("CE 131 and CE 132: Safrole Ticket Distribution", () => {
@@ -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 2048">, import("@typeberry/codec").SequenceView<import("@typeberry/block").ImportSpec, import("@typeberry/codec").ViewOf<import("@typeberry/block").ImportSpec, {
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
  }>>>;
@@ -69,7 +69,7 @@ export declare class Announcement extends WithDebug {
69
69
  ticketsMarker: import("@typeberry/codec").Descriptor<import("@typeberry/block").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("@typeberry/block").TicketsMarker, {
70
70
  tickets: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<import("@typeberry/block").Ticket, import("@typeberry/codec").ViewOf<import("@typeberry/block").Ticket, {
71
71
  id: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
72
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
72
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, import("@typeberry/numbers").U32>;
73
73
  }>>>;
74
74
  }> | null>;
75
75
  bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
@@ -21,7 +21,7 @@ function createTestTicket(attempt, signatureByte = 0) {
21
21
  signatureBytes.raw[0] = attempt;
22
22
  signatureBytes.raw[1] = signatureByte;
23
23
  return SignedTicket.create({
24
- attempt: tryAsTicketAttempt(attempt, tinyChainSpec),
24
+ attempt: tryAsTicketAttempt(attempt),
25
25
  signature: signatureBytes.asOpaque(),
26
26
  });
27
27
  }
@@ -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,uBAuExF"}
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"}
@@ -69,6 +69,7 @@ export async function mainFuzz(fuzzConfig, withRelPath) {
69
69
  }, withRelPath, {
70
70
  initGenesisFromAncestry: fuzzConfig.initGenesisFromAncestry,
71
71
  dummyFinalityDepth: 10_000,
72
+ pruneBlocks: true,
72
73
  });
73
74
  runningNode = newNode;
74
75
  return await newNode.getBestStateRootHash();
@@ -3,6 +3,7 @@ import type { NodeApi } from "./main.js";
3
3
  export type ImporterOptions = {
4
4
  initGenesisFromAncestry?: boolean;
5
5
  dummyFinalityDepth?: number;
6
+ pruneBlocks?: boolean;
6
7
  };
7
8
  export declare function mainImporter(config: JamConfig, withRelPath: (v: string) => string, options?: ImporterOptions): Promise<NodeApi>;
8
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":"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;CAC7B,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,CA+ElB"}
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"}
@@ -22,6 +22,7 @@ export async function mainImporter(config, withRelPath, options = {}) {
22
22
  const workerParams = ImporterConfig.create({
23
23
  pvm: config.pvmBackend,
24
24
  dummyFinalityDepth: tryAsU16(options.dummyFinalityDepth ?? 0),
25
+ pruneBlocks: options.pruneBlocks ?? false,
25
26
  });
26
27
  const workerConfig = config.node.databaseBasePath === undefined
27
28
  ? InMemWorkerConfig.new({
@@ -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,CAwKlB"}
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"}
@@ -35,6 +35,7 @@ export async function main(config, withRelPath, telemetry) {
35
35
  workerParams: ImporterConfig.create({
36
36
  pvm: config.pvmBackend,
37
37
  dummyFinalityDepth: tryAsU16(config.devValidatorIndex !== null ? 100 : 0),
38
+ pruneBlocks: false,
38
39
  }),
39
40
  };
40
41
  const importerConfig = isInMemory
@@ -30,7 +30,7 @@ export declare function startBlocksReader(options: BlocksImporterConfig, logger:
30
30
  ticketsMarker: import("@typeberry/codec").Descriptor<import("@typeberry/block").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("@typeberry/block").TicketsMarker, {
31
31
  tickets: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<import("@typeberry/block").Ticket, import("@typeberry/codec").ViewOf<import("@typeberry/block").Ticket, {
32
32
  id: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
33
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
33
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, import("@typeberry/numbers").U32>;
34
34
  }>>>;
35
35
  }> | null>;
36
36
  bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
@@ -40,7 +40,7 @@ export declare function startBlocksReader(options: BlocksImporterConfig, logger:
40
40
  }>>;
41
41
  extrinsic: import("@typeberry/codec").Descriptor<import("@typeberry/block").Extrinsic, import("@typeberry/codec").ViewOf<import("@typeberry/block").Extrinsic, {
42
42
  tickets: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").SignedTicket[] & import("@typeberry/utils").WithOpaque<"Size: [0..chainSpec.maxTicketsPerExtrinsic)">, import("@typeberry/codec").SequenceView<import("@typeberry/block").SignedTicket, import("@typeberry/codec").ViewOf<import("@typeberry/block").SignedTicket, {
43
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
43
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, import("@typeberry/numbers").U32>;
44
44
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
45
45
  }>>>;
46
46
  preimages: import("@typeberry/codec").Descriptor<import("@typeberry/block").Preimage[], import("@typeberry/codec").SequenceView<import("@typeberry/block").Preimage, import("@typeberry/codec").ViewOf<import("@typeberry/block").Preimage, {