@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.
- package/bin/lib/scripts/build-lib.js +1 -0
- package/package.json +5 -1
- package/packages/core/json-parser/descriptors.d.ts.map +1 -1
- package/packages/core/json-parser/descriptors.js +3 -0
- package/packages/core/json-parser/index.test.js +30 -0
- package/packages/core/networking/package.json +1 -1
- package/packages/core/pvm-host-calls/ecalli-trace-logger.js +1 -1
- package/packages/core/pvm-host-calls/ecalli-trace-logger.test.js +7 -7
- package/packages/core/pvm-host-calls/host-call-registers.js +1 -1
- package/packages/core/telemetry/package.json +1 -1
- package/packages/core/utils/compatibility.d.ts +0 -1
- package/packages/core/utils/compatibility.d.ts.map +1 -1
- package/packages/core/utils/compatibility.js +1 -2
- package/packages/core/utils/compatibility.test.js +6 -10
- package/packages/jam/block/index.d.ts +11 -11
- package/packages/jam/block/index.d.ts.map +1 -1
- package/packages/jam/block/index.js +11 -11
- package/packages/jam/block-json/block.d.ts +25 -25
- package/packages/jam/database-lmdb/states.test.js +3 -5
- package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
- package/packages/jam/jam-host-calls/accumulate/bless.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/bless.js +6 -10
- package/packages/jam/jam-host-calls/accumulate/bless.test.js +32 -72
- package/packages/jam/jam-host-calls/accumulate/new.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/accumulate/new.js +2 -4
- package/packages/jam/jam-host-calls/accumulate/new.test.js +4 -5
- package/packages/jam/jam-host-calls/general/fetch.d.ts +1 -57
- package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/fetch.js +6 -29
- package/packages/jam/jam-host-calls/general/fetch.test.js +2 -58
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +4 -4
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts +13 -13
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
- package/packages/jam/node/package.json +1 -1
- package/packages/jam/node/reader.d.ts +25 -25
- package/packages/jam/node/workers.d.ts +183 -183
- package/packages/jam/safrole/bandersnatch-vrf.d.ts +7 -2
- package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
- package/packages/jam/safrole/bandersnatch-vrf.js +34 -1
- package/packages/jam/safrole/bandersnatch-vrf.test.js +15 -0
- package/packages/jam/safrole/bandersnatch-wasm.d.ts +1 -0
- package/packages/jam/safrole/bandersnatch-wasm.d.ts.map +1 -1
- package/packages/jam/safrole/bandersnatch-wasm.js +3 -0
- package/packages/jam/state/accumulation-queue.d.ts +26 -26
- package/packages/jam/state/assurances.d.ts +26 -26
- package/packages/jam/state/privileged-services.d.ts +1 -1
- package/packages/jam/state/privileged-services.d.ts.map +1 -1
- package/packages/jam/state/privileged-services.js +1 -6
- package/packages/jam/state/service.d.ts +1 -1
- package/packages/jam/state/service.d.ts.map +1 -1
- package/packages/jam/state/statistics.d.ts +0 -8
- package/packages/jam/state/statistics.d.ts.map +1 -1
- package/packages/jam/state/statistics.js +14 -44
- package/packages/jam/state/statistics.test.js +1 -8
- package/packages/jam/state/test.utils.d.ts +1 -1
- package/packages/jam/state/test.utils.d.ts.map +1 -1
- package/packages/jam/state/test.utils.js +4 -22
- package/packages/jam/state-json/accounts.d.ts +10 -0
- package/packages/jam/state-json/accounts.d.ts.map +1 -1
- package/packages/jam/state-json/accounts.js +47 -19
- package/packages/jam/state-json/dump.d.ts.map +1 -1
- package/packages/jam/state-json/dump.js +5 -9
- package/packages/jam/state-json/dump.test.js +2 -10
- package/packages/jam/state-json/statistics.d.ts +1 -1
- package/packages/jam/state-json/statistics.d.ts.map +1 -1
- package/packages/jam/state-json/statistics.js +1 -13
- package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +29 -31
- package/packages/jam/state-merkleization/in-memory-state-codec.d.ts.map +1 -1
- package/packages/jam/state-merkleization/serialize.d.ts +4 -4
- package/packages/jam/state-merkleization/serialize.d.ts.map +1 -1
- package/packages/jam/state-merkleization/serialize.js +5 -8
- package/packages/jam/state-merkleization/serialized-state-view.d.ts.map +1 -1
- package/packages/jam/state-merkleization/state-entries.test.js +1 -7
- package/packages/jam/state-vectors/index.d.ts +75 -75
- package/packages/jam/transition/accumulate/accumulate-data.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate-data.js +6 -1
- package/packages/jam/transition/accumulate/accumulate-state.d.ts +1 -2
- package/packages/jam/transition/accumulate/accumulate-state.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate-utils.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate-utils.js +2 -6
- package/packages/jam/transition/accumulate/accumulate-utils.test.js +2 -4
- package/packages/jam/transition/accumulate/accumulate.d.ts +0 -9
- package/packages/jam/transition/accumulate/accumulate.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate.js +15 -57
- package/packages/jam/transition/accumulate/index.d.ts +0 -1
- package/packages/jam/transition/accumulate/index.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/index.js +0 -1
- package/packages/jam/transition/accumulate/operand.d.ts +7 -7
- package/packages/jam/transition/chain-stf.d.ts +3 -5
- package/packages/jam/transition/chain-stf.d.ts.map +1 -1
- package/packages/jam/transition/chain-stf.js +5 -29
- package/packages/jam/transition/disputes/disputes.test.data2.d.ts +3 -3
- package/packages/jam/transition/disputes/disputes.test.data2.d.ts.map +1 -1
- package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/accumulate-externalities.js +22 -49
- package/packages/jam/transition/externalities/accumulate-externalities.test.js +8 -72
- package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -22
- package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/fetch-externalities.js +3 -55
- package/packages/jam/transition/externalities/fetch-externalities.test.js +199 -112
- package/packages/jam/transition/statistics.d.ts +0 -7
- package/packages/jam/transition/statistics.d.ts.map +1 -1
- package/packages/jam/transition/statistics.js +2 -11
- package/packages/jam/transition/statistics.test.js +0 -40
- package/packages/workers/block-authorship/generator.test.d.ts +2 -0
- package/packages/workers/block-authorship/generator.test.d.ts.map +1 -0
- package/packages/workers/block-authorship/generator.test.js +200 -0
- package/packages/workers/block-authorship/main.d.ts.map +1 -1
- package/packages/workers/block-authorship/main.js +31 -1
- package/packages/workers/block-authorship/package.json +1 -1
- package/packages/workers/block-authorship/protocol.d.ts +50 -50
- package/packages/workers/block-authorship/ticket-generator.d.ts +21 -0
- package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -0
- package/packages/workers/block-authorship/ticket-generator.js +37 -0
- package/packages/workers/block-authorship/ticket-generator.test.d.ts +2 -0
- package/packages/workers/block-authorship/ticket-generator.test.d.ts.map +1 -0
- package/packages/workers/block-authorship/ticket-generator.test.js +100 -0
- package/packages/workers/importer/package.json +1 -1
- package/packages/workers/importer/protocol.d.ts +54 -54
- package/packages/workers/jam-network/protocol.d.ts +79 -79
- package/packages/jam/transition/accumulate/deferred-transfers.d.ts +0 -36
- package/packages/jam/transition/accumulate/deferred-transfers.d.ts.map +0 -1
- 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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
|
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.
|
|
76
|
+
return FetchExternalities.createForAccumulate(fetchData, chainSpec ?? defaultChainSpec);
|
|
64
77
|
};
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
|
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
|
|
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()
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"generator.test.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/generator.test.ts"],"names":[],"mappings":""}
|