@lodestar/beacon-node 1.46.0-dev.9be1d27b00 → 1.46.0-dev.a03686d0dc

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 (119) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +37 -15
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/validator/index.d.ts.map +1 -1
  5. package/lib/api/impl/validator/index.js +15 -6
  6. package/lib/api/impl/validator/index.js.map +1 -1
  7. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  8. package/lib/chain/blocks/importBlock.js +3 -3
  9. package/lib/chain/blocks/importBlock.js.map +1 -1
  10. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  11. package/lib/chain/blocks/importExecutionPayload.js +3 -4
  12. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  13. package/lib/chain/blocks/index.d.ts.map +1 -1
  14. package/lib/chain/blocks/index.js +6 -0
  15. package/lib/chain/blocks/index.js.map +1 -1
  16. package/lib/chain/blocks/utils/chainSegment.d.ts.map +1 -1
  17. package/lib/chain/blocks/utils/chainSegment.js +31 -25
  18. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  19. package/lib/chain/blocks/utils/polarBearBanner.d.ts +2 -0
  20. package/lib/chain/blocks/utils/polarBearBanner.d.ts.map +1 -0
  21. package/lib/chain/blocks/utils/polarBearBanner.js +51 -0
  22. package/lib/chain/blocks/utils/polarBearBanner.js.map +1 -0
  23. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  24. package/lib/chain/blocks/verifyBlock.js +21 -1
  25. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  26. package/lib/chain/chain.d.ts +5 -0
  27. package/lib/chain/chain.d.ts.map +1 -1
  28. package/lib/chain/chain.js +55 -0
  29. package/lib/chain/chain.js.map +1 -1
  30. package/lib/chain/emitter.d.ts +6 -0
  31. package/lib/chain/emitter.d.ts.map +1 -1
  32. package/lib/chain/emitter.js +5 -0
  33. package/lib/chain/emitter.js.map +1 -1
  34. package/lib/chain/interface.d.ts +2 -0
  35. package/lib/chain/interface.d.ts.map +1 -1
  36. package/lib/chain/options.d.ts +2 -0
  37. package/lib/chain/options.d.ts.map +1 -1
  38. package/lib/chain/options.js +1 -0
  39. package/lib/chain/options.js.map +1 -1
  40. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  41. package/lib/chain/prepareNextSlot.js +107 -29
  42. package/lib/chain/prepareNextSlot.js.map +1 -1
  43. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  44. package/lib/chain/produceBlock/produceBlockBody.js +6 -6
  45. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  46. package/lib/chain/seenCache/seenBlockProposers.d.ts +20 -4
  47. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +1 -1
  48. package/lib/chain/seenCache/seenBlockProposers.js +49 -2
  49. package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
  50. package/lib/chain/validation/block.d.ts +4 -1
  51. package/lib/chain/validation/block.d.ts.map +1 -1
  52. package/lib/chain/validation/block.js +32 -18
  53. package/lib/chain/validation/block.js.map +1 -1
  54. package/lib/chain/validation/dataColumnSidecar.d.ts.map +1 -1
  55. package/lib/chain/validation/dataColumnSidecar.js +21 -16
  56. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  57. package/lib/metrics/metrics/lodestar.d.ts +14 -0
  58. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  59. package/lib/metrics/metrics/lodestar.js +38 -0
  60. package/lib/metrics/metrics/lodestar.js.map +1 -1
  61. package/lib/network/core/networkCore.d.ts.map +1 -1
  62. package/lib/network/core/networkCore.js +12 -1
  63. package/lib/network/core/networkCore.js.map +1 -1
  64. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  65. package/lib/network/core/networkCoreWorkerHandler.js +20 -3
  66. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  67. package/lib/network/network.d.ts +1 -0
  68. package/lib/network/network.d.ts.map +1 -1
  69. package/lib/network/network.js +11 -1
  70. package/lib/network/network.js.map +1 -1
  71. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  72. package/lib/network/processor/gossipHandlers.js +8 -0
  73. package/lib/network/processor/gossipHandlers.js.map +1 -1
  74. package/lib/network/reqresp/score.d.ts.map +1 -1
  75. package/lib/network/reqresp/score.js +20 -3
  76. package/lib/network/reqresp/score.js.map +1 -1
  77. package/lib/sync/range/batch.d.ts.map +1 -1
  78. package/lib/sync/range/batch.js +15 -3
  79. package/lib/sync/range/batch.js.map +1 -1
  80. package/lib/sync/range/utils/hashBlocks.d.ts +16 -4
  81. package/lib/sync/range/utils/hashBlocks.d.ts.map +1 -1
  82. package/lib/sync/range/utils/hashBlocks.js +49 -18
  83. package/lib/sync/range/utils/hashBlocks.js.map +1 -1
  84. package/lib/util/clock.d.ts +2 -7
  85. package/lib/util/clock.d.ts.map +1 -1
  86. package/lib/util/clock.js +2 -7
  87. package/lib/util/clock.js.map +1 -1
  88. package/lib/util/workerEvents.d.ts +7 -1
  89. package/lib/util/workerEvents.d.ts.map +1 -1
  90. package/lib/util/workerEvents.js +17 -5
  91. package/lib/util/workerEvents.js.map +1 -1
  92. package/package.json +15 -15
  93. package/src/api/impl/beacon/blocks/index.ts +65 -16
  94. package/src/api/impl/validator/index.ts +19 -6
  95. package/src/chain/blocks/importBlock.ts +3 -2
  96. package/src/chain/blocks/importExecutionPayload.ts +8 -4
  97. package/src/chain/blocks/index.ts +7 -0
  98. package/src/chain/blocks/utils/chainSegment.ts +35 -28
  99. package/src/chain/blocks/utils/polarBearBanner.ts +50 -0
  100. package/src/chain/blocks/verifyBlock.ts +28 -2
  101. package/src/chain/chain.ts +60 -0
  102. package/src/chain/emitter.ts +7 -0
  103. package/src/chain/interface.ts +3 -0
  104. package/src/chain/options.ts +3 -0
  105. package/src/chain/prepareNextSlot.ts +140 -39
  106. package/src/chain/produceBlock/produceBlockBody.ts +11 -6
  107. package/src/chain/seenCache/seenBlockProposers.ts +72 -5
  108. package/src/chain/validation/block.ts +41 -19
  109. package/src/chain/validation/dataColumnSidecar.ts +27 -17
  110. package/src/metrics/metrics/lodestar.ts +39 -0
  111. package/src/network/core/networkCore.ts +13 -1
  112. package/src/network/core/networkCoreWorkerHandler.ts +18 -3
  113. package/src/network/network.ts +16 -1
  114. package/src/network/processor/gossipHandlers.ts +7 -0
  115. package/src/network/reqresp/score.ts +22 -3
  116. package/src/sync/range/batch.ts +20 -3
  117. package/src/sync/range/utils/hashBlocks.ts +56 -21
  118. package/src/util/clock.ts +2 -7
  119. package/src/util/workerEvents.ts +18 -6
package/src/util/clock.ts CHANGED
@@ -94,10 +94,7 @@ export class Clock extends EventEmitter implements IClock {
94
94
  }
95
95
  /**
96
96
  * If it's too close to next slot given MAXIMUM_GOSSIP_CLOCK_DISPARITY, return currentSlot + 1.
97
- * Otherwise return currentSlot
98
- *
99
- * Spec: phase0/p2p-interface.md - gossip validation uses `current_time + MAXIMUM_GOSSIP_CLOCK_DISPARITY < message_time`
100
- * to reject future messages (strict `<`), so the boundary (exactly equal) is accepted, hence `<=` here.
97
+ * Spec: phase0/p2p-interface.md rejects future messages with strict `<`, hence `<=` here.
101
98
  */
102
99
  get currentSlotWithGossipDisparity(): Slot {
103
100
  const currentSlot = this.currentSlot;
@@ -123,9 +120,7 @@ export class Clock extends EventEmitter implements IClock {
123
120
 
124
121
  /**
125
122
  * Check if a slot is current slot given MAXIMUM_GOSSIP_CLOCK_DISPARITY.
126
- *
127
- * Uses `<=` for disparity checks because the spec rejects with strict `<`
128
- * (phase0/p2p-interface.md), meaning the boundary (exactly equal) is accepted.
123
+ * Spec: phase0/p2p-interface.md rejects future messages with strict `<`, hence `<=`.
129
124
  */
130
125
  isCurrentSlotGivenGossipDisparity(slot: Slot): boolean {
131
126
  const currentSlot = this.currentSlot;
@@ -111,6 +111,12 @@ export function wireEventsOnMainThread<EventData>(
111
111
  }
112
112
  }
113
113
 
114
+ /**
115
+ * Terminate a worker thread, bounded to `retryCount * retryMs`.
116
+ *
117
+ * @returns `false` if it could not be terminated, the worker thread is then still running and the
118
+ * caller has to decide how to proceed without it.
119
+ */
114
120
  export async function terminateWorkerThread({
115
121
  worker,
116
122
  retryMs,
@@ -121,7 +127,7 @@ export async function terminateWorkerThread({
121
127
  retryMs: number;
122
128
  retryCount: number;
123
129
  logger?: Logger;
124
- }): Promise<void> {
130
+ }): Promise<boolean> {
125
131
  const terminated = new Promise((resolve) => {
126
132
  Thread.events(worker).subscribe((event) => {
127
133
  if (event.type === "termination") {
@@ -131,13 +137,19 @@ export async function terminateWorkerThread({
131
137
  });
132
138
 
133
139
  for (let i = 0; i < retryCount; i++) {
134
- await Thread.terminate(worker);
135
- const result = await Promise.race([terminated, sleep(retryMs).then(() => false)]);
140
+ // `Worker.terminate()` resolves only once the worker thread exits, and the thread can spin
141
+ // forever in `Environment::CleanupHandles()` when a libuv handle on its loop never closes, so
142
+ // it has to be raced too, otherwise `retryCount * retryMs` never applies.
143
+ const result = await Promise.race([
144
+ Thread.terminate(worker).then(() => terminated),
145
+ sleep(retryMs).then(() => false),
146
+ ]);
136
147
 
137
- if (result) return;
148
+ if (result) return true;
138
149
 
139
- logger?.warn("Worker thread failed to terminate, retrying...");
150
+ logger?.debug("Worker thread failed to terminate, retrying...");
140
151
  }
141
152
 
142
- throw new Error(`Worker thread failed to terminate in ${retryCount * retryMs}ms.`);
153
+ logger?.debug(`Worker thread failed to terminate in ${retryCount * retryMs}ms`);
154
+ return false;
143
155
  }