@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
@@ -10,7 +10,7 @@ import { TRANSFER_MEMO_BYTES } from "#@typeberry/jam-host-calls/externalities/pa
10
10
  import { PendingTransfer } from "#@typeberry/jam-host-calls/externalities/pending-transfer.js";
11
11
  import { tryAsU64 } from "#@typeberry/numbers";
12
12
  import { Operand } from "../accumulate/operand.js";
13
- import { FetchExternalities } from "./fetch-externalities.js";
13
+ import { FetchExternalities, TRANSFER_OR_OPERAND, TransferOperandKind, } from "./fetch-externalities.js";
14
14
  describe("fetch-externalities", () => {
15
15
  const prepareOperands = (length) => {
16
16
  const operands = [];
@@ -40,17 +40,30 @@ describe("fetch-externalities", () => {
40
40
  }
41
41
  return transfers;
42
42
  };
43
- const prepareLegacyAccumulateData = ({ chainSpec, operands, entropy, }) => {
44
- const defaultChainSpec = tinyChainSpec;
45
- const defaultEntropy = Bytes.zero(HASH_SIZE).asOpaque();
46
- const defaultOperands = [];
47
- const fetchData = {
48
- entropy: entropy ?? defaultEntropy,
49
- operands: operands ?? defaultOperands,
50
- };
51
- return FetchExternalities.createForPre071Accumulate(fetchData, chainSpec ?? defaultChainSpec);
43
+ // allTransfersAndOperands: transfers first, then operands
44
+ const toAllTransfersAndOperands = (operands, transfers) => {
45
+ return [
46
+ ...transfers.map((t) => ({ kind: TransferOperandKind.TRANSFER, value: t })),
47
+ ...operands.map((o) => ({ kind: TransferOperandKind.OPERAND, value: o })),
48
+ ];
49
+ };
50
+ // oneTransferOrOperand: operands first (index < operands.length), then transfers
51
+ const toOneTransferOrOperandAt = (operands, transfers, index) => {
52
+ if (index >= operands.length + transfers.length) {
53
+ return null;
54
+ }
55
+ if (index < operands.length) {
56
+ return { kind: TransferOperandKind.OPERAND, value: operands[index] };
57
+ }
58
+ return { kind: TransferOperandKind.TRANSFER, value: transfers[index - operands.length] };
59
+ };
60
+ const encodeOneTransferOrOperand = (item, chainSpec) => {
61
+ if (item === null) {
62
+ return null;
63
+ }
64
+ return Encoder.encodeObject(TRANSFER_OR_OPERAND, item, chainSpec);
52
65
  };
53
- const prepareOnTransferData = ({ chainSpec, operands, entropy, transfers, }) => {
66
+ const prepareAccumulateData = ({ chainSpec, operands, entropy, transfers, }) => {
54
67
  const defaultChainSpec = tinyChainSpec;
55
68
  const defaultEntropy = Bytes.zero(HASH_SIZE).asOpaque();
56
69
  const defaultOperands = [];
@@ -60,108 +73,182 @@ describe("fetch-externalities", () => {
60
73
  operands: operands ?? defaultOperands,
61
74
  transfers: transfers ?? defaultTransfers,
62
75
  };
63
- return FetchExternalities.createForOnTransfer(fetchData, chainSpec ?? defaultChainSpec);
76
+ return FetchExternalities.createForAccumulate(fetchData, chainSpec ?? defaultChainSpec);
64
77
  };
65
- it("should return different constants for different chain specs (Accumulate)", () => {
66
- const tinyFetchExternalities = prepareLegacyAccumulateData({ chainSpec: tinyChainSpec });
67
- const fullFetchExternalities = prepareLegacyAccumulateData({ chainSpec: fullChainSpec });
68
- const tinyContants = tinyFetchExternalities.constants();
69
- const fullContants = fullFetchExternalities.constants();
70
- assert.notStrictEqual(tinyContants.length, 0);
71
- assert.notStrictEqual(fullContants.length, 0);
72
- assert.notDeepStrictEqual(tinyContants, fullContants);
73
- });
74
- it("should return different constants for different chain specs (OnTransfer)", () => {
75
- const tinyFetchExternalities = prepareOnTransferData({ chainSpec: tinyChainSpec });
76
- const fullFetchExternalities = prepareOnTransferData({ chainSpec: fullChainSpec });
77
- const tinyContants = tinyFetchExternalities.constants();
78
- const fullContants = fullFetchExternalities.constants();
79
- assert.notStrictEqual(tinyContants.length, 0);
80
- assert.notStrictEqual(fullContants.length, 0);
81
- assert.notDeepStrictEqual(tinyContants, fullContants);
82
- });
83
- it("should return entropy hash (Accumulate)", () => {
84
- const expectedEntropy = Bytes.fill(HASH_SIZE, 5).asOpaque();
85
- const fetchExternalities = prepareLegacyAccumulateData({ entropy: expectedEntropy });
86
- const entropy = fetchExternalities.entropy();
87
- assert.deepStrictEqual(entropy, expectedEntropy);
88
- });
89
- it("should return entropy hash (OnTransfer)", () => {
90
- const expectedEntropy = Bytes.fill(HASH_SIZE, 5).asOpaque();
91
- const fetchExternalities = prepareOnTransferData({ entropy: expectedEntropy });
92
- const entropy = fetchExternalities.entropy();
93
- assert.deepStrictEqual(entropy, expectedEntropy);
94
- });
95
- it("should return all operands", () => {
96
- const expectedOperands = prepareOperands(5);
97
- const chainSpec = tinyChainSpec;
98
- const encodedOperands = Encoder.encodeObject(codec.sequenceVarLen(Operand.Codec), expectedOperands, chainSpec);
99
- const fetchExternalities = prepareLegacyAccumulateData({ operands: expectedOperands, chainSpec });
100
- const operands = fetchExternalities.allOperands();
101
- assert.deepStrictEqual(operands, encodedOperands);
102
- });
103
- it("should null when operand index is not U32", () => {
104
- const operands = prepareOperands(5);
105
- const chainSpec = tinyChainSpec;
106
- const expectedOperandIndex = 2 ** 32 + 3;
107
- const expectedOperand = null;
108
- const fetchExternalities = prepareLegacyAccumulateData({ operands, chainSpec });
109
- const operand = fetchExternalities.oneOperand(tryAsU64(expectedOperandIndex));
110
- assert.deepStrictEqual(operand, expectedOperand);
111
- });
112
- it("should null when operand index is U32 but is incorrect", () => {
113
- const operands = prepareOperands(5);
114
- const chainSpec = tinyChainSpec;
115
- const expectedOperandIndex = 153;
116
- const expectedOperand = null;
117
- const fetchExternalities = prepareLegacyAccumulateData({ operands, chainSpec });
118
- const operand = fetchExternalities.oneOperand(tryAsU64(expectedOperandIndex));
119
- assert.deepStrictEqual(operand, expectedOperand);
120
- });
121
- it("should return one operand", () => {
122
- const operands = prepareOperands(5);
123
- const chainSpec = tinyChainSpec;
124
- const expectedOperandIndex = 3;
125
- const expectedOperand = operands[expectedOperandIndex];
126
- const encodedOperand = Encoder.encodeObject(Operand.Codec, expectedOperand, chainSpec);
127
- const fetchExternalities = prepareLegacyAccumulateData({ operands, chainSpec });
128
- const operand = fetchExternalities.oneOperand(tryAsU64(expectedOperandIndex));
129
- assert.deepStrictEqual(operand, encodedOperand);
130
- });
131
- it("should return all transfers", () => {
132
- const transfersToEncode = prepareTransfers(5);
133
- const chainSpec = tinyChainSpec;
134
- const encodedTransfers = Encoder.encodeObject(codec.sequenceVarLen(PendingTransfer.Codec), transfersToEncode, chainSpec);
135
- const fetchExternalities = prepareOnTransferData({ transfers: transfersToEncode, chainSpec });
136
- const transfers = fetchExternalities.allTransfers();
137
- assert.deepStrictEqual(transfers, encodedTransfers);
138
- });
139
- it("should null when transfer index is not U32", () => {
140
- const transfers = prepareTransfers(5);
141
- const chainSpec = tinyChainSpec;
142
- const expectedTransferIndex = tryAsU64(2 ** 32 + 3);
143
- const expectedTransfer = null;
144
- const fetchExternalities = prepareOnTransferData({ transfers, chainSpec });
145
- const transfer = fetchExternalities.oneTransfer(expectedTransferIndex);
146
- assert.deepStrictEqual(transfer, expectedTransfer);
147
- });
148
- it("should null when transfer index is U32 but is incorrect", () => {
149
- const transfers = prepareTransfers(5);
150
- const chainSpec = tinyChainSpec;
151
- const expectedTransferIndex = tryAsU64(153);
152
- const expectedTransfer = null;
153
- const fetchExternalities = prepareOnTransferData({ transfers, chainSpec });
154
- const transfer = fetchExternalities.oneTransfer(expectedTransferIndex);
155
- assert.deepStrictEqual(transfer, expectedTransfer);
78
+ const prepareRefineData = ({ chainSpec } = {}) => {
79
+ const defaultChainSpec = tinyChainSpec;
80
+ return FetchExternalities.createForRefine({ entropy: undefined }, chainSpec ?? defaultChainSpec);
81
+ };
82
+ describe("Accumulate", () => {
83
+ it("should return different constants for different chain specs", () => {
84
+ const tinyFetchExternalities = prepareAccumulateData({ chainSpec: tinyChainSpec });
85
+ const fullFetchExternalities = prepareAccumulateData({ chainSpec: fullChainSpec });
86
+ const tinyConstants = tinyFetchExternalities.constants();
87
+ const fullConstants = fullFetchExternalities.constants();
88
+ assert.notStrictEqual(tinyConstants.length, 0);
89
+ assert.notStrictEqual(fullConstants.length, 0);
90
+ assert.notDeepStrictEqual(tinyConstants, fullConstants);
91
+ });
92
+ it("should return entropy hash", () => {
93
+ const expectedEntropy = Bytes.fill(HASH_SIZE, 5).asOpaque();
94
+ const fetchExternalities = prepareAccumulateData({ entropy: expectedEntropy });
95
+ const entropy = fetchExternalities.entropy();
96
+ assert.deepStrictEqual(entropy, expectedEntropy);
97
+ });
98
+ it("should return all transfers and operands", () => {
99
+ const operands = prepareOperands(3);
100
+ const transfers = prepareTransfers(2);
101
+ const chainSpec = tinyChainSpec;
102
+ const expected = toAllTransfersAndOperands(operands, transfers);
103
+ const encodedExpected = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), expected, chainSpec);
104
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
105
+ const result = fetchExternalities.allTransfersAndOperands();
106
+ assert.deepStrictEqual(result, encodedExpected);
107
+ });
108
+ it("should return empty encoded sequence when no transfers and no operands", () => {
109
+ const chainSpec = tinyChainSpec;
110
+ const encodedExpected = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), [], chainSpec);
111
+ const fetchExternalities = prepareAccumulateData({ operands: [], transfers: [], chainSpec });
112
+ const result = fetchExternalities.allTransfersAndOperands();
113
+ assert.deepStrictEqual(result, encodedExpected);
114
+ });
115
+ it("should return one operand by index", () => {
116
+ const operands = prepareOperands(3);
117
+ const transfers = prepareTransfers(2);
118
+ const chainSpec = tinyChainSpec;
119
+ const encodedExpected = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, transfers, 0), chainSpec);
120
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
121
+ // Operands come first (indices 0..2), then transfers (indices 3..4)
122
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(0));
123
+ assert.deepStrictEqual(result, encodedExpected);
124
+ });
125
+ it("should return one transfer by index", () => {
126
+ const operands = prepareOperands(3);
127
+ const transfers = prepareTransfers(2);
128
+ const chainSpec = tinyChainSpec;
129
+ const encodedExpected = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, transfers, 3), chainSpec);
130
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
131
+ // Transfers start after operands, so index 3 is the first transfer
132
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(3));
133
+ assert.deepStrictEqual(result, encodedExpected);
134
+ });
135
+ it("should return null when index is 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
+ // Total items: 3 operands + 2 transfers = 5, so index 5 is out of bounds
141
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(5));
142
+ assert.strictEqual(result, null);
143
+ });
144
+ it("should return null when index is far out of bounds", () => {
145
+ const operands = prepareOperands(3);
146
+ const transfers = prepareTransfers(2);
147
+ const chainSpec = tinyChainSpec;
148
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
149
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(153));
150
+ assert.strictEqual(result, null);
151
+ });
152
+ it("should have consistent encoding between all and one", () => {
153
+ const operands = prepareOperands(2);
154
+ const transfers = prepareTransfers(2);
155
+ const chainSpec = tinyChainSpec;
156
+ const allItems = toAllTransfersAndOperands(operands, transfers);
157
+ const encodedAll = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), allItems, chainSpec);
158
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
159
+ const all = fetchExternalities.allTransfersAndOperands();
160
+ assert.deepStrictEqual(all, encodedAll);
161
+ for (let i = 0; i < operands.length + transfers.length; i++) {
162
+ const one = fetchExternalities.oneTransferOrOperand(tryAsU64(i));
163
+ const encodedOne = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, transfers, i), chainSpec);
164
+ assert.deepStrictEqual(one, encodedOne, `Mismatch at index ${i}`);
165
+ }
166
+ const outOfRange = fetchExternalities.oneTransferOrOperand(tryAsU64(operands.length + transfers.length));
167
+ assert.strictEqual(outOfRange, null);
168
+ });
169
+ it("should handle only operands without transfers", () => {
170
+ const operands = prepareOperands(5);
171
+ const chainSpec = tinyChainSpec;
172
+ const allItems = toAllTransfersAndOperands(operands, []);
173
+ const encodedAll = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), allItems, chainSpec);
174
+ const fetchExternalities = prepareAccumulateData({ operands, transfers: [], chainSpec });
175
+ const result = fetchExternalities.allTransfersAndOperands();
176
+ assert.deepStrictEqual(result, encodedAll);
177
+ for (let i = 0; i < operands.length; i++) {
178
+ const one = fetchExternalities.oneTransferOrOperand(tryAsU64(i));
179
+ const encodedOne = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, [], i), chainSpec);
180
+ assert.deepStrictEqual(one, encodedOne, `Mismatch at operand index ${i}`);
181
+ }
182
+ const outOfRange = fetchExternalities.oneTransferOrOperand(tryAsU64(operands.length));
183
+ assert.strictEqual(outOfRange, null);
184
+ });
185
+ it("should handle only transfers without operands", () => {
186
+ const transfers = prepareTransfers(5);
187
+ const chainSpec = tinyChainSpec;
188
+ const allItems = toAllTransfersAndOperands([], transfers);
189
+ const encodedAll = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), allItems, chainSpec);
190
+ const fetchExternalities = prepareAccumulateData({ operands: [], transfers, chainSpec });
191
+ const result = fetchExternalities.allTransfersAndOperands();
192
+ assert.deepStrictEqual(result, encodedAll);
193
+ for (let i = 0; i < transfers.length; i++) {
194
+ const one = fetchExternalities.oneTransferOrOperand(tryAsU64(i));
195
+ const encodedOne = encodeOneTransferOrOperand(toOneTransferOrOperandAt([], transfers, i), chainSpec);
196
+ assert.deepStrictEqual(one, encodedOne, `Mismatch at transfer index ${i}`);
197
+ }
198
+ const outOfRange = fetchExternalities.oneTransferOrOperand(tryAsU64(transfers.length));
199
+ assert.strictEqual(outOfRange, null);
200
+ });
201
+ it("should return null for unimplemented methods", () => {
202
+ const fetchExternalities = prepareAccumulateData({});
203
+ assert.strictEqual(fetchExternalities.authorizerTrace(), null);
204
+ assert.strictEqual(fetchExternalities.workItemExtrinsic(null, tryAsU64(0)), null);
205
+ assert.strictEqual(fetchExternalities.workItemImport(null, tryAsU64(0)), null);
206
+ assert.strictEqual(fetchExternalities.workPackage(), null);
207
+ assert.strictEqual(fetchExternalities.authorizer(), null);
208
+ assert.strictEqual(fetchExternalities.authorizationToken(), null);
209
+ assert.strictEqual(fetchExternalities.refineContext(), null);
210
+ assert.strictEqual(fetchExternalities.allWorkItems(), null);
211
+ assert.strictEqual(fetchExternalities.oneWorkItem(tryAsU64(0)), null);
212
+ assert.strictEqual(fetchExternalities.workItemPayload(tryAsU64(0)), null);
213
+ });
156
214
  });
157
- it("should return one transfer", () => {
158
- const transfers = prepareTransfers(5);
159
- const chainSpec = tinyChainSpec;
160
- const expectedOperandIndex = 3;
161
- const expectedTransfer = transfers[expectedOperandIndex];
162
- const encodedTransfer = Encoder.encodeObject(PendingTransfer.Codec, expectedTransfer, chainSpec);
163
- const fetchExternalities = prepareOnTransferData({ transfers, chainSpec });
164
- const transfer = fetchExternalities.oneTransfer(tryAsU64(expectedOperandIndex));
165
- assert.deepStrictEqual(transfer, encodedTransfer);
215
+ describe("Refine", () => {
216
+ it("should return different constants for different chain specs", () => {
217
+ const tinyFetchExternalities = prepareRefineData({ chainSpec: tinyChainSpec });
218
+ const fullFetchExternalities = prepareRefineData({ chainSpec: fullChainSpec });
219
+ const tinyConstants = tinyFetchExternalities.constants();
220
+ const fullConstants = fullFetchExternalities.constants();
221
+ assert.notStrictEqual(tinyConstants.length, 0);
222
+ assert.notStrictEqual(fullConstants.length, 0);
223
+ assert.notDeepStrictEqual(tinyConstants, fullConstants);
224
+ });
225
+ it("should return null entropy", () => {
226
+ const fetchExternalities = prepareRefineData();
227
+ const entropy = fetchExternalities.entropy();
228
+ assert.strictEqual(entropy, null);
229
+ });
230
+ it("should return null for allTransfersAndOperands", () => {
231
+ const fetchExternalities = prepareRefineData();
232
+ const result = fetchExternalities.allTransfersAndOperands();
233
+ assert.strictEqual(result, null);
234
+ });
235
+ it("should return null for oneTransferOrOperand", () => {
236
+ const fetchExternalities = prepareRefineData();
237
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(0));
238
+ assert.strictEqual(result, null);
239
+ });
240
+ it("should return null for unimplemented methods", () => {
241
+ const fetchExternalities = prepareRefineData();
242
+ assert.strictEqual(fetchExternalities.authorizerTrace(), null);
243
+ assert.strictEqual(fetchExternalities.workItemExtrinsic(null, tryAsU64(0)), null);
244
+ assert.strictEqual(fetchExternalities.workItemImport(null, tryAsU64(0)), null);
245
+ assert.strictEqual(fetchExternalities.workPackage(), null);
246
+ assert.strictEqual(fetchExternalities.authorizer(), null);
247
+ assert.strictEqual(fetchExternalities.authorizationToken(), null);
248
+ assert.strictEqual(fetchExternalities.refineContext(), null);
249
+ assert.strictEqual(fetchExternalities.allWorkItems(), null);
250
+ assert.strictEqual(fetchExternalities.oneWorkItem(tryAsU64(0)), null);
251
+ assert.strictEqual(fetchExternalities.workItemPayload(tryAsU64(0)), null);
252
+ });
166
253
  });
167
254
  });
@@ -27,13 +27,6 @@ export type Input = {
27
27
  * https://graypaper.fluffylabs.dev/#/cc517d7/171f05171f05?v=0.6.5
28
28
  */
29
29
  accumulationStatistics: Map<ServiceId, CountAndGasUsed>;
30
- /**
31
- * `X`: Deffered transfer statistics
32
- * TODO [MaSo] Use fields from accumulation.
33
- *
34
- * https://graypaper.fluffylabs.dev/#/cc517d7/18dd0018dd00?v=0.6.5
35
- */
36
- transferStatistics: Map<ServiceId, CountAndGasUsed>;
37
30
  reporters: readonly Ed25519Key[];
38
31
  currentValidatorData: State["currentValidatorData"];
39
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"statistics.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/transition/statistics.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,QAAQ,EAIb,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAsB,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAqB,KAAK,KAAK,EAAuC,MAAM,kBAAkB,CAAC;AAGtG,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,cAAc,CAAC;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B;;;;OAIG;IACH,gBAAgB,EAAE,UAAU,EAAE,CAAC;IAC/B;;;;;OAKG;IACH,sBAAsB,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACxD;;;;;OAKG;IACH,kBAAkB,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACpD,SAAS,EAAE,SAAS,UAAU,EAAE,CAAC;IACjC,oBAAoB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAAC,GAAG;IACrE;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;CAC9D,CAAC;AAEF,sCAAsC;AACtC,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;AAExE,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,SAAS;aACV,KAAK,EAAE,eAAe;gBADrB,SAAS,EAAE,SAAS,EACrB,KAAK,EAAE,eAAe;IAGxC,OAAO,CAAC,aAAa;IAyBrB,sEAAsE;IACtE,OAAO,CAAC,oBAAoB;IAe5B,sEAAsE;IACtE,OAAO,CAAC,oBAAoB;IA+B5B,sEAAsE;IACtE,OAAO,CAAC,6BAA6B;IAoBrC;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,qBAAqB;CAgJhD"}
1
+ {"version":3,"file":"statistics.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/transition/statistics.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,QAAQ,EAIb,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAsB,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAqB,KAAK,KAAK,EAAuC,MAAM,kBAAkB,CAAC;AAGtG,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,cAAc,CAAC;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B;;;;OAIG;IACH,gBAAgB,EAAE,UAAU,EAAE,CAAC;IAC/B;;;;;OAKG;IACH,sBAAsB,EAAE,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACxD,SAAS,EAAE,SAAS,UAAU,EAAE,CAAC;IACjC,oBAAoB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,EAAE,UAAU,CAAC;CACrB,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAAC,GAAG;IACrE;;;;OAIG;IACH,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;CAC9D,CAAC;AAEF,sCAAsC;AACtC,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;AAExE,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,SAAS;aACV,KAAK,EAAE,eAAe;gBADrB,SAAS,EAAE,SAAS,EACrB,KAAK,EAAE,eAAe;IAGxC,OAAO,CAAC,aAAa;IAyBrB,sEAAsE;IACtE,OAAO,CAAC,oBAAoB;IAe5B,sEAAsE;IACtE,OAAO,CAAC,oBAAoB;IA+B5B,sEAAsE;IACtE,OAAO,CAAC,6BAA6B;IAoBrC;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;;OAIG;IACH,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,qBAAqB;CAwIhD"}
@@ -96,7 +96,7 @@ export class Statistics {
96
96
  *
97
97
  * https://graypaper.fluffylabs.dev/#/cc517d7/195f04195f04?v=0.6.5
98
98
  */
99
- collectServiceIds(preimages, workResults, accumulationKeys, transferKeys) {
99
+ collectServiceIds(preimages, workResults, accumulationKeys) {
100
100
  const serviceIds = new Set();
101
101
  for (const preimage of preimages) {
102
102
  serviceIds.add(preimage.requester);
@@ -107,9 +107,6 @@ export class Statistics {
107
107
  for (const serviceId of accumulationKeys) {
108
108
  serviceIds.add(serviceId);
109
109
  }
110
- for (const serviceId of transferKeys) {
111
- serviceIds.add(serviceId);
112
- }
113
110
  return serviceIds;
114
111
  }
115
112
  /**
@@ -195,7 +192,7 @@ export class Statistics {
195
192
  }
196
193
  /** Update services statistics */
197
194
  services.clear();
198
- const serviceIds = this.collectServiceIds(extrinsic.preimages, incomingReports.flatMap((wr) => wr.results), input.accumulationStatistics.keys(), input.transferStatistics.keys());
195
+ const serviceIds = this.collectServiceIds(extrinsic.preimages, incomingReports.flatMap((wr) => wr.results), input.accumulationStatistics.keys());
199
196
  for (const serviceId of serviceIds) {
200
197
  const workResults = incomingReports.flatMap((wr) => wr.results.filter((r) => r.serviceId === serviceId));
201
198
  const { gasUsed, imported, extrinsicCount, extrinsicSize, exported } = this.calculateRefineScore(workResults);
@@ -205,10 +202,6 @@ export class Statistics {
205
202
  count: tryAsU32(0),
206
203
  gasUsed: tryAsServiceGas(0n),
207
204
  };
208
- const { count: transfersCount, gasUsed: transfersGasUsed } = input.transferStatistics.get(serviceId) ?? {
209
- count: tryAsU32(0),
210
- gasUsed: tryAsServiceGas(0n),
211
- };
212
205
  /**
213
206
  * Service statistics are tracked only per-block basis, so we override previous values.
214
207
  * https://graypaper.fluffylabs.dev/#/cc517d7/190201190501?v=0.6.5
@@ -226,8 +219,6 @@ export class Statistics {
226
219
  serviceStatistics.providedSize = providedSize;
227
220
  serviceStatistics.accumulateCount = accumulatedCount;
228
221
  serviceStatistics.accumulateGasUsed = accumulatedGasUsed;
229
- serviceStatistics.onTransfersCount = transfersCount;
230
- serviceStatistics.onTransfersGasUsed = transfersGasUsed;
231
222
  services.set(serviceId, serviceStatistics);
232
223
  }
233
224
  /** Update state */
@@ -93,7 +93,6 @@ describe("Statistics", () => {
93
93
  incomingReports: [],
94
94
  availableReports: [],
95
95
  accumulationStatistics: new Map(),
96
- transferStatistics: new Map(),
97
96
  currentValidatorData,
98
97
  reporters,
99
98
  });
@@ -116,7 +115,6 @@ describe("Statistics", () => {
116
115
  incomingReports: [],
117
116
  availableReports: [],
118
117
  accumulationStatistics: new Map(),
119
- transferStatistics: new Map(),
120
118
  currentValidatorData,
121
119
  reporters,
122
120
  });
@@ -137,7 +135,6 @@ describe("Statistics", () => {
137
135
  incomingReports: [],
138
136
  availableReports: [],
139
137
  accumulationStatistics: new Map(),
140
- transferStatistics: new Map(),
141
138
  currentValidatorData,
142
139
  reporters,
143
140
  });
@@ -217,7 +214,6 @@ describe("Statistics", () => {
217
214
  incomingReports: [],
218
215
  availableReports: [],
219
216
  accumulationStatistics: new Map(),
220
- transferStatistics: new Map(),
221
217
  currentValidatorData,
222
218
  reporters,
223
219
  });
@@ -240,7 +236,6 @@ describe("Statistics", () => {
240
236
  incomingReports: [],
241
237
  availableReports: [],
242
238
  accumulationStatistics: new Map(),
243
- transferStatistics: new Map(),
244
239
  currentValidatorData,
245
240
  reporters,
246
241
  });
@@ -264,7 +259,6 @@ describe("Statistics", () => {
264
259
  incomingReports: [],
265
260
  availableReports: [],
266
261
  accumulationStatistics: new Map(),
267
- transferStatistics: new Map(),
268
262
  currentValidatorData,
269
263
  reporters,
270
264
  });
@@ -292,7 +286,6 @@ describe("Statistics", () => {
292
286
  incomingReports: [],
293
287
  availableReports: [],
294
288
  accumulationStatistics: new Map(),
295
- transferStatistics: new Map(),
296
289
  currentValidatorData,
297
290
  reporters,
298
291
  });
@@ -330,7 +323,6 @@ describe("Statistics", () => {
330
323
  incomingReports: [],
331
324
  availableReports: [],
332
325
  accumulationStatistics: new Map(),
333
- transferStatistics: new Map(),
334
326
  currentValidatorData,
335
327
  reporters,
336
328
  });
@@ -355,7 +347,6 @@ describe("Statistics", () => {
355
347
  incomingReports: [],
356
348
  availableReports: [],
357
349
  accumulationStatistics: new Map(),
358
- transferStatistics: new Map(),
359
350
  currentValidatorData,
360
351
  reporters,
361
352
  });
@@ -380,7 +371,6 @@ describe("Statistics", () => {
380
371
  incomingReports,
381
372
  availableReports: [],
382
373
  accumulationStatistics: new Map(),
383
- transferStatistics: new Map(),
384
374
  currentValidatorData,
385
375
  reporters,
386
376
  });
@@ -405,7 +395,6 @@ describe("Statistics", () => {
405
395
  incomingReports: [],
406
396
  availableReports: [],
407
397
  accumulationStatistics: new Map(),
408
- transferStatistics: new Map(),
409
398
  currentValidatorData,
410
399
  reporters,
411
400
  });
@@ -430,7 +419,6 @@ describe("Statistics", () => {
430
419
  incomingReports: asKnownSize([]),
431
420
  availableReports,
432
421
  accumulationStatistics: new Map(),
433
- transferStatistics: new Map(),
434
422
  currentValidatorData,
435
423
  reporters,
436
424
  });
@@ -460,7 +448,6 @@ describe("Statistics", () => {
460
448
  incomingReports: [],
461
449
  availableReports: [],
462
450
  accumulationStatistics: new Map(),
463
- transferStatistics: new Map(),
464
451
  currentValidatorData,
465
452
  reporters,
466
453
  });
@@ -486,33 +473,6 @@ describe("Statistics", () => {
486
473
  incomingReports: [],
487
474
  availableReports: [],
488
475
  accumulationStatistics,
489
- transferStatistics: new Map(),
490
- currentValidatorData,
491
- reporters,
492
- });
493
- const state = copyAndUpdateState(statistics.state, update);
494
- assert.deepEqual(state.statistics.services.get(serviceIndex), expectedStatistics);
495
- });
496
- it("should update on transfer score of service statistics based on on transfer statistics", () => {
497
- const { statistics, currentSlot, validatorIndex, serviceIndex, serviceStatistics, currentValidatorData, reporters, } = prepareData({
498
- previousSlot: 0,
499
- currentSlot: 1,
500
- });
501
- const transferStatistics = new Map([[tryAsServiceId(0), countGasUsed(3, 7n)]]);
502
- const expectedStatistics = {
503
- ...serviceStatistics.get(serviceIndex),
504
- onTransfersCount: 3,
505
- onTransfersGasUsed: 7n,
506
- };
507
- assert.deepEqual(statistics.state.statistics.services.get(serviceIndex), serviceStatistics.get(serviceIndex));
508
- const update = statistics.transition({
509
- slot: currentSlot,
510
- authorIndex: validatorIndex,
511
- extrinsic: getExtrinsic(),
512
- incomingReports: [],
513
- availableReports: [],
514
- accumulationStatistics: new Map(),
515
- transferStatistics,
516
476
  currentValidatorData,
517
477
  reporters,
518
478
  });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.test.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/generator.test.ts"],"names":[],"mappings":""}