@typeberry/lib 0.8.3 → 0.8.4-70b1490

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 (144) 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 +16 -4
  10. package/packages/core/utils/debug.d.ts.map +1 -1
  11. package/packages/core/utils/debug.js +39 -17
  12. package/packages/core/utils/debug.test.js +12 -6
  13. package/packages/jam/config-node/node-config.d.ts +2 -1
  14. package/packages/jam/config-node/node-config.d.ts.map +1 -1
  15. package/packages/jam/config-node/node-config.js +8 -3
  16. package/packages/jam/config-node/node-config.test.js +3 -3
  17. package/packages/jam/database/states.d.ts +7 -0
  18. package/packages/jam/database/states.d.ts.map +1 -1
  19. package/packages/jam/database-fjall/hybrid-states.d.ts +45 -0
  20. package/packages/jam/database-fjall/hybrid-states.d.ts.map +1 -0
  21. package/packages/jam/database-fjall/hybrid-states.js +113 -0
  22. package/packages/jam/database-fjall/hybrid-states.test.d.ts +2 -0
  23. package/packages/jam/database-fjall/hybrid-states.test.d.ts.map +1 -0
  24. package/packages/jam/database-fjall/hybrid-states.test.js +83 -0
  25. package/packages/jam/database-fjall/index.d.ts +3 -0
  26. package/packages/jam/database-fjall/index.d.ts.map +1 -0
  27. package/packages/jam/database-fjall/index.js +2 -0
  28. package/packages/jam/database-fjall/root.d.ts +52 -0
  29. package/packages/jam/database-fjall/root.d.ts.map +1 -0
  30. package/packages/jam/database-fjall/root.js +85 -0
  31. package/packages/jam/database-lmdb/hybrid-states.d.ts +3 -1
  32. package/packages/jam/database-lmdb/hybrid-states.d.ts.map +1 -1
  33. package/packages/jam/database-lmdb/hybrid-states.js +5 -2
  34. package/packages/jam/database-lmdb/root.d.ts +14 -1
  35. package/packages/jam/database-lmdb/root.d.ts.map +1 -1
  36. package/packages/jam/database-lmdb/root.js +25 -5
  37. package/packages/jam/database-lmdb/states.d.ts +1 -0
  38. package/packages/jam/database-lmdb/states.d.ts.map +1 -1
  39. package/packages/jam/database-lmdb/states.js +3 -0
  40. package/packages/jam/database-lmdb/states.test.js +4 -4
  41. package/packages/jam/jamnp-s/tasks/ticket-distribution.d.ts +18 -10
  42. package/packages/jam/jamnp-s/tasks/ticket-distribution.d.ts.map +1 -1
  43. package/packages/jam/jamnp-s/tasks/ticket-distribution.js +44 -68
  44. package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +30 -8
  45. package/packages/jam/node/main-fuzz.d.ts.map +1 -1
  46. package/packages/jam/node/main-fuzz.js +21 -4
  47. package/packages/jam/node/main-importer.d.ts +7 -4
  48. package/packages/jam/node/main-importer.d.ts.map +1 -1
  49. package/packages/jam/node/main-importer.js +10 -4
  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 +92 -40
  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/jam/transition/chain-stf.d.ts +2 -1
  81. package/packages/jam/transition/chain-stf.d.ts.map +1 -1
  82. package/packages/jam/transition/chain-stf.js +15 -3
  83. package/packages/workers/api-node/config.d.ts +14 -5
  84. package/packages/workers/api-node/config.d.ts.map +1 -1
  85. package/packages/workers/api-node/config.js +29 -20
  86. package/packages/workers/api-node/config.test.js +38 -1
  87. package/packages/workers/block-authorship/{generator.d.ts → block-generator.d.ts} +5 -5
  88. package/packages/workers/block-authorship/block-generator.d.ts.map +1 -0
  89. package/packages/workers/block-authorship/{generator.js → block-generator.js} +3 -3
  90. package/packages/workers/block-authorship/block-generator.test.d.ts +2 -0
  91. package/packages/workers/block-authorship/block-generator.test.d.ts.map +1 -0
  92. package/packages/workers/block-authorship/{generator.test.js → block-generator.test.js} +8 -8
  93. package/packages/workers/block-authorship/epoch-authoring-slots.d.ts +35 -0
  94. package/packages/workers/block-authorship/epoch-authoring-slots.d.ts.map +1 -0
  95. package/packages/workers/block-authorship/epoch-authoring-slots.js +86 -0
  96. package/packages/workers/block-authorship/epoch-tracker.d.ts +29 -0
  97. package/packages/workers/block-authorship/epoch-tracker.d.ts.map +1 -0
  98. package/packages/workers/block-authorship/epoch-tracker.js +80 -0
  99. package/packages/workers/block-authorship/index.d.ts.map +1 -1
  100. package/packages/workers/block-authorship/index.js +1 -1
  101. package/packages/workers/block-authorship/main.d.ts +3 -0
  102. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  103. package/packages/workers/block-authorship/main.js +197 -315
  104. package/packages/workers/block-authorship/ticket-generator/bootstrap-main.d.ts +2 -0
  105. package/packages/workers/block-authorship/ticket-generator/bootstrap-main.d.ts.map +1 -0
  106. package/packages/workers/block-authorship/ticket-generator/bootstrap-main.js +23 -0
  107. package/packages/workers/block-authorship/ticket-generator/index.d.ts +16 -0
  108. package/packages/workers/block-authorship/ticket-generator/index.d.ts.map +1 -0
  109. package/packages/workers/block-authorship/ticket-generator/index.js +62 -0
  110. package/packages/workers/block-authorship/ticket-generator/protocol.d.ts +50 -0
  111. package/packages/workers/block-authorship/ticket-generator/protocol.d.ts.map +1 -0
  112. package/packages/workers/block-authorship/ticket-generator/protocol.js +54 -0
  113. package/packages/workers/block-authorship/{ticket-generator.d.ts → ticket-generator/ticket-generator.d.ts} +4 -0
  114. package/packages/workers/block-authorship/ticket-generator/ticket-generator.d.ts.map +1 -0
  115. package/packages/workers/block-authorship/{ticket-generator.js → ticket-generator/ticket-generator.js} +19 -9
  116. package/packages/workers/block-authorship/ticket-generator/ticket-generator.test.d.ts.map +1 -0
  117. package/packages/workers/block-authorship/{ticket-generator.test.js → ticket-generator/ticket-generator.test.js} +13 -9
  118. package/packages/workers/block-authorship/ticket-generator/worker-pool.d.ts +36 -0
  119. package/packages/workers/block-authorship/ticket-generator/worker-pool.d.ts.map +1 -0
  120. package/packages/workers/block-authorship/ticket-generator/worker-pool.js +111 -0
  121. package/packages/workers/block-authorship/ticket-validator.d.ts +31 -0
  122. package/packages/workers/block-authorship/ticket-validator.d.ts.map +1 -0
  123. package/packages/workers/block-authorship/ticket-validator.js +59 -0
  124. package/packages/workers/comms-authorship-network/protocol.d.ts +14 -4
  125. package/packages/workers/comms-authorship-network/protocol.d.ts.map +1 -1
  126. package/packages/workers/comms-authorship-network/protocol.js +12 -6
  127. package/packages/workers/comms-authorship-network/tickets-message.d.ts +0 -14
  128. package/packages/workers/comms-authorship-network/tickets-message.d.ts.map +1 -1
  129. package/packages/workers/comms-authorship-network/tickets-message.js +0 -17
  130. package/packages/workers/importer/importer.d.ts +5 -3
  131. package/packages/workers/importer/importer.d.ts.map +1 -1
  132. package/packages/workers/importer/importer.js +43 -35
  133. package/packages/workers/importer/stats.d.ts +36 -0
  134. package/packages/workers/importer/stats.d.ts.map +1 -0
  135. package/packages/workers/importer/stats.js +69 -0
  136. package/packages/workers/jam-network/main.d.ts.map +1 -1
  137. package/packages/workers/jam-network/main.js +25 -4
  138. package/packages/workers/block-authorship/generator.d.ts.map +0 -1
  139. package/packages/workers/block-authorship/generator.test.d.ts +0 -2
  140. package/packages/workers/block-authorship/generator.test.d.ts.map +0 -1
  141. package/packages/workers/block-authorship/ticket-generator.d.ts.map +0 -1
  142. package/packages/workers/block-authorship/ticket-generator.test.d.ts.map +0 -1
  143. /package/packages/configs/{typeberry-dev.json → typeberry-dev-tiny.json} +0 -0
  144. /package/packages/workers/block-authorship/{ticket-generator.test.d.ts → ticket-generator/ticket-generator.test.d.ts} +0 -0
@@ -17,20 +17,3 @@ export class TicketsMessage extends WithDebug {
17
17
  this.tickets = tickets;
18
18
  }
19
19
  }
20
- /** Single-ticket message sent from jam-network to block-authorship (one ticket per peer relay). */
21
- export class ReceivedTicketMessage extends WithDebug {
22
- epochIndex;
23
- ticket;
24
- static Codec = codec.Class(ReceivedTicketMessage, {
25
- epochIndex: codec.u32.asOpaque(),
26
- ticket: SignedTicket.Codec,
27
- });
28
- static create({ epochIndex, ticket }) {
29
- return new ReceivedTicketMessage(epochIndex, ticket);
30
- }
31
- constructor(epochIndex, ticket) {
32
- super();
33
- this.epochIndex = epochIndex;
34
- this.ticket = ticket;
35
- }
36
- }
@@ -9,6 +9,7 @@ import { BlockVerifierError } from "#@typeberry/transition/block-verifier.js";
9
9
  import { type StfError } from "#@typeberry/transition/chain-stf.js";
10
10
  import { Result, type TaggedError } from "#@typeberry/utils";
11
11
  import type { Finalizer } from "./finality.js";
12
+ import { type ImporterEventsListener } from "./stats.js";
12
13
  export declare enum ImporterErrorKind {
13
14
  Verifier = 0,
14
15
  Stf = 1,
@@ -20,7 +21,7 @@ export type ImporterOptions = {
20
21
  finalizer?: Finalizer;
21
22
  pruneBlocks?: boolean;
22
23
  };
23
- /** Construction arguments for {@link Importer}. */
24
+ /** Construction arguments for `Importer`. */
24
25
  export type ImporterArgs = {
25
26
  spec: ChainSpec;
26
27
  pvm: PvmBackend;
@@ -29,6 +30,7 @@ export type ImporterArgs = {
29
30
  blocks: BlocksDb;
30
31
  states: StatesDb<SerializedState<LeafDb>>;
31
32
  options?: ImporterOptions;
33
+ events?: ImporterEventsListener;
32
34
  };
33
35
  export declare class Importer {
34
36
  private readonly verifier;
@@ -36,14 +38,14 @@ export declare class Importer {
36
38
  private readonly state;
37
39
  private currentHash;
38
40
  private readonly metrics;
39
- private readonly memory;
40
41
  private readonly hasher;
41
42
  private readonly logger;
42
43
  private readonly blocks;
43
44
  private readonly states;
44
45
  private readonly options;
46
+ private readonly events;
45
47
  /**
46
- * Build an {@link Importer} connected to the best state loaded from `states`.
48
+ * Build an `Importer` connected to the best state loaded from `states`.
47
49
  *
48
50
  * Throws if the best state cannot be loaded — callers are expected to treat that
49
51
  * as a programmer error (the DB should be initialized before reaching here).
@@ -1 +1 @@
1
- {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/importer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/importer.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,9 @@ import { tryAsTimeSlot } from "#@typeberry/block";
2
2
  import { WithHash } from "#@typeberry/hash";
3
3
  import { BlockVerifier, BlockVerifierError } from "#@typeberry/transition/block-verifier.js";
4
4
  import { DbHeaderChain, OnChain } from "#@typeberry/transition/chain-stf.js";
5
- import { measure, memoryTracker, now, Result, resultToString, } from "#@typeberry/utils";
5
+ import { measure, Result, resultToString } from "#@typeberry/utils";
6
6
  import * as metrics from "./metrics.js";
7
+ import { ImporterStats } from "./stats.js";
7
8
  export var ImporterErrorKind;
8
9
  (function (ImporterErrorKind) {
9
10
  ImporterErrorKind[ImporterErrorKind["Verifier"] = 0] = "Verifier";
@@ -11,6 +12,12 @@ export var ImporterErrorKind;
11
12
  ImporterErrorKind[ImporterErrorKind["Update"] = 2] = "Update";
12
13
  })(ImporterErrorKind || (ImporterErrorKind = {}));
13
14
  const importerError = (kind, nested) => Result.taggedError(ImporterErrorKind, kind, nested);
15
+ const MEASURE = {
16
+ importVerify: measure("import:verify"),
17
+ importStf: measure("import:stf"),
18
+ importState: measure("import:state"),
19
+ importDb: measure("import:db"),
20
+ };
14
21
  export class Importer {
15
22
  verifier;
16
23
  stf;
@@ -19,14 +26,14 @@ export class Importer {
19
26
  // Hash of the block that we have the posterior state for in `state`.
20
27
  currentHash;
21
28
  metrics;
22
- memory = memoryTracker();
23
29
  hasher;
24
30
  logger;
25
31
  blocks;
26
32
  states;
27
33
  options;
34
+ events;
28
35
  /**
29
- * Build an {@link Importer} connected to the best state loaded from `states`.
36
+ * Build an `Importer` connected to the best state loaded from `states`.
30
37
  *
31
38
  * Throws if the best state cannot be loaded — callers are expected to treat that
32
39
  * as a programmer error (the DB should be initialized before reaching here).
@@ -45,6 +52,7 @@ export class Importer {
45
52
  this.blocks = args.blocks;
46
53
  this.states = args.states;
47
54
  this.options = args.options ?? {};
55
+ this.events = args.events ?? ImporterStats.new(() => this.states.diskSizeInBytes?.() ?? null);
48
56
  this.metrics = metrics.createMetrics();
49
57
  this.verifier = BlockVerifier.new(args.hasher, args.blocks);
50
58
  this.stf = OnChain.assemble({
@@ -57,7 +65,7 @@ export class Importer {
57
65
  this.state = state;
58
66
  this.currentHash = currentBestHeaderHash;
59
67
  this.prepareForNextEpoch();
60
- args.logger.info `😎 Best time slot: ${state.timeslot} (header hash: ${currentBestHeaderHash})`;
68
+ this.events.onStart(currentBestHeaderHash, state);
61
69
  }
62
70
  /** Do some extra work for preparation for the next epoch. */
63
71
  async prepareForNextEpoch() {
@@ -76,42 +84,44 @@ export class Importer {
76
84
  return res;
77
85
  }
78
86
  async importBlock(block) {
79
- const timer = measure("importBlock");
80
87
  const timeSlot = extractTimeSlot(block);
88
+ const onEnd = this.events.onBlockImportingStarted(timeSlot);
81
89
  this.metrics.recordBlockImportingStarted(timeSlot);
82
- const startTime = now();
83
- const maybeBestHeader = await this.importBlockInternal(block);
84
- const duration = now() - startTime;
85
- if (maybeBestHeader.isOk) {
86
- if (timeSlot % 100 === 0) {
87
- this.logger.info `📊 mem #${timeSlot}: ${this.memory()}`;
88
- }
89
- const bestHeader = maybeBestHeader.ok;
90
- this.logger.info `🧊 Best block: #${timeSlot} (${bestHeader.hash})`;
91
- this.logger.log `${timer()}`;
92
- this.metrics.recordBlockImportComplete(duration, true);
90
+ let maybeBestHeader = null;
91
+ try {
92
+ maybeBestHeader = await this.importBlockInternal(block);
93
93
  return maybeBestHeader;
94
94
  }
95
- this.logger.log `❌ Rejected block #${timeSlot}: ${resultToString(maybeBestHeader)}`;
96
- this.logger.log `${timer()}`;
97
- this.metrics.recordBlockImportComplete(duration, false);
98
- return maybeBestHeader;
95
+ finally {
96
+ const isOk = maybeBestHeader?.isOk ?? false;
97
+ const duration = onEnd(isOk);
98
+ // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
99
+ if (maybeBestHeader?.isOk) {
100
+ const bestHeader = maybeBestHeader.ok;
101
+ this.logger.info `🧊 Best: #${timeSlot} (${bestHeader.hash.toStringTruncated()})`;
102
+ this.metrics.recordBlockImportComplete(duration, true);
103
+ }
104
+ else {
105
+ this.logger
106
+ .log `❌ Rejected #${timeSlot}: ${maybeBestHeader !== null ? resultToString(maybeBestHeader) : "exception"}`;
107
+ this.metrics.recordBlockImportComplete(duration, false);
108
+ }
109
+ }
99
110
  }
100
111
  async importBlockInternal(block) {
101
112
  const logger = this.logger;
102
113
  logger.log `🧱 Attempting to import a new block`;
103
- const timerVerify = measure("import:verify");
104
- const verifyStart = now();
114
+ const timerVerify = MEASURE.importVerify();
105
115
  const hash = await this.verifier.verifyBlock(block, {
106
116
  skipParentAndStateRoot: this.options.initGenesisFromAncestry ?? false,
107
117
  });
108
- const verifyDuration = now() - verifyStart;
109
- logger.log `${timerVerify()}`;
110
118
  if (hash.isError) {
119
+ logger.log `${timerVerify}`;
111
120
  this.metrics.recordBlockVerificationFailed(resultToString(hash));
112
121
  return importerError(ImporterErrorKind.Verifier, hash);
113
122
  }
114
- this.metrics.recordBlockVerified(verifyDuration);
123
+ logger.log `${hash.ok} ${timerVerify}`;
124
+ this.metrics.recordBlockVerified(timerVerify.duration());
115
125
  // TODO [ToDr] This is incomplete/temporary fork support!
116
126
  const parentHash = block.header.view().parentHeaderHash.materialize();
117
127
  if (!this.currentHash.isEqualTo(parentHash)) {
@@ -130,19 +140,17 @@ export class Importer {
130
140
  const timeSlot = block.header.view().timeSlotIndex.materialize();
131
141
  const headerHash = hash.ok;
132
142
  logger.log `🧱 Verified block: Got hash ${headerHash} for block at slot ${timeSlot}.`;
133
- const timerStf = measure("import:stf");
134
- const stfStart = now();
143
+ const timerStf = MEASURE.importStf();
135
144
  const res = await this.stf.transition(block, headerHash);
136
- const stfDuration = now() - stfStart;
137
- logger.log `${timerStf()}`;
145
+ logger.log `${headerHash} ${timerStf}`;
138
146
  if (res.isError) {
139
147
  this.metrics.recordBlockExecutionFailed(resultToString(res));
140
148
  return importerError(ImporterErrorKind.Stf, res);
141
149
  }
142
- this.metrics.recordBlockExecuted(stfDuration, 0);
150
+ this.metrics.recordBlockExecuted(timerStf.duration(), 0);
143
151
  // modify the state
144
152
  const update = res.ok;
145
- const timerState = measure("import:state");
153
+ const timerState = MEASURE.importState();
146
154
  const updateResult = await this.states.updateAndSetState(headerHash, this.state, update);
147
155
  if (updateResult.isError) {
148
156
  logger.error `🧱 Unable to update state: ${resultToString(updateResult)}`;
@@ -150,9 +158,9 @@ export class Importer {
150
158
  }
151
159
  this.prepareForNextEpoch();
152
160
  this.currentHash = headerHash;
153
- logger.log `${timerState()}`;
161
+ logger.log `${timerState}`;
154
162
  // insert new state and the block to DB.
155
- const timerDb = measure("import:db");
163
+ const timerDb = MEASURE.importDb();
156
164
  const writeBlocks = this.blocks.insertBlock(WithHash.new(headerHash, block));
157
165
  // Computation of the state root may happen asynchronously,
158
166
  // but we still need to wait for it before next block can be imported
@@ -160,7 +168,7 @@ export class Importer {
160
168
  logger.log `🧱 Storing post-state-root for ${headerHash}: ${stateRoot}.`;
161
169
  const writeStateRoot = this.blocks.setPostStateRoot(headerHash, stateRoot);
162
170
  await Promise.all([writeBlocks, writeStateRoot]);
163
- logger.log `${timerDb()}`;
171
+ logger.log `${headerHash} ${timerDb}`;
164
172
  // finally update the best block
165
173
  await this.blocks.setBestHeaderHash(headerHash);
166
174
  // check for finality and prune old states (and optionally blocks)
@@ -168,7 +176,7 @@ export class Importer {
168
176
  if (finality !== null) {
169
177
  const pruneBlocks = this.options.pruneBlocks ?? false;
170
178
  this.logger
171
- .info `🦭 Finalized block: ${finality.finalizedHash} (${finality.prunableStateHashes.length} to prune, blocks: ${pruneBlocks})`;
179
+ .info `🦭 Finalized: ${finality.finalizedHash.toStringTruncated()} (${finality.prunableStateHashes.length} to prune, blocks: ${pruneBlocks})`;
172
180
  for (const hash of finality.prunableStateHashes) {
173
181
  this.states.markUnused(hash);
174
182
  if (pruneBlocks) {
@@ -0,0 +1,36 @@
1
+ import type { HeaderHash, TimeSlot } from "#@typeberry/block";
2
+ import type { LeafDb } from "#@typeberry/database";
3
+ import type { SerializedState } from "#@typeberry/state-merkleization";
4
+ /** Reports the current on-disk database size in bytes, or `null` when unknown. */
5
+ export type DbSizeProvider = () => number | null;
6
+ /** Events happening during block imports. */
7
+ export interface ImporterEventsListener {
8
+ /**
9
+ * Invoked when we start importing a block.
10
+ *
11
+ * Must return a callback that will be triggered at the end of block import.
12
+ * The callback is expected to return duration between start and end events.
13
+ */
14
+ onBlockImportingStarted(timeSlot: TimeSlot): (isOk: boolean) => number;
15
+ /** Initial state of the importer. */
16
+ onStart(currentBestHeaderHash: HeaderHash, currentBestState: SerializedState<LeafDb>): void;
17
+ }
18
+ export declare class ImporterStats implements ImporterEventsListener {
19
+ /** Reports the current on-disk database size in bytes, or `null` if unknown. */
20
+ private readonly dbSizeInBytes;
21
+ /** How often we are going to print the stats (i.e. every `maxBlocks` blocks) */
22
+ private readonly maxBlocks;
23
+ /** Alternatively print stats when we reach `${maxTimeMs}` of total block execution. */
24
+ private readonly maxTimeMs;
25
+ private readonly memory;
26
+ private showDiskStats;
27
+ private totalTimePrev;
28
+ private totalTime;
29
+ private totalBlocksPrev;
30
+ private totalBlocks;
31
+ static new(dbSizeInBytes?: DbSizeProvider): ImporterStats;
32
+ private constructor();
33
+ onStart(currentBestHeaderHash: HeaderHash, currentBestState: SerializedState<LeafDb>): void;
34
+ onBlockImportingStarted(timeSlot: TimeSlot): (isOk: boolean) => number;
35
+ }
36
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/importer/stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAKtE,kFAAkF;AAClF,MAAM,MAAM,cAAc,GAAG,MAAM,MAAM,GAAG,IAAI,CAAC;AAWjD,6CAA6C;AAC7C,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;IAEvE,qCAAqC;IACrC,OAAO,CAAC,qBAAqB,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CAC7F;AAED,qBAAa,aAAc,YAAW,sBAAsB;IAaxD,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,uFAAuF;IACvF,OAAO,CAAC,QAAQ,CAAC,SAAS;IAjB5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiD;IACxE,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAK;IAExB,MAAM,CAAC,GAAG,CAAC,aAAa,GAAE,cAA2B;IAIrD,OAAO;IASP,OAAO,CAAC,qBAAqB,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC;IAIpF,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,IAGhC,MAAM,OAAO;CAiCxB"}
@@ -0,0 +1,69 @@
1
+ import { Level, Logger } from "#@typeberry/logger";
2
+ import { memoryTracker, now } from "#@typeberry/utils";
3
+ const logger = Logger.new(import.meta.filename, "stats");
4
+ /** Format a database size for the stats line, e.g. ` db=12.34GB`. Empty when unknown. */
5
+ function formatDbSize(bytes) {
6
+ if (bytes === null) {
7
+ return "";
8
+ }
9
+ const mb = bytes / (1024 * 1024);
10
+ return mb >= 1024 ? ` db=${(mb / 1024).toFixed(2)}GB` : ` db=${mb.toFixed(1)}MB`;
11
+ }
12
+ export class ImporterStats {
13
+ dbSizeInBytes;
14
+ maxBlocks;
15
+ maxTimeMs;
16
+ memory = memoryTracker(logger.getLevel() < Level.INFO);
17
+ showDiskStats = true;
18
+ totalTimePrev = 0;
19
+ totalTime = 0;
20
+ totalBlocksPrev = 0;
21
+ totalBlocks = 0;
22
+ static new(dbSizeInBytes = () => null) {
23
+ return new ImporterStats(dbSizeInBytes);
24
+ }
25
+ constructor(
26
+ /** Reports the current on-disk database size in bytes, or `null` if unknown. */
27
+ dbSizeInBytes = () => null,
28
+ /** How often we are going to print the stats (i.e. every `maxBlocks` blocks) */
29
+ maxBlocks = 100,
30
+ /** Alternatively print stats when we reach `${maxTimeMs}` of total block execution. */
31
+ maxTimeMs = 5000) {
32
+ this.dbSizeInBytes = dbSizeInBytes;
33
+ this.maxBlocks = maxBlocks;
34
+ this.maxTimeMs = maxTimeMs;
35
+ }
36
+ onStart(currentBestHeaderHash, currentBestState) {
37
+ logger.info `😎 Best time slot: ${currentBestState.timeslot} (header hash: ${currentBestHeaderHash})`;
38
+ }
39
+ onBlockImportingStarted(timeSlot) {
40
+ const start = now();
41
+ return (isOk) => {
42
+ const duration = now() - start;
43
+ const label = isOk ? "import" : "reject";
44
+ logger.log `⏱️ ${label} #${timeSlot} took ${duration.toFixed(2)}ms`;
45
+ this.totalTime += duration;
46
+ this.totalBlocks += 1;
47
+ if (this.totalBlocks >= this.maxBlocks || this.totalTime >= this.maxTimeMs) {
48
+ // disk data (every second output)
49
+ if (this.showDiskStats) {
50
+ logger.info `💾 disk at #${timeSlot}: ${formatDbSize(this.dbSizeInBytes())}`;
51
+ }
52
+ this.showDiskStats = !this.showDiskStats;
53
+ // memory (memoryTracker's toString() is stateful — log it once)
54
+ logger.info `📊 mem at #${timeSlot}: ${this.memory}`;
55
+ // compute block statistics (rolling window of last two rounds)
56
+ const importedBlocks = this.totalBlocks + this.totalBlocksPrev;
57
+ const importTime = this.totalTime + this.totalTimePrev;
58
+ const blocksPerSecond = (importedBlocks / importTime) * 1000;
59
+ // carry over current round
60
+ this.totalBlocksPrev = this.totalBlocks;
61
+ this.totalTimePrev = this.totalTime;
62
+ this.totalBlocks = 0;
63
+ this.totalTime = 0;
64
+ logger.info ` ⏱️ speed at #${timeSlot}: ${blocksPerSecond.toFixed(2)}bps`;
65
+ }
66
+ return duration;
67
+ };
68
+ }
69
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/jam-network/main.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAK3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAI1E;;;;;;GAMG;AACH,wBAAsB,IAAI,CACxB,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,EACtC,KAAK,EAAE,kBAAkB,EACzB,eAAe,EAAE,eAAe,iBAyDjC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/jam-network/main.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAQ3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAI1E;;;;;;GAMG;AACH,wBAAsB,IAAI,CACxB,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,EACtC,KAAK,EAAE,kBAAkB,EACzB,eAAe,EAAE,eAAe,iBAgFjC"}
@@ -1,7 +1,11 @@
1
+ import { Bytes } from "#@typeberry/bytes";
1
2
  import { parseBootnode } from "#@typeberry/config-node";
2
3
  import { ed25519, initWasm } from "#@typeberry/crypto";
4
+ import { HASH_SIZE } from "#@typeberry/hash";
3
5
  import { setup } from "#@typeberry/jamnp-s";
4
6
  import { Logger } from "#@typeberry/logger";
7
+ import { ValidationError } from "#@typeberry/ticket-pool";
8
+ import { Result } from "#@typeberry/utils";
5
9
  const logger = Logger.new(import.meta.filename, "net");
6
10
  /**
7
11
  * JAM networking worker.
@@ -38,11 +42,28 @@ export async function main(config, comms, authorshipComms) {
38
42
  network.ticketTask.addTicket(epochIndex, ticket);
39
43
  }
40
44
  });
41
- // Relay tickets received from peers back to block-authorship (one ticket at a time).
42
- // Returns the validation result so ticket-distribution knows whether to redistribute.
43
- network.ticketTask.setOnTicketReceived(async (epochIndex, ticket) => {
44
- return await authorshipComms.sendReceivedTickets({ epochIndex, ticket });
45
+ // Authorship pushes the authoritative ticket pool on epoch boundaries; networking
46
+ // replaces its redistribution pool wholesale so the two sides cannot drift.
47
+ authorshipComms.setOnReplaceTicketPool(async ({ epochIndex, tickets }) => {
48
+ logger.log `Replacing redistribution pool from block-authorship for epoch ${epochIndex} (${tickets.length} tickets)`;
49
+ network.ticketTask.replacePool(epochIndex, tickets);
45
50
  });
51
+ // Validator that hands a received ticket to block-authorship over IPC and waits
52
+ // for an accept/reject decision. The wire protocol stays a simple bool; the
53
+ // computed id stays inside authorship (it owns the verified pool).
54
+ const ipcValidator = {
55
+ validate: async (epochIndex, tickets) => {
56
+ const ok = await authorshipComms.sendReceivedTickets({ epochIndex, tickets });
57
+ if (!ok) {
58
+ return Result.error(ValidationError.InvalidProof, () => "authorship rejected the ticket");
59
+ }
60
+ return Result.ok(tickets.map((ticket) => ({
61
+ ticket,
62
+ id: Bytes.zero(HASH_SIZE).asOpaque(),
63
+ })));
64
+ },
65
+ };
66
+ network.ticketTask.setTicketValidator(ipcValidator);
46
67
  await network.network.start();
47
68
  // stop the network when the worker is finishing.
48
69
  await waitForFinish;
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/generator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,KAAK,WAAW,EAIhB,KAAK,QAAQ,EACb,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,2BAA2B,CAAC;AAEtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAoC,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAClG,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAIvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAGhF,OAAO,EAAqB,KAAK,MAAM,EAAU,MAAM,kBAAkB,CAAC;AAM1E;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAEvD,oDAAoD;AACpD,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IAEnE,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC,SAAgB,YAAY,EAAE,gBAAgB,CAAC;IAC/C,SAAgB,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;IAClD,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAElC,wDAAwD;IACxD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa;IAI9B,OAAO;IAUP,OAAO,CAAC,qBAAqB;IAYvB,aAAa,CACjB,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,sBAAsB,EAC1C,WAAW,EAAE,cAAc,EAC3B,QAAQ,EAAE,QAAQ,EAClB,cAAc,GAAE;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,EAAE,EAAE,WAAW,CAAA;KAAE,EAAO,GAC/D,OAAO,CAAC,SAAS,CAAC;IAKrB;;;;;;;;;OASG;YACW,cAAc;IAiB5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,uBAAuB;IA4BzB,SAAS,CACb,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,sBAAsB,EAC1C,WAAW,EAAE,cAAc,EAC3B,QAAQ,EAAE,QAAQ,EAClB,cAAc,GAAE;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,EAAE,EAAE,WAAW,CAAA;KAAE,EAAO;CAqGnE"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=generator.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator.test.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/generator.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ticket-generator.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/ticket-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,oBAAY,oBAAoB;IAC9B,sBAAsB,2BAA2B;IACjD,kBAAkB,uBAAuB;CAC1C;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,gBAAgB,EAC9B,QAAQ,EAAE,eAAe,EAAE,EAC3B,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,EAAE,WAAW,EACpB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAkCvD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ticket-generator.test.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/ticket-generator.test.ts"],"names":[],"mappings":""}