@typeberry/lib 0.5.4 → 0.5.5-befa219

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 (123) hide show
  1. package/bin/lib/scripts/build-lib.js +1 -0
  2. package/package.json +5 -1
  3. package/packages/core/json-parser/descriptors.d.ts.map +1 -1
  4. package/packages/core/json-parser/descriptors.js +3 -0
  5. package/packages/core/json-parser/index.test.js +30 -0
  6. package/packages/core/networking/package.json +1 -1
  7. package/packages/core/pvm-host-calls/ecalli-trace-logger.js +1 -1
  8. package/packages/core/pvm-host-calls/ecalli-trace-logger.test.js +7 -7
  9. package/packages/core/pvm-host-calls/host-call-registers.js +1 -1
  10. package/packages/core/telemetry/package.json +1 -1
  11. package/packages/core/utils/compatibility.d.ts +0 -1
  12. package/packages/core/utils/compatibility.d.ts.map +1 -1
  13. package/packages/core/utils/compatibility.js +1 -2
  14. package/packages/core/utils/compatibility.test.js +6 -10
  15. package/packages/jam/block/index.d.ts +11 -11
  16. package/packages/jam/block/index.d.ts.map +1 -1
  17. package/packages/jam/block/index.js +11 -11
  18. package/packages/jam/block-json/block.d.ts +25 -25
  19. package/packages/jam/database-lmdb/states.test.js +3 -5
  20. package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
  21. package/packages/jam/jam-host-calls/accumulate/bless.d.ts.map +1 -1
  22. package/packages/jam/jam-host-calls/accumulate/bless.js +6 -10
  23. package/packages/jam/jam-host-calls/accumulate/bless.test.js +32 -72
  24. package/packages/jam/jam-host-calls/accumulate/new.d.ts.map +1 -1
  25. package/packages/jam/jam-host-calls/accumulate/new.js +2 -4
  26. package/packages/jam/jam-host-calls/accumulate/new.test.js +4 -5
  27. package/packages/jam/jam-host-calls/general/fetch.d.ts +1 -57
  28. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  29. package/packages/jam/jam-host-calls/general/fetch.js +6 -29
  30. package/packages/jam/jam-host-calls/general/fetch.test.js +2 -58
  31. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +4 -4
  32. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts +13 -13
  33. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  34. package/packages/jam/node/package.json +1 -1
  35. package/packages/jam/node/reader.d.ts +25 -25
  36. package/packages/jam/node/workers.d.ts +183 -183
  37. package/packages/jam/safrole/bandersnatch-vrf.d.ts +7 -2
  38. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  39. package/packages/jam/safrole/bandersnatch-vrf.js +34 -1
  40. package/packages/jam/safrole/bandersnatch-vrf.test.js +15 -0
  41. package/packages/jam/safrole/bandersnatch-wasm.d.ts +1 -0
  42. package/packages/jam/safrole/bandersnatch-wasm.d.ts.map +1 -1
  43. package/packages/jam/safrole/bandersnatch-wasm.js +3 -0
  44. package/packages/jam/state/accumulation-queue.d.ts +26 -26
  45. package/packages/jam/state/assurances.d.ts +26 -26
  46. package/packages/jam/state/privileged-services.d.ts +1 -1
  47. package/packages/jam/state/privileged-services.d.ts.map +1 -1
  48. package/packages/jam/state/privileged-services.js +1 -6
  49. package/packages/jam/state/service.d.ts +1 -1
  50. package/packages/jam/state/service.d.ts.map +1 -1
  51. package/packages/jam/state/statistics.d.ts +0 -8
  52. package/packages/jam/state/statistics.d.ts.map +1 -1
  53. package/packages/jam/state/statistics.js +14 -44
  54. package/packages/jam/state/statistics.test.js +1 -8
  55. package/packages/jam/state/test.utils.d.ts +1 -1
  56. package/packages/jam/state/test.utils.d.ts.map +1 -1
  57. package/packages/jam/state/test.utils.js +4 -22
  58. package/packages/jam/state-json/accounts.d.ts +10 -0
  59. package/packages/jam/state-json/accounts.d.ts.map +1 -1
  60. package/packages/jam/state-json/accounts.js +47 -19
  61. package/packages/jam/state-json/dump.d.ts.map +1 -1
  62. package/packages/jam/state-json/dump.js +5 -9
  63. package/packages/jam/state-json/dump.test.js +2 -10
  64. package/packages/jam/state-json/statistics.d.ts +1 -1
  65. package/packages/jam/state-json/statistics.d.ts.map +1 -1
  66. package/packages/jam/state-json/statistics.js +1 -13
  67. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +29 -31
  68. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts.map +1 -1
  69. package/packages/jam/state-merkleization/serialize.d.ts +4 -4
  70. package/packages/jam/state-merkleization/serialize.d.ts.map +1 -1
  71. package/packages/jam/state-merkleization/serialize.js +5 -8
  72. package/packages/jam/state-merkleization/serialized-state-view.d.ts.map +1 -1
  73. package/packages/jam/state-merkleization/state-entries.test.js +1 -7
  74. package/packages/jam/state-vectors/index.d.ts +75 -75
  75. package/packages/jam/transition/accumulate/accumulate-data.d.ts.map +1 -1
  76. package/packages/jam/transition/accumulate/accumulate-data.js +6 -1
  77. package/packages/jam/transition/accumulate/accumulate-state.d.ts +1 -2
  78. package/packages/jam/transition/accumulate/accumulate-state.d.ts.map +1 -1
  79. package/packages/jam/transition/accumulate/accumulate-utils.d.ts.map +1 -1
  80. package/packages/jam/transition/accumulate/accumulate-utils.js +2 -6
  81. package/packages/jam/transition/accumulate/accumulate-utils.test.js +2 -4
  82. package/packages/jam/transition/accumulate/accumulate.d.ts +0 -9
  83. package/packages/jam/transition/accumulate/accumulate.d.ts.map +1 -1
  84. package/packages/jam/transition/accumulate/accumulate.js +15 -57
  85. package/packages/jam/transition/accumulate/index.d.ts +0 -1
  86. package/packages/jam/transition/accumulate/index.d.ts.map +1 -1
  87. package/packages/jam/transition/accumulate/index.js +0 -1
  88. package/packages/jam/transition/accumulate/operand.d.ts +7 -7
  89. package/packages/jam/transition/chain-stf.d.ts +3 -5
  90. package/packages/jam/transition/chain-stf.d.ts.map +1 -1
  91. package/packages/jam/transition/chain-stf.js +5 -29
  92. package/packages/jam/transition/disputes/disputes.test.data2.d.ts +3 -3
  93. package/packages/jam/transition/disputes/disputes.test.data2.d.ts.map +1 -1
  94. package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
  95. package/packages/jam/transition/externalities/accumulate-externalities.js +22 -49
  96. package/packages/jam/transition/externalities/accumulate-externalities.test.js +8 -72
  97. package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -22
  98. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  99. package/packages/jam/transition/externalities/fetch-externalities.js +3 -55
  100. package/packages/jam/transition/externalities/fetch-externalities.test.js +199 -112
  101. package/packages/jam/transition/statistics.d.ts +0 -7
  102. package/packages/jam/transition/statistics.d.ts.map +1 -1
  103. package/packages/jam/transition/statistics.js +2 -11
  104. package/packages/jam/transition/statistics.test.js +0 -40
  105. package/packages/workers/block-authorship/generator.test.d.ts +2 -0
  106. package/packages/workers/block-authorship/generator.test.d.ts.map +1 -0
  107. package/packages/workers/block-authorship/generator.test.js +200 -0
  108. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  109. package/packages/workers/block-authorship/main.js +31 -1
  110. package/packages/workers/block-authorship/package.json +1 -1
  111. package/packages/workers/block-authorship/protocol.d.ts +50 -50
  112. package/packages/workers/block-authorship/ticket-generator.d.ts +21 -0
  113. package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -0
  114. package/packages/workers/block-authorship/ticket-generator.js +37 -0
  115. package/packages/workers/block-authorship/ticket-generator.test.d.ts +2 -0
  116. package/packages/workers/block-authorship/ticket-generator.test.d.ts.map +1 -0
  117. package/packages/workers/block-authorship/ticket-generator.test.js +100 -0
  118. package/packages/workers/importer/package.json +1 -1
  119. package/packages/workers/importer/protocol.d.ts +54 -54
  120. package/packages/workers/jam-network/protocol.d.ts +79 -79
  121. package/packages/jam/transition/accumulate/deferred-transfers.d.ts +0 -36
  122. package/packages/jam/transition/accumulate/deferred-transfers.d.ts.map +0 -1
  123. package/packages/jam/transition/accumulate/deferred-transfers.js +0 -94
@@ -0,0 +1,200 @@
1
+ import { afterEach, beforeEach, describe, it, mock } from "node:test";
2
+ import { Block, DisputesExtrinsic, EpochMarker, Extrinsic, Header, tryAsTimeSlot, tryAsValidatorIndex, ValidatorKeys, } from "#@typeberry/block";
3
+ import { Bytes, BytesBlob } from "#@typeberry/bytes";
4
+ import { asKnownSize, FixedSizeArray } from "#@typeberry/collections";
5
+ import { tinyChainSpec } from "#@typeberry/config";
6
+ import { BANDERSNATCH_KEY_BYTES, BANDERSNATCH_VRF_SIGNATURE_BYTES, BLS_KEY_BYTES, ED25519_KEY_BYTES, initWasm, } from "#@typeberry/crypto";
7
+ import { BANDERSNATCH_RING_ROOT_BYTES } from "#@typeberry/crypto/bandersnatch.js";
8
+ import { Blake2b, HASH_SIZE, keccak } from "#@typeberry/hash";
9
+ import bandersnatchVrf from "#@typeberry/safrole/bandersnatch-vrf.js";
10
+ import { BandernsatchWasm } from "#@typeberry/safrole/bandersnatch-wasm.js";
11
+ import { JAM_FALLBACK_SEAL } from "#@typeberry/safrole/constants.js";
12
+ import { VALIDATOR_META_BYTES, ValidatorData } from "#@typeberry/state";
13
+ import { SafroleSealingKeysKind } from "#@typeberry/state/safrole-data.js";
14
+ import { asOpaqueType, deepEqual, Result } from "#@typeberry/utils";
15
+ import { Generator } from "./generator.js";
16
+ // Test validator data - need 6 validators to match tinyChainSpec.validatorsCount
17
+ const validatorDataArray = [
18
+ {
19
+ bandersnatch: "0xf16e5352840afb47e206b5c89f560f2611835855cf2e6ebad1acc9520a72591d",
20
+ ed25519: "0x837ce344bc9defceb0d7de7e9e9925096768b7adb4dad932e532eb6551e0ea02",
21
+ bls: Bytes.zero(BLS_KEY_BYTES),
22
+ metadata: Bytes.zero(VALIDATOR_META_BYTES),
23
+ },
24
+ {
25
+ bandersnatch: "0x7f6190116d118d643a98878e294ccf62b509e214299931aad8ff9764181a4e33",
26
+ ed25519: "0xb3e0e096b02e2ec98a3441410aeddd78c95e27a0da6f411a09c631c0f2bea6e9",
27
+ bls: Bytes.zero(BLS_KEY_BYTES),
28
+ metadata: Bytes.zero(VALIDATOR_META_BYTES),
29
+ },
30
+ {
31
+ bandersnatch: "0x48e5fcdce10e0b64ec4eebd0d9211c7bac2f27ce54bca6f7776ff6fee86ab3e3",
32
+ ed25519: "0x5c7f34a4bd4f2d04076a8c6f9060a0c8d2c6bdd082ceb3eda7df381cb260faff",
33
+ bls: Bytes.zero(BLS_KEY_BYTES),
34
+ metadata: Bytes.zero(VALIDATOR_META_BYTES),
35
+ },
36
+ {
37
+ bandersnatch: "0x5e465beb01dbafe160ce8216047f2155dd0569f058afd52dcea601025a8d161d",
38
+ ed25519: "0x3b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29",
39
+ bls: Bytes.zero(BLS_KEY_BYTES),
40
+ metadata: Bytes.zero(VALIDATOR_META_BYTES),
41
+ },
42
+ {
43
+ bandersnatch: "0x3d5e5a51aab2b048f8686ecd79712a80e3265a114cc73f14bdb2a59233fb66d0",
44
+ ed25519: "0x22351e22105a19aabb42589162ad7f1ea0df1c25cebf0e4a9fcd261301274862",
45
+ bls: Bytes.zero(BLS_KEY_BYTES),
46
+ metadata: Bytes.zero(VALIDATOR_META_BYTES),
47
+ },
48
+ {
49
+ bandersnatch: "0xaa2b95f7572875b0d0f186552ae745ba8222fc0b5bd456554bfe51c68938f8bc",
50
+ ed25519: "0xe68e0cf7f26c59f963b5846202d2327cc8bc0c4eff8cb9abd4012f9a71decf00",
51
+ bls: Bytes.zero(BLS_KEY_BYTES),
52
+ metadata: Bytes.zero(VALIDATOR_META_BYTES),
53
+ },
54
+ ].map(({ bandersnatch, bls, ed25519, metadata }) => ValidatorData.create({
55
+ bandersnatch: Bytes.parseBytes(bandersnatch, BANDERSNATCH_KEY_BYTES).asOpaque(),
56
+ bls: bls.asOpaque(),
57
+ ed25519: Bytes.parseBytes(ed25519, ED25519_KEY_BYTES).asOpaque(),
58
+ metadata: metadata.asOpaque(),
59
+ }));
60
+ const validators = asKnownSize(validatorDataArray);
61
+ // Expected mock values - these are returned by mocked VRF functions
62
+ const MOCK_SEAL_SIGNATURE = Bytes.fill(BANDERSNATCH_VRF_SIGNATURE_BYTES, 2);
63
+ const MOCK_STATE_ROOT = Bytes.fill(HASH_SIZE, 3);
64
+ const MOCK_PARENT_HASH = Bytes.fill(HASH_SIZE, 0xab);
65
+ // Common test inputs
66
+ const MOCK_BANDERSNATCH_SECRET = Bytes.zero(BANDERSNATCH_KEY_BYTES).asOpaque();
67
+ const MOCK_SEAL_PAYLOAD = asOpaqueType(BytesBlob.blobFromParts(JAM_FALLBACK_SEAL, Bytes.zero(HASH_SIZE).raw));
68
+ // Mock state entropy values
69
+ const MOCK_ENTROPY_0 = Bytes.fill(HASH_SIZE, 10).asOpaque();
70
+ const MOCK_ENTROPY_1 = Bytes.fill(HASH_SIZE, 20).asOpaque();
71
+ const MOCK_ENTROPY_2 = Bytes.fill(HASH_SIZE, 30).asOpaque();
72
+ const MOCK_ENTROPY_3 = Bytes.fill(HASH_SIZE, 40).asOpaque();
73
+ // Mock BlocksDb
74
+ function createMockBlocksDb(headerHash) {
75
+ return {
76
+ getBestHeaderHash: () => headerHash.asOpaque(),
77
+ };
78
+ }
79
+ // Mock StatesDb
80
+ function createMockStatesDb(state) {
81
+ return {
82
+ getState: () => state,
83
+ getStateRoot: () => Promise.resolve(MOCK_STATE_ROOT.asOpaque()),
84
+ };
85
+ }
86
+ function createMockState(timeslot) {
87
+ const bandersnatchKeys = validatorDataArray.map((v) => v.bandersnatch);
88
+ return {
89
+ timeslot: tryAsTimeSlot(timeslot),
90
+ entropy: FixedSizeArray.new([MOCK_ENTROPY_0, MOCK_ENTROPY_1, MOCK_ENTROPY_2, MOCK_ENTROPY_3], 4),
91
+ previousValidatorData: validators,
92
+ currentValidatorData: validators,
93
+ designatedValidatorData: validators,
94
+ nextValidatorData: validators,
95
+ ticketsAccumulator: asKnownSize([]),
96
+ sealingKeySeries: {
97
+ kind: SafroleSealingKeysKind.Keys,
98
+ keys: asKnownSize(bandersnatchKeys),
99
+ },
100
+ epochRoot: Bytes.zero(BANDERSNATCH_RING_ROOT_BYTES).asOpaque(),
101
+ disputesRecords: {
102
+ punishSet: { size: 0, has: () => false },
103
+ },
104
+ };
105
+ }
106
+ /**
107
+ * Creates an expected block based on mock values and provided parameters.
108
+ * Used for asserting generated blocks match expected structure.
109
+ */
110
+ function createExpectedBlock(params) {
111
+ return Block.create({
112
+ header: Header.create({
113
+ parentHeaderHash: MOCK_PARENT_HASH.asOpaque(),
114
+ priorStateRoot: MOCK_STATE_ROOT.asOpaque(),
115
+ extrinsicHash: params.extrinsicHash.asOpaque(),
116
+ timeSlotIndex: params.timeSlot,
117
+ bandersnatchBlockAuthorIndex: params.validatorIndex,
118
+ entropySource: MOCK_SEAL_SIGNATURE.asOpaque(),
119
+ seal: MOCK_SEAL_SIGNATURE.asOpaque(),
120
+ epochMarker: params.epochMarker ?? null,
121
+ ticketsMarker: params.ticketsMarker ?? null,
122
+ offendersMarker: [],
123
+ }),
124
+ extrinsic: Extrinsic.create({
125
+ tickets: asOpaqueType([]),
126
+ preimages: [],
127
+ guarantees: asOpaqueType([]),
128
+ assurances: asOpaqueType([]),
129
+ disputes: DisputesExtrinsic.create({
130
+ verdicts: [],
131
+ culprits: [],
132
+ faults: [],
133
+ }),
134
+ }),
135
+ });
136
+ }
137
+ describe("Generator", () => {
138
+ let blake2b;
139
+ let keccakHasher;
140
+ let bandersnatch;
141
+ beforeEach(async () => {
142
+ await initWasm();
143
+ blake2b = await Blake2b.createHasher();
144
+ keccakHasher = await keccak.KeccakHasher.create();
145
+ bandersnatch = await BandernsatchWasm.new();
146
+ // Mock VRF functions to return predictable results
147
+ mock.method(bandersnatchVrf, "getVrfOutputHash", () => Promise.resolve(Result.ok(Bytes.zero(HASH_SIZE).asOpaque())));
148
+ mock.method(bandersnatchVrf, "generateSeal", () => Promise.resolve(Result.ok(MOCK_SEAL_SIGNATURE.asOpaque())));
149
+ mock.method(bandersnatchVrf, "getRingCommitment", () => Promise.resolve(Result.ok(Bytes.zero(BANDERSNATCH_RING_ROOT_BYTES).asOpaque())));
150
+ });
151
+ afterEach(() => {
152
+ mock.restoreAll();
153
+ });
154
+ describe("nextBlock - fallback mode", () => {
155
+ it("should create block for same-epoch slot", async () => {
156
+ const state = createMockState(0);
157
+ const blocksDb = createMockBlocksDb(MOCK_PARENT_HASH);
158
+ const statesDb = createMockStatesDb(state);
159
+ const generator = new Generator(tinyChainSpec, bandersnatch, keccakHasher, blake2b, blocksDb, statesDb);
160
+ const validatorIndex = tryAsValidatorIndex(0);
161
+ const timeSlot = tryAsTimeSlot(1);
162
+ const block = await generator.nextBlock(validatorIndex, MOCK_BANDERSNATCH_SECRET, MOCK_SEAL_PAYLOAD, timeSlot);
163
+ const expectedBlock = createExpectedBlock({
164
+ timeSlot,
165
+ validatorIndex,
166
+ extrinsicHash: block.header.extrinsicHash,
167
+ });
168
+ deepEqual(block, expectedBlock);
169
+ });
170
+ it("should create block with epoch marker at epoch boundary", async () => {
171
+ // tinyChainSpec.epochLength = 12, so:
172
+ // - timeslot 11 is last slot of epoch 0
173
+ // - timeslot 12 is first slot of epoch 1
174
+ const lastSlotOfEpoch0 = tinyChainSpec.epochLength - 1;
175
+ const firstSlotOfEpoch1 = tinyChainSpec.epochLength;
176
+ const state = createMockState(lastSlotOfEpoch0);
177
+ const blocksDb = createMockBlocksDb(MOCK_PARENT_HASH);
178
+ const statesDb = createMockStatesDb(state);
179
+ const generator = new Generator(tinyChainSpec, bandersnatch, keccakHasher, blake2b, blocksDb, statesDb);
180
+ const validatorIndex = tryAsValidatorIndex(0);
181
+ const timeSlot = tryAsTimeSlot(firstSlotOfEpoch1);
182
+ const block = await generator.nextBlock(validatorIndex, MOCK_BANDERSNATCH_SECRET, MOCK_SEAL_PAYLOAD, timeSlot);
183
+ const expectedEpochMarker = EpochMarker.create({
184
+ entropy: MOCK_ENTROPY_0,
185
+ ticketsEntropy: MOCK_ENTROPY_1,
186
+ validators: asKnownSize(validatorDataArray.map((v) => ValidatorKeys.create({
187
+ bandersnatch: v.bandersnatch,
188
+ ed25519: v.ed25519,
189
+ }))),
190
+ });
191
+ const expectedBlock = createExpectedBlock({
192
+ timeSlot,
193
+ validatorIndex,
194
+ extrinsicHash: block.header.extrinsicHash,
195
+ epochMarker: expectedEpochMarker,
196
+ });
197
+ deepEqual(block, expectedBlock);
198
+ });
199
+ });
200
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/main.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAI9E,KAAK,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAkBlD,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,iBAgKlE"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/main.ts"],"names":[],"mappings":"AA2BA,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,iBAyMlE"}
@@ -1,6 +1,7 @@
1
1
  import { setTimeout } from "node:timers/promises";
2
- import { tryAsTimeSlot, tryAsValidatorIndex, } from "#@typeberry/block";
2
+ import { tryAsEpoch, tryAsTimeSlot, tryAsValidatorIndex, } from "#@typeberry/block";
3
3
  import { BytesBlob } from "#@typeberry/bytes";
4
+ import { HashSet } from "#@typeberry/collections/hash-set.js";
4
5
  import { initWasm } from "#@typeberry/crypto";
5
6
  import { deriveBandersnatchPublicKey, deriveEd25519PublicKey, } from "#@typeberry/crypto/key-derivation.js";
6
7
  import { Blake2b, keccak } from "#@typeberry/hash";
@@ -12,6 +13,7 @@ import { JAM_FALLBACK_SEAL, JAM_TICKET_SEAL } from "#@typeberry/safrole/constant
12
13
  import { SafroleSealingKeysKind } from "#@typeberry/state";
13
14
  import { asOpaqueType, assertNever, Result } from "#@typeberry/utils";
14
15
  import { Generator } from "./generator.js";
16
+ import { generateTickets } from "./ticket-generator.js";
15
17
  const logger = Logger.new(import.meta.filename, "author");
16
18
  export async function main(config, comms) {
17
19
  await initWasm();
@@ -88,6 +90,7 @@ export async function main(config, comms) {
88
90
  }
89
91
  const isFastForward = config.workerParams.isFastForward;
90
92
  let lastGeneratedSlot = startTimeSlot;
93
+ let ticketsGeneratedForEpoch = -1;
91
94
  while (!isFinished) {
92
95
  const hash = blocks.getBestHeaderHash();
93
96
  const state = states.getState(hash);
@@ -110,6 +113,33 @@ export async function main(config, comms) {
110
113
  continue;
111
114
  }
112
115
  const isNewEpoch = isEpochChanged(lastTimeSlot, timeSlot);
116
+ // Generate tickets if within contest period and not yet generated for this epoch
117
+ const epoch = tryAsEpoch(Math.floor(timeSlot / chainSpec.epochLength));
118
+ const slotInEpoch = timeSlot % chainSpec.epochLength;
119
+ const shouldGenerateTickets = slotInEpoch < chainSpec.contestLength && ticketsGeneratedForEpoch !== epoch;
120
+ if (shouldGenerateTickets) {
121
+ const designatedValidatorData = state.designatedValidatorData;
122
+ const ringKeys = designatedValidatorData.map((data) => data.bandersnatch);
123
+ const designatedKeySet = HashSet.from(ringKeys);
124
+ const validatorKeys = keys
125
+ .filter((k) => designatedKeySet.has(k.bandersnatchPublic))
126
+ .map((k) => ({ secret: k.bandersnatchSecret, public: k.bandersnatchPublic }));
127
+ if (validatorKeys.length > 0) {
128
+ // If state is from the previous epoch, entropy hasn't been shifted yet (index 1).
129
+ // After epoch change, it has been shifted to index 2.
130
+ const ticketEntropy = isNewEpoch ? state.entropy[1] : state.entropy[2];
131
+ logger.info `Epoch ${epoch}, slot ${slotInEpoch}/${chainSpec.contestLength}. Generating tickets for ${validatorKeys.length} validators...`;
132
+ const ticketsResult = await generateTickets(bandersnatch, ringKeys, validatorKeys, ticketEntropy, chainSpec.ticketsPerValidator);
133
+ if (ticketsResult.isError) {
134
+ logger.warn `Failed to generate tickets for epoch ${epoch}: ${ticketsResult.error}`;
135
+ }
136
+ else {
137
+ logger.log `Generated ${ticketsResult.ok.length} tickets for epoch ${epoch}.`;
138
+ // TODO [MaSi]: Sending out tickets
139
+ }
140
+ }
141
+ ticketsGeneratedForEpoch = epoch;
142
+ }
113
143
  const selingKeySeriesResult = await getSealingKeySeries(isNewEpoch, timeSlot, state);
114
144
  if (selingKeySeriesResult.isError) {
115
145
  continue;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeberry/block-authorship",
3
- "version": "0.5.4",
3
+ "version": "0.5.5",
4
4
  "description": "A test block generator simulating blocks received over the network.",
5
5
  "main": "index.ts",
6
6
  "dependencies": {
@@ -26,7 +26,7 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
26
26
  }>>>;
27
27
  }> | null>;
28
28
  ticketsMarker: import("@typeberry/codec").Descriptor<import("@typeberry/block").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("@typeberry/block").TicketsMarker, {
29
- tickets: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/tickets.js").Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<import("@typeberry/block/tickets.js").Ticket, import("@typeberry/codec").ViewOf<import("@typeberry/block/tickets.js").Ticket, {
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
31
  attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U8>;
32
32
  }>>>;
@@ -37,24 +37,24 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
37
37
  seal: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<96> & import("@typeberry/utils").WithOpaque<"BandersnatchVrfSignature">, import("@typeberry/bytes").Bytes<96>>;
38
38
  }>>;
39
39
  extrinsic: import("@typeberry/codec").Descriptor<import("@typeberry/block").Extrinsic, import("@typeberry/codec").ViewOf<import("@typeberry/block").Extrinsic, {
40
- tickets: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/tickets.js").SignedTicket[] & import("@typeberry/utils").WithOpaque<"Size: [0..chainSpec.maxTicketsPerExtrinsic)">, import("@typeberry/codec").SequenceView<import("@typeberry/block/tickets.js").SignedTicket, import("@typeberry/codec").ViewOf<import("@typeberry/block/tickets.js").SignedTicket, {
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
41
  attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U8>;
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
- preimages: import("@typeberry/codec").Descriptor<import("@typeberry/block/preimage.js").Preimage[], import("@typeberry/codec").SequenceView<import("@typeberry/block/preimage.js").Preimage, import("@typeberry/codec").ViewOf<import("@typeberry/block/preimage.js").Preimage, {
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, {
45
45
  requester: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"ServiceId[u32]">, import("@typeberry/bytes").Bytes<4>>;
46
46
  blob: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").BytesBlob, import("@typeberry/bytes").BytesBlob>;
47
47
  }>>>;
48
- guarantees: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/guarantees.js").ReportGuarantee[] & import("@typeberry/utils").WithOpaque<"[0..CoresCount)">, import("@typeberry/codec").SequenceView<import("@typeberry/block/guarantees.js").ReportGuarantee, import("@typeberry/codec").ViewOf<import("@typeberry/block/guarantees.js").ReportGuarantee, {
49
- report: import("@typeberry/codec").Descriptor<import("@typeberry/block/work-report.js").WorkReport, import("@typeberry/codec").ViewOf<import("@typeberry/block/work-report.js").WorkReport, {
50
- workPackageSpec: import("@typeberry/codec").Descriptor<import("@typeberry/block/work-report.js").WorkPackageSpec, import("@typeberry/codec").ViewOf<import("@typeberry/block/work-report.js").WorkPackageSpec, {
48
+ guarantees: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").ReportGuarantee[] & import("@typeberry/utils").WithOpaque<"[0..CoresCount)">, import("@typeberry/codec").SequenceView<import("@typeberry/block").ReportGuarantee, import("@typeberry/codec").ViewOf<import("@typeberry/block").ReportGuarantee, {
49
+ report: import("@typeberry/codec").Descriptor<import("@typeberry/block").WorkReport, import("@typeberry/codec").ViewOf<import("@typeberry/block").WorkReport, {
50
+ workPackageSpec: import("@typeberry/codec").Descriptor<import("@typeberry/block").WorkPackageSpec, import("@typeberry/codec").ViewOf<import("@typeberry/block").WorkPackageSpec, {
51
51
  hash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"WorkPackageHash">, import("@typeberry/bytes").Bytes<32>>;
52
52
  length: import("@typeberry/codec").Descriptor<import("@typeberry/numbers").U32, import("@typeberry/bytes").Bytes<4>>;
53
53
  erasureRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
54
54
  exportsRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"ExportsRootHash">, import("@typeberry/bytes").Bytes<32>>;
55
55
  exportsCount: import("@typeberry/codec").Descriptor<import("@typeberry/numbers").U16, import("@typeberry/bytes").Bytes<2>>;
56
56
  }>>;
57
- context: import("@typeberry/codec").Descriptor<import("@typeberry/block/refine-context.js").RefineContext, import("@typeberry/codec").ViewOf<import("@typeberry/block/refine-context.js").RefineContext, {
57
+ context: import("@typeberry/codec").Descriptor<import("@typeberry/block").RefineContext, import("@typeberry/codec").ViewOf<import("@typeberry/block").RefineContext, {
58
58
  anchor: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"HeaderHash">, import("@typeberry/bytes").Bytes<32>>;
59
59
  stateRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"StateRootHash">, import("@typeberry/bytes").Bytes<32>>;
60
60
  beefyRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"BeefyHash">, import("@typeberry/bytes").Bytes<32>>;
@@ -66,32 +66,32 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
66
66
  authorizerHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"AuthorizerHash">, import("@typeberry/bytes").Bytes<32>>;
67
67
  authorizationGasUsed: import("@typeberry/codec").Descriptor<bigint & import("@typeberry/numbers").WithBytesRepresentation<8> & import("@typeberry/utils").WithOpaque<"ServiceGas[u64]">, import("@typeberry/numbers").U64>;
68
68
  authorizationOutput: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").BytesBlob, import("@typeberry/bytes").BytesBlob>;
69
- segmentRootLookup: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/refine-context.js").WorkPackageInfo[], import("@typeberry/codec").SequenceView<import("@typeberry/block/refine-context.js").WorkPackageInfo, import("@typeberry/codec").ViewOf<import("@typeberry/block/refine-context.js").WorkPackageInfo, {
69
+ segmentRootLookup: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").WorkPackageInfo[], import("@typeberry/codec").SequenceView<import("@typeberry/block").WorkPackageInfo, import("@typeberry/codec").ViewOf<import("@typeberry/block").WorkPackageInfo, {
70
70
  workPackageHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"WorkPackageHash">, import("@typeberry/bytes").Bytes<32>>;
71
71
  segmentTreeRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"ExportsRootHash">, import("@typeberry/bytes").Bytes<32>>;
72
72
  }>>>;
73
- results: import("@typeberry/codec").Descriptor<import("@typeberry/collections").FixedSizeArray<import("@typeberry/block/work-result.js").WorkResult, import("@typeberry/numbers").U8>, import("@typeberry/codec").SequenceView<import("@typeberry/block/work-result.js").WorkResult, import("@typeberry/codec").ViewOf<import("@typeberry/block/work-result.js").WorkResult, {
73
+ results: import("@typeberry/codec").Descriptor<import("@typeberry/collections").FixedSizeArray<import("@typeberry/block").WorkResult, import("@typeberry/numbers").U8>, import("@typeberry/codec").SequenceView<import("@typeberry/block").WorkResult, import("@typeberry/codec").ViewOf<import("@typeberry/block").WorkResult, {
74
74
  serviceId: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"ServiceId[u32]">, import("@typeberry/bytes").Bytes<4>>;
75
75
  codeHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"CodeHash">, import("@typeberry/bytes").Bytes<32>>;
76
76
  payloadHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
77
77
  gas: import("@typeberry/codec").Descriptor<bigint & import("@typeberry/numbers").WithBytesRepresentation<8> & import("@typeberry/utils").WithOpaque<"ServiceGas[u64]">, import("@typeberry/bytes").Bytes<8>>;
78
- result: import("@typeberry/codec").Descriptor<import("@typeberry/block/work-result.js").WorkExecResult, {
79
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.ok;
78
+ result: import("@typeberry/codec").Descriptor<import("@typeberry/block").WorkExecResult, {
79
+ kind: import("@typeberry/block").WorkExecResultKind.ok;
80
80
  okBlob: import("@typeberry/bytes").BytesBlob;
81
81
  } | {
82
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.outOfGas;
82
+ kind: import("@typeberry/block").WorkExecResultKind.outOfGas;
83
83
  } | {
84
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.panic;
84
+ kind: import("@typeberry/block").WorkExecResultKind.panic;
85
85
  } | {
86
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.incorrectNumberOfExports;
86
+ kind: import("@typeberry/block").WorkExecResultKind.incorrectNumberOfExports;
87
87
  } | {
88
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.digestTooBig;
88
+ kind: import("@typeberry/block").WorkExecResultKind.digestTooBig;
89
89
  } | {
90
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.badCode;
90
+ kind: import("@typeberry/block").WorkExecResultKind.badCode;
91
91
  } | {
92
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.codeOversize;
92
+ kind: import("@typeberry/block").WorkExecResultKind.codeOversize;
93
93
  }>;
94
- load: import("@typeberry/codec").Descriptor<import("@typeberry/block/work-result.js").WorkRefineLoad, import("@typeberry/codec").ViewOf<import("@typeberry/block/work-result.js").WorkRefineLoad, {
94
+ load: import("@typeberry/codec").Descriptor<import("@typeberry/block").WorkRefineLoad, import("@typeberry/codec").ViewOf<import("@typeberry/block").WorkRefineLoad, {
95
95
  gasUsed: import("@typeberry/codec").Descriptor<bigint & import("@typeberry/numbers").WithBytesRepresentation<8> & import("@typeberry/utils").WithOpaque<"ServiceGas[u64]">, import("@typeberry/numbers").U64>;
96
96
  importedSegments: import("@typeberry/codec").Descriptor<import("@typeberry/numbers").U32, import("@typeberry/numbers").U32>;
97
97
  extrinsicCount: import("@typeberry/codec").Descriptor<import("@typeberry/numbers").U32, import("@typeberry/numbers").U32>;
@@ -101,33 +101,33 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
101
101
  }>>>;
102
102
  }>>;
103
103
  slot: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"TimeSlot[u32]">, import("@typeberry/bytes").Bytes<4>>;
104
- credentials: import("@typeberry/codec").Descriptor<(readonly import("@typeberry/block/guarantees.js").Credential[] & import("@typeberry/utils").WithOpaque<"2">) | (readonly import("@typeberry/block/guarantees.js").Credential[] & import("@typeberry/utils").WithOpaque<"3">), import("@typeberry/codec").SequenceView<import("@typeberry/block/guarantees.js").Credential, import("@typeberry/codec").ViewOf<import("@typeberry/block/guarantees.js").Credential, {
104
+ credentials: import("@typeberry/codec").Descriptor<(readonly import("@typeberry/block").Credential[] & import("@typeberry/utils").WithOpaque<"2">) | (readonly import("@typeberry/block").Credential[] & import("@typeberry/utils").WithOpaque<"3">), import("@typeberry/codec").SequenceView<import("@typeberry/block").Credential, import("@typeberry/codec").ViewOf<import("@typeberry/block").Credential, {
105
105
  validatorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
106
106
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<64> & import("@typeberry/utils").WithOpaque<"Ed25519Signature">, import("@typeberry/bytes").Bytes<64>>;
107
107
  }>>>;
108
108
  }>>>;
109
- assurances: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/assurances.js").AvailabilityAssurance[] & import("@typeberry/utils").WithOpaque<"[0 .. ValidatorsCount)">, import("@typeberry/codec").SequenceView<import("@typeberry/block/assurances.js").AvailabilityAssurance, import("@typeberry/codec").ViewOf<import("@typeberry/block/assurances.js").AvailabilityAssurance, {
109
+ assurances: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").AvailabilityAssurance[] & import("@typeberry/utils").WithOpaque<"[0 .. ValidatorsCount)">, import("@typeberry/codec").SequenceView<import("@typeberry/block").AvailabilityAssurance, import("@typeberry/codec").ViewOf<import("@typeberry/block").AvailabilityAssurance, {
110
110
  anchor: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"HeaderHash">, import("@typeberry/bytes").Bytes<32>>;
111
111
  bitfield: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").BitVec, import("@typeberry/bytes").BitVec>;
112
112
  validatorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
113
113
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<64> & import("@typeberry/utils").WithOpaque<"Ed25519Signature">, import("@typeberry/bytes").Bytes<64>>;
114
114
  }>>>;
115
- disputes: import("@typeberry/codec").Descriptor<import("@typeberry/block/disputes.js").DisputesExtrinsic, import("@typeberry/codec").ViewOf<import("@typeberry/block/disputes.js").DisputesExtrinsic, {
116
- verdicts: import("@typeberry/codec").Descriptor<import("@typeberry/block/disputes.js").Verdict[], import("@typeberry/codec").SequenceView<import("@typeberry/block/disputes.js").Verdict, import("@typeberry/codec").ViewOf<import("@typeberry/block/disputes.js").Verdict, {
115
+ disputes: import("@typeberry/codec").Descriptor<import("@typeberry/block").DisputesExtrinsic, import("@typeberry/codec").ViewOf<import("@typeberry/block").DisputesExtrinsic, {
116
+ verdicts: import("@typeberry/codec").Descriptor<import("@typeberry/block").Verdict[], import("@typeberry/codec").SequenceView<import("@typeberry/block").Verdict, import("@typeberry/codec").ViewOf<import("@typeberry/block").Verdict, {
117
117
  workReportHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"WorkReportHash">, import("@typeberry/bytes").Bytes<32>>;
118
118
  votesEpoch: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"Epoch">, import("@typeberry/bytes").Bytes<4>>;
119
- votes: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/disputes.js").Judgement[] & import("@typeberry/utils").WithOpaque<"Validators super majority">, import("@typeberry/codec").SequenceView<import("@typeberry/block/disputes.js").Judgement, import("@typeberry/codec").ViewOf<import("@typeberry/block/disputes.js").Judgement, {
119
+ votes: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").Judgement[] & import("@typeberry/utils").WithOpaque<"Validators super majority">, import("@typeberry/codec").SequenceView<import("@typeberry/block").Judgement, import("@typeberry/codec").ViewOf<import("@typeberry/block").Judgement, {
120
120
  isWorkReportValid: import("@typeberry/codec").Descriptor<boolean, boolean>;
121
121
  index: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
122
122
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<64> & import("@typeberry/utils").WithOpaque<"Ed25519Signature">, import("@typeberry/bytes").Bytes<64>>;
123
123
  }>>>;
124
124
  }>>>;
125
- culprits: import("@typeberry/codec").Descriptor<import("@typeberry/block/disputes.js").Culprit[], import("@typeberry/codec").SequenceView<import("@typeberry/block/disputes.js").Culprit, import("@typeberry/codec").ViewOf<import("@typeberry/block/disputes.js").Culprit, {
125
+ culprits: import("@typeberry/codec").Descriptor<import("@typeberry/block").Culprit[], import("@typeberry/codec").SequenceView<import("@typeberry/block").Culprit, import("@typeberry/codec").ViewOf<import("@typeberry/block").Culprit, {
126
126
  workReportHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"WorkReportHash">, import("@typeberry/bytes").Bytes<32>>;
127
127
  key: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"Ed25519Key">, import("@typeberry/bytes").Bytes<32>>;
128
128
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<64> & import("@typeberry/utils").WithOpaque<"Ed25519Signature">, import("@typeberry/bytes").Bytes<64>>;
129
129
  }>>>;
130
- faults: import("@typeberry/codec").Descriptor<import("@typeberry/block/disputes.js").Fault[], import("@typeberry/codec").SequenceView<import("@typeberry/block/disputes.js").Fault, import("@typeberry/codec").ViewOf<import("@typeberry/block/disputes.js").Fault, {
130
+ faults: import("@typeberry/codec").Descriptor<import("@typeberry/block").Fault[], import("@typeberry/codec").SequenceView<import("@typeberry/block").Fault, import("@typeberry/codec").ViewOf<import("@typeberry/block").Fault, {
131
131
  workReportHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"WorkReportHash">, import("@typeberry/bytes").Bytes<32>>;
132
132
  wasConsideredValid: import("@typeberry/codec").Descriptor<boolean, boolean>;
133
133
  key: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"Ed25519Key">, import("@typeberry/bytes").Bytes<32>>;
@@ -150,7 +150,7 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
150
150
  }>>>;
151
151
  }> | null>;
152
152
  ticketsMarker: import("@typeberry/codec").Descriptor<import("@typeberry/block").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("@typeberry/block").TicketsMarker, {
153
- tickets: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/tickets.js").Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<import("@typeberry/block/tickets.js").Ticket, import("@typeberry/codec").ViewOf<import("@typeberry/block/tickets.js").Ticket, {
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
155
  attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U8>;
156
156
  }>>>;
@@ -161,24 +161,24 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
161
161
  seal: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<96> & import("@typeberry/utils").WithOpaque<"BandersnatchVrfSignature">, import("@typeberry/bytes").Bytes<96>>;
162
162
  }>>;
163
163
  extrinsic: import("@typeberry/codec").Descriptor<import("@typeberry/block").Extrinsic, import("@typeberry/codec").ViewOf<import("@typeberry/block").Extrinsic, {
164
- tickets: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/tickets.js").SignedTicket[] & import("@typeberry/utils").WithOpaque<"Size: [0..chainSpec.maxTicketsPerExtrinsic)">, import("@typeberry/codec").SequenceView<import("@typeberry/block/tickets.js").SignedTicket, import("@typeberry/codec").ViewOf<import("@typeberry/block/tickets.js").SignedTicket, {
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
165
  attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U8>;
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
- preimages: import("@typeberry/codec").Descriptor<import("@typeberry/block/preimage.js").Preimage[], import("@typeberry/codec").SequenceView<import("@typeberry/block/preimage.js").Preimage, import("@typeberry/codec").ViewOf<import("@typeberry/block/preimage.js").Preimage, {
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, {
169
169
  requester: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"ServiceId[u32]">, import("@typeberry/bytes").Bytes<4>>;
170
170
  blob: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").BytesBlob, import("@typeberry/bytes").BytesBlob>;
171
171
  }>>>;
172
- guarantees: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/guarantees.js").ReportGuarantee[] & import("@typeberry/utils").WithOpaque<"[0..CoresCount)">, import("@typeberry/codec").SequenceView<import("@typeberry/block/guarantees.js").ReportGuarantee, import("@typeberry/codec").ViewOf<import("@typeberry/block/guarantees.js").ReportGuarantee, {
173
- report: import("@typeberry/codec").Descriptor<import("@typeberry/block/work-report.js").WorkReport, import("@typeberry/codec").ViewOf<import("@typeberry/block/work-report.js").WorkReport, {
174
- workPackageSpec: import("@typeberry/codec").Descriptor<import("@typeberry/block/work-report.js").WorkPackageSpec, import("@typeberry/codec").ViewOf<import("@typeberry/block/work-report.js").WorkPackageSpec, {
172
+ guarantees: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").ReportGuarantee[] & import("@typeberry/utils").WithOpaque<"[0..CoresCount)">, import("@typeberry/codec").SequenceView<import("@typeberry/block").ReportGuarantee, import("@typeberry/codec").ViewOf<import("@typeberry/block").ReportGuarantee, {
173
+ report: import("@typeberry/codec").Descriptor<import("@typeberry/block").WorkReport, import("@typeberry/codec").ViewOf<import("@typeberry/block").WorkReport, {
174
+ workPackageSpec: import("@typeberry/codec").Descriptor<import("@typeberry/block").WorkPackageSpec, import("@typeberry/codec").ViewOf<import("@typeberry/block").WorkPackageSpec, {
175
175
  hash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"WorkPackageHash">, import("@typeberry/bytes").Bytes<32>>;
176
176
  length: import("@typeberry/codec").Descriptor<import("@typeberry/numbers").U32, import("@typeberry/bytes").Bytes<4>>;
177
177
  erasureRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
178
178
  exportsRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"ExportsRootHash">, import("@typeberry/bytes").Bytes<32>>;
179
179
  exportsCount: import("@typeberry/codec").Descriptor<import("@typeberry/numbers").U16, import("@typeberry/bytes").Bytes<2>>;
180
180
  }>>;
181
- context: import("@typeberry/codec").Descriptor<import("@typeberry/block/refine-context.js").RefineContext, import("@typeberry/codec").ViewOf<import("@typeberry/block/refine-context.js").RefineContext, {
181
+ context: import("@typeberry/codec").Descriptor<import("@typeberry/block").RefineContext, import("@typeberry/codec").ViewOf<import("@typeberry/block").RefineContext, {
182
182
  anchor: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"HeaderHash">, import("@typeberry/bytes").Bytes<32>>;
183
183
  stateRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"StateRootHash">, import("@typeberry/bytes").Bytes<32>>;
184
184
  beefyRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"BeefyHash">, import("@typeberry/bytes").Bytes<32>>;
@@ -190,32 +190,32 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
190
190
  authorizerHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"AuthorizerHash">, import("@typeberry/bytes").Bytes<32>>;
191
191
  authorizationGasUsed: import("@typeberry/codec").Descriptor<bigint & import("@typeberry/numbers").WithBytesRepresentation<8> & import("@typeberry/utils").WithOpaque<"ServiceGas[u64]">, import("@typeberry/numbers").U64>;
192
192
  authorizationOutput: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").BytesBlob, import("@typeberry/bytes").BytesBlob>;
193
- segmentRootLookup: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/refine-context.js").WorkPackageInfo[], import("@typeberry/codec").SequenceView<import("@typeberry/block/refine-context.js").WorkPackageInfo, import("@typeberry/codec").ViewOf<import("@typeberry/block/refine-context.js").WorkPackageInfo, {
193
+ segmentRootLookup: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").WorkPackageInfo[], import("@typeberry/codec").SequenceView<import("@typeberry/block").WorkPackageInfo, import("@typeberry/codec").ViewOf<import("@typeberry/block").WorkPackageInfo, {
194
194
  workPackageHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"WorkPackageHash">, import("@typeberry/bytes").Bytes<32>>;
195
195
  segmentTreeRoot: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"ExportsRootHash">, import("@typeberry/bytes").Bytes<32>>;
196
196
  }>>>;
197
- results: import("@typeberry/codec").Descriptor<import("@typeberry/collections").FixedSizeArray<import("@typeberry/block/work-result.js").WorkResult, import("@typeberry/numbers").U8>, import("@typeberry/codec").SequenceView<import("@typeberry/block/work-result.js").WorkResult, import("@typeberry/codec").ViewOf<import("@typeberry/block/work-result.js").WorkResult, {
197
+ results: import("@typeberry/codec").Descriptor<import("@typeberry/collections").FixedSizeArray<import("@typeberry/block").WorkResult, import("@typeberry/numbers").U8>, import("@typeberry/codec").SequenceView<import("@typeberry/block").WorkResult, import("@typeberry/codec").ViewOf<import("@typeberry/block").WorkResult, {
198
198
  serviceId: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"ServiceId[u32]">, import("@typeberry/bytes").Bytes<4>>;
199
199
  codeHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"CodeHash">, import("@typeberry/bytes").Bytes<32>>;
200
200
  payloadHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
201
201
  gas: import("@typeberry/codec").Descriptor<bigint & import("@typeberry/numbers").WithBytesRepresentation<8> & import("@typeberry/utils").WithOpaque<"ServiceGas[u64]">, import("@typeberry/bytes").Bytes<8>>;
202
- result: import("@typeberry/codec").Descriptor<import("@typeberry/block/work-result.js").WorkExecResult, {
203
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.ok;
202
+ result: import("@typeberry/codec").Descriptor<import("@typeberry/block").WorkExecResult, {
203
+ kind: import("@typeberry/block").WorkExecResultKind.ok;
204
204
  okBlob: import("@typeberry/bytes").BytesBlob;
205
205
  } | {
206
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.outOfGas;
206
+ kind: import("@typeberry/block").WorkExecResultKind.outOfGas;
207
207
  } | {
208
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.panic;
208
+ kind: import("@typeberry/block").WorkExecResultKind.panic;
209
209
  } | {
210
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.incorrectNumberOfExports;
210
+ kind: import("@typeberry/block").WorkExecResultKind.incorrectNumberOfExports;
211
211
  } | {
212
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.digestTooBig;
212
+ kind: import("@typeberry/block").WorkExecResultKind.digestTooBig;
213
213
  } | {
214
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.badCode;
214
+ kind: import("@typeberry/block").WorkExecResultKind.badCode;
215
215
  } | {
216
- kind: import("@typeberry/block/work-result.js").WorkExecResultKind.codeOversize;
216
+ kind: import("@typeberry/block").WorkExecResultKind.codeOversize;
217
217
  }>;
218
- load: import("@typeberry/codec").Descriptor<import("@typeberry/block/work-result.js").WorkRefineLoad, import("@typeberry/codec").ViewOf<import("@typeberry/block/work-result.js").WorkRefineLoad, {
218
+ load: import("@typeberry/codec").Descriptor<import("@typeberry/block").WorkRefineLoad, import("@typeberry/codec").ViewOf<import("@typeberry/block").WorkRefineLoad, {
219
219
  gasUsed: import("@typeberry/codec").Descriptor<bigint & import("@typeberry/numbers").WithBytesRepresentation<8> & import("@typeberry/utils").WithOpaque<"ServiceGas[u64]">, import("@typeberry/numbers").U64>;
220
220
  importedSegments: import("@typeberry/codec").Descriptor<import("@typeberry/numbers").U32, import("@typeberry/numbers").U32>;
221
221
  extrinsicCount: import("@typeberry/codec").Descriptor<import("@typeberry/numbers").U32, import("@typeberry/numbers").U32>;
@@ -225,33 +225,33 @@ export declare const protocol: import("@typeberry/workers-api").LousyProtocol<{
225
225
  }>>>;
226
226
  }>>;
227
227
  slot: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"TimeSlot[u32]">, import("@typeberry/bytes").Bytes<4>>;
228
- credentials: import("@typeberry/codec").Descriptor<(readonly import("@typeberry/block/guarantees.js").Credential[] & import("@typeberry/utils").WithOpaque<"2">) | (readonly import("@typeberry/block/guarantees.js").Credential[] & import("@typeberry/utils").WithOpaque<"3">), import("@typeberry/codec").SequenceView<import("@typeberry/block/guarantees.js").Credential, import("@typeberry/codec").ViewOf<import("@typeberry/block/guarantees.js").Credential, {
228
+ credentials: import("@typeberry/codec").Descriptor<(readonly import("@typeberry/block").Credential[] & import("@typeberry/utils").WithOpaque<"2">) | (readonly import("@typeberry/block").Credential[] & import("@typeberry/utils").WithOpaque<"3">), import("@typeberry/codec").SequenceView<import("@typeberry/block").Credential, import("@typeberry/codec").ViewOf<import("@typeberry/block").Credential, {
229
229
  validatorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
230
230
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<64> & import("@typeberry/utils").WithOpaque<"Ed25519Signature">, import("@typeberry/bytes").Bytes<64>>;
231
231
  }>>>;
232
232
  }>>>;
233
- assurances: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/assurances.js").AvailabilityAssurance[] & import("@typeberry/utils").WithOpaque<"[0 .. ValidatorsCount)">, import("@typeberry/codec").SequenceView<import("@typeberry/block/assurances.js").AvailabilityAssurance, import("@typeberry/codec").ViewOf<import("@typeberry/block/assurances.js").AvailabilityAssurance, {
233
+ assurances: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").AvailabilityAssurance[] & import("@typeberry/utils").WithOpaque<"[0 .. ValidatorsCount)">, import("@typeberry/codec").SequenceView<import("@typeberry/block").AvailabilityAssurance, import("@typeberry/codec").ViewOf<import("@typeberry/block").AvailabilityAssurance, {
234
234
  anchor: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"HeaderHash">, import("@typeberry/bytes").Bytes<32>>;
235
235
  bitfield: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").BitVec, import("@typeberry/bytes").BitVec>;
236
236
  validatorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
237
237
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<64> & import("@typeberry/utils").WithOpaque<"Ed25519Signature">, import("@typeberry/bytes").Bytes<64>>;
238
238
  }>>>;
239
- disputes: import("@typeberry/codec").Descriptor<import("@typeberry/block/disputes.js").DisputesExtrinsic, import("@typeberry/codec").ViewOf<import("@typeberry/block/disputes.js").DisputesExtrinsic, {
240
- verdicts: import("@typeberry/codec").Descriptor<import("@typeberry/block/disputes.js").Verdict[], import("@typeberry/codec").SequenceView<import("@typeberry/block/disputes.js").Verdict, import("@typeberry/codec").ViewOf<import("@typeberry/block/disputes.js").Verdict, {
239
+ disputes: import("@typeberry/codec").Descriptor<import("@typeberry/block").DisputesExtrinsic, import("@typeberry/codec").ViewOf<import("@typeberry/block").DisputesExtrinsic, {
240
+ verdicts: import("@typeberry/codec").Descriptor<import("@typeberry/block").Verdict[], import("@typeberry/codec").SequenceView<import("@typeberry/block").Verdict, import("@typeberry/codec").ViewOf<import("@typeberry/block").Verdict, {
241
241
  workReportHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"WorkReportHash">, import("@typeberry/bytes").Bytes<32>>;
242
242
  votesEpoch: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"Epoch">, import("@typeberry/bytes").Bytes<4>>;
243
- votes: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block/disputes.js").Judgement[] & import("@typeberry/utils").WithOpaque<"Validators super majority">, import("@typeberry/codec").SequenceView<import("@typeberry/block/disputes.js").Judgement, import("@typeberry/codec").ViewOf<import("@typeberry/block/disputes.js").Judgement, {
243
+ votes: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").Judgement[] & import("@typeberry/utils").WithOpaque<"Validators super majority">, import("@typeberry/codec").SequenceView<import("@typeberry/block").Judgement, import("@typeberry/codec").ViewOf<import("@typeberry/block").Judgement, {
244
244
  isWorkReportValid: import("@typeberry/codec").Descriptor<boolean, boolean>;
245
245
  index: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
246
246
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<64> & import("@typeberry/utils").WithOpaque<"Ed25519Signature">, import("@typeberry/bytes").Bytes<64>>;
247
247
  }>>>;
248
248
  }>>>;
249
- culprits: import("@typeberry/codec").Descriptor<import("@typeberry/block/disputes.js").Culprit[], import("@typeberry/codec").SequenceView<import("@typeberry/block/disputes.js").Culprit, import("@typeberry/codec").ViewOf<import("@typeberry/block/disputes.js").Culprit, {
249
+ culprits: import("@typeberry/codec").Descriptor<import("@typeberry/block").Culprit[], import("@typeberry/codec").SequenceView<import("@typeberry/block").Culprit, import("@typeberry/codec").ViewOf<import("@typeberry/block").Culprit, {
250
250
  workReportHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"WorkReportHash">, import("@typeberry/bytes").Bytes<32>>;
251
251
  key: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"Ed25519Key">, import("@typeberry/bytes").Bytes<32>>;
252
252
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<64> & import("@typeberry/utils").WithOpaque<"Ed25519Signature">, import("@typeberry/bytes").Bytes<64>>;
253
253
  }>>>;
254
- faults: import("@typeberry/codec").Descriptor<import("@typeberry/block/disputes.js").Fault[], import("@typeberry/codec").SequenceView<import("@typeberry/block/disputes.js").Fault, import("@typeberry/codec").ViewOf<import("@typeberry/block/disputes.js").Fault, {
254
+ faults: import("@typeberry/codec").Descriptor<import("@typeberry/block").Fault[], import("@typeberry/codec").SequenceView<import("@typeberry/block").Fault, import("@typeberry/codec").ViewOf<import("@typeberry/block").Fault, {
255
255
  workReportHash: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"WorkReportHash">, import("@typeberry/bytes").Bytes<32>>;
256
256
  wasConsideredValid: import("@typeberry/codec").Descriptor<boolean, boolean>;
257
257
  key: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"Ed25519Key">, import("@typeberry/bytes").Bytes<32>>;