@typeberry/lib 0.5.7 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/package.json +3 -1
  2. package/packages/jam/block/block.d.ts +3 -3
  3. package/packages/jam/block/header.d.ts +6 -6
  4. package/packages/jam/block/test-helpers.d.ts +2 -2
  5. package/packages/jam/block/tickets.d.ts +5 -4
  6. package/packages/jam/block/tickets.d.ts.map +1 -1
  7. package/packages/jam/block/tickets.js +13 -6
  8. package/packages/jam/block-json/block.d.ts +2 -2
  9. package/packages/jam/block-json/block.js +1 -1
  10. package/packages/jam/block-json/common.d.ts +2 -1
  11. package/packages/jam/block-json/common.d.ts.map +1 -1
  12. package/packages/jam/block-json/common.js +2 -5
  13. package/packages/jam/block-json/extrinsic.js +1 -1
  14. package/packages/jam/block-json/header.d.ts +2 -1
  15. package/packages/jam/block-json/header.d.ts.map +1 -1
  16. package/packages/jam/block-json/header.js +34 -32
  17. package/packages/jam/block-json/tickets-extrinsic.d.ts +2 -1
  18. package/packages/jam/block-json/tickets-extrinsic.d.ts.map +1 -1
  19. package/packages/jam/block-json/tickets-extrinsic.js +7 -5
  20. package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
  21. package/packages/jam/jamnp-s/network.d.ts +2 -0
  22. package/packages/jam/jamnp-s/network.d.ts.map +1 -1
  23. package/packages/jam/jamnp-s/network.js +4 -0
  24. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +10 -3
  25. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts.map +1 -1
  26. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.js +12 -4
  27. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +4 -3
  28. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  29. package/packages/jam/jamnp-s/tasks/ticket-distribution.d.ts +34 -0
  30. package/packages/jam/jamnp-s/tasks/ticket-distribution.d.ts.map +1 -0
  31. package/packages/jam/jamnp-s/tasks/ticket-distribution.js +115 -0
  32. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.d.ts +2 -0
  33. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.d.ts.map +1 -0
  34. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +220 -0
  35. package/packages/jam/node/main.d.ts.map +1 -1
  36. package/packages/jam/node/main.js +56 -26
  37. package/packages/jam/node/reader.d.ts +2 -2
  38. package/packages/jam/node/workers.d.ts +32 -25
  39. package/packages/jam/node/workers.d.ts.map +1 -1
  40. package/packages/jam/node/workers.js +16 -7
  41. package/packages/jam/safrole/bandersnatch-vrf.d.ts +3 -2
  42. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  43. package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
  44. package/packages/jam/safrole/bandersnatch-vrf.test.js +3 -2
  45. package/packages/jam/safrole/safrole.test.js +80 -72
  46. package/packages/jam/state/safrole-data.d.ts +1 -1
  47. package/packages/jam/state/test.utils.js +1 -1
  48. package/packages/jam/state-json/dump.js +2 -2
  49. package/packages/jam/state-json/safrole.d.ts +2 -2
  50. package/packages/jam/state-json/safrole.d.ts.map +1 -1
  51. package/packages/jam/state-json/safrole.js +8 -6
  52. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
  53. package/packages/jam/state-vectors/index.d.ts +8 -7
  54. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  55. package/packages/jam/state-vectors/index.js +6 -4
  56. package/packages/jam/transition/hasher.test.js +1 -1
  57. package/packages/workers/api-node/config.d.ts +5 -1
  58. package/packages/workers/api-node/config.d.ts.map +1 -1
  59. package/packages/workers/api-node/config.js +9 -3
  60. package/packages/workers/api-node/port.d.ts +8 -0
  61. package/packages/workers/api-node/port.d.ts.map +1 -1
  62. package/packages/workers/api-node/port.js +10 -0
  63. package/packages/workers/block-authorship/bootstrap-main.js +10 -3
  64. package/packages/workers/block-authorship/main.d.ts +2 -1
  65. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  66. package/packages/workers/block-authorship/main.js +5 -4
  67. package/packages/workers/block-authorship/protocol.d.ts +4 -4
  68. package/packages/workers/block-authorship/ticket-generator.d.ts +3 -2
  69. package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
  70. package/packages/workers/block-authorship/ticket-generator.js +2 -3
  71. package/packages/workers/block-authorship/ticket-generator.test.js +11 -10
  72. package/packages/workers/comms-authorship-network/index.d.ts +3 -0
  73. package/packages/workers/comms-authorship-network/index.d.ts.map +1 -0
  74. package/packages/workers/comms-authorship-network/index.js +2 -0
  75. package/packages/workers/comms-authorship-network/protocol.d.ts +27 -0
  76. package/packages/workers/comms-authorship-network/protocol.d.ts.map +1 -0
  77. package/packages/workers/comms-authorship-network/protocol.js +24 -0
  78. package/packages/workers/comms-authorship-network/tickets-message.d.ts +18 -0
  79. package/packages/workers/comms-authorship-network/tickets-message.d.ts.map +1 -0
  80. package/packages/workers/comms-authorship-network/tickets-message.js +19 -0
  81. package/packages/workers/importer/protocol.d.ts +8 -8
  82. package/packages/workers/jam-network/bootstrap-main.js +10 -3
  83. package/packages/workers/jam-network/main.d.ts +2 -1
  84. package/packages/workers/jam-network/main.d.ts.map +1 -1
  85. package/packages/workers/jam-network/main.js +8 -1
  86. package/packages/workers/jam-network/protocol.d.ts +10 -10
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeberry/lib",
3
- "version": "0.5.7",
3
+ "version": "0.5.8",
4
4
  "description": "Typeberry Library",
5
5
  "main": "./bin/lib/index.js",
6
6
  "types": "./bin/lib/index.d.ts",
@@ -256,6 +256,8 @@
256
256
  "#@typeberry/workers-api-node/*": "./packages/workers/api-node/*",
257
257
  "#@typeberry/block-authorship": "./packages/workers/block-authorship/index.js",
258
258
  "#@typeberry/block-authorship/*": "./packages/workers/block-authorship/*",
259
+ "#@typeberry/comms-authorship-network": "./packages/workers/comms-authorship-network/index.js",
260
+ "#@typeberry/comms-authorship-network/*": "./packages/workers/comms-authorship-network/*",
259
261
  "#@typeberry/importer": "./packages/workers/importer/index.js",
260
262
  "#@typeberry/importer/*": "./packages/workers/importer/*",
261
263
  "#@typeberry/jam-network": "./packages/workers/jam-network/index.js",
@@ -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").U8>;
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").U8>;
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").U8>;
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").U8>;
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").U8>;
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").U8>;
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").U8>;
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").U8>;
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").U8>;
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").U8>;
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").U8>;
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]">, U8>;
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]">, U8>;
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]">, U8>;
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,EAAW,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACtD,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,GAAG,aAAa,CAE3D;AAGD,qBAAa,YAAa,SAAQ,SAAS;IAYvC,4BAA4B;aACZ,OAAO,EAAE,aAAa;IACtC,sDAAsD;aACtC,SAAS,EAAE,iBAAiB;IAd9C,MAAM,CAAC,KAAK;;;QAIT;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;IAYjC;;;;OAIG;aACa,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;IAC7B,2BAA2B;aACX,OAAO,EAAE,aAAa;IAlBxC,MAAM,CAAC,KAAK;;;QAIT;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
+ {"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
- // TODO [ToDr] we should verify that attempt is either 0|1|2.
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
- // TODO [ToDr] we should verify that attempt is either 0|1|2.
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").U8>;
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").U8>;
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;AAEpD,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,EAKpB,QAAQ,CAAC,aAAa,CAAC,CAAC;IAEvB,MAAM,UAAU,uFAUrB,CAAC;IAEI,MAAM,cAAc,2FAUzB,CAAC;IAEI,MAAM,SAAS,sEAA2C,CAAC;CACnE"}
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
- if (v !== 0 && v !== 1 && v !== 2) {
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
- export declare const headerFromJson: import("@typeberry/json-parser").FromJsonWithParser<unknown, Header>;
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;AAuD1B,eAAO,MAAM,cAAc,sEA2C1B,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 ticket = json.object({
18
- id: fromJson.bytes32(),
19
- attempt: fromJson.ticketAttempt,
20
- }, (x) => Ticket.create({ id: x.id, attempt: x.attempt }));
21
- export const headerFromJson = json.object({
22
- parent: fromJson.bytes32(),
23
- parent_state_root: fromJson.bytes32(),
24
- extrinsic_hash: fromJson.bytes32(),
25
- slot: "number",
26
- epoch_mark: json.optional(epochMark),
27
- tickets_mark: json.optional(json.array(ticket)),
28
- offenders_mark: json.array(fromJson.bytes32()),
29
- author_index: "number",
30
- entropy_source: bandersnatchVrfSignature,
31
- seal: bandersnatchVrfSignature,
32
- }, ({ parent, parent_state_root, extrinsic_hash, slot, epoch_mark, tickets_mark, offenders_mark, author_index, entropy_source, seal, }) => {
33
- const epochMarker = epoch_mark ?? null;
34
- const ticketsMarker = tickets_mark === undefined || tickets_mark === null
35
- ? null
36
- : TicketsMarker.create({ tickets: asOpaqueType(tickets_mark) });
37
- return Header.create({
38
- parentHeaderHash: parent,
39
- priorStateRoot: parent_state_root,
40
- extrinsicHash: extrinsic_hash,
41
- timeSlotIndex: slot,
42
- epochMarker,
43
- ticketsMarker,
44
- offendersMarker: offenders_mark,
45
- bandersnatchBlockAuthorIndex: author_index,
46
- entropySource: entropy_source,
47
- seal,
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
- export declare const ticketsExtrinsicFromJson: ["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[]>];
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;AAc3D,eAAO,MAAM,wBAAwB,obAAqC,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 ticketEnvelopeFromJson = json.object({
7
- attempt: fromJson.ticketAttempt,
8
- signature: json.fromString((v) => Bytes.parseBytes(v, BANDERSNATCH_PROOF_BYTES).asOpaque()),
9
- }, (x) => SignedTicket.create({ attempt: x.attempt, signature: x.signature }));
10
- export const ticketsExtrinsicFromJson = json.array(ticketEnvelopeFromJson);
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]">, U8>;
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>>;
@@ -6,12 +6,14 @@ import { type Network, type Peer } from "#@typeberry/networking";
6
6
  import { type Bootnode } from "./peers.js";
7
7
  import { StreamManager } from "./stream-manager.js";
8
8
  import { SyncTask } from "./tasks/sync.js";
9
+ import { TicketDistributionTask } from "./tasks/ticket-distribution.js";
9
10
  export declare function setup(bind: {
10
11
  host: string;
11
12
  port: number;
12
13
  }, genesisHash: HeaderHash, key: ed25519.Ed25519Pair, bootnodes: Bootnode[], spec: ChainSpec, blocks: BlocksDb, onNewBlocks: (blocks: BlockView[]) => Promise<void>): Promise<{
13
14
  network: import("@typeberry/networking/quic-network.js").QuicNetwork;
14
15
  syncTask: SyncTask;
16
+ ticketTask: TicketDistributionTask;
15
17
  streamManager: StreamManager;
16
18
  }>;
17
19
  export declare function setupPeerListeners(syncTask: SyncTask, network: Network<Peer>, streamManager: StreamManager): void;
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/jamnp-s/network.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,KAAK,QAAQ,EAAe,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAK3C,wBAAsB,KAAK,CACzB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACpC,WAAW,EAAE,UAAU,EACvB,GAAG,EAAE,OAAO,CAAC,WAAW,EACxB,SAAS,EAAE,QAAQ,EAAE,EACrB,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,QAAQ,EAEhB,WAAW,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC;;;;GAuCpD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,aAAa,QAmB1G"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/jamnp-s/network.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,KAAK,QAAQ,EAAe,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAKxE,wBAAsB,KAAK,CACzB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACpC,WAAW,EAAE,UAAU,EACvB,GAAG,EAAE,OAAO,CAAC,WAAW,EACxB,SAAS,EAAE,QAAQ,EAAE,EACrB,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,QAAQ,EAEhB,WAAW,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC;;;;;GA0CpD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,aAAa,QAmB1G"}
@@ -6,6 +6,7 @@ import { OK } from "#@typeberry/utils";
6
6
  import { Connections } from "./peers.js";
7
7
  import { StreamManager } from "./stream-manager.js";
8
8
  import { SyncTask } from "./tasks/sync.js";
9
+ import { TicketDistributionTask } from "./tasks/ticket-distribution.js";
9
10
  import { handleAsyncErrors } from "./utils.js";
10
11
  const logger = Logger.new(import.meta.filename, "jamnps");
11
12
  export async function setup(bind, genesisHash, key, bootnodes, spec, blocks,
@@ -24,10 +25,12 @@ onNewBlocks) {
24
25
  const streamManager = new StreamManager();
25
26
  // start the networking tasks
26
27
  const syncTask = SyncTask.start(spec, blake2b, streamManager, connections, blocks, onNewBlocks);
28
+ const ticketTask = TicketDistributionTask.start(streamManager, connections, spec);
27
29
  setImmediate(async () => {
28
30
  while (network.isRunning) {
29
31
  await setTimeout(3000);
30
32
  syncTask.maintainSync();
33
+ ticketTask.maintainDistribution();
31
34
  }
32
35
  });
33
36
  // TODO [ToDr] This design is a bit weird,
@@ -40,6 +43,7 @@ onNewBlocks) {
40
43
  return {
41
44
  network,
42
45
  syncTask,
46
+ ticketTask,
43
47
  streamManager,
44
48
  };
45
49
  }
@@ -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
  /**
@@ -14,13 +15,17 @@ import { type StreamHandler, type StreamId, type StreamMessageSender } from "./s
14
15
  export declare const STREAM_KIND_GENERATOR_TO_PROXY: 131 & import("@typeberry/numbers").WithBytesRepresentation<1>;
15
16
  export declare const STREAM_KIND_PROXY_TO_ALL: 132 & import("@typeberry/numbers").WithBytesRepresentation<1>;
16
17
  type STREAM_KIND = typeof STREAM_KIND_GENERATOR_TO_PROXY | typeof STREAM_KIND_PROXY_TO_ALL;
18
+ /**
19
+ * Network protocol message for distributing a single ticket.
20
+ * Used in CE-131/CE-132 streams.
21
+ */
17
22
  export declare class TicketDistributionRequest extends WithDebug {
18
23
  readonly epochIndex: Epoch;
19
24
  readonly ticket: SignedTicket;
20
25
  static Codec: import("@typeberry/codec").Descriptor<TicketDistributionRequest, import("@typeberry/codec").ViewOf<TicketDistributionRequest, {
21
26
  epochIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<4> & import("@typeberry/utils").WithOpaque<"Epoch">, import("@typeberry/bytes").Bytes<4>>;
22
27
  ticket: import("@typeberry/codec").Descriptor<SignedTicket, import("@typeberry/codec").ViewOf<SignedTicket, {
23
- attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U8>;
28
+ attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[0|1|2]">, import("@typeberry/numbers").U32>;
24
29
  signature: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<784> & import("@typeberry/utils").WithOpaque<"BandersnatchRingSignature">, import("@typeberry/bytes").Bytes<784>>;
25
30
  }>>;
26
31
  }>>;
@@ -28,15 +33,17 @@ export declare class TicketDistributionRequest extends WithDebug {
28
33
  private constructor();
29
34
  }
30
35
  export declare class ServerHandler<T extends STREAM_KIND> implements StreamHandler<T> {
36
+ private readonly chainSpec;
31
37
  readonly kind: T;
32
38
  private readonly onTicketReceived;
33
- constructor(kind: T, onTicketReceived: (epochIndex: Epoch, ticket: SignedTicket) => void);
39
+ constructor(chainSpec: ChainSpec, kind: T, onTicketReceived: (epochIndex: Epoch, ticket: SignedTicket) => void);
34
40
  onStreamMessage(sender: StreamMessageSender, message: BytesBlob): void;
35
41
  onClose(_streamId: StreamId): void;
36
42
  }
37
43
  export declare class ClientHandler<T extends STREAM_KIND> implements StreamHandler<T> {
44
+ private readonly chainSpec;
38
45
  readonly kind: T;
39
- constructor(kind: T);
46
+ constructor(chainSpec: ChainSpec, kind: T);
40
47
  onStreamMessage(sender: StreamMessageSender): void;
41
48
  onClose(_streamId: StreamId): void;
42
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;AAE7E,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,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;aAEzD,IAAI,EAAE,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBADjB,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;aAC/C,IAAI,EAAE,CAAC;gBAAP,IAAI,EAAE,CAAC;IAEnC,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"}
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"}