@lodestar/beacon-node 1.23.0-dev.404f13abfd → 1.23.0-dev.4b7d871ab3

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 (242) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +4 -2
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/beacon/pool/index.js +13 -23
  4. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  5. package/lib/api/impl/beacon/state/index.d.ts +1 -1
  6. package/lib/api/impl/beacon/state/index.js +44 -4
  7. package/lib/api/impl/beacon/state/index.js.map +1 -1
  8. package/lib/api/impl/beacon/state/utils.d.ts +2 -6
  9. package/lib/api/impl/beacon/state/utils.js +23 -35
  10. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  11. package/lib/api/impl/config/constants.d.ts +0 -1
  12. package/lib/api/impl/config/constants.js +1 -3
  13. package/lib/api/impl/config/constants.js.map +1 -1
  14. package/lib/api/impl/debug/index.js +30 -0
  15. package/lib/api/impl/debug/index.js.map +1 -1
  16. package/lib/api/impl/errors.d.ts +8 -0
  17. package/lib/api/impl/errors.js +7 -0
  18. package/lib/api/impl/errors.js.map +1 -1
  19. package/lib/api/impl/events/index.js +1 -2
  20. package/lib/api/impl/events/index.js.map +1 -1
  21. package/lib/api/impl/node/utils.js +1 -0
  22. package/lib/api/impl/node/utils.js.map +1 -1
  23. package/lib/api/impl/validator/index.js +11 -21
  24. package/lib/api/impl/validator/index.js.map +1 -1
  25. package/lib/api/rest/activeSockets.js +1 -1
  26. package/lib/api/rest/activeSockets.js.map +1 -1
  27. package/lib/api/rest/base.d.ts +1 -0
  28. package/lib/api/rest/base.js +31 -4
  29. package/lib/api/rest/base.js.map +1 -1
  30. package/lib/api/rest/index.js +1 -0
  31. package/lib/api/rest/index.js.map +1 -1
  32. package/lib/api/rest/swaggerUI.js +1 -4
  33. package/lib/api/rest/swaggerUI.js.map +1 -1
  34. package/lib/chain/archiver/archiveStates.d.ts +3 -2
  35. package/lib/chain/archiver/archiveStates.js +8 -4
  36. package/lib/chain/archiver/archiveStates.js.map +1 -1
  37. package/lib/chain/archiver/index.d.ts +3 -1
  38. package/lib/chain/archiver/index.js +3 -2
  39. package/lib/chain/archiver/index.js.map +1 -1
  40. package/lib/chain/blocks/importBlock.js +2 -7
  41. package/lib/chain/blocks/importBlock.js.map +1 -1
  42. package/lib/chain/blocks/verifyBlocksDataAvailability.js +1 -2
  43. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  44. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +2 -1
  45. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  46. package/lib/chain/bls/multithread/index.js +1 -2
  47. package/lib/chain/bls/multithread/index.js.map +1 -1
  48. package/lib/chain/bls/multithread/poolSize.js +1 -1
  49. package/lib/chain/bls/multithread/poolSize.js.map +1 -1
  50. package/lib/chain/bls/multithread/worker.js +1 -1
  51. package/lib/chain/bls/multithread/worker.js.map +1 -1
  52. package/lib/chain/chain.d.ts +4 -42
  53. package/lib/chain/chain.js +23 -13
  54. package/lib/chain/chain.js.map +1 -1
  55. package/lib/chain/emitter.d.ts +1 -1
  56. package/lib/chain/emitter.js +1 -1
  57. package/lib/chain/emitter.js.map +1 -1
  58. package/lib/chain/forkChoice/index.d.ts +4 -0
  59. package/lib/chain/forkChoice/index.js +6 -2
  60. package/lib/chain/forkChoice/index.js.map +1 -1
  61. package/lib/chain/historicalState/getHistoricalState.d.ts +2 -1
  62. package/lib/chain/historicalState/getHistoricalState.js +3 -0
  63. package/lib/chain/historicalState/getHistoricalState.js.map +1 -1
  64. package/lib/chain/historicalState/worker.js +1 -1
  65. package/lib/chain/historicalState/worker.js.map +1 -1
  66. package/lib/chain/initState.d.ts +2 -6
  67. package/lib/chain/initState.js +3 -31
  68. package/lib/chain/initState.js.map +1 -1
  69. package/lib/chain/interface.d.ts +4 -2
  70. package/lib/chain/interface.js.map +1 -1
  71. package/lib/chain/options.js +1 -1
  72. package/lib/chain/options.js.map +1 -1
  73. package/lib/chain/prepareNextSlot.js +2 -1
  74. package/lib/chain/prepareNextSlot.js.map +1 -1
  75. package/lib/chain/produceBlock/produceBlockBody.js +7 -1
  76. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  77. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.d.ts +1 -1
  78. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js +1 -1
  79. package/lib/chain/produceBlock/validateBlobsAndKzgCommitments.js.map +1 -1
  80. package/lib/chain/regen/regen.js +1 -1
  81. package/lib/chain/regen/regen.js.map +1 -1
  82. package/lib/chain/rewards/attestationsRewards.d.ts +1 -1
  83. package/lib/chain/rewards/attestationsRewards.js +3 -2
  84. package/lib/chain/rewards/attestationsRewards.js.map +1 -1
  85. package/lib/chain/serializeState.js +63 -10
  86. package/lib/chain/serializeState.js.map +1 -1
  87. package/lib/chain/shufflingCache.d.ts +37 -13
  88. package/lib/chain/shufflingCache.js +85 -76
  89. package/lib/chain/shufflingCache.js.map +1 -1
  90. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +7 -2
  91. package/lib/chain/stateCache/fifoBlockStateCache.js +7 -2
  92. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  93. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +4 -3
  94. package/lib/chain/stateCache/persistentCheckpointsCache.js +26 -29
  95. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  96. package/lib/chain/validation/aggregateAndProof.d.ts +1 -1
  97. package/lib/chain/validation/attestation.d.ts +3 -17
  98. package/lib/chain/validation/attestation.js +7 -26
  99. package/lib/chain/validation/attestation.js.map +1 -1
  100. package/lib/chain/validation/attesterSlashing.d.ts +1 -1
  101. package/lib/chain/validation/blsToExecutionChange.d.ts +1 -1
  102. package/lib/chain/validation/proposerSlashing.d.ts +1 -1
  103. package/lib/chain/validation/voluntaryExit.d.ts +1 -1
  104. package/lib/db/repositories/backfilledRanges.d.ts +1 -1
  105. package/lib/db/repositories/backfilledRanges.js +1 -2
  106. package/lib/db/repositories/backfilledRanges.js.map +1 -1
  107. package/lib/db/repositories/checkpointState.js +0 -1
  108. package/lib/db/repositories/checkpointState.js.map +1 -1
  109. package/lib/db/repositories/depositDataRoot.d.ts +1 -1
  110. package/lib/db/repositories/depositDataRoot.js +1 -2
  111. package/lib/db/repositories/depositDataRoot.js.map +1 -1
  112. package/lib/db/repositories/eth1Data.d.ts +1 -1
  113. package/lib/db/repositories/eth1Data.js +1 -2
  114. package/lib/db/repositories/eth1Data.js.map +1 -1
  115. package/lib/db/repositories/stateArchive.js +1 -1
  116. package/lib/db/repositories/stateArchive.js.map +1 -1
  117. package/lib/db/single/preGenesisStateLastProcessedBlock.d.ts +1 -1
  118. package/lib/db/single/preGenesisStateLastProcessedBlock.js +1 -1
  119. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +1 -1
  120. package/lib/eth1/eth1MergeBlockTracker.js +0 -2
  121. package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
  122. package/lib/eth1/provider/eth1Provider.js.map +1 -1
  123. package/lib/eth1/provider/jsonRpcHttpClient.d.ts +1 -1
  124. package/lib/eth1/provider/jsonRpcHttpClient.js +1 -1
  125. package/lib/eth1/provider/jsonRpcHttpClient.js.map +1 -1
  126. package/lib/eth1/provider/jwt.js +0 -1
  127. package/lib/eth1/provider/jwt.js.map +1 -1
  128. package/lib/execution/builder/index.js +1 -0
  129. package/lib/execution/builder/index.js.map +1 -1
  130. package/lib/execution/engine/http.d.ts +5 -4
  131. package/lib/execution/engine/http.js +29 -12
  132. package/lib/execution/engine/http.js.map +1 -1
  133. package/lib/execution/engine/index.js +1 -0
  134. package/lib/execution/engine/index.js.map +1 -1
  135. package/lib/execution/engine/interface.d.ts +5 -4
  136. package/lib/execution/engine/interface.js.map +1 -1
  137. package/lib/execution/engine/mock.js +0 -3
  138. package/lib/execution/engine/mock.js.map +1 -1
  139. package/lib/execution/engine/payloadIdCache.d.ts +0 -17
  140. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  141. package/lib/execution/engine/types.d.ts +29 -25
  142. package/lib/execution/engine/types.js +28 -42
  143. package/lib/execution/engine/types.js.map +1 -1
  144. package/lib/execution/engine/utils.js +1 -1
  145. package/lib/execution/engine/utils.js.map +1 -1
  146. package/lib/metrics/metrics/beacon.d.ts +1 -1
  147. package/lib/metrics/metrics/beacon.js +2 -3
  148. package/lib/metrics/metrics/beacon.js.map +1 -1
  149. package/lib/metrics/metrics/lodestar.d.ts +13 -4
  150. package/lib/metrics/metrics/lodestar.js +43 -20
  151. package/lib/metrics/metrics/lodestar.js.map +1 -1
  152. package/lib/monitoring/service.js +1 -1
  153. package/lib/monitoring/service.js.map +1 -1
  154. package/lib/monitoring/system.js +0 -1
  155. package/lib/monitoring/system.js.map +1 -1
  156. package/lib/network/core/metrics.js +0 -2
  157. package/lib/network/core/metrics.js.map +1 -1
  158. package/lib/network/core/networkCore.js +1 -1
  159. package/lib/network/core/networkCore.js.map +1 -1
  160. package/lib/network/core/networkCoreWorker.js +0 -1
  161. package/lib/network/core/networkCoreWorker.js.map +1 -1
  162. package/lib/network/core/networkCoreWorkerHandler.js +1 -1
  163. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  164. package/lib/network/discv5/index.d.ts +1 -1
  165. package/lib/network/discv5/index.js +1 -1
  166. package/lib/network/discv5/index.js.map +1 -1
  167. package/lib/network/discv5/worker.js +0 -1
  168. package/lib/network/discv5/worker.js.map +1 -1
  169. package/lib/network/events.js +1 -1
  170. package/lib/network/events.js.map +1 -1
  171. package/lib/network/forks.js +0 -1
  172. package/lib/network/forks.js.map +1 -1
  173. package/lib/network/gossip/gossipsub.js +0 -1
  174. package/lib/network/gossip/gossipsub.js.map +1 -1
  175. package/lib/network/gossip/interface.d.ts +8 -6
  176. package/lib/network/gossip/interface.js.map +1 -1
  177. package/lib/network/gossip/metrics.js +0 -1
  178. package/lib/network/gossip/metrics.js.map +1 -1
  179. package/lib/network/gossip/scoringParameters.js +0 -1
  180. package/lib/network/gossip/scoringParameters.js.map +1 -1
  181. package/lib/network/gossip/topic.d.ts +0 -27
  182. package/lib/network/gossip/topic.js +2 -3
  183. package/lib/network/gossip/topic.js.map +1 -1
  184. package/lib/network/options.js +0 -2
  185. package/lib/network/options.js.map +1 -1
  186. package/lib/network/peers/datastore.js +1 -2
  187. package/lib/network/peers/datastore.js.map +1 -1
  188. package/lib/network/peers/discover.js +0 -1
  189. package/lib/network/peers/discover.js.map +1 -1
  190. package/lib/network/peers/peerManager.js +4 -4
  191. package/lib/network/peers/peerManager.js.map +1 -1
  192. package/lib/network/processor/gossipHandlers.d.ts +0 -2
  193. package/lib/network/processor/gossipHandlers.js +15 -62
  194. package/lib/network/processor/gossipHandlers.js.map +1 -1
  195. package/lib/network/processor/gossipQueues/index.d.ts +1 -1
  196. package/lib/network/processor/gossipQueues/index.js +6 -19
  197. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  198. package/lib/network/processor/gossipQueues/types.d.ts +1 -2
  199. package/lib/network/processor/gossipQueues/types.js +0 -6
  200. package/lib/network/processor/gossipQueues/types.js.map +1 -1
  201. package/lib/network/processor/index.js +4 -2
  202. package/lib/network/processor/index.js.map +1 -1
  203. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +3 -1
  204. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -1
  205. package/lib/network/reqresp/protocols.js +0 -1
  206. package/lib/network/reqresp/protocols.js.map +1 -1
  207. package/lib/network/reqresp/rateLimit.js +1 -1
  208. package/lib/network/reqresp/rateLimit.js.map +1 -1
  209. package/lib/network/reqresp/score.js +0 -1
  210. package/lib/network/reqresp/score.js.map +1 -1
  211. package/lib/network/util.js +0 -1
  212. package/lib/network/util.js.map +1 -1
  213. package/lib/node/utils/interop/state.js +1 -0
  214. package/lib/node/utils/interop/state.js.map +1 -1
  215. package/lib/node/utils/state.d.ts +3 -0
  216. package/lib/node/utils/state.js +3 -0
  217. package/lib/node/utils/state.js.map +1 -1
  218. package/lib/sync/backfill/backfill.d.ts +2 -2
  219. package/lib/sync/backfill/backfill.js +3 -3
  220. package/lib/sync/backfill/backfill.js.map +1 -1
  221. package/lib/sync/range/range.d.ts +1 -1
  222. package/lib/sync/range/range.js +1 -1
  223. package/lib/sync/range/range.js.map +1 -1
  224. package/lib/util/asyncIterableToEvents.js +0 -2
  225. package/lib/util/asyncIterableToEvents.js.map +1 -1
  226. package/lib/util/kzg.js +0 -1
  227. package/lib/util/kzg.js.map +1 -1
  228. package/lib/util/map.js +0 -1
  229. package/lib/util/map.js.map +1 -1
  230. package/lib/util/profile.js +1 -1
  231. package/lib/util/profile.js.map +1 -1
  232. package/lib/util/queue/errors.d.ts +0 -1
  233. package/lib/util/queue/errors.js +0 -3
  234. package/lib/util/queue/errors.js.map +1 -1
  235. package/lib/util/queue/fnQueue.js +1 -1
  236. package/lib/util/queue/fnQueue.js.map +1 -1
  237. package/lib/util/queue/itemQueue.js +1 -1
  238. package/lib/util/queue/itemQueue.js.map +1 -1
  239. package/package.json +22 -21
  240. package/lib/network/processor/gossipQueues/indexedAvgTime.d.ts +0 -31
  241. package/lib/network/processor/gossipQueues/indexedAvgTime.js +0 -115
  242. package/lib/network/processor/gossipQueues/indexedAvgTime.js.map +0 -1
@@ -1,31 +0,0 @@
1
- import { GossipQueue, IndexedGossipQueueOpts } from "./types.js";
2
- /**
3
- * An implementation of GossipQueue that tries to run the batch with highest score first.
4
- * TODO: add unit tests
5
- * - index items by indexFn using a map
6
- * - compute avgRecvTimestampMs for each key every time we add new item
7
- * - on next, pick the key with the highest score (check the score function above)
8
- */
9
- export declare class IndexedGossipQueueAvgTime<T extends {
10
- indexed?: string;
11
- }> implements GossipQueue<T> {
12
- private readonly opts;
13
- private _length;
14
- private indexedItems;
15
- constructor(opts: IndexedGossipQueueOpts<T>);
16
- get length(): number;
17
- get keySize(): number;
18
- clear(): void;
19
- getDataAgeMs(): number[];
20
- /**
21
- * Add item to gossip queue. If queue is full, drop first item of first key.
22
- * Return number of items dropped
23
- */
24
- add(item: T): number;
25
- /**
26
- * Try to get list of items of the same key with highest score
27
- */
28
- next(): T[] | null;
29
- getAll(): T[];
30
- }
31
- //# sourceMappingURL=indexedAvgTime.d.ts.map
@@ -1,115 +0,0 @@
1
- function listScore(list) {
2
- return list.items.length / Math.max(1000, Date.now() - list.avgRecvTimestampMs);
3
- }
4
- /**
5
- * An implementation of GossipQueue that tries to run the batch with highest score first.
6
- * TODO: add unit tests
7
- * - index items by indexFn using a map
8
- * - compute avgRecvTimestampMs for each key every time we add new item
9
- * - on next, pick the key with the highest score (check the score function above)
10
- */
11
- export class IndexedGossipQueueAvgTime {
12
- constructor(opts) {
13
- this.opts = opts;
14
- this._length = 0;
15
- this.indexedItems = new Map();
16
- }
17
- get length() {
18
- return this._length;
19
- }
20
- get keySize() {
21
- return this.indexedItems.size;
22
- }
23
- clear() {
24
- this.indexedItems = new Map();
25
- this._length = 0;
26
- }
27
- // not implemented for this gossip queue
28
- getDataAgeMs() {
29
- return [];
30
- }
31
- /**
32
- * Add item to gossip queue. If queue is full, drop first item of first key.
33
- * Return number of items dropped
34
- */
35
- add(item) {
36
- const key = this.opts.indexFn(item);
37
- if (key == null) {
38
- // this comes from getAttDataBase64FromAttestationSerialized() return type
39
- // should not happen
40
- return 0;
41
- }
42
- item.indexed = key;
43
- let list = this.indexedItems.get(key);
44
- if (list == null) {
45
- list = {
46
- items: [],
47
- avgRecvTimestampMs: Date.now(),
48
- };
49
- this.indexedItems.set(key, list);
50
- }
51
- else {
52
- list.avgRecvTimestampMs = (list.avgRecvTimestampMs * list.items.length + Date.now()) / (list.items.length + 1);
53
- list.items.push(item);
54
- }
55
- this._length++;
56
- if (this._length <= this.opts.maxLength) {
57
- return 0;
58
- }
59
- // overload, need to drop more items
60
- const firstKey = this.indexedItems.keys().next().value;
61
- // there should be at least 1 key
62
- if (firstKey == null) {
63
- return 0;
64
- }
65
- const firstList = this.indexedItems.get(firstKey);
66
- // should not happen
67
- if (firstList == null) {
68
- return 0;
69
- }
70
- const deletedItem = firstList.items.shift();
71
- if (deletedItem != null) {
72
- this._length--;
73
- if (firstList.items.length === 0) {
74
- this.indexedItems.delete(firstKey);
75
- }
76
- return 1;
77
- }
78
- else {
79
- return 0;
80
- }
81
- }
82
- /**
83
- * Try to get list of items of the same key with highest score
84
- */
85
- next() {
86
- let maxScore = 0;
87
- let maxScoreKey;
88
- for (const [key, list] of this.indexedItems) {
89
- const score = listScore(list);
90
- if (score > maxScore) {
91
- maxScore = score;
92
- maxScoreKey = key;
93
- }
94
- }
95
- if (maxScoreKey == null) {
96
- return null;
97
- }
98
- const items = this.indexedItems.get(maxScoreKey)?.items;
99
- if (items == null) {
100
- // should not happen
101
- return null;
102
- }
103
- this.indexedItems.delete(maxScoreKey);
104
- this._length = Math.max(0, this._length - items.length);
105
- return items;
106
- }
107
- getAll() {
108
- const items = [];
109
- for (const list of this.indexedItems.values()) {
110
- items.push(...list.items);
111
- }
112
- return items;
113
- }
114
- }
115
- //# sourceMappingURL=indexedAvgTime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexedAvgTime.js","sourceRoot":"","sources":["../../../../src/network/processor/gossipQueues/indexedAvgTime.ts"],"names":[],"mappings":"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"}