@typeberry/lib 0.8.4 → 0.9.0-959889e

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 (141) hide show
  1. package/package.json +6 -4
  2. package/packages/configs/index.d.ts +30 -1
  3. package/packages/configs/index.d.ts.map +1 -1
  4. package/packages/configs/index.js +4 -2
  5. package/packages/configs/typeberry-dev-full.json +29 -0
  6. package/packages/core/bytes/bytes.d.ts +1 -0
  7. package/packages/core/bytes/bytes.d.ts.map +1 -1
  8. package/packages/core/bytes/bytes.js +8 -0
  9. package/packages/core/utils/debug.d.ts +4 -2
  10. package/packages/core/utils/debug.d.ts.map +1 -1
  11. package/packages/core/utils/debug.js +18 -13
  12. package/packages/core/utils/debug.test.js +12 -6
  13. package/packages/core/utils/index.d.ts +1 -0
  14. package/packages/core/utils/index.d.ts.map +1 -1
  15. package/packages/core/utils/index.js +1 -0
  16. package/packages/core/utils/shutdown.d.ts +18 -0
  17. package/packages/core/utils/shutdown.d.ts.map +1 -0
  18. package/packages/core/utils/shutdown.js +80 -0
  19. package/packages/core/utils/shutdown.test.d.ts +2 -0
  20. package/packages/core/utils/shutdown.test.d.ts.map +1 -0
  21. package/packages/core/utils/shutdown.test.js +155 -0
  22. package/packages/extensions/ipc/server.d.ts.map +1 -1
  23. package/packages/extensions/ipc/server.js +7 -0
  24. package/packages/jam/config-node/node-config.d.ts +2 -1
  25. package/packages/jam/config-node/node-config.d.ts.map +1 -1
  26. package/packages/jam/config-node/node-config.js +8 -3
  27. package/packages/jam/config-node/node-config.test.js +3 -3
  28. package/packages/jam/database-fjall/hybrid-states.d.ts +82 -0
  29. package/packages/jam/database-fjall/hybrid-states.d.ts.map +1 -0
  30. package/packages/jam/database-fjall/hybrid-states.js +169 -0
  31. package/packages/jam/database-fjall/hybrid-states.test.d.ts +2 -0
  32. package/packages/jam/database-fjall/hybrid-states.test.d.ts.map +1 -0
  33. package/packages/jam/database-fjall/hybrid-states.test.js +113 -0
  34. package/packages/jam/database-fjall/index.d.ts +3 -0
  35. package/packages/jam/database-fjall/index.d.ts.map +1 -0
  36. package/packages/jam/database-fjall/index.js +2 -0
  37. package/packages/jam/database-fjall/root.d.ts +58 -0
  38. package/packages/jam/database-fjall/root.d.ts.map +1 -0
  39. package/packages/jam/database-fjall/root.js +89 -0
  40. package/packages/jam/jamnp-s/tasks/ticket-distribution.d.ts +18 -10
  41. package/packages/jam/jamnp-s/tasks/ticket-distribution.d.ts.map +1 -1
  42. package/packages/jam/jamnp-s/tasks/ticket-distribution.js +44 -68
  43. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +30 -8
  44. package/packages/jam/node/main-fuzz.d.ts +4 -1
  45. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  46. package/packages/jam/node/main-fuzz.js +89 -16
  47. package/packages/jam/node/main-importer.d.ts +13 -3
  48. package/packages/jam/node/main-importer.d.ts.map +1 -1
  49. package/packages/jam/node/main-importer.js +5 -3
  50. package/packages/jam/safrole/bandersnatch-vrf.d.ts +24 -4
  51. package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
  52. package/packages/jam/safrole/bandersnatch-vrf.js +63 -26
  53. package/packages/jam/safrole/bandersnatch-vrf.test.js +12 -9
  54. package/packages/jam/safrole/bandersnatch-wasm.d.ts +10 -0
  55. package/packages/jam/safrole/bandersnatch-wasm.d.ts.map +1 -1
  56. package/packages/jam/safrole/bandersnatch-wasm.js +12 -0
  57. package/packages/jam/safrole/safrole.js +5 -5
  58. package/packages/jam/safrole/safrole.test.js +13 -13
  59. package/packages/jam/ticket-pool/index.d.ts +4 -0
  60. package/packages/jam/ticket-pool/index.d.ts.map +1 -0
  61. package/packages/jam/ticket-pool/index.js +3 -0
  62. package/packages/jam/ticket-pool/pending-ticket-pool.d.ts +30 -0
  63. package/packages/jam/ticket-pool/pending-ticket-pool.d.ts.map +1 -0
  64. package/packages/jam/ticket-pool/pending-ticket-pool.js +56 -0
  65. package/packages/jam/ticket-pool/pending-ticket-pool.test.d.ts +2 -0
  66. package/packages/jam/ticket-pool/pending-ticket-pool.test.d.ts.map +1 -0
  67. package/packages/jam/ticket-pool/pending-ticket-pool.test.js +67 -0
  68. package/packages/jam/ticket-pool/ticket-validator.d.ts +47 -0
  69. package/packages/jam/ticket-pool/ticket-validator.d.ts.map +1 -0
  70. package/packages/jam/ticket-pool/ticket-validator.js +34 -0
  71. package/packages/jam/ticket-pool/ticket-validator.test.d.ts +2 -0
  72. package/packages/jam/ticket-pool/ticket-validator.test.d.ts.map +1 -0
  73. package/packages/jam/ticket-pool/ticket-validator.test.js +35 -0
  74. package/packages/jam/ticket-pool/verified-ticket-pool.d.ts +26 -0
  75. package/packages/jam/ticket-pool/verified-ticket-pool.d.ts.map +1 -0
  76. package/packages/jam/ticket-pool/verified-ticket-pool.js +41 -0
  77. package/packages/jam/ticket-pool/verified-ticket-pool.test.d.ts +2 -0
  78. package/packages/jam/ticket-pool/verified-ticket-pool.test.d.ts.map +1 -0
  79. package/packages/jam/ticket-pool/verified-ticket-pool.test.js +54 -0
  80. package/packages/workers/api-node/config.d.ts +21 -6
  81. package/packages/workers/api-node/config.d.ts.map +1 -1
  82. package/packages/workers/api-node/config.js +26 -19
  83. package/packages/workers/api-node/config.test.js +38 -1
  84. package/packages/workers/block-authorship/{generator.d.ts → block-generator.d.ts} +5 -5
  85. package/packages/workers/block-authorship/block-generator.d.ts.map +1 -0
  86. package/packages/workers/block-authorship/{generator.js → block-generator.js} +3 -3
  87. package/packages/workers/block-authorship/block-generator.test.d.ts +2 -0
  88. package/packages/workers/block-authorship/block-generator.test.d.ts.map +1 -0
  89. package/packages/workers/block-authorship/{generator.test.js → block-generator.test.js} +8 -8
  90. package/packages/workers/block-authorship/epoch-authoring-slots.d.ts +35 -0
  91. package/packages/workers/block-authorship/epoch-authoring-slots.d.ts.map +1 -0
  92. package/packages/workers/block-authorship/epoch-authoring-slots.js +86 -0
  93. package/packages/workers/block-authorship/epoch-tracker.d.ts +29 -0
  94. package/packages/workers/block-authorship/epoch-tracker.d.ts.map +1 -0
  95. package/packages/workers/block-authorship/epoch-tracker.js +80 -0
  96. package/packages/workers/block-authorship/index.d.ts.map +1 -1
  97. package/packages/workers/block-authorship/index.js +1 -1
  98. package/packages/workers/block-authorship/main.d.ts +3 -0
  99. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  100. package/packages/workers/block-authorship/main.js +197 -315
  101. package/packages/workers/block-authorship/ticket-generator/bootstrap-main.d.ts +2 -0
  102. package/packages/workers/block-authorship/ticket-generator/bootstrap-main.d.ts.map +1 -0
  103. package/packages/workers/block-authorship/ticket-generator/bootstrap-main.js +23 -0
  104. package/packages/workers/block-authorship/ticket-generator/index.d.ts +16 -0
  105. package/packages/workers/block-authorship/ticket-generator/index.d.ts.map +1 -0
  106. package/packages/workers/block-authorship/ticket-generator/index.js +62 -0
  107. package/packages/workers/block-authorship/ticket-generator/protocol.d.ts +50 -0
  108. package/packages/workers/block-authorship/ticket-generator/protocol.d.ts.map +1 -0
  109. package/packages/workers/block-authorship/ticket-generator/protocol.js +54 -0
  110. package/packages/workers/block-authorship/{ticket-generator.d.ts → ticket-generator/ticket-generator.d.ts} +4 -0
  111. package/packages/workers/block-authorship/ticket-generator/ticket-generator.d.ts.map +1 -0
  112. package/packages/workers/block-authorship/{ticket-generator.js → ticket-generator/ticket-generator.js} +19 -9
  113. package/packages/workers/block-authorship/ticket-generator/ticket-generator.test.d.ts.map +1 -0
  114. package/packages/workers/block-authorship/{ticket-generator.test.js → ticket-generator/ticket-generator.test.js} +13 -9
  115. package/packages/workers/block-authorship/ticket-generator/worker-pool.d.ts +36 -0
  116. package/packages/workers/block-authorship/ticket-generator/worker-pool.d.ts.map +1 -0
  117. package/packages/workers/block-authorship/ticket-generator/worker-pool.js +111 -0
  118. package/packages/workers/block-authorship/ticket-validator.d.ts +31 -0
  119. package/packages/workers/block-authorship/ticket-validator.d.ts.map +1 -0
  120. package/packages/workers/block-authorship/ticket-validator.js +59 -0
  121. package/packages/workers/comms-authorship-network/protocol.d.ts +14 -4
  122. package/packages/workers/comms-authorship-network/protocol.d.ts.map +1 -1
  123. package/packages/workers/comms-authorship-network/protocol.js +12 -6
  124. package/packages/workers/comms-authorship-network/tickets-message.d.ts +0 -14
  125. package/packages/workers/comms-authorship-network/tickets-message.d.ts.map +1 -1
  126. package/packages/workers/comms-authorship-network/tickets-message.js +0 -17
  127. package/packages/workers/importer/importer.d.ts +2 -2
  128. package/packages/workers/importer/importer.d.ts.map +1 -1
  129. package/packages/workers/importer/importer.js +5 -5
  130. package/packages/workers/importer/stats.d.ts +1 -3
  131. package/packages/workers/importer/stats.d.ts.map +1 -1
  132. package/packages/workers/importer/stats.js +12 -12
  133. package/packages/workers/jam-network/main.d.ts.map +1 -1
  134. package/packages/workers/jam-network/main.js +25 -4
  135. package/packages/workers/block-authorship/generator.d.ts.map +0 -1
  136. package/packages/workers/block-authorship/generator.test.d.ts +0 -2
  137. package/packages/workers/block-authorship/generator.test.d.ts.map +0 -1
  138. package/packages/workers/block-authorship/ticket-generator.d.ts.map +0 -1
  139. package/packages/workers/block-authorship/ticket-generator.test.d.ts.map +0 -1
  140. /package/packages/configs/{typeberry-dev.json → typeberry-dev-tiny.json} +0 -0
  141. /package/packages/workers/block-authorship/{ticket-generator.test.d.ts → ticket-generator/ticket-generator.test.d.ts} +0 -0
@@ -0,0 +1,80 @@
1
+ import { tryAsEpoch } from "#@typeberry/block";
2
+ import { Safrole } from "#@typeberry/safrole";
3
+ import { SafroleSealingKeysKind } from "#@typeberry/state";
4
+ import { Result } from "#@typeberry/utils";
5
+ import { EpochAuthoringSlots } from "./epoch-authoring-slots.js";
6
+ export class EpochTracker {
7
+ chainSpec;
8
+ blake2bHasher;
9
+ authoring;
10
+ static async new(chainSpec, bandersnatch, blake2bHasher, keys) {
11
+ const epochSlots = await EpochAuthoringSlots.new(chainSpec, bandersnatch, keys);
12
+ return new EpochTracker(chainSpec, blake2bHasher, epochSlots);
13
+ }
14
+ constructor(chainSpec, blake2bHasher, authoring) {
15
+ this.chainSpec = chainSpec;
16
+ this.blake2bHasher = blake2bHasher;
17
+ this.authoring = authoring;
18
+ }
19
+ isEpochChanged(stateTimeSlot, newTimeSlot) {
20
+ const epochLength = this.chainSpec.epochLength;
21
+ const stateEpoch = Math.floor(stateTimeSlot / epochLength);
22
+ const newEpoch = Math.floor(newTimeSlot / epochLength);
23
+ return newEpoch > stateEpoch;
24
+ }
25
+ async getEpochData(logger, state, newTimeSlot) {
26
+ const sealingKeySeriesResult = await this.getSealingKeySeries(state, newTimeSlot);
27
+ // Propagate the typed failure instead of crashing — `main` decides whether to
28
+ // retry, skip or terminate, and keeps the real error details.
29
+ if (sealingKeySeriesResult.isError) {
30
+ return Result.error(`${sealingKeySeriesResult.error}`, sealingKeySeriesResult.details);
31
+ }
32
+ const epochLength = this.chainSpec.epochLength;
33
+ const sealingKeySeries = sealingKeySeriesResult.ok;
34
+ // On a new epoch, `state.entropy[2]` is the epoch-E entropy (pre-transition);
35
+ // mid-epoch, it has already shifted to `entropy[3]`. Use the same predicate
36
+ // as `getSealingKeySeries` so the entropy and the key series stay consistent
37
+ // even when the first authored block of an epoch isn't exactly at slot E·L.
38
+ const isNewEpoch = this.isEpochChanged(state.timeslot, newTimeSlot);
39
+ const entropy = isNewEpoch ? state.entropy[2] : state.entropy[3];
40
+ const epoch = tryAsEpoch(Math.floor(newTimeSlot / epochLength));
41
+ logger.log `[E${epoch}] is using ${SafroleSealingKeysKind[sealingKeySeries.kind]}`;
42
+ logger.trace `[E${epoch}] ${sealingKeySeries}`;
43
+ const slots = await this.authoring.getOurSlotsInKeySeries(sealingKeySeries, entropy);
44
+ this.logEpochAuthorshipInfo(logger, epoch, slots);
45
+ return Result.ok({
46
+ epoch,
47
+ epochLength,
48
+ sealingKeySeries,
49
+ entropy,
50
+ slots,
51
+ });
52
+ }
53
+ async getSealingKeySeries(state, newTimeSlot) {
54
+ // in case we are not changing epoch, just use the state data
55
+ if (!this.isEpochChanged(state.timeslot, newTimeSlot)) {
56
+ return Result.ok(state.sealingKeySeries);
57
+ }
58
+ // otherwise, pick the new sealing key series already
59
+ const safrole = new Safrole(this.chainSpec, this.blake2bHasher, state);
60
+ return await safrole.getSealingKeySeries({
61
+ entropy: state.entropy[1],
62
+ slot: newTimeSlot,
63
+ punishSet: state.disputesRecords.punishSet,
64
+ });
65
+ }
66
+ logEpochAuthorshipInfo(logger, epoch, slots) {
67
+ let isCreating = false;
68
+ let slot = epoch * this.chainSpec.epochLength;
69
+ for (const sealData of slots) {
70
+ if (sealData !== null) {
71
+ isCreating = true;
72
+ logger.info `[E${epoch}#${slot}] Validator ${sealData.key.bandersnatchPublic.toStringTruncated()} will author using ${sealData.logId}`;
73
+ }
74
+ slot += 1;
75
+ }
76
+ if (isCreating === false) {
77
+ logger.info `[E${epoch}] No blocks to author for this epoch.`;
78
+ }
79
+ }
80
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,eAAO,MAAM,MAAM,mBAAwD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,eAAO,MAAM,MAAM,mBAAyD,CAAC"}
@@ -1,4 +1,4 @@
1
1
  export * from "./main.js";
2
2
  export * from "./metrics.js";
3
3
  export * from "./protocol.js";
4
- export const WORKER = new URL("./bootstrap-generator.mjs", import.meta.url);
4
+ export const WORKER = new URL("./bootstrap-authorship.mjs", import.meta.url);
@@ -2,6 +2,9 @@ import type { NetworkingComms } from "#@typeberry/comms-authorship-network";
2
2
  import type { WorkerConfig } from "#@typeberry/workers-api";
3
3
  import type { BlockAuthorshipConfig, GeneratorInternal } from "./protocol.js";
4
4
  type Config = WorkerConfig<BlockAuthorshipConfig>;
5
+ /**
6
+ * The `BlockAuthorship` should create new blocks and send them as signals to the main thread.
7
+ */
5
8
  export declare function main(config: Config, comms: GeneratorInternal, networkingComms: NetworkingComms): Promise<void>;
6
9
  export {};
7
10
  //# sourceMappingURL=main.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/main.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAiB3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAK9E,KAAK,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAwBlD,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,iBAiapG"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/main.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAS3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAM9E,KAAK,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAElD;;GAEG;AAEH,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,iBAkKpG"}