@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.
Files changed (144) hide show
  1. package/package.json +1 -1
  2. package/packages/core/codec/encoder.d.ts +1 -1
  3. package/packages/core/codec/encoder.d.ts.map +1 -1
  4. package/packages/core/codec/encoder.js +3 -2
  5. package/packages/core/pvm-interface/pvm.d.ts +2 -0
  6. package/packages/core/pvm-interface/pvm.d.ts.map +1 -1
  7. package/packages/jam/block/block.d.ts +3 -3
  8. package/packages/jam/block/header.d.ts +6 -6
  9. package/packages/jam/block/test-helpers.d.ts +2 -2
  10. package/packages/jam/block/tickets.d.ts +5 -6
  11. package/packages/jam/block/tickets.d.ts.map +1 -1
  12. package/packages/jam/block/tickets.js +2 -10
  13. package/packages/jam/block/work-item-segment.d.ts +23 -6
  14. package/packages/jam/block/work-item-segment.d.ts.map +1 -1
  15. package/packages/jam/block/work-item-segment.js +24 -7
  16. package/packages/jam/block/work-item.d.ts +3 -3
  17. package/packages/jam/block/work-item.d.ts.map +1 -1
  18. package/packages/jam/block/work-item.js +7 -3
  19. package/packages/jam/block/work-package.d.ts +2 -2
  20. package/packages/jam/block/work-package.d.ts.map +1 -1
  21. package/packages/jam/block/work-package.js +2 -6
  22. package/packages/jam/block-json/block.d.ts +2 -2
  23. package/packages/jam/block-json/block.js +1 -1
  24. package/packages/jam/block-json/common.d.ts +1 -2
  25. package/packages/jam/block-json/common.d.ts.map +1 -1
  26. package/packages/jam/block-json/common.js +2 -2
  27. package/packages/jam/block-json/extrinsic.js +1 -1
  28. package/packages/jam/block-json/header.d.ts +1 -2
  29. package/packages/jam/block-json/header.d.ts.map +1 -1
  30. package/packages/jam/block-json/header.js +32 -34
  31. package/packages/jam/block-json/tickets-extrinsic.d.ts +1 -2
  32. package/packages/jam/block-json/tickets-extrinsic.d.ts.map +1 -1
  33. package/packages/jam/block-json/tickets-extrinsic.js +5 -7
  34. package/packages/jam/block-json/work-result.js +2 -2
  35. package/packages/jam/database/blocks.d.ts +3 -0
  36. package/packages/jam/database/blocks.d.ts.map +1 -1
  37. package/packages/jam/database/blocks.js +5 -0
  38. package/packages/jam/database-lmdb/blocks.d.ts +1 -0
  39. package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
  40. package/packages/jam/database-lmdb/blocks.js +5 -0
  41. package/packages/jam/database-lmdb/states.js +1 -1
  42. package/packages/jam/executor/pvm-executor.d.ts +2 -2
  43. package/packages/jam/executor/pvm-executor.d.ts.map +1 -1
  44. package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
  45. package/packages/jam/in-core/externalities/refine.d.ts +42 -11
  46. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
  47. package/packages/jam/in-core/externalities/refine.js +95 -11
  48. package/packages/jam/in-core/externalities/refine.test.d.ts +2 -0
  49. package/packages/jam/in-core/externalities/refine.test.d.ts.map +1 -0
  50. package/packages/jam/in-core/externalities/refine.test.js +263 -0
  51. package/packages/jam/in-core/in-core.d.ts +1 -1
  52. package/packages/jam/in-core/in-core.d.ts.map +1 -1
  53. package/packages/jam/in-core/in-core.js +17 -10
  54. package/packages/jam/jam-host-calls/accumulate/bless.js +9 -9
  55. package/packages/jam/jam-host-calls/externalities/partial-state.d.ts +1 -1
  56. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +3 -1
  57. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
  58. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts +2 -0
  59. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts.map +1 -1
  60. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +5 -0
  61. package/packages/jam/jam-host-calls/general/fetch.d.ts +159 -98
  62. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  63. package/packages/jam/jam-host-calls/general/fetch.js +110 -16
  64. package/packages/jam/jam-host-calls/general/fetch.test.js +87 -56
  65. package/packages/jam/jam-host-calls/refine/export.d.ts +1 -1
  66. package/packages/jam/jam-host-calls/refine/export.js +1 -1
  67. package/packages/jam/jam-host-calls/refine/export.test.js +3 -0
  68. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +1 -1
  69. package/packages/jam/jam-host-calls/refine/historical-lookup.js +1 -1
  70. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +1 -1
  71. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +1 -1
  72. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +1 -1
  73. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  74. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
  75. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  76. package/packages/jam/node/main-fuzz.js +1 -0
  77. package/packages/jam/node/main-importer.d.ts +1 -0
  78. package/packages/jam/node/main-importer.d.ts.map +1 -1
  79. package/packages/jam/node/main-importer.js +1 -0
  80. package/packages/jam/node/main.d.ts.map +1 -1
  81. package/packages/jam/node/main.js +1 -0
  82. package/packages/jam/node/reader.d.ts +2 -2
  83. package/packages/jam/node/workers.d.ts +22 -22
  84. package/packages/jam/safrole/bandersnatch-vrf.d.ts +1 -2
  85. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  86. package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
  87. package/packages/jam/safrole/bandersnatch-vrf.test.js +2 -3
  88. package/packages/jam/safrole/safrole.test.js +72 -80
  89. package/packages/jam/state/safrole-data.d.ts +1 -1
  90. package/packages/jam/state/test.utils.js +1 -1
  91. package/packages/jam/state-json/dump.js +2 -2
  92. package/packages/jam/state-json/safrole.d.ts +2 -2
  93. package/packages/jam/state-json/safrole.d.ts.map +1 -1
  94. package/packages/jam/state-json/safrole.js +4 -4
  95. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
  96. package/packages/jam/state-vectors/index.d.ts +7 -8
  97. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  98. package/packages/jam/state-vectors/index.js +4 -6
  99. package/packages/jam/transition/accumulate/accumulate.js +2 -2
  100. package/packages/jam/transition/accumulate/accumulation-result-merge-utils.js +48 -39
  101. package/packages/jam/transition/externalities/accumulate-externalities.d.ts +2 -2
  102. package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
  103. package/packages/jam/transition/externalities/accumulate-externalities.js +20 -7
  104. package/packages/jam/transition/externalities/accumulate-externalities.test.js +74 -4
  105. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts +19 -0
  106. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
  107. package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
  108. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
  109. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
  110. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
  111. package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -39
  112. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  113. package/packages/jam/transition/externalities/fetch-externalities.js +2 -88
  114. package/packages/jam/transition/externalities/index.d.ts +2 -0
  115. package/packages/jam/transition/externalities/index.d.ts.map +1 -1
  116. package/packages/jam/transition/externalities/index.js +2 -0
  117. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +23 -0
  118. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -0
  119. package/packages/jam/transition/externalities/refine-fetch-externalities.js +48 -0
  120. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts +2 -0
  121. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts.map +1 -0
  122. package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +32 -0
  123. package/packages/jam/transition/hasher.test.js +1 -1
  124. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  125. package/packages/workers/block-authorship/main.js +1 -1
  126. package/packages/workers/block-authorship/protocol.d.ts +4 -4
  127. package/packages/workers/block-authorship/ticket-generator.d.ts +1 -2
  128. package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
  129. package/packages/workers/block-authorship/ticket-generator.js +2 -2
  130. package/packages/workers/block-authorship/ticket-generator.test.js +10 -11
  131. package/packages/workers/comms-authorship-network/protocol.d.ts +1 -1
  132. package/packages/workers/comms-authorship-network/tickets-message.d.ts +1 -1
  133. package/packages/workers/importer/importer.d.ts +1 -0
  134. package/packages/workers/importer/importer.d.ts.map +1 -1
  135. package/packages/workers/importer/importer.js +7 -2
  136. package/packages/workers/importer/main.d.ts.map +1 -1
  137. package/packages/workers/importer/main.js +2 -0
  138. package/packages/workers/importer/protocol.d.ts +12 -9
  139. package/packages/workers/importer/protocol.d.ts.map +1 -1
  140. package/packages/workers/importer/protocol.js +8 -3
  141. package/packages/workers/jam-network/protocol.d.ts +10 -10
  142. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
  143. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
  144. package/packages/jam/transition/externalities/fetch-externalities.test.js +0 -254
@@ -17,7 +17,7 @@ export const TRANSFER_OR_OPERAND = codec.union("TransferOrOperand", {
17
17
  [TransferOperandKind.OPERAND]: codec.object({ value: Operand.Codec }),
18
18
  [TransferOperandKind.TRANSFER]: codec.object({ value: PendingTransfer.Codec }),
19
19
  });
20
- const TRANSFERS_AND_OPERANDS = codec.sequenceVarLen(TRANSFER_OR_OPERAND);
20
+ export const TRANSFERS_AND_OPERANDS = codec.sequenceVarLen(TRANSFER_OR_OPERAND);
21
21
  // https://github.com/gavofyork/graypaper/pull/414
22
22
  // 0.7.0 encoding is used for prior versions as well.
23
23
  const CONSTANTS_CODEC = codec.object({
@@ -56,7 +56,7 @@ const CONSTANTS_CODEC = codec.object({
56
56
  Y: codec.u32,
57
57
  });
58
58
  const encodedConstantsCache = new Map();
59
- function getEncodedConstants(chainSpec) {
59
+ export function getEncodedConstants(chainSpec) {
60
60
  const constsFromCache = encodedConstantsCache.get(chainSpec);
61
61
  if (constsFromCache !== undefined) {
62
62
  return constsFromCache;
@@ -99,89 +99,3 @@ function getEncodedConstants(chainSpec) {
99
99
  encodedConstantsCache.set(chainSpec, encodedConsts);
100
100
  return encodedConsts;
101
101
  }
102
- var FetchContext;
103
- (function (FetchContext) {
104
- FetchContext[FetchContext["Accumulate"] = 0] = "Accumulate";
105
- FetchContext[FetchContext["Refine"] = 1] = "Refine";
106
- })(FetchContext || (FetchContext = {}));
107
- export class FetchExternalities {
108
- fetchData;
109
- chainSpec;
110
- constructor(fetchData, chainSpec) {
111
- this.fetchData = fetchData;
112
- this.chainSpec = chainSpec;
113
- }
114
- static createForAccumulate(fetchData, chainSpec) {
115
- return new FetchExternalities({ context: FetchContext.Accumulate, ...fetchData }, chainSpec);
116
- }
117
- static createForRefine(fetchData, chainSpec) {
118
- return new FetchExternalities({ context: FetchContext.Refine, ...fetchData }, chainSpec);
119
- }
120
- constants() {
121
- return getEncodedConstants(this.chainSpec);
122
- }
123
- entropy() {
124
- const { entropy } = this.fetchData;
125
- if (entropy === undefined) {
126
- return null;
127
- }
128
- return entropy.asOpaque();
129
- }
130
- authorizerTrace() {
131
- return null;
132
- }
133
- workItemExtrinsic(_workItem, _index) {
134
- return null;
135
- }
136
- workItemImport(_workItem, _index) {
137
- return null;
138
- }
139
- workPackage() {
140
- return null;
141
- }
142
- authorizer() {
143
- return null;
144
- }
145
- authorizationToken() {
146
- return null;
147
- }
148
- refineContext() {
149
- return null;
150
- }
151
- allWorkItems() {
152
- return null;
153
- }
154
- oneWorkItem(_workItem) {
155
- return null;
156
- }
157
- workItemPayload(_workItem) {
158
- return null;
159
- }
160
- allTransfersAndOperands() {
161
- if (this.fetchData.context === FetchContext.Accumulate) {
162
- const { transfers, operands } = this.fetchData;
163
- const transfersAndOperands = transfers
164
- .map((transfer) => ({ kind: TransferOperandKind.TRANSFER, value: transfer }))
165
- .concat(operands.map((operand) => ({ kind: TransferOperandKind.OPERAND, value: operand })));
166
- return Encoder.encodeObject(TRANSFERS_AND_OPERANDS, transfersAndOperands, this.chainSpec);
167
- }
168
- return null;
169
- }
170
- oneTransferOrOperand(index) {
171
- if (this.fetchData.context === FetchContext.Accumulate) {
172
- const { operands, transfers } = this.fetchData;
173
- if (index >= operands.length + transfers.length) {
174
- return null;
175
- }
176
- const kind = index < operands.length ? TransferOperandKind.OPERAND : TransferOperandKind.TRANSFER;
177
- const transferOrOperand = kind === TransferOperandKind.OPERAND
178
- ? { kind: TransferOperandKind.OPERAND, value: operands[Number(index)] }
179
- : { kind: TransferOperandKind.TRANSFER, value: transfers[Number(index) - operands.length] };
180
- if (transferOrOperand.value === undefined) {
181
- return null;
182
- }
183
- return Encoder.encodeObject(TRANSFER_OR_OPERAND, transferOrOperand, this.chainSpec);
184
- }
185
- return null;
186
- }
187
- }
@@ -1,3 +1,5 @@
1
1
  export * from "./accumulate-externalities.js";
2
+ export * from "./accumulate-fetch-externalities.js";
2
3
  export * from "./fetch-externalities.js";
4
+ export * from "./refine-fetch-externalities.js";
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC"}
@@ -1,2 +1,4 @@
1
1
  export * from "./accumulate-externalities.js";
2
+ export * from "./accumulate-fetch-externalities.js";
2
3
  export * from "./fetch-externalities.js";
4
+ export * from "./refine-fetch-externalities.js";
@@ -0,0 +1,23 @@
1
+ import type { EntropyHash } from "#@typeberry/block";
2
+ import { type BytesBlob } from "#@typeberry/bytes";
3
+ import type { ChainSpec } from "#@typeberry/config";
4
+ import { general } from "#@typeberry/jam-host-calls";
5
+ import type { U64 } from "#@typeberry/numbers";
6
+ export declare class RefineFetchExternalities implements general.IRefineFetch {
7
+ private readonly chainSpec;
8
+ readonly context = general.FetchContext.Refine;
9
+ constructor(chainSpec: ChainSpec);
10
+ constants(): BytesBlob;
11
+ entropy(): EntropyHash;
12
+ authorizerTrace(): BytesBlob | null;
13
+ workItemExtrinsic(_workItem: U64 | null, _index: U64): BytesBlob | null;
14
+ workItemImport(_workItem: U64 | null, _index: U64): BytesBlob | null;
15
+ workPackage(): BytesBlob | null;
16
+ authorizer(): BytesBlob | null;
17
+ authorizationToken(): BytesBlob | null;
18
+ refineContext(): BytesBlob | null;
19
+ allWorkItems(): BytesBlob | null;
20
+ oneWorkItem(_workItem: U64): BytesBlob | null;
21
+ workItemPayload(_workItem: U64): BytesBlob | null;
22
+ }
23
+ //# sourceMappingURL=refine-fetch-externalities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refine-fetch-externalities.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/refine-fetch-externalities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAG9C,qBAAa,wBAAyB,YAAW,OAAO,CAAC,YAAY;IAGvD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,QAAQ,CAAC,OAAO,+BAA+B;gBAElB,SAAS,EAAE,SAAS;IAEjD,SAAS,IAAI,SAAS;IAKtB,OAAO,IAAI,WAAW;IAItB,eAAe,IAAI,SAAS,GAAG,IAAI;IAInC,iBAAiB,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAIvE,cAAc,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAIpE,WAAW,IAAI,SAAS,GAAG,IAAI;IAI/B,UAAU,IAAI,SAAS,GAAG,IAAI;IAI9B,kBAAkB,IAAI,SAAS,GAAG,IAAI;IAItC,aAAa,IAAI,SAAS,GAAG,IAAI;IAIjC,YAAY,IAAI,SAAS,GAAG,IAAI;IAIhC,WAAW,CAAC,SAAS,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAI7C,eAAe,CAAC,SAAS,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;CAGlD"}
@@ -0,0 +1,48 @@
1
+ import { Bytes } from "#@typeberry/bytes";
2
+ import { HASH_SIZE } from "#@typeberry/hash";
3
+ import { general } from "#@typeberry/jam-host-calls";
4
+ import { getEncodedConstants } from "./fetch-externalities.js";
5
+ export class RefineFetchExternalities {
6
+ chainSpec;
7
+ context = general.FetchContext.Refine;
8
+ constructor(chainSpec) {
9
+ this.chainSpec = chainSpec;
10
+ }
11
+ constants() {
12
+ return getEncodedConstants(this.chainSpec);
13
+ }
14
+ // Returns H₀ (zero hash)
15
+ entropy() {
16
+ return Bytes.zero(HASH_SIZE).asOpaque();
17
+ }
18
+ authorizerTrace() {
19
+ return null;
20
+ }
21
+ workItemExtrinsic(_workItem, _index) {
22
+ return null;
23
+ }
24
+ workItemImport(_workItem, _index) {
25
+ return null;
26
+ }
27
+ workPackage() {
28
+ return null;
29
+ }
30
+ authorizer() {
31
+ return null;
32
+ }
33
+ authorizationToken() {
34
+ return null;
35
+ }
36
+ refineContext() {
37
+ return null;
38
+ }
39
+ allWorkItems() {
40
+ return null;
41
+ }
42
+ oneWorkItem(_workItem) {
43
+ return null;
44
+ }
45
+ workItemPayload(_workItem) {
46
+ return null;
47
+ }
48
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=refine-fetch-externalities.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refine-fetch-externalities.test.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/refine-fetch-externalities.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import assert from "node:assert";
2
+ import { describe, it } from "node:test";
3
+ import { fullChainSpec, tinyChainSpec } from "#@typeberry/config";
4
+ import { RefineFetchExternalities } from "./refine-fetch-externalities.js";
5
+ describe("RefineFetchExternalities", () => {
6
+ const prepareRefineData = ({ chainSpec } = {}) => {
7
+ const defaultChainSpec = tinyChainSpec;
8
+ return new RefineFetchExternalities(chainSpec ?? defaultChainSpec);
9
+ };
10
+ it("should return different constants for different chain specs", () => {
11
+ const tinyFetchExternalities = prepareRefineData({ chainSpec: tinyChainSpec });
12
+ const fullFetchExternalities = prepareRefineData({ chainSpec: fullChainSpec });
13
+ const tinyConstants = tinyFetchExternalities.constants();
14
+ const fullConstants = fullFetchExternalities.constants();
15
+ assert.notStrictEqual(tinyConstants.length, 0);
16
+ assert.notStrictEqual(fullConstants.length, 0);
17
+ assert.notDeepStrictEqual(tinyConstants, fullConstants);
18
+ });
19
+ // Pending implementation — these should assert against real fixture values once
20
+ // RefineFetchExternalities accepts and exposes the required refine inputs.
21
+ it.todo("should return entropy (H₀ header hash of anchor block)");
22
+ it.todo("should return authorizer trace");
23
+ it.todo("should return work item extrinsic");
24
+ it.todo("should return work item import");
25
+ it.todo("should return work package");
26
+ it.todo("should return authorizer");
27
+ it.todo("should return authorization token");
28
+ it.todo("should return refine context");
29
+ it.todo("should return all work items");
30
+ it.todo("should return one work item");
31
+ it.todo("should return work item payload");
32
+ });
@@ -40,7 +40,7 @@ describe("TransitionHasher", () => {
40
40
  }
41
41
  function prepareTickets() {
42
42
  return rawTickets.map(({ attempt, signature }) => SignedTicket.create({
43
- attempt: tryAsTicketAttempt(attempt, tinyChainSpec),
43
+ attempt: tryAsTicketAttempt(attempt),
44
44
  signature: Bytes.parseBytes(signature, BANDERSNATCH_PROOF_BYTES).asOpaque(),
45
45
  }));
46
46
  }
@@ -1 +1 @@
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"}
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,iBA+OpG"}
@@ -152,7 +152,7 @@ export async function main(config, comms, networkingComms) {
152
152
  // After epoch change, it has been shifted to index 2.
153
153
  const ticketEntropy = isNewEpoch ? state.entropy[1] : state.entropy[2];
154
154
  logger.info `Epoch ${epoch}, slot ${slotInEpoch}/${chainSpec.contestLength}. Generating tickets for ${validatorKeys.length} validators...`;
155
- const ticketsResult = await generateTickets(bandersnatch, ringKeys, validatorKeys, ticketEntropy, chainSpec.ticketsPerValidator, chainSpec);
155
+ const ticketsResult = await generateTickets(bandersnatch, ringKeys, validatorKeys, ticketEntropy, chainSpec.ticketsPerValidator);
156
156
  if (ticketsResult.isError) {
157
157
  logger.warn `Failed to generate tickets for epoch ${epoch}: ${ticketsResult.error}`;
158
158
  }
@@ -28,7 +28,7 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
28
28
  ticketsMarker: import("@typeberry/codec").Descriptor<import("@typeberry/block").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("@typeberry/block").TicketsMarker, {
29
29
  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, {
30
30
  id: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
31
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
31
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, import("@typeberry/numbers").U32>;
32
32
  }>>>;
33
33
  }> | null>;
34
34
  bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
@@ -38,7 +38,7 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
38
38
  }>>;
39
39
  extrinsic: import("@typeberry/codec").Descriptor<import("@typeberry/block").Extrinsic, import("@typeberry/codec").ViewOf<import("@typeberry/block").Extrinsic, {
40
40
  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, {
41
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
41
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, import("@typeberry/numbers").U32>;
42
42
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
43
43
  }>>>;
44
44
  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, {
@@ -152,7 +152,7 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
152
152
  ticketsMarker: import("@typeberry/codec").Descriptor<import("@typeberry/block").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("@typeberry/block").TicketsMarker, {
153
153
  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, {
154
154
  id: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
155
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
155
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, import("@typeberry/numbers").U32>;
156
156
  }>>>;
157
157
  }> | null>;
158
158
  bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
@@ -162,7 +162,7 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
162
162
  }>>;
163
163
  extrinsic: import("@typeberry/codec").Descriptor<import("@typeberry/block").Extrinsic, import("@typeberry/codec").ViewOf<import("@typeberry/block").Extrinsic, {
164
164
  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, {
165
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
165
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, import("@typeberry/numbers").U32>;
166
166
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
167
167
  }>>>;
168
168
  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, {
@@ -1,6 +1,5 @@
1
1
  import type { EntropyHash } from "#@typeberry/block";
2
2
  import type { SignedTicket } from "#@typeberry/block/tickets.js";
3
- import type { ChainSpec } from "#@typeberry/config";
4
3
  import type { BandersnatchKey, BandersnatchSecretSeed } from "#@typeberry/crypto";
5
4
  import type { BandernsatchWasm } from "#@typeberry/safrole/bandersnatch-wasm.js";
6
5
  import { Result } from "#@typeberry/utils";
@@ -18,5 +17,5 @@ export type ValidatorKey = {
18
17
  * Each validator key produces `ticketsPerValidator` tickets using ring VRF proofs.
19
18
  * The ring keys define the anonymous set - only members can produce valid proofs.
20
19
  */
21
- export declare function generateTickets(bandersnatch: BandernsatchWasm, ringKeys: BandersnatchKey[], validatorKeys: ValidatorKey[], entropy: EntropyHash, ticketsPerValidator: number, chainSpec: ChainSpec): Promise<Result<SignedTicket[], TicketGeneratorError>>;
20
+ export declare function generateTickets(bandersnatch: BandernsatchWasm, ringKeys: BandersnatchKey[], validatorKeys: ValidatorKey[], entropy: EntropyHash, ticketsPerValidator: number): Promise<Result<SignedTicket[], TicketGeneratorError>>;
22
21
  //# sourceMappingURL=ticket-generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ticket-generator.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/ticket-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,oBAAY,oBAAoB;IAC9B,sBAAsB,2BAA2B;IACjD,kBAAkB,uBAAuB;CAC1C;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,gBAAgB,EAC9B,QAAQ,EAAE,eAAe,EAAE,EAC3B,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,EAAE,WAAW,EACpB,mBAAmB,EAAE,MAAM,EAC3B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAmCvD"}
1
+ {"version":3,"file":"ticket-generator.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/ticket-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,oBAAY,oBAAoB;IAC9B,sBAAsB,2BAA2B;IACjD,kBAAkB,uBAAuB;CAC1C;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,gBAAgB,EAC9B,QAAQ,EAAE,eAAe,EAAE,EAC3B,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,EAAE,WAAW,EACpB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAkCvD"}
@@ -13,7 +13,7 @@ export var TicketGeneratorError;
13
13
  * Each validator key produces `ticketsPerValidator` tickets using ring VRF proofs.
14
14
  * The ring keys define the anonymous set - only members can produce valid proofs.
15
15
  */
16
- export async function generateTickets(bandersnatch, ringKeys, validatorKeys, entropy, ticketsPerValidator, chainSpec) {
16
+ export async function generateTickets(bandersnatch, ringKeys, validatorKeys, entropy, ticketsPerValidator) {
17
17
  const allTickets = [];
18
18
  for (const validatorKey of validatorKeys) {
19
19
  const proverIndex = ringKeys.findIndex((k) => k.isEqualTo(validatorKey.public));
@@ -21,7 +21,7 @@ export async function generateTickets(bandersnatch, ringKeys, validatorKeys, ent
21
21
  logger.warn `Validator public key not found in the ring, skipping ticket generation for this key`;
22
22
  continue;
23
23
  }
24
- const ticketResult = await bandersnatchVrf.generateTickets(bandersnatch, ringKeys, proverIndex, validatorKey.secret, entropy, ticketsPerValidator, chainSpec);
24
+ const ticketResult = await bandersnatchVrf.generateTickets(bandersnatch, ringKeys, proverIndex, validatorKey.secret, entropy, ticketsPerValidator);
25
25
  if (ticketResult.isOk) {
26
26
  allTickets.push(...ticketResult.ok);
27
27
  }
@@ -2,7 +2,6 @@ import assert from "node:assert";
2
2
  import { afterEach, beforeEach, describe, it, mock } from "node:test";
3
3
  import { tryAsTicketAttempt } from "#@typeberry/block/tickets.js";
4
4
  import { Bytes } from "#@typeberry/bytes";
5
- import { tinyChainSpec } from "#@typeberry/config";
6
5
  import { BANDERSNATCH_KEY_BYTES, initWasm, SEED_SIZE } from "#@typeberry/crypto";
7
6
  import { HASH_SIZE } from "#@typeberry/hash";
8
7
  import bandersnatchVrf from "#@typeberry/safrole/bandersnatch-vrf.js";
@@ -26,7 +25,7 @@ describe("Ticket Generator", () => {
26
25
  const tickets = [];
27
26
  for (let attempt = 0; attempt < ticketsPerValidator; attempt++) {
28
27
  tickets.push({
29
- attempt: tryAsTicketAttempt(attempt, tinyChainSpec),
28
+ attempt: tryAsTicketAttempt(attempt),
30
29
  signature: Bytes.zero(784).asOpaque(),
31
30
  });
32
31
  }
@@ -41,7 +40,7 @@ describe("Ticket Generator", () => {
41
40
  const ringKeys = createMockRingKeys(3);
42
41
  const validatorKeys = createMockValidatorKeys(3);
43
42
  const ticketsPerValidator = 2;
44
- const result = await generateTickets(MOCK_BANDERSNATCH, ringKeys, validatorKeys, MOCK_ENTROPY, ticketsPerValidator, tinyChainSpec);
43
+ const result = await generateTickets(MOCK_BANDERSNATCH, ringKeys, validatorKeys, MOCK_ENTROPY, ticketsPerValidator);
45
44
  assert.ok(result.isOk);
46
45
  assert.strictEqual(result.ok.length, 6);
47
46
  });
@@ -49,18 +48,18 @@ describe("Ticket Generator", () => {
49
48
  const ringKeys = createMockRingKeys(2);
50
49
  const validatorKeys = createMockValidatorKeys(2);
51
50
  const ticketsPerValidator = 2;
52
- const result = await generateTickets(MOCK_BANDERSNATCH, ringKeys, validatorKeys, MOCK_ENTROPY, ticketsPerValidator, tinyChainSpec);
51
+ const result = await generateTickets(MOCK_BANDERSNATCH, ringKeys, validatorKeys, MOCK_ENTROPY, ticketsPerValidator);
53
52
  assert.ok(result.isOk);
54
53
  const tickets = result.ok;
55
- assert.strictEqual(tickets[0].attempt, tryAsTicketAttempt(0, tinyChainSpec));
56
- assert.strictEqual(tickets[1].attempt, tryAsTicketAttempt(1, tinyChainSpec));
57
- assert.strictEqual(tickets[2].attempt, tryAsTicketAttempt(0, tinyChainSpec));
58
- assert.strictEqual(tickets[3].attempt, tryAsTicketAttempt(1, tinyChainSpec));
54
+ assert.strictEqual(tickets[0].attempt, tryAsTicketAttempt(0));
55
+ assert.strictEqual(tickets[1].attempt, tryAsTicketAttempt(1));
56
+ assert.strictEqual(tickets[2].attempt, tryAsTicketAttempt(0));
57
+ assert.strictEqual(tickets[3].attempt, tryAsTicketAttempt(1));
59
58
  });
60
59
  it("should return empty array for no validator keys", async () => {
61
60
  const ringKeys = createMockRingKeys(3);
62
61
  const ticketsPerValidator = 2;
63
- const result = await generateTickets(MOCK_BANDERSNATCH, ringKeys, [], MOCK_ENTROPY, ticketsPerValidator, tinyChainSpec);
62
+ const result = await generateTickets(MOCK_BANDERSNATCH, ringKeys, [], MOCK_ENTROPY, ticketsPerValidator);
64
63
  assert.ok(result.isOk);
65
64
  assert.strictEqual(result.ok.length, 0);
66
65
  });
@@ -75,7 +74,7 @@ describe("Ticket Generator", () => {
75
74
  },
76
75
  ];
77
76
  const validatorKeys = [...correctValidatorKeys, ...incorrectValidatorKeys];
78
- const result = await generateTickets(MOCK_BANDERSNATCH, ringKeys, validatorKeys, MOCK_ENTROPY, ticketsPerValidator, tinyChainSpec);
77
+ const result = await generateTickets(MOCK_BANDERSNATCH, ringKeys, validatorKeys, MOCK_ENTROPY, ticketsPerValidator);
79
78
  assert.ok(result.isOk);
80
79
  // Only the 2 valid validators should produce tickets
81
80
  assert.strictEqual(result.ok.length, 4);
@@ -93,7 +92,7 @@ describe("Ticket Generator", () => {
93
92
  public: Bytes.fill(BANDERSNATCH_KEY_BYTES, 98).asOpaque(),
94
93
  },
95
94
  ];
96
- const result = await generateTickets(MOCK_BANDERSNATCH, ringKeys, invalidValidatorKeys, MOCK_ENTROPY, ticketsPerValidator, tinyChainSpec);
95
+ const result = await generateTickets(MOCK_BANDERSNATCH, ringKeys, invalidValidatorKeys, MOCK_ENTROPY, ticketsPerValidator);
97
96
  assert.ok(result.isError);
98
97
  assert.strictEqual(result.error, TicketGeneratorError.TicketGenerationFailed);
99
98
  });
@@ -15,7 +15,7 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
15
15
  request: import("@typeberry/codec").Descriptor<TicketsMessage, import("@typeberry/codec").ViewOf<TicketsMessage, {
16
16
  epochIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"Epoch">, import("@typeberry/bytes").Bytes<4>>;
17
17
  tickets: import("@typeberry/codec").Descriptor<import("@typeberry/block").SignedTicket[], import("@typeberry/codec").SequenceView<import("@typeberry/block").SignedTicket, import("@typeberry/codec").ViewOf<import("@typeberry/block").SignedTicket, {
18
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
18
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, import("@typeberry/numbers").U32>;
19
19
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
20
20
  }>>>;
21
21
  }>>;
@@ -8,7 +8,7 @@ export declare class TicketsMessage extends WithDebug {
8
8
  static Codec: import("@typeberry/codec").Descriptor<TicketsMessage, import("@typeberry/codec").ViewOf<TicketsMessage, {
9
9
  epochIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"Epoch">, import("@typeberry/bytes").Bytes<4>>;
10
10
  tickets: import("@typeberry/codec").Descriptor<SignedTicket[], import("@typeberry/codec").SequenceView<SignedTicket, import("@typeberry/codec").ViewOf<SignedTicket, {
11
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
11
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, import("@typeberry/numbers").U32>;
12
12
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
13
13
  }>>>;
14
14
  }>>;
@@ -18,6 +18,7 @@ export type ImporterError = TaggedError<ImporterErrorKind.Verifier, BlockVerifie
18
18
  export type ImporterOptions = {
19
19
  initGenesisFromAncestry?: boolean;
20
20
  finalizer?: Finalizer;
21
+ pruneBlocks?: boolean;
21
22
  };
22
23
  export declare class Importer {
23
24
  private readonly hasher;
@@ -1 +1 @@
1
- {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/importer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAiB,MAAM,kBAAkB,CAAC;AACvH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAiB,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAkC,MAAM,EAAkB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,oBAAY,iBAAiB;IAC3B,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,MAAM,IAAI;CACX;AAED,MAAM,MAAM,aAAa,GACrB,WAAW,CAAC,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,GAC3D,WAAW,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAC5C,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAO5D,MAAM,MAAM,eAAe,GAAG;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,qBAAa,QAAQ;IAajB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhB1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAG9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;gBAGjE,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,UAAU,EACE,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EACzC,OAAO,GAAE,eAAoB;IAkBhD,6DAA6D;IAChD,mBAAmB;IAQnB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAQzF,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;YAwB9F,mBAAmB;IA2FjC,oBAAoB;IAMpB,gBAAgB;IAIhB,eAAe,CAAC,UAAU,EAAE,UAAU;IAKhC,KAAK;CAIZ"}
1
+ {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/importer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAiB,MAAM,kBAAkB,CAAC;AACvH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAiB,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAkC,MAAM,EAAkB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,oBAAY,iBAAiB;IAC3B,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,MAAM,IAAI;CACX;AAED,MAAM,MAAM,aAAa,GACrB,WAAW,CAAC,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,GAC3D,WAAW,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAC5C,WAAW,CAAC,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAO5D,MAAM,MAAM,eAAe,GAAG;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,qBAAa,QAAQ;IAajB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhB1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAG9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAEhD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;gBAGjE,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,UAAU,EACE,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EACzC,OAAO,GAAE,eAAoB;IAkBhD,6DAA6D;IAChD,mBAAmB;IAQnB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAQzF,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;YAwB9F,mBAAmB;IAgGjC,oBAAoB;IAMpB,gBAAgB;IAIhB,eAAe,CAAC,UAAU,EAAE,UAAU;IAKhC,KAAK;CAIZ"}
@@ -144,12 +144,17 @@ export class Importer {
144
144
  logger.log `${timerDb()}`;
145
145
  // finally update the best block
146
146
  await this.blocks.setBestHeaderHash(headerHash);
147
- // check for finality and prune old states
147
+ // check for finality and prune old states (and optionally blocks)
148
148
  const finality = this.options.finalizer?.onBlockImported(headerHash) ?? null;
149
149
  if (finality !== null) {
150
- this.logger.info `🦭 Finalized block: ${finality.finalizedHash} (${finality.prunableStateHashes.length} to prune)`;
150
+ const pruneBlocks = this.options.pruneBlocks ?? false;
151
+ this.logger
152
+ .info `🦭 Finalized block: ${finality.finalizedHash} (${finality.prunableStateHashes.length} to prune, blocks: ${pruneBlocks})`;
151
153
  for (const hash of finality.prunableStateHashes) {
152
154
  this.states.markUnused(hash);
155
+ if (pruneBlocks) {
156
+ this.blocks.markUnused(hash);
157
+ }
153
158
  }
154
159
  }
155
160
  return Result.ok(new WithHash(headerHash, block.header.view()));
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtE,MAAM,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAE/F,MAAM,MAAM,qBAAqB,GAAG;IAClC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC;IACT,QAAQ,EAAE,QAAQ,CAAC;IACnB,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;CACxC,CAAC,CAoBD;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,iBAwCjE"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtE,MAAM,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAE/F,MAAM,MAAM,qBAAqB,GAAG;IAClC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC;IACT,QAAQ,EAAE,QAAQ,CAAC;IACnB,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;CACxC,CAAC,CAsBD;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,iBAwCjE"}
@@ -16,10 +16,12 @@ export async function createImporter(config, options = {}) {
16
16
  const states = db.getStatesDb();
17
17
  const dummyFinalityDepth = config.workerParams.dummyFinalityDepth ?? 0;
18
18
  const finalizer = dummyFinalityDepth > 0 ? DummyFinalizer.create(blocks, dummyFinalityDepth) : undefined;
19
+ const pruneBlocks = config.workerParams.pruneBlocks ?? false;
19
20
  const hasher = new TransitionHasher(await keccakHasher, await blake2b);
20
21
  const importer = new Importer(chainSpec, pvm, hasher, logger, blocks, states, {
21
22
  ...options,
22
23
  finalizer,
24
+ pruneBlocks,
23
25
  });
24
26
  return {
25
27
  importer,