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