@typeberry/lib 0.5.9 → 0.5.10-47fe638

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/package.json +1 -1
  2. package/packages/jam/block/block.d.ts +3 -3
  3. package/packages/jam/block/header.d.ts +6 -6
  4. package/packages/jam/block/test-helpers.d.ts +2 -2
  5. package/packages/jam/block/tickets.d.ts +5 -6
  6. package/packages/jam/block/tickets.d.ts.map +1 -1
  7. package/packages/jam/block/tickets.js +2 -10
  8. package/packages/jam/block/work-item-segment.d.ts +23 -6
  9. package/packages/jam/block/work-item-segment.d.ts.map +1 -1
  10. package/packages/jam/block/work-item-segment.js +24 -7
  11. package/packages/jam/block/work-item.d.ts +3 -3
  12. package/packages/jam/block/work-item.d.ts.map +1 -1
  13. package/packages/jam/block/work-item.js +7 -3
  14. package/packages/jam/block/work-package.d.ts +2 -2
  15. package/packages/jam/block/work-package.d.ts.map +1 -1
  16. package/packages/jam/block/work-package.js +2 -6
  17. package/packages/jam/block-json/block.d.ts +2 -2
  18. package/packages/jam/block-json/block.js +1 -1
  19. package/packages/jam/block-json/common.d.ts +1 -2
  20. package/packages/jam/block-json/common.d.ts.map +1 -1
  21. package/packages/jam/block-json/common.js +2 -2
  22. package/packages/jam/block-json/extrinsic.js +1 -1
  23. package/packages/jam/block-json/header.d.ts +1 -2
  24. package/packages/jam/block-json/header.d.ts.map +1 -1
  25. package/packages/jam/block-json/header.js +32 -34
  26. package/packages/jam/block-json/tickets-extrinsic.d.ts +1 -2
  27. package/packages/jam/block-json/tickets-extrinsic.d.ts.map +1 -1
  28. package/packages/jam/block-json/tickets-extrinsic.js +5 -7
  29. package/packages/jam/block-json/work-result.js +2 -2
  30. package/packages/jam/database/blocks.d.ts +3 -0
  31. package/packages/jam/database/blocks.d.ts.map +1 -1
  32. package/packages/jam/database/blocks.js +5 -0
  33. package/packages/jam/database-lmdb/blocks.d.ts +1 -0
  34. package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
  35. package/packages/jam/database-lmdb/blocks.js +5 -0
  36. package/packages/jam/database-lmdb/states.js +1 -1
  37. package/packages/jam/executor/pvm-executor.d.ts +2 -2
  38. package/packages/jam/executor/pvm-executor.d.ts.map +1 -1
  39. package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
  40. package/packages/jam/in-core/externalities/refine.d.ts +27 -6
  41. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
  42. package/packages/jam/in-core/externalities/refine.js +40 -7
  43. package/packages/jam/in-core/externalities/refine.test.d.ts +2 -0
  44. package/packages/jam/in-core/externalities/refine.test.d.ts.map +1 -0
  45. package/packages/jam/in-core/externalities/refine.test.js +163 -0
  46. package/packages/jam/in-core/in-core.d.ts +1 -1
  47. package/packages/jam/in-core/in-core.d.ts.map +1 -1
  48. package/packages/jam/in-core/in-core.js +16 -10
  49. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +2 -0
  50. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
  51. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts +2 -0
  52. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts.map +1 -1
  53. package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +5 -0
  54. package/packages/jam/jam-host-calls/general/fetch.d.ts +159 -98
  55. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  56. package/packages/jam/jam-host-calls/general/fetch.js +110 -16
  57. package/packages/jam/jam-host-calls/general/fetch.test.js +87 -56
  58. package/packages/jam/jam-host-calls/refine/export.d.ts +1 -1
  59. package/packages/jam/jam-host-calls/refine/export.js +1 -1
  60. package/packages/jam/jam-host-calls/refine/export.test.js +3 -0
  61. package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +1 -1
  62. package/packages/jam/jam-host-calls/refine/historical-lookup.js +1 -1
  63. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +1 -1
  64. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +1 -1
  65. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +1 -1
  66. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  67. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
  68. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  69. package/packages/jam/node/main-fuzz.js +1 -0
  70. package/packages/jam/node/main-importer.d.ts +1 -0
  71. package/packages/jam/node/main-importer.d.ts.map +1 -1
  72. package/packages/jam/node/main-importer.js +1 -0
  73. package/packages/jam/node/main.d.ts.map +1 -1
  74. package/packages/jam/node/main.js +1 -0
  75. package/packages/jam/node/reader.d.ts +2 -2
  76. package/packages/jam/node/workers.d.ts +22 -22
  77. package/packages/jam/safrole/bandersnatch-vrf.d.ts +1 -2
  78. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  79. package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
  80. package/packages/jam/safrole/bandersnatch-vrf.test.js +2 -3
  81. package/packages/jam/safrole/safrole.test.js +72 -80
  82. package/packages/jam/state/safrole-data.d.ts +1 -1
  83. package/packages/jam/state/test.utils.js +1 -1
  84. package/packages/jam/state-json/dump.js +2 -2
  85. package/packages/jam/state-json/safrole.d.ts +2 -2
  86. package/packages/jam/state-json/safrole.d.ts.map +1 -1
  87. package/packages/jam/state-json/safrole.js +4 -4
  88. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
  89. package/packages/jam/state-vectors/index.d.ts +7 -8
  90. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  91. package/packages/jam/state-vectors/index.js +4 -6
  92. package/packages/jam/transition/accumulate/accumulate.js +2 -2
  93. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts +19 -0
  94. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
  95. package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
  96. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
  97. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
  98. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
  99. package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -39
  100. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  101. package/packages/jam/transition/externalities/fetch-externalities.js +2 -88
  102. package/packages/jam/transition/externalities/index.d.ts +2 -0
  103. package/packages/jam/transition/externalities/index.d.ts.map +1 -1
  104. package/packages/jam/transition/externalities/index.js +2 -0
  105. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +23 -0
  106. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -0
  107. package/packages/jam/transition/externalities/refine-fetch-externalities.js +48 -0
  108. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts +2 -0
  109. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts.map +1 -0
  110. package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +32 -0
  111. package/packages/jam/transition/hasher.test.js +1 -1
  112. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  113. package/packages/workers/block-authorship/main.js +1 -1
  114. package/packages/workers/block-authorship/protocol.d.ts +4 -4
  115. package/packages/workers/block-authorship/ticket-generator.d.ts +1 -2
  116. package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
  117. package/packages/workers/block-authorship/ticket-generator.js +2 -2
  118. package/packages/workers/block-authorship/ticket-generator.test.js +10 -11
  119. package/packages/workers/comms-authorship-network/protocol.d.ts +1 -1
  120. package/packages/workers/comms-authorship-network/tickets-message.d.ts +1 -1
  121. package/packages/workers/importer/importer.d.ts +1 -0
  122. package/packages/workers/importer/importer.d.ts.map +1 -1
  123. package/packages/workers/importer/importer.js +7 -2
  124. package/packages/workers/importer/main.d.ts.map +1 -1
  125. package/packages/workers/importer/main.js +2 -0
  126. package/packages/workers/importer/protocol.d.ts +12 -9
  127. package/packages/workers/importer/protocol.d.ts.map +1 -1
  128. package/packages/workers/importer/protocol.js +8 -3
  129. package/packages/workers/jam-network/protocol.d.ts +10 -10
  130. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
  131. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
  132. package/packages/jam/transition/externalities/fetch-externalities.test.js +0 -254
@@ -0,0 +1,45 @@
1
+ import { Encoder } from "#@typeberry/codec";
2
+ import { general } from "#@typeberry/jam-host-calls";
3
+ import { getEncodedConstants, TRANSFER_OR_OPERAND, TRANSFERS_AND_OPERANDS, TransferOperandKind, } from "./fetch-externalities.js";
4
+ export class AccumulateFetchExternalities {
5
+ entropyHash;
6
+ transfers;
7
+ operands;
8
+ chainSpec;
9
+ context = general.FetchContext.Accumulate;
10
+ constructor(entropyHash, transfers, operands, chainSpec) {
11
+ this.entropyHash = entropyHash;
12
+ this.transfers = transfers;
13
+ this.operands = operands;
14
+ this.chainSpec = chainSpec;
15
+ }
16
+ constants() {
17
+ return getEncodedConstants(this.chainSpec);
18
+ }
19
+ entropy() {
20
+ return this.entropyHash;
21
+ }
22
+ allTransfersAndOperands() {
23
+ const transfersAndOperands = this.transfers
24
+ .map((transfer) => ({ kind: TransferOperandKind.TRANSFER, value: transfer }))
25
+ .concat(this.operands.map((operand) => ({ kind: TransferOperandKind.OPERAND, value: operand })));
26
+ return Encoder.encodeObject(TRANSFERS_AND_OPERANDS, transfersAndOperands, this.chainSpec);
27
+ }
28
+ oneTransferOrOperand(index) {
29
+ if (index >= this.transfers.length + this.operands.length) {
30
+ return null;
31
+ }
32
+ // Transfers-first ordering, consistent with allTransfersAndOperands()
33
+ const kind = index < this.transfers.length ? TransferOperandKind.TRANSFER : TransferOperandKind.OPERAND;
34
+ const transferOrOperand = kind === TransferOperandKind.TRANSFER
35
+ ? { kind: TransferOperandKind.TRANSFER, value: this.transfers[Number(index)] }
36
+ : {
37
+ kind: TransferOperandKind.OPERAND,
38
+ value: this.operands[Number(index) - this.transfers.length],
39
+ };
40
+ if (transferOrOperand.value === undefined) {
41
+ return null;
42
+ }
43
+ return Encoder.encodeObject(TRANSFER_OR_OPERAND, transferOrOperand, this.chainSpec);
44
+ }
45
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=accumulate-fetch-externalities.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accumulate-fetch-externalities.test.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/accumulate-fetch-externalities.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,192 @@
1
+ import assert from "node:assert";
2
+ import { describe, it } from "node:test";
3
+ import { tryAsServiceGas, tryAsServiceId } from "#@typeberry/block";
4
+ import { WorkExecResult } from "#@typeberry/block/work-result.js";
5
+ import { Bytes, BytesBlob } from "#@typeberry/bytes";
6
+ import { codec, Encoder } from "#@typeberry/codec";
7
+ import { fullChainSpec, tinyChainSpec } from "#@typeberry/config";
8
+ import { HASH_SIZE } from "#@typeberry/hash";
9
+ import { TRANSFER_MEMO_BYTES } from "#@typeberry/jam-host-calls/externalities/partial-state.js";
10
+ import { PendingTransfer } from "#@typeberry/jam-host-calls/externalities/pending-transfer.js";
11
+ import { tryAsU64 } from "#@typeberry/numbers";
12
+ import { Operand } from "../accumulate/operand.js";
13
+ import { AccumulateFetchExternalities } from "./accumulate-fetch-externalities.js";
14
+ import { TRANSFER_OR_OPERAND, TransferOperandKind } from "./fetch-externalities.js";
15
+ describe("AccumulateFetchExternalities", () => {
16
+ const prepareOperands = (length) => {
17
+ const operands = [];
18
+ for (let i = 0; i < length; i++) {
19
+ operands.push(Operand.create({
20
+ authorizationOutput: BytesBlob.empty(),
21
+ authorizerHash: Bytes.fill(HASH_SIZE, i + 1).asOpaque(),
22
+ exportsRoot: Bytes.fill(HASH_SIZE, i + 2).asOpaque(),
23
+ hash: Bytes.fill(HASH_SIZE, i + 4).asOpaque(),
24
+ payloadHash: Bytes.fill(HASH_SIZE, i + 5).asOpaque(),
25
+ result: WorkExecResult.ok(BytesBlob.empty()),
26
+ gas: tryAsServiceGas(1_000),
27
+ }));
28
+ }
29
+ return operands;
30
+ };
31
+ const prepareTransfers = (length) => {
32
+ const transfers = [];
33
+ for (let i = 0; i < length; i++) {
34
+ transfers.push(PendingTransfer.create({
35
+ amount: tryAsU64(1000),
36
+ source: tryAsServiceId(i),
37
+ destination: tryAsServiceId(i + 1),
38
+ gas: tryAsServiceGas(10),
39
+ memo: Bytes.fill(TRANSFER_MEMO_BYTES, 0),
40
+ }));
41
+ }
42
+ return transfers;
43
+ };
44
+ // allTransfersAndOperands: transfers first, then operands
45
+ const toAllTransfersAndOperands = (operands, transfers) => {
46
+ return [
47
+ ...transfers.map((t) => ({ kind: TransferOperandKind.TRANSFER, value: t })),
48
+ ...operands.map((o) => ({ kind: TransferOperandKind.OPERAND, value: o })),
49
+ ];
50
+ };
51
+ // oneTransferOrOperand: transfers first, then operands (same as allTransfersAndOperands)
52
+ const toOneTransferOrOperandAt = (operands, transfers, index) => {
53
+ if (index >= transfers.length + operands.length) {
54
+ return null;
55
+ }
56
+ if (index < transfers.length) {
57
+ return { kind: TransferOperandKind.TRANSFER, value: transfers[index] };
58
+ }
59
+ return { kind: TransferOperandKind.OPERAND, value: operands[index - transfers.length] };
60
+ };
61
+ const encodeOneTransferOrOperand = (item, chainSpec) => {
62
+ if (item === null) {
63
+ return null;
64
+ }
65
+ return Encoder.encodeObject(TRANSFER_OR_OPERAND, item, chainSpec);
66
+ };
67
+ const prepareAccumulateData = ({ chainSpec, operands, entropy, transfers, }) => {
68
+ const defaultChainSpec = tinyChainSpec;
69
+ const defaultEntropy = Bytes.zero(HASH_SIZE).asOpaque();
70
+ const defaultOperands = [];
71
+ const defaultTransfers = [];
72
+ return new AccumulateFetchExternalities(entropy ?? defaultEntropy, transfers ?? defaultTransfers, operands ?? defaultOperands, chainSpec ?? defaultChainSpec);
73
+ };
74
+ it("should return different constants for different chain specs", () => {
75
+ const tinyFetchExternalities = prepareAccumulateData({ chainSpec: tinyChainSpec });
76
+ const fullFetchExternalities = prepareAccumulateData({ chainSpec: fullChainSpec });
77
+ const tinyConstants = tinyFetchExternalities.constants();
78
+ const fullConstants = fullFetchExternalities.constants();
79
+ assert.notStrictEqual(tinyConstants.length, 0);
80
+ assert.notStrictEqual(fullConstants.length, 0);
81
+ assert.notDeepStrictEqual(tinyConstants, fullConstants);
82
+ });
83
+ it("should return entropy hash", () => {
84
+ const expectedEntropy = Bytes.fill(HASH_SIZE, 5).asOpaque();
85
+ const fetchExternalities = prepareAccumulateData({ entropy: expectedEntropy });
86
+ const entropy = fetchExternalities.entropy();
87
+ assert.deepStrictEqual(entropy, expectedEntropy);
88
+ });
89
+ it("should return all transfers and operands", () => {
90
+ const operands = prepareOperands(3);
91
+ const transfers = prepareTransfers(2);
92
+ const chainSpec = tinyChainSpec;
93
+ const expected = toAllTransfersAndOperands(operands, transfers);
94
+ const encodedExpected = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), expected, chainSpec);
95
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
96
+ const result = fetchExternalities.allTransfersAndOperands();
97
+ assert.deepStrictEqual(result, encodedExpected);
98
+ });
99
+ it("should return empty encoded sequence when no transfers and no operands", () => {
100
+ const chainSpec = tinyChainSpec;
101
+ const encodedExpected = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), [], chainSpec);
102
+ const fetchExternalities = prepareAccumulateData({ operands: [], transfers: [], chainSpec });
103
+ const result = fetchExternalities.allTransfersAndOperands();
104
+ assert.deepStrictEqual(result, encodedExpected);
105
+ });
106
+ it("should return one transfer by index (first range)", () => {
107
+ const operands = prepareOperands(3);
108
+ const transfers = prepareTransfers(2);
109
+ const chainSpec = tinyChainSpec;
110
+ const encodedExpected = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, transfers, 0), chainSpec);
111
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
112
+ // Transfers come first (indices 0..1), then operands (indices 2..4)
113
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(0));
114
+ assert.deepStrictEqual(result, encodedExpected);
115
+ });
116
+ it("should return one operand by index (second range)", () => {
117
+ const operands = prepareOperands(3);
118
+ const transfers = prepareTransfers(2);
119
+ const chainSpec = tinyChainSpec;
120
+ const encodedExpected = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, transfers, 2), chainSpec);
121
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
122
+ // Operands start after transfers, so index 2 is the first operand
123
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(2));
124
+ assert.deepStrictEqual(result, encodedExpected);
125
+ });
126
+ it("should return null when index is out of bounds", () => {
127
+ const operands = prepareOperands(3);
128
+ const transfers = prepareTransfers(2);
129
+ const chainSpec = tinyChainSpec;
130
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
131
+ // Total items: 3 operands + 2 transfers = 5, so index 5 is out of bounds
132
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(5));
133
+ assert.strictEqual(result, null);
134
+ });
135
+ it("should return null when index is far out of bounds", () => {
136
+ const operands = prepareOperands(3);
137
+ const transfers = prepareTransfers(2);
138
+ const chainSpec = tinyChainSpec;
139
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
140
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(153));
141
+ assert.strictEqual(result, null);
142
+ });
143
+ it("should have consistent encoding between all and one", () => {
144
+ const operands = prepareOperands(2);
145
+ const transfers = prepareTransfers(2);
146
+ const chainSpec = tinyChainSpec;
147
+ const allItems = toAllTransfersAndOperands(operands, transfers);
148
+ const encodedAll = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), allItems, chainSpec);
149
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
150
+ const all = fetchExternalities.allTransfersAndOperands();
151
+ assert.deepStrictEqual(all, encodedAll);
152
+ for (let i = 0; i < operands.length + transfers.length; i++) {
153
+ const one = fetchExternalities.oneTransferOrOperand(tryAsU64(i));
154
+ const encodedOne = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, transfers, i), chainSpec);
155
+ assert.deepStrictEqual(one, encodedOne, `Mismatch at index ${i}`);
156
+ }
157
+ const outOfRange = fetchExternalities.oneTransferOrOperand(tryAsU64(operands.length + transfers.length));
158
+ assert.strictEqual(outOfRange, null);
159
+ });
160
+ it("should handle only operands without transfers", () => {
161
+ const operands = prepareOperands(5);
162
+ const chainSpec = tinyChainSpec;
163
+ const allItems = toAllTransfersAndOperands(operands, []);
164
+ const encodedAll = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), allItems, chainSpec);
165
+ const fetchExternalities = prepareAccumulateData({ operands, transfers: [], chainSpec });
166
+ const result = fetchExternalities.allTransfersAndOperands();
167
+ assert.deepStrictEqual(result, encodedAll);
168
+ for (let i = 0; i < operands.length; i++) {
169
+ const one = fetchExternalities.oneTransferOrOperand(tryAsU64(i));
170
+ const encodedOne = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, [], i), chainSpec);
171
+ assert.deepStrictEqual(one, encodedOne, `Mismatch at operand index ${i}`);
172
+ }
173
+ const outOfRange = fetchExternalities.oneTransferOrOperand(tryAsU64(operands.length));
174
+ assert.strictEqual(outOfRange, null);
175
+ });
176
+ it("should handle only transfers without operands", () => {
177
+ const transfers = prepareTransfers(5);
178
+ const chainSpec = tinyChainSpec;
179
+ const allItems = toAllTransfersAndOperands([], transfers);
180
+ const encodedAll = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), allItems, chainSpec);
181
+ const fetchExternalities = prepareAccumulateData({ operands: [], transfers, chainSpec });
182
+ const result = fetchExternalities.allTransfersAndOperands();
183
+ assert.deepStrictEqual(result, encodedAll);
184
+ for (let i = 0; i < transfers.length; i++) {
185
+ const one = fetchExternalities.oneTransferOrOperand(tryAsU64(i));
186
+ const encodedOne = encodeOneTransferOrOperand(toOneTransferOrOperandAt([], transfers, i), chainSpec);
187
+ assert.deepStrictEqual(one, encodedOne, `Mismatch at transfer index ${i}`);
188
+ }
189
+ const outOfRange = fetchExternalities.oneTransferOrOperand(tryAsU64(transfers.length));
190
+ assert.strictEqual(outOfRange, null);
191
+ });
192
+ });
@@ -1,8 +1,6 @@
1
- import type { EntropyHash } from "#@typeberry/block";
2
1
  import type { BytesBlob } from "#@typeberry/bytes";
3
2
  import type { ChainSpec } from "#@typeberry/config";
4
- import { type general, PendingTransfer } from "#@typeberry/jam-host-calls";
5
- import { type U64 } from "#@typeberry/numbers";
3
+ import { PendingTransfer } from "#@typeberry/jam-host-calls";
6
4
  import { Operand } from "../accumulate/operand.js";
7
5
  export declare enum TransferOperandKind {
8
6
  OPERAND = 0,
@@ -16,40 +14,6 @@ export type TransferOrOperand = {
16
14
  value: PendingTransfer;
17
15
  };
18
16
  export declare const TRANSFER_OR_OPERAND: import("@typeberry/codec").Descriptor<TransferOrOperand, TransferOrOperand>;
19
- declare enum FetchContext {
20
- Accumulate = 0,
21
- Refine = 1
22
- }
23
- type AccumulateFetchData = {
24
- context: FetchContext.Accumulate;
25
- entropy: EntropyHash;
26
- transfers: PendingTransfer[];
27
- operands: Operand[];
28
- };
29
- type RefineFetchData = {
30
- context: FetchContext.Refine;
31
- entropy: undefined;
32
- };
33
- export declare class FetchExternalities implements general.IFetchExternalities {
34
- private fetchData;
35
- private chainSpec;
36
- private constructor();
37
- static createForAccumulate(fetchData: Omit<AccumulateFetchData, "context">, chainSpec: ChainSpec): FetchExternalities;
38
- static createForRefine(fetchData: Omit<RefineFetchData, "context">, chainSpec: ChainSpec): FetchExternalities;
39
- constants(): BytesBlob;
40
- entropy(): BytesBlob | null;
41
- authorizerTrace(): BytesBlob | null;
42
- workItemExtrinsic(_workItem: U64 | null, _index: U64): BytesBlob | null;
43
- workItemImport(_workItem: U64 | null, _index: U64): BytesBlob | null;
44
- workPackage(): BytesBlob | null;
45
- authorizer(): BytesBlob | null;
46
- authorizationToken(): BytesBlob | null;
47
- refineContext(): BytesBlob | null;
48
- allWorkItems(): BytesBlob | null;
49
- oneWorkItem(_workItem: U64): BytesBlob | null;
50
- workItemPayload(_workItem: U64): BytesBlob | null;
51
- allTransfersAndOperands(): BytesBlob | null;
52
- oneTransferOrOperand(index: U64): BytesBlob | null;
53
- }
54
- export {};
17
+ export declare const TRANSFERS_AND_OPERANDS: import("@typeberry/codec").Descriptor<TransferOrOperand[], import("@typeberry/codec").SequenceView<TransferOrOperand, TransferOrOperand>>;
18
+ export declare function getEncodedConstants(chainSpec: ChainSpec): BytesBlob;
55
19
  //# sourceMappingURL=fetch-externalities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-externalities.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/fetch-externalities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAgC,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAQ5E,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,oBAAY,mBAAmB;IAC7B,OAAO,IAAI;IACX,QAAQ,IAAI;CACb;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC;IACnC,KAAK,EAAE,eAAe,CAAC;CACxB,CAAC;AAEN,eAAO,MAAM,mBAAmB,6EAG9B,CAAC;AA2FH,aAAK,YAAY;IACf,UAAU,IAAI;IACd,MAAM,IAAI;CACX;AAED,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;IAE7B,OAAO,EAAE,SAAS,CAAC;CACpB,CAAC;AAOF,qBAAa,kBAAmB,YAAW,OAAO,CAAC,mBAAmB;IAElE,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IAFnB,OAAO;IAKP,MAAM,CAAC,mBAAmB,CACxB,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,EAC/C,SAAS,EAAE,SAAS,GACnB,kBAAkB;IAIrB,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,kBAAkB;IAI7G,SAAS,IAAI,SAAS;IAItB,OAAO,IAAI,SAAS,GAAG,IAAI;IAS3B,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;IAIjD,uBAAuB,IAAI,SAAS,GAAG,IAAI;IAa3C,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;CAuBnD"}
1
+ {"version":3,"file":"fetch-externalities.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/fetch-externalities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAS5D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,oBAAY,mBAAmB;IAC7B,OAAO,IAAI;IACX,QAAQ,IAAI;CACb;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC;IACnC,KAAK,EAAE,eAAe,CAAC;CACxB,CAAC;AAEN,eAAO,MAAM,mBAAmB,6EAG9B,CAAC;AAEH,eAAO,MAAM,sBAAsB,2IAA4C,CAAC;AA0ChF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,aA6CvD"}
@@ -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