@typeberry/lib 0.5.7 → 0.5.8-2073cb2

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 (88) hide show
  1. package/package.json +3 -1
  2. package/packages/core/utils/debug.d.ts.map +1 -1
  3. package/packages/core/utils/debug.js +14 -3
  4. package/packages/jam/block/block.d.ts +3 -3
  5. package/packages/jam/block/header.d.ts +6 -6
  6. package/packages/jam/block/test-helpers.d.ts +2 -2
  7. package/packages/jam/block/tickets.d.ts +5 -4
  8. package/packages/jam/block/tickets.d.ts.map +1 -1
  9. package/packages/jam/block/tickets.js +13 -6
  10. package/packages/jam/block-json/block.d.ts +2 -2
  11. package/packages/jam/block-json/block.js +1 -1
  12. package/packages/jam/block-json/common.d.ts +2 -1
  13. package/packages/jam/block-json/common.d.ts.map +1 -1
  14. package/packages/jam/block-json/common.js +2 -5
  15. package/packages/jam/block-json/extrinsic.js +1 -1
  16. package/packages/jam/block-json/header.d.ts +2 -1
  17. package/packages/jam/block-json/header.d.ts.map +1 -1
  18. package/packages/jam/block-json/header.js +34 -32
  19. package/packages/jam/block-json/tickets-extrinsic.d.ts +2 -1
  20. package/packages/jam/block-json/tickets-extrinsic.d.ts.map +1 -1
  21. package/packages/jam/block-json/tickets-extrinsic.js +7 -5
  22. package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
  23. package/packages/jam/jamnp-s/network.d.ts +2 -0
  24. package/packages/jam/jamnp-s/network.d.ts.map +1 -1
  25. package/packages/jam/jamnp-s/network.js +4 -0
  26. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +10 -3
  27. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts.map +1 -1
  28. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.js +12 -4
  29. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +4 -3
  30. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  31. package/packages/jam/jamnp-s/tasks/ticket-distribution.d.ts +34 -0
  32. package/packages/jam/jamnp-s/tasks/ticket-distribution.d.ts.map +1 -0
  33. package/packages/jam/jamnp-s/tasks/ticket-distribution.js +115 -0
  34. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.d.ts +2 -0
  35. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.d.ts.map +1 -0
  36. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +220 -0
  37. package/packages/jam/node/main.d.ts.map +1 -1
  38. package/packages/jam/node/main.js +56 -26
  39. package/packages/jam/node/reader.d.ts +2 -2
  40. package/packages/jam/node/workers.d.ts +32 -25
  41. package/packages/jam/node/workers.d.ts.map +1 -1
  42. package/packages/jam/node/workers.js +16 -7
  43. package/packages/jam/safrole/bandersnatch-vrf.d.ts +3 -2
  44. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  45. package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
  46. package/packages/jam/safrole/bandersnatch-vrf.test.js +3 -2
  47. package/packages/jam/safrole/safrole.test.js +80 -72
  48. package/packages/jam/state/safrole-data.d.ts +1 -1
  49. package/packages/jam/state/test.utils.js +1 -1
  50. package/packages/jam/state-json/dump.js +2 -2
  51. package/packages/jam/state-json/safrole.d.ts +2 -2
  52. package/packages/jam/state-json/safrole.d.ts.map +1 -1
  53. package/packages/jam/state-json/safrole.js +8 -6
  54. package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
  55. package/packages/jam/state-vectors/index.d.ts +8 -7
  56. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  57. package/packages/jam/state-vectors/index.js +6 -4
  58. package/packages/jam/transition/hasher.test.js +1 -1
  59. package/packages/workers/api-node/config.d.ts +5 -1
  60. package/packages/workers/api-node/config.d.ts.map +1 -1
  61. package/packages/workers/api-node/config.js +9 -3
  62. package/packages/workers/api-node/port.d.ts +8 -0
  63. package/packages/workers/api-node/port.d.ts.map +1 -1
  64. package/packages/workers/api-node/port.js +10 -0
  65. package/packages/workers/block-authorship/bootstrap-main.js +10 -3
  66. package/packages/workers/block-authorship/main.d.ts +2 -1
  67. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  68. package/packages/workers/block-authorship/main.js +31 -4
  69. package/packages/workers/block-authorship/protocol.d.ts +4 -4
  70. package/packages/workers/block-authorship/ticket-generator.d.ts +3 -2
  71. package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
  72. package/packages/workers/block-authorship/ticket-generator.js +2 -3
  73. package/packages/workers/block-authorship/ticket-generator.test.js +11 -10
  74. package/packages/workers/comms-authorship-network/index.d.ts +3 -0
  75. package/packages/workers/comms-authorship-network/index.d.ts.map +1 -0
  76. package/packages/workers/comms-authorship-network/index.js +2 -0
  77. package/packages/workers/comms-authorship-network/protocol.d.ts +27 -0
  78. package/packages/workers/comms-authorship-network/protocol.d.ts.map +1 -0
  79. package/packages/workers/comms-authorship-network/protocol.js +24 -0
  80. package/packages/workers/comms-authorship-network/tickets-message.d.ts +18 -0
  81. package/packages/workers/comms-authorship-network/tickets-message.d.ts.map +1 -0
  82. package/packages/workers/comms-authorship-network/tickets-message.js +19 -0
  83. package/packages/workers/importer/protocol.d.ts +8 -8
  84. package/packages/workers/jam-network/bootstrap-main.js +10 -3
  85. package/packages/workers/jam-network/main.d.ts +2 -1
  86. package/packages/workers/jam-network/main.d.ts.map +1 -1
  87. package/packages/workers/jam-network/main.js +8 -1
  88. 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-2073cb2",
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",
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../../../packages/core/utils/debug.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,YAExB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,cAA6F,CAAC;AAE9G;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CACnB,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,OAAO,EAClB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,SAAS,IAAI,IAAI,CAO3B;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAE/C;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,QAKpE;AAED,6BAA6B;AAC7B,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAqDzC;AAED,sEAAsE;AACtE,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,gBAGjC;AAED,mFAAmF;AACnF,8BAAsB,SAAS;IAC7B,QAAQ;CAGT;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;;EAMpC"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../../../packages/core/utils/debug.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,YAExB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,cAA6F,CAAC;AAE9G;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CACnB,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,OAAO,EAClB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,SAAS,IAAI,IAAI,CAO3B;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAE/C;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,QAKpE;AAED,6BAA6B;AAC7B,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAEzC;AAkED,sEAAsE;AACtE,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,gBAGjC;AAED,mFAAmF;AACnF,8BAAsB,SAAS;IAC7B,QAAQ;CAGT;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;;EAMpC"}
@@ -55,6 +55,12 @@ export function assertEmpty(value) {
55
55
  }
56
56
  /** Debug print an object. */
57
57
  export function inspect(val) {
58
+ return inspectInternal(val, new WeakSet());
59
+ }
60
+ /**
61
+ * Internal implementation of inspect with circular reference detection.
62
+ */
63
+ function inspectInternal(val, seen) {
58
64
  const nest = (v) => v
59
65
  .split("\n")
60
66
  .map((x) => ` ${x}`)
@@ -67,10 +73,10 @@ export function inspect(val) {
67
73
  return "<undefined>";
68
74
  }
69
75
  if (Array.isArray(val)) {
70
- return `[${val.map((x) => inspect(x))}]`;
76
+ return `[${val.map((x) => inspectInternal(x, seen))}]`;
71
77
  }
72
78
  if (val instanceof Map) {
73
- return inspect(Array.from(val.entries()));
79
+ return inspectInternal(Array.from(val.entries()), seen);
74
80
  }
75
81
  if (typeof val === "number") {
76
82
  return `${val} (0x${val.toString(16)})`;
@@ -78,6 +84,11 @@ export function inspect(val) {
78
84
  if (typeof val !== "object") {
79
85
  return `${val}`;
80
86
  }
87
+ // Check for circular references
88
+ if (seen.has(val)) {
89
+ return "<circular>";
90
+ }
91
+ seen.add(val);
81
92
  if ("toString" in val &&
82
93
  Object.prototype.toString !== val.toString &&
83
94
  WithDebug.prototype.toString !== val.toString) {
@@ -90,7 +101,7 @@ export function inspect(val) {
90
101
  for (const k of keys) {
91
102
  if (typeof k === "string") {
92
103
  v += oneLine ? "" : "\n ";
93
- v += `${k}: ${nest(inspect(val[k]))}`;
104
+ v += `${k}: ${nest(inspectInternal(val[k], seen))}`;
94
105
  v += oneLine ? "," : "";
95
106
  }
96
107
  }
@@ -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
  }