@typeberry/lib 0.5.7-d496f70 → 0.5.7-f0cc874
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/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 -4
- package/packages/jam/block/tickets.d.ts.map +1 -1
- package/packages/jam/block/tickets.js +13 -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 +2 -1
- package/packages/jam/block-json/common.d.ts.map +1 -1
- package/packages/jam/block-json/common.js +2 -5
- package/packages/jam/block-json/extrinsic.js +1 -1
- package/packages/jam/block-json/header.d.ts +2 -1
- package/packages/jam/block-json/header.d.ts.map +1 -1
- package/packages/jam/block-json/header.js +34 -32
- package/packages/jam/block-json/tickets-extrinsic.d.ts +2 -1
- package/packages/jam/block-json/tickets-extrinsic.d.ts.map +1 -1
- package/packages/jam/block-json/tickets-extrinsic.js +7 -5
- package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
- package/packages/jam/jamnp-s/network.js +1 -1
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +6 -3
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.js +8 -4
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +4 -3
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
- package/packages/jam/jamnp-s/tasks/ticket-distribution.d.ts +2 -1
- package/packages/jam/jamnp-s/tasks/ticket-distribution.d.ts.map +1 -1
- package/packages/jam/jamnp-s/tasks/ticket-distribution.js +3 -3
- package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +3 -2
- 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 +3 -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 +3 -2
- package/packages/jam/safrole/safrole.test.js +80 -72
- 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 +8 -6
- package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
- package/packages/jam/state-vectors/index.d.ts +8 -7
- package/packages/jam/state-vectors/index.d.ts.map +1 -1
- package/packages/jam/state-vectors/index.js +6 -4
- 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 +3 -2
- package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
- package/packages/workers/block-authorship/ticket-generator.js +2 -3
- package/packages/workers/block-authorship/ticket-generator.test.js +11 -10
- 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/protocol.d.ts +8 -8
- package/packages/workers/jam-network/protocol.d.ts +10 -10
package/package.json
CHANGED
|
@@ -42,7 +42,7 @@ export declare class Extrinsic extends WithDebug {
|
|
|
42
42
|
readonly disputes: DisputesExtrinsic;
|
|
43
43
|
static Codec: import("@typeberry/codec").Descriptor<Extrinsic, import("@typeberry/codec").ViewOf<Extrinsic, {
|
|
44
44
|
tickets: import("@typeberry/codec").Descriptor<readonly import("./tickets.js").SignedTicket[] & import("@typeberry/utils").WithOpaque<"Size: [0..chainSpec.maxTicketsPerExtrinsic)">, import("@typeberry/codec").SequenceView<import("./tickets.js").SignedTicket, import("@typeberry/codec").ViewOf<import("./tickets.js").SignedTicket, {
|
|
45
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
45
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
46
46
|
signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
|
|
47
47
|
}>>>;
|
|
48
48
|
preimages: import("@typeberry/codec").Descriptor<import("./preimage.js").Preimage[], import("@typeberry/codec").SequenceView<import("./preimage.js").Preimage, import("@typeberry/codec").ViewOf<import("./preimage.js").Preimage, {
|
|
@@ -172,7 +172,7 @@ export declare class Block extends WithDebug {
|
|
|
172
172
|
ticketsMarker: import("@typeberry/codec").Descriptor<import("./header.js").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("./header.js").TicketsMarker, {
|
|
173
173
|
tickets: import("@typeberry/codec").Descriptor<readonly import("./tickets.js").Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<import("./tickets.js").Ticket, import("@typeberry/codec").ViewOf<import("./tickets.js").Ticket, {
|
|
174
174
|
id: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
|
|
175
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
175
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
176
176
|
}>>>;
|
|
177
177
|
}> | null>;
|
|
178
178
|
bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
|
|
@@ -182,7 +182,7 @@ export declare class Block extends WithDebug {
|
|
|
182
182
|
}>>;
|
|
183
183
|
extrinsic: import("@typeberry/codec").Descriptor<Extrinsic, import("@typeberry/codec").ViewOf<Extrinsic, {
|
|
184
184
|
tickets: import("@typeberry/codec").Descriptor<readonly import("./tickets.js").SignedTicket[] & import("@typeberry/utils").WithOpaque<"Size: [0..chainSpec.maxTicketsPerExtrinsic)">, import("@typeberry/codec").SequenceView<import("./tickets.js").SignedTicket, import("@typeberry/codec").ViewOf<import("./tickets.js").SignedTicket, {
|
|
185
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
185
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
186
186
|
signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
|
|
187
187
|
}>>>;
|
|
188
188
|
preimages: import("@typeberry/codec").Descriptor<import("./preimage.js").Preimage[], import("@typeberry/codec").SequenceView<import("./preimage.js").Preimage, import("@typeberry/codec").ViewOf<import("./preimage.js").Preimage, {
|
|
@@ -28,7 +28,7 @@ export declare class TicketsMarker extends WithDebug {
|
|
|
28
28
|
static Codec: import("@typeberry/codec").Descriptor<TicketsMarker, import("@typeberry/codec").ViewOf<TicketsMarker, {
|
|
29
29
|
tickets: import("@typeberry/codec").Descriptor<readonly Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<Ticket, import("@typeberry/codec").ViewOf<Ticket, {
|
|
30
30
|
id: import("@typeberry/codec").Descriptor<Bytes<32>, Bytes<32>>;
|
|
31
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
31
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
32
32
|
}>>>;
|
|
33
33
|
}>>;
|
|
34
34
|
static create({ tickets }: CodecRecord<TicketsMarker>): TicketsMarker;
|
|
@@ -89,7 +89,7 @@ export declare class Header extends WithDebug {
|
|
|
89
89
|
ticketsMarker: import("@typeberry/codec").Descriptor<TicketsMarker | null, import("@typeberry/codec").ViewOf<TicketsMarker, {
|
|
90
90
|
tickets: import("@typeberry/codec").Descriptor<readonly Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<Ticket, import("@typeberry/codec").ViewOf<Ticket, {
|
|
91
91
|
id: import("@typeberry/codec").Descriptor<Bytes<32>, Bytes<32>>;
|
|
92
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
92
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
93
93
|
}>>>;
|
|
94
94
|
}> | null>;
|
|
95
95
|
bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, Bytes<2>>;
|
|
@@ -155,7 +155,7 @@ export declare const headerViewWithHashCodec: import("@typeberry/codec").Descrip
|
|
|
155
155
|
ticketsMarker: import("@typeberry/codec").Descriptor<TicketsMarker | null, import("@typeberry/codec").ViewOf<TicketsMarker, {
|
|
156
156
|
tickets: import("@typeberry/codec").Descriptor<readonly Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<Ticket, import("@typeberry/codec").ViewOf<Ticket, {
|
|
157
157
|
id: import("@typeberry/codec").Descriptor<Bytes<32>, Bytes<32>>;
|
|
158
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
158
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
159
159
|
}>>>;
|
|
160
160
|
}> | null>;
|
|
161
161
|
bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, Bytes<2>>;
|
|
@@ -178,7 +178,7 @@ export declare const headerViewWithHashCodec: import("@typeberry/codec").Descrip
|
|
|
178
178
|
ticketsMarker: import("@typeberry/codec").Descriptor<TicketsMarker | null, import("@typeberry/codec").ViewOf<TicketsMarker, {
|
|
179
179
|
tickets: import("@typeberry/codec").Descriptor<readonly Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<Ticket, import("@typeberry/codec").ViewOf<Ticket, {
|
|
180
180
|
id: import("@typeberry/codec").Descriptor<Bytes<32>, Bytes<32>>;
|
|
181
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
181
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
182
182
|
}>>>;
|
|
183
183
|
}> | null>;
|
|
184
184
|
bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, Bytes<2>>;
|
|
@@ -203,7 +203,7 @@ export declare const headerViewWithHashCodec: import("@typeberry/codec").Descrip
|
|
|
203
203
|
ticketsMarker: import("@typeberry/codec").Descriptor<TicketsMarker | null, import("@typeberry/codec").ViewOf<TicketsMarker, {
|
|
204
204
|
tickets: import("@typeberry/codec").Descriptor<readonly Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<Ticket, import("@typeberry/codec").ViewOf<Ticket, {
|
|
205
205
|
id: import("@typeberry/codec").Descriptor<Bytes<32>, Bytes<32>>;
|
|
206
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
206
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
207
207
|
}>>>;
|
|
208
208
|
}> | null>;
|
|
209
209
|
bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, Bytes<2>>;
|
|
@@ -226,7 +226,7 @@ export declare const headerViewWithHashCodec: import("@typeberry/codec").Descrip
|
|
|
226
226
|
ticketsMarker: import("@typeberry/codec").Descriptor<TicketsMarker | null, import("@typeberry/codec").ViewOf<TicketsMarker, {
|
|
227
227
|
tickets: import("@typeberry/codec").Descriptor<readonly Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<Ticket, import("@typeberry/codec").ViewOf<Ticket, {
|
|
228
228
|
id: import("@typeberry/codec").Descriptor<Bytes<32>, Bytes<32>>;
|
|
229
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
229
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
230
230
|
}>>>;
|
|
231
231
|
}> | null>;
|
|
232
232
|
bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, Bytes<2>>;
|
|
@@ -19,7 +19,7 @@ export declare function testBlockView(): import("@typeberry/codec").ViewOf<Block
|
|
|
19
19
|
ticketsMarker: import("@typeberry/codec").Descriptor<import("./header.js").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("./header.js").TicketsMarker, {
|
|
20
20
|
tickets: import("@typeberry/codec").Descriptor<readonly import("./tickets.js").Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<import("./tickets.js").Ticket, import("@typeberry/codec").ViewOf<import("./tickets.js").Ticket, {
|
|
21
21
|
id: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
|
|
22
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
22
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
23
23
|
}>>>;
|
|
24
24
|
}> | null>;
|
|
25
25
|
bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
|
|
@@ -29,7 +29,7 @@ export declare function testBlockView(): import("@typeberry/codec").ViewOf<Block
|
|
|
29
29
|
}>>;
|
|
30
30
|
extrinsic: import("@typeberry/codec").Descriptor<import("./block.js").Extrinsic, import("@typeberry/codec").ViewOf<import("./block.js").Extrinsic, {
|
|
31
31
|
tickets: import("@typeberry/codec").Descriptor<readonly import("./tickets.js").SignedTicket[] & import("@typeberry/utils").WithOpaque<"Size: [0..chainSpec.maxTicketsPerExtrinsic)">, import("@typeberry/codec").SequenceView<import("./tickets.js").SignedTicket, import("@typeberry/codec").ViewOf<import("./tickets.js").SignedTicket, {
|
|
32
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
32
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
33
33
|
signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
|
|
34
34
|
}>>>;
|
|
35
35
|
preimages: import("@typeberry/codec").Descriptor<import("./preimage.js").Preimage[], import("@typeberry/codec").SequenceView<import("./preimage.js").Preimage, import("@typeberry/codec").ViewOf<import("./preimage.js").Preimage, {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Bytes } from "#@typeberry/bytes";
|
|
2
2
|
import { type CodecRecord } from "#@typeberry/codec";
|
|
3
3
|
import type { KnownSizeArray } from "#@typeberry/collections";
|
|
4
|
+
import type { ChainSpec } from "#@typeberry/config";
|
|
4
5
|
import { type BandersnatchProof } from "#@typeberry/crypto/bandersnatch.js";
|
|
5
6
|
import { type U8 } from "#@typeberry/numbers";
|
|
6
7
|
import { type Opaque, WithDebug } from "#@typeberry/utils";
|
|
@@ -11,14 +12,14 @@ import { type Opaque, WithDebug } from "#@typeberry/utils";
|
|
|
11
12
|
* https://graypaper.fluffylabs.dev/#/579bd12/417200417400
|
|
12
13
|
*/
|
|
13
14
|
export type TicketAttempt = Opaque<U8, "TicketAttempt[0|1|2]">;
|
|
14
|
-
export declare function tryAsTicketAttempt(x: number): TicketAttempt;
|
|
15
|
+
export declare function tryAsTicketAttempt(x: number, chainSpec: ChainSpec): TicketAttempt;
|
|
15
16
|
export declare class SignedTicket extends WithDebug {
|
|
16
17
|
/** Which attempt was it? */
|
|
17
18
|
readonly attempt: TicketAttempt;
|
|
18
19
|
/** The bandersnatch membership proof of knowledge. */
|
|
19
20
|
readonly signature: BandersnatchProof;
|
|
20
21
|
static Codec: import("@typeberry/codec").Descriptor<SignedTicket, import("@typeberry/codec").ViewOf<SignedTicket, {
|
|
21
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">,
|
|
22
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
22
23
|
signature: import("@typeberry/codec").Descriptor<Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, Bytes<784>>;
|
|
23
24
|
}>>;
|
|
24
25
|
static create({ attempt, signature }: CodecRecord<SignedTicket>): SignedTicket;
|
|
@@ -36,7 +37,7 @@ export declare class Ticket extends WithDebug {
|
|
|
36
37
|
readonly attempt: TicketAttempt;
|
|
37
38
|
static Codec: import("@typeberry/codec").Descriptor<Ticket, import("@typeberry/codec").ViewOf<Ticket, {
|
|
38
39
|
id: import("@typeberry/codec").Descriptor<Bytes<32>, Bytes<32>>;
|
|
39
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">,
|
|
40
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
40
41
|
}>>;
|
|
41
42
|
static create({ id, attempt }: CodecRecord<Ticket>): Ticket;
|
|
42
43
|
private constructor();
|
|
@@ -52,7 +53,7 @@ export declare class Ticket extends WithDebug {
|
|
|
52
53
|
declare const TicketsExtrinsicBounds = "Size: [0..chainSpec.maxTicketsPerExtrinsic)";
|
|
53
54
|
export type TicketsExtrinsic = KnownSizeArray<SignedTicket, typeof TicketsExtrinsicBounds>;
|
|
54
55
|
export declare const ticketsExtrinsicCodec: import("@typeberry/codec").Descriptor<readonly SignedTicket[] & import("@typeberry/utils").WithOpaque<"Size: [0..chainSpec.maxTicketsPerExtrinsic)">, import("@typeberry/codec").SequenceView<SignedTicket, import("@typeberry/codec").ViewOf<SignedTicket, {
|
|
55
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">,
|
|
56
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
56
57
|
signature: import("@typeberry/codec").Descriptor<Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, Bytes<784>>;
|
|
57
58
|
}>>>;
|
|
58
59
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block/tickets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAAS,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAErG,OAAO,
|
|
1
|
+
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block/tickets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAAS,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAErG,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAgB,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGxE;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;AAC/D,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,aAAa,CAKjF;AAaD,qBAAa,YAAa,SAAQ,SAAS;IAWvC,4BAA4B;aACZ,OAAO,EAAE,aAAa;IACtC,sDAAsD;aACtC,SAAS,EAAE,iBAAiB;IAb9C,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,WAAW,CAAC,YAAY,CAAC;IAI/D,OAAO;CAQR;AAED,gDAAgD;AAChD,qBAAa,MAAO,SAAQ,SAAS;IAWjC;;;;OAIG;aACa,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;IAC7B,2BAA2B;aACX,OAAO,EAAE,aAAa;IAjBxC,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC;IAIlD,OAAO;CAYR;AAED;;;;;;;GAOG;AACH,QAAA,MAAM,sBAAsB,gDAAgD,CAAC;AAC7E,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,YAAY,EAAE,OAAO,sBAAsB,CAAC,CAAC;AAE3F,eAAO,MAAM,qBAAqB;;;IAUhC,CAAC"}
|
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
import { codec } from "#@typeberry/codec";
|
|
2
2
|
import { BANDERSNATCH_PROOF_BYTES } from "#@typeberry/crypto/bandersnatch.js";
|
|
3
3
|
import { HASH_SIZE } from "#@typeberry/hash";
|
|
4
|
-
import { tryAsU8 } from "#@typeberry/numbers";
|
|
4
|
+
import { tryAsU8, tryAsU32 } from "#@typeberry/numbers";
|
|
5
5
|
import { asOpaqueType, WithDebug } from "#@typeberry/utils";
|
|
6
6
|
import { codecKnownSizeArray, codecWithContext } from "./codec-utils.js";
|
|
7
|
-
export function tryAsTicketAttempt(x) {
|
|
7
|
+
export function tryAsTicketAttempt(x, chainSpec) {
|
|
8
|
+
if (x >= chainSpec.ticketsPerValidator) {
|
|
9
|
+
throw new Error(`Ticket attempt ${x} is out of bounds [0, ${chainSpec.ticketsPerValidator})`);
|
|
10
|
+
}
|
|
8
11
|
return asOpaqueType(tryAsU8(x));
|
|
9
12
|
}
|
|
13
|
+
const ticketAttemptCodec = codecWithContext((context) => {
|
|
14
|
+
return codec.varU32.convert((x) => {
|
|
15
|
+
tryAsTicketAttempt(x, context);
|
|
16
|
+
return tryAsU32(x);
|
|
17
|
+
}, (x) => tryAsTicketAttempt(x, context));
|
|
18
|
+
});
|
|
10
19
|
/* Bandersnatch-signed ticket contest entry. */
|
|
11
20
|
export class SignedTicket extends WithDebug {
|
|
12
21
|
attempt;
|
|
13
22
|
signature;
|
|
14
23
|
static Codec = codec.Class(SignedTicket, {
|
|
15
|
-
|
|
16
|
-
attempt: codec.u8.asOpaque(),
|
|
24
|
+
attempt: ticketAttemptCodec,
|
|
17
25
|
signature: codec.bytes(BANDERSNATCH_PROOF_BYTES).asOpaque(),
|
|
18
26
|
});
|
|
19
27
|
static create({ attempt, signature }) {
|
|
@@ -35,8 +43,7 @@ export class Ticket extends WithDebug {
|
|
|
35
43
|
attempt;
|
|
36
44
|
static Codec = codec.Class(Ticket, {
|
|
37
45
|
id: codec.bytes(HASH_SIZE),
|
|
38
|
-
|
|
39
|
-
attempt: codec.u8.asOpaque(),
|
|
46
|
+
attempt: ticketAttemptCodec,
|
|
40
47
|
});
|
|
41
48
|
static create({ id, attempt }) {
|
|
42
49
|
return new Ticket(id, attempt);
|
|
@@ -18,7 +18,7 @@ export declare const blockViewFromJson: (spec: ChainSpec) => import("@typeberry/
|
|
|
18
18
|
ticketsMarker: import("@typeberry/codec").Descriptor<import("@typeberry/block").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("@typeberry/block").TicketsMarker, {
|
|
19
19
|
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, {
|
|
20
20
|
id: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
|
|
21
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
21
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
22
22
|
}>>>;
|
|
23
23
|
}> | null>;
|
|
24
24
|
bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
|
|
@@ -28,7 +28,7 @@ export declare const blockViewFromJson: (spec: ChainSpec) => import("@typeberry/
|
|
|
28
28
|
}>>;
|
|
29
29
|
extrinsic: import("@typeberry/codec").Descriptor<import("@typeberry/block").Extrinsic, import("@typeberry/codec").ViewOf<import("@typeberry/block").Extrinsic, {
|
|
30
30
|
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, {
|
|
31
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
31
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
32
32
|
signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
|
|
33
33
|
}>>>;
|
|
34
34
|
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, {
|
|
@@ -3,7 +3,7 @@ import { json, parseFromJson } from "#@typeberry/json-parser";
|
|
|
3
3
|
import { getExtrinsicFromJson } from "./extrinsic.js";
|
|
4
4
|
import { headerFromJson } from "./header.js";
|
|
5
5
|
export const blockFromJson = (spec) => json.object({
|
|
6
|
-
header: headerFromJson,
|
|
6
|
+
header: headerFromJson(spec),
|
|
7
7
|
extrinsic: getExtrinsicFromJson(spec),
|
|
8
8
|
}, ({ header, extrinsic }) => Block.create({ header, extrinsic }));
|
|
9
9
|
export const blockViewFromJson = (spec) => {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type TicketAttempt } from "#@typeberry/block/tickets.js";
|
|
2
2
|
import { Bytes, BytesBlob } from "#@typeberry/bytes";
|
|
3
|
+
import type { ChainSpec } from "#@typeberry/config";
|
|
3
4
|
import { type FromJson } from "#@typeberry/json-parser";
|
|
4
5
|
export declare namespace fromJson {
|
|
5
6
|
const bytesN: <N extends number, T extends Bytes<N> = Bytes<N>>(n: N) => import("@typeberry/json-parser").FromJsonWithParser<string, T>;
|
|
@@ -9,7 +10,7 @@ export declare namespace fromJson {
|
|
|
9
10
|
const bytesBlob: import("@typeberry/json-parser").FromJsonWithParser<string, BytesBlob>;
|
|
10
11
|
const bytesBlobNoPrefix: import("@typeberry/json-parser").FromJsonWithParser<string, BytesBlob>;
|
|
11
12
|
const ed25519Signature: import("@typeberry/json-parser").FromJsonWithParser<string, Bytes<64> & import("@typeberry/utils").WithOpaque<"Ed25519Signature">>;
|
|
12
|
-
const ticketAttempt: FromJson<TicketAttempt>;
|
|
13
|
+
const ticketAttempt: (spec: ChainSpec) => FromJson<TicketAttempt>;
|
|
13
14
|
const uint8Array: import("@typeberry/json-parser").FromJsonWithParser<unknown, Uint8Array<ArrayBuffer>>;
|
|
14
15
|
const bigUint64Array: import("@typeberry/json-parser").FromJsonWithParser<unknown, BigUint64Array<ArrayBuffer>>;
|
|
15
16
|
const bigUint64: import("@typeberry/json-parser").FromJsonWithParser<unknown, bigint>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block-json/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block-json/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,6BAA6B,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,KAAK,QAAQ,EAAQ,MAAM,wBAAwB,CAAC;AAE7D,yBAAiB,QAAQ,CAAC;IACjB,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,mEACd,CAAC;IAExD,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,mEACd,CAAC;IAEhE,MAAM,OAAO,GAAI,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC,qEAAoE,CAAC;IAEzG,MAAM,eAAe,GAAI,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC,qEACoB,CAAC;IAEjE,MAAM,SAAS,wEAAuC,CAAC;IAEvD,MAAM,iBAAiB,wEAA+C,CAAC;IAEvE,MAAM,gBAAgB,oIAA+E,CAAC;IAEtG,MAAM,aAAa,GAAI,MAAM,SAAS,KAGrC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAEzB,MAAM,UAAU,uFAUrB,CAAC;IAEI,MAAM,cAAc,2FAUzB,CAAC;IAEI,MAAM,SAAS,sEAA2C,CAAC;CACnE"}
|
|
@@ -10,11 +10,8 @@ export var fromJson;
|
|
|
10
10
|
fromJson.bytesBlob = json.fromString(BytesBlob.parseBlob);
|
|
11
11
|
fromJson.bytesBlobNoPrefix = json.fromString(BytesBlob.parseBlobNoPrefix);
|
|
12
12
|
fromJson.ed25519Signature = json.fromString((v) => Bytes.parseBytes(v, 64).asOpaque());
|
|
13
|
-
fromJson.ticketAttempt = json.fromNumber((v) => {
|
|
14
|
-
|
|
15
|
-
throw new Error("Invalid TicketAttempt value.");
|
|
16
|
-
}
|
|
17
|
-
return tryAsTicketAttempt(v);
|
|
13
|
+
fromJson.ticketAttempt = (spec) => json.fromNumber((v) => {
|
|
14
|
+
return tryAsTicketAttempt(v, spec);
|
|
18
15
|
});
|
|
19
16
|
fromJson.uint8Array = json.fromAny((v) => {
|
|
20
17
|
if (Array.isArray(v)) {
|
|
@@ -6,7 +6,7 @@ import { guaranteesExtrinsicFromJson } from "./guarantees-extrinsic.js";
|
|
|
6
6
|
import { preimagesExtrinsicFromJson } from "./preimages-extrinsic.js";
|
|
7
7
|
import { ticketsExtrinsicFromJson } from "./tickets-extrinsic.js";
|
|
8
8
|
export const getExtrinsicFromJson = (ctx) => json.object({
|
|
9
|
-
tickets: ticketsExtrinsicFromJson,
|
|
9
|
+
tickets: ticketsExtrinsicFromJson(ctx),
|
|
10
10
|
preimages: preimagesExtrinsicFromJson,
|
|
11
11
|
guarantees: guaranteesExtrinsicFromJson,
|
|
12
12
|
assurances: getAssurancesExtrinsicFromJson(ctx),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { Header } from "#@typeberry/block";
|
|
2
|
-
|
|
2
|
+
import type { ChainSpec } from "#@typeberry/config";
|
|
3
|
+
export declare const headerFromJson: (spec: ChainSpec) => import("@typeberry/json-parser").FromJsonWithParser<unknown, Header>;
|
|
3
4
|
//# sourceMappingURL=header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block-json/header.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,MAAM,EAQP,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block-json/header.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,MAAM,EAQP,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AA6CnD,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,yEAqD7C,CAAC"}
|
|
@@ -14,36 +14,38 @@ const epochMark = json.object({
|
|
|
14
14
|
tickets_entropy: fromJson.bytes32(),
|
|
15
15
|
validators: json.array(validatorKeysFromJson),
|
|
16
16
|
}, (x) => EpochMarker.create({ entropy: x.entropy, ticketsEntropy: x.tickets_entropy, validators: x.validators }));
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
17
|
+
export const headerFromJson = (spec) => {
|
|
18
|
+
const ticket = json.object({
|
|
19
|
+
id: fromJson.bytes32(),
|
|
20
|
+
attempt: fromJson.ticketAttempt(spec),
|
|
21
|
+
}, (x) => Ticket.create({ id: x.id, attempt: x.attempt }));
|
|
22
|
+
return json.object({
|
|
23
|
+
parent: fromJson.bytes32(),
|
|
24
|
+
parent_state_root: fromJson.bytes32(),
|
|
25
|
+
extrinsic_hash: fromJson.bytes32(),
|
|
26
|
+
slot: "number",
|
|
27
|
+
epoch_mark: json.optional(epochMark),
|
|
28
|
+
tickets_mark: json.optional(json.array(ticket)),
|
|
29
|
+
offenders_mark: json.array(fromJson.bytes32()),
|
|
30
|
+
author_index: "number",
|
|
31
|
+
entropy_source: bandersnatchVrfSignature,
|
|
32
|
+
seal: bandersnatchVrfSignature,
|
|
33
|
+
}, ({ parent, parent_state_root, extrinsic_hash, slot, epoch_mark, tickets_mark, offenders_mark, author_index, entropy_source, seal, }) => {
|
|
34
|
+
const epochMarker = epoch_mark ?? null;
|
|
35
|
+
const ticketsMarker = tickets_mark === undefined || tickets_mark === null
|
|
36
|
+
? null
|
|
37
|
+
: TicketsMarker.create({ tickets: asOpaqueType(tickets_mark) });
|
|
38
|
+
return Header.create({
|
|
39
|
+
parentHeaderHash: parent,
|
|
40
|
+
priorStateRoot: parent_state_root,
|
|
41
|
+
extrinsicHash: extrinsic_hash,
|
|
42
|
+
timeSlotIndex: slot,
|
|
43
|
+
epochMarker,
|
|
44
|
+
ticketsMarker,
|
|
45
|
+
offendersMarker: offenders_mark,
|
|
46
|
+
bandersnatchBlockAuthorIndex: author_index,
|
|
47
|
+
entropySource: entropy_source,
|
|
48
|
+
seal,
|
|
49
|
+
});
|
|
48
50
|
});
|
|
49
|
-
}
|
|
51
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { SignedTicket } from "#@typeberry/block/tickets.js";
|
|
2
|
-
|
|
2
|
+
import type { ChainSpec } from "#@typeberry/config";
|
|
3
|
+
export declare const ticketsExtrinsicFromJson: (spec: ChainSpec) => ["array", import("@typeberry/json-parser").FromJsonWithParser<string, SignedTicket> | import("@typeberry/json-parser").FromJsonWithParser<number, SignedTicket> | import("@typeberry/json-parser").FromJsonWithParser<unknown, SignedTicket> | import("@typeberry/json-parser").ObjectFromJson<SignedTicket> | import("@typeberry/json-parser").FromJsonOptional<SignedTicket> | import("@typeberry/json-parser").Parser<unknown, SignedTicket[]>];
|
|
3
4
|
//# sourceMappingURL=tickets-extrinsic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tickets-extrinsic.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block-json/tickets-extrinsic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"tickets-extrinsic.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block-json/tickets-extrinsic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAKnD,eAAO,MAAM,wBAAwB,GAAI,MAAM,SAAS,ubAUvD,CAAC"}
|
|
@@ -3,8 +3,10 @@ import { Bytes } from "#@typeberry/bytes";
|
|
|
3
3
|
import { BANDERSNATCH_PROOF_BYTES } from "#@typeberry/crypto/bandersnatch.js";
|
|
4
4
|
import { json } from "#@typeberry/json-parser";
|
|
5
5
|
import { fromJson } from "./common.js";
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
export const ticketsExtrinsicFromJson = (spec) => {
|
|
7
|
+
const ticketEnvelopeFromJson = json.object({
|
|
8
|
+
attempt: fromJson.ticketAttempt(spec),
|
|
9
|
+
signature: json.fromString((v) => Bytes.parseBytes(v, BANDERSNATCH_PROOF_BYTES).asOpaque()),
|
|
10
|
+
}, (x) => SignedTicket.create({ attempt: x.attempt, signature: x.signature }));
|
|
11
|
+
return json.array(ticketEnvelopeFromJson);
|
|
12
|
+
};
|
|
@@ -140,7 +140,7 @@ export declare class Initialize extends WithDebug {
|
|
|
140
140
|
ticketsMarker: import("@typeberry/codec").Descriptor<import("@typeberry/block").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("@typeberry/block").TicketsMarker, {
|
|
141
141
|
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, {
|
|
142
142
|
id: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
|
|
143
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">,
|
|
143
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, U32>;
|
|
144
144
|
}>>>;
|
|
145
145
|
}> | null>;
|
|
146
146
|
bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
|
|
@@ -25,7 +25,7 @@ onNewBlocks) {
|
|
|
25
25
|
const streamManager = new StreamManager();
|
|
26
26
|
// start the networking tasks
|
|
27
27
|
const syncTask = SyncTask.start(spec, blake2b, streamManager, connections, blocks, onNewBlocks);
|
|
28
|
-
const ticketTask = TicketDistributionTask.start(streamManager, connections);
|
|
28
|
+
const ticketTask = TicketDistributionTask.start(streamManager, connections, spec);
|
|
29
29
|
setImmediate(async () => {
|
|
30
30
|
while (network.isRunning) {
|
|
31
31
|
await setTimeout(3000);
|
|
@@ -2,6 +2,7 @@ import type { Epoch } from "#@typeberry/block";
|
|
|
2
2
|
import { SignedTicket } from "#@typeberry/block/tickets.js";
|
|
3
3
|
import type { BytesBlob } from "#@typeberry/bytes";
|
|
4
4
|
import { type CodecRecord } from "#@typeberry/codec";
|
|
5
|
+
import type { ChainSpec } from "#@typeberry/config";
|
|
5
6
|
import { WithDebug } from "#@typeberry/utils";
|
|
6
7
|
import { type StreamHandler, type StreamId, type StreamMessageSender } from "./stream.js";
|
|
7
8
|
/**
|
|
@@ -24,7 +25,7 @@ export declare class TicketDistributionRequest extends WithDebug {
|
|
|
24
25
|
static Codec: import("@typeberry/codec").Descriptor<TicketDistributionRequest, import("@typeberry/codec").ViewOf<TicketDistributionRequest, {
|
|
25
26
|
epochIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"Epoch">, import("@typeberry/bytes").Bytes<4>>;
|
|
26
27
|
ticket: import("@typeberry/codec").Descriptor<SignedTicket, import("@typeberry/codec").ViewOf<SignedTicket, {
|
|
27
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
28
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
28
29
|
signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
|
|
29
30
|
}>>;
|
|
30
31
|
}>>;
|
|
@@ -32,15 +33,17 @@ export declare class TicketDistributionRequest extends WithDebug {
|
|
|
32
33
|
private constructor();
|
|
33
34
|
}
|
|
34
35
|
export declare class ServerHandler<T extends STREAM_KIND> implements StreamHandler<T> {
|
|
36
|
+
private readonly chainSpec;
|
|
35
37
|
readonly kind: T;
|
|
36
38
|
private readonly onTicketReceived;
|
|
37
|
-
constructor(kind: T, onTicketReceived: (epochIndex: Epoch, ticket: SignedTicket) => void);
|
|
39
|
+
constructor(chainSpec: ChainSpec, kind: T, onTicketReceived: (epochIndex: Epoch, ticket: SignedTicket) => void);
|
|
38
40
|
onStreamMessage(sender: StreamMessageSender, message: BytesBlob): void;
|
|
39
41
|
onClose(_streamId: StreamId): void;
|
|
40
42
|
}
|
|
41
43
|
export declare class ClientHandler<T extends STREAM_KIND> implements StreamHandler<T> {
|
|
44
|
+
private readonly chainSpec;
|
|
42
45
|
readonly kind: T;
|
|
43
|
-
constructor(kind: T);
|
|
46
|
+
constructor(chainSpec: ChainSpec, kind: T);
|
|
44
47
|
onStreamMessage(sender: StreamMessageSender): void;
|
|
45
48
|
onClose(_streamId: StreamId): void;
|
|
46
49
|
sendTicket(sender: StreamMessageSender, epochIndex: Epoch, ticket: SignedTicket): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ce-131-ce-132-safrole-ticket-distribution.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ce-131-ce-132-safrole-ticket-distribution.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAE3G;;;;;;GAMG;AAEH,eAAO,MAAM,8BAA8B,+DAAuB,CAAC;AACnE,eAAO,MAAM,wBAAwB,+DAAuB,CAAC;AAE7D,KAAK,WAAW,GAAG,OAAO,8BAA8B,GAAG,OAAO,wBAAwB,CAAC;AAE3F;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,SAAS;aAWpC,UAAU,EAAE,KAAK;aACjB,MAAM,EAAE,YAAY;IAXtC,MAAM,CAAC,KAAK;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,yBAAyB,CAAC;IAI5E,OAAO;CAMR;AAID,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAEzE,OAAO,CAAC,QAAQ,CAAC,SAAS;aACV,IAAI,EAAE,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAFhB,SAAS,EAAE,SAAS,EACrB,IAAI,EAAE,CAAC,EACN,gBAAgB,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI;IAGtF,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;IAOtE,OAAO,CAAC,SAAS,EAAE,QAAQ;CAC5B;AAED,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAEzE,OAAO,CAAC,QAAQ,CAAC,SAAS;aACV,IAAI,EAAE,CAAC;gBADN,SAAS,EAAE,SAAS,EACrB,IAAI,EAAE,CAAC;IAGzB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAKlD,OAAO,CAAC,SAAS,EAAE,QAAQ;IAE3B,UAAU,CAAC,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY;CAKhF"}
|
|
@@ -34,14 +34,16 @@ export class TicketDistributionRequest extends WithDebug {
|
|
|
34
34
|
}
|
|
35
35
|
const logger = Logger.new(import.meta.filename, "protocol/ce-131-ce-132");
|
|
36
36
|
export class ServerHandler {
|
|
37
|
+
chainSpec;
|
|
37
38
|
kind;
|
|
38
39
|
onTicketReceived;
|
|
39
|
-
constructor(kind, onTicketReceived) {
|
|
40
|
+
constructor(chainSpec, kind, onTicketReceived) {
|
|
41
|
+
this.chainSpec = chainSpec;
|
|
40
42
|
this.kind = kind;
|
|
41
43
|
this.onTicketReceived = onTicketReceived;
|
|
42
44
|
}
|
|
43
45
|
onStreamMessage(sender, message) {
|
|
44
|
-
const ticketDistribution = Decoder.decodeObject(TicketDistributionRequest.Codec, message);
|
|
46
|
+
const ticketDistribution = Decoder.decodeObject(TicketDistributionRequest.Codec, message, this.chainSpec);
|
|
45
47
|
logger.log `[${sender.streamId}][ce-${this.kind}] Received ticket for epoch ${ticketDistribution.epochIndex}`;
|
|
46
48
|
this.onTicketReceived(ticketDistribution.epochIndex, ticketDistribution.ticket);
|
|
47
49
|
sender.close();
|
|
@@ -49,8 +51,10 @@ export class ServerHandler {
|
|
|
49
51
|
onClose(_streamId) { }
|
|
50
52
|
}
|
|
51
53
|
export class ClientHandler {
|
|
54
|
+
chainSpec;
|
|
52
55
|
kind;
|
|
53
|
-
constructor(kind) {
|
|
56
|
+
constructor(chainSpec, kind) {
|
|
57
|
+
this.chainSpec = chainSpec;
|
|
54
58
|
this.kind = kind;
|
|
55
59
|
}
|
|
56
60
|
onStreamMessage(sender) {
|
|
@@ -60,7 +64,7 @@ export class ClientHandler {
|
|
|
60
64
|
onClose(_streamId) { }
|
|
61
65
|
sendTicket(sender, epochIndex, ticket) {
|
|
62
66
|
const request = TicketDistributionRequest.create({ epochIndex, ticket });
|
|
63
|
-
sender.bufferAndSend(Encoder.encodeObject(TicketDistributionRequest.Codec, request));
|
|
67
|
+
sender.bufferAndSend(Encoder.encodeObject(TicketDistributionRequest.Codec, request, this.chainSpec));
|
|
64
68
|
sender.close();
|
|
65
69
|
}
|
|
66
70
|
}
|
|
@@ -3,25 +3,26 @@ import { describe, it } from "node:test";
|
|
|
3
3
|
import { tryAsEpoch } from "#@typeberry/block";
|
|
4
4
|
import { SignedTicket, tryAsTicketAttempt } from "#@typeberry/block/tickets.js";
|
|
5
5
|
import { Bytes } from "#@typeberry/bytes";
|
|
6
|
+
import { tinyChainSpec } from "#@typeberry/config";
|
|
6
7
|
import { BANDERSNATCH_PROOF_BYTES } from "#@typeberry/crypto";
|
|
7
8
|
import { OK } from "#@typeberry/utils";
|
|
8
9
|
import { ClientHandler, ServerHandler, STREAM_KIND_GENERATOR_TO_PROXY, } from "./ce-131-ce-132-safrole-ticket-distribution.js";
|
|
9
10
|
import { testClientServer } from "./test-utils.js";
|
|
10
11
|
const TEST_EPOCH = tryAsEpoch(1);
|
|
11
12
|
const TEST_TICKET = SignedTicket.create({
|
|
12
|
-
attempt: tryAsTicketAttempt(0),
|
|
13
|
+
attempt: tryAsTicketAttempt(0, tinyChainSpec),
|
|
13
14
|
signature: Bytes.zero(BANDERSNATCH_PROOF_BYTES).asOpaque(),
|
|
14
15
|
});
|
|
15
16
|
describe("CE 131 and CE 132: Safrole Ticket Distribution", () => {
|
|
16
17
|
it("Client sends a ticket distribution request and the server receives it", async () => {
|
|
17
18
|
const handlers = testClientServer();
|
|
18
19
|
await new Promise((resolve) => {
|
|
19
|
-
handlers.server.registerHandlers(new ServerHandler(STREAM_KIND_GENERATOR_TO_PROXY, (epochIndex, ticket) => {
|
|
20
|
+
handlers.server.registerHandlers(new ServerHandler(tinyChainSpec, STREAM_KIND_GENERATOR_TO_PROXY, (epochIndex, ticket) => {
|
|
20
21
|
assert.strictEqual(epochIndex, TEST_EPOCH);
|
|
21
22
|
assert.deepStrictEqual(ticket, TEST_TICKET);
|
|
22
23
|
resolve(undefined);
|
|
23
24
|
}));
|
|
24
|
-
handlers.client.registerHandlers(new ClientHandler(STREAM_KIND_GENERATOR_TO_PROXY));
|
|
25
|
+
handlers.client.registerHandlers(new ClientHandler(tinyChainSpec, STREAM_KIND_GENERATOR_TO_PROXY));
|
|
25
26
|
handlers.client.withNewStream(STREAM_KIND_GENERATOR_TO_PROXY, (handler, sender) => {
|
|
26
27
|
handler.sendTicket(sender, TEST_EPOCH, TEST_TICKET);
|
|
27
28
|
return OK;
|
|
@@ -69,7 +69,7 @@ export declare class Announcement extends WithDebug {
|
|
|
69
69
|
ticketsMarker: import("@typeberry/codec").Descriptor<import("@typeberry/block").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("@typeberry/block").TicketsMarker, {
|
|
70
70
|
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, {
|
|
71
71
|
id: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
|
|
72
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").
|
|
72
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
|
|
73
73
|
}>>>;
|
|
74
74
|
}> | null>;
|
|
75
75
|
bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
|