@lodestar/beacon-node 1.47.0-dev.41653ebb93 → 1.47.0-dev.57f6ac1a8b

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 (176) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.js +8 -1
  5. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  6. package/lib/api/impl/beacon/state/utils.d.ts +2 -1
  7. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  8. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  9. package/lib/api/impl/events/index.d.ts +1 -1
  10. package/lib/api/impl/events/index.d.ts.map +1 -1
  11. package/lib/api/impl/events/index.js +10 -3
  12. package/lib/api/impl/events/index.js.map +1 -1
  13. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  14. package/lib/chain/blocks/importExecutionPayload.js +1 -1
  15. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  16. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +2 -2
  17. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -1
  18. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +2 -2
  19. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
  20. package/lib/chain/bls/index.d.ts +1 -1
  21. package/lib/chain/bls/index.d.ts.map +1 -1
  22. package/lib/chain/bls/interface.d.ts +5 -5
  23. package/lib/chain/bls/interface.d.ts.map +1 -1
  24. package/lib/chain/bls/multithread/index.d.ts +5 -11
  25. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  26. package/lib/chain/bls/multithread/index.js +116 -101
  27. package/lib/chain/bls/multithread/index.js.map +1 -1
  28. package/lib/chain/bls/multithread/jobItem.d.ts +5 -19
  29. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
  30. package/lib/chain/bls/multithread/jobItem.js +10 -65
  31. package/lib/chain/bls/multithread/jobItem.js.map +1 -1
  32. package/lib/chain/bls/multithread/types.d.ts +29 -8
  33. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  34. package/lib/chain/bls/multithread/types.js +12 -0
  35. package/lib/chain/bls/multithread/types.js.map +1 -1
  36. package/lib/chain/bls/multithread/utils.d.ts +4 -0
  37. package/lib/chain/bls/multithread/utils.d.ts.map +1 -1
  38. package/lib/chain/bls/multithread/utils.js +10 -0
  39. package/lib/chain/bls/multithread/utils.js.map +1 -1
  40. package/lib/chain/bls/multithread/worker.js +49 -23
  41. package/lib/chain/bls/multithread/worker.js.map +1 -1
  42. package/lib/chain/bls/singleThread.d.ts +4 -10
  43. package/lib/chain/bls/singleThread.d.ts.map +1 -1
  44. package/lib/chain/bls/singleThread.js +8 -45
  45. package/lib/chain/bls/singleThread.js.map +1 -1
  46. package/lib/chain/bls/utils.d.ts +4 -4
  47. package/lib/chain/bls/utils.d.ts.map +1 -1
  48. package/lib/chain/bls/utils.js +18 -19
  49. package/lib/chain/bls/utils.js.map +1 -1
  50. package/lib/chain/chain.d.ts +2 -1
  51. package/lib/chain/chain.d.ts.map +1 -1
  52. package/lib/chain/chain.js +6 -4
  53. package/lib/chain/chain.js.map +1 -1
  54. package/lib/chain/errors/proposerPreferences.d.ts +6 -0
  55. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -1
  56. package/lib/chain/errors/proposerPreferences.js +1 -0
  57. package/lib/chain/errors/proposerPreferences.js.map +1 -1
  58. package/lib/chain/interface.d.ts +2 -1
  59. package/lib/chain/interface.d.ts.map +1 -1
  60. package/lib/chain/interface.js.map +1 -1
  61. package/lib/chain/opPools/aggregatedAttestationPool.js +1 -1
  62. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  63. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  64. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  65. package/lib/chain/opPools/attestationPool.js +1 -1
  66. package/lib/chain/opPools/attestationPool.js.map +1 -1
  67. package/lib/chain/opPools/payloadAttestationPool.js +3 -3
  68. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  69. package/lib/chain/opPools/syncCommitteeMessagePool.js +1 -1
  70. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  71. package/lib/chain/opPools/syncContributionAndProofPool.js +1 -1
  72. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  73. package/lib/chain/opPools/utils.d.ts +1 -1
  74. package/lib/chain/opPools/utils.d.ts.map +1 -1
  75. package/lib/chain/opPools/utils.js +1 -1
  76. package/lib/chain/opPools/utils.js.map +1 -1
  77. package/lib/chain/seenCache/seenAttesters.d.ts +9 -5
  78. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -1
  79. package/lib/chain/seenCache/seenAttesters.js +25 -4
  80. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  81. package/lib/chain/validation/attestation.d.ts.map +1 -1
  82. package/lib/chain/validation/attestation.js +1 -4
  83. package/lib/chain/validation/attestation.js.map +1 -1
  84. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  85. package/lib/chain/validation/attesterSlashing.js +1 -1
  86. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  87. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  88. package/lib/chain/validation/executionPayloadBid.js +1 -2
  89. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  90. package/lib/chain/validation/executionPayloadEnvelope.js +1 -1
  91. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  92. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  93. package/lib/chain/validation/payloadAttestationMessage.js +5 -14
  94. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  95. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -1
  96. package/lib/chain/validation/proposerPreferences.js +12 -3
  97. package/lib/chain/validation/proposerPreferences.js.map +1 -1
  98. package/lib/chain/validation/proposerSlashing.js +1 -1
  99. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  100. package/lib/metrics/metrics/lodestar.d.ts +38 -18
  101. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  102. package/lib/metrics/metrics/lodestar.js +80 -50
  103. package/lib/metrics/metrics/lodestar.js.map +1 -1
  104. package/lib/network/gossip/topic.d.ts +13 -0
  105. package/lib/network/gossip/topic.d.ts.map +1 -1
  106. package/lib/network/gossip/topic.js +37 -0
  107. package/lib/network/gossip/topic.js.map +1 -1
  108. package/lib/network/libp2p/index.d.ts.map +1 -1
  109. package/lib/network/libp2p/index.js +10 -2
  110. package/lib/network/libp2p/index.js.map +1 -1
  111. package/lib/network/network.d.ts.map +1 -1
  112. package/lib/network/network.js +22 -43
  113. package/lib/network/network.js.map +1 -1
  114. package/lib/network/reqresp/score.d.ts.map +1 -1
  115. package/lib/network/reqresp/score.js +5 -11
  116. package/lib/network/reqresp/score.js.map +1 -1
  117. package/lib/network/util.d.ts +0 -1
  118. package/lib/network/util.d.ts.map +1 -1
  119. package/lib/network/util.js +0 -4
  120. package/lib/network/util.js.map +1 -1
  121. package/lib/node/nodejs.d.ts +2 -1
  122. package/lib/node/nodejs.d.ts.map +1 -1
  123. package/lib/node/nodejs.js.map +1 -1
  124. package/lib/sync/types.d.ts.map +1 -1
  125. package/lib/sync/types.js.map +1 -1
  126. package/lib/sync/unknownBlock.d.ts +9 -0
  127. package/lib/sync/unknownBlock.d.ts.map +1 -1
  128. package/lib/sync/unknownBlock.js +93 -9
  129. package/lib/sync/unknownBlock.js.map +1 -1
  130. package/package.json +15 -15
  131. package/src/api/impl/beacon/blocks/index.ts +1 -1
  132. package/src/api/impl/beacon/pool/index.ts +7 -1
  133. package/src/api/impl/beacon/state/utils.ts +2 -1
  134. package/src/api/impl/events/index.ts +10 -4
  135. package/src/chain/blocks/importExecutionPayload.ts +0 -1
  136. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +1 -9
  137. package/src/chain/bls/index.ts +1 -1
  138. package/src/chain/bls/interface.ts +7 -3
  139. package/src/chain/bls/multithread/index.ts +148 -120
  140. package/src/chain/bls/multithread/jobItem.ts +12 -82
  141. package/src/chain/bls/multithread/types.ts +33 -8
  142. package/src/chain/bls/multithread/utils.ts +11 -0
  143. package/src/chain/bls/multithread/worker.ts +85 -27
  144. package/src/chain/bls/singleThread.ts +11 -55
  145. package/src/chain/bls/utils.ts +23 -24
  146. package/src/chain/chain.ts +7 -5
  147. package/src/chain/errors/proposerPreferences.ts +7 -0
  148. package/src/chain/interface.ts +2 -1
  149. package/src/chain/opPools/aggregatedAttestationPool.ts +1 -1
  150. package/src/chain/opPools/attestationPool.ts +1 -1
  151. package/src/chain/opPools/payloadAttestationPool.ts +3 -3
  152. package/src/chain/opPools/syncCommitteeMessagePool.ts +1 -1
  153. package/src/chain/opPools/syncContributionAndProofPool.ts +1 -1
  154. package/src/chain/opPools/utils.ts +1 -1
  155. package/src/chain/seenCache/seenAttesters.ts +31 -5
  156. package/src/chain/validation/attestation.ts +1 -7
  157. package/src/chain/validation/attesterSlashing.ts +1 -8
  158. package/src/chain/validation/executionPayloadBid.ts +1 -2
  159. package/src/chain/validation/executionPayloadEnvelope.ts +0 -1
  160. package/src/chain/validation/payloadAttestationMessage.ts +6 -17
  161. package/src/chain/validation/proposerPreferences.ts +14 -4
  162. package/src/chain/validation/proposerSlashing.ts +1 -1
  163. package/src/metrics/metrics/lodestar.ts +85 -51
  164. package/src/network/gossip/topic.ts +38 -0
  165. package/src/network/libp2p/index.ts +11 -2
  166. package/src/network/network.ts +27 -55
  167. package/src/network/reqresp/score.ts +5 -11
  168. package/src/network/util.ts +0 -5
  169. package/src/node/nodejs.ts +2 -1
  170. package/src/sync/types.ts +3 -1
  171. package/src/sync/unknownBlock.ts +108 -12
  172. package/lib/chain/bls/maybeBatch.d.ts +0 -12
  173. package/lib/chain/bls/maybeBatch.d.ts.map +0 -1
  174. package/lib/chain/bls/maybeBatch.js +0 -35
  175. package/lib/chain/bls/maybeBatch.js.map +0 -1
  176. package/src/chain/bls/maybeBatch.ts +0 -45
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "bugs": {
12
12
  "url": "https://github.com/ChainSafe/lodestar/issues"
13
13
  },
14
- "version": "1.47.0-dev.41653ebb93",
14
+ "version": "1.47.0-dev.57f6ac1a8b",
15
15
  "type": "module",
16
16
  "exports": {
17
17
  ".": {
@@ -101,11 +101,11 @@
101
101
  },
102
102
  "dependencies": {
103
103
  "@chainsafe/as-sha256": "^1.2.4",
104
- "@chainsafe/blst": "^2.2.0",
105
104
  "@chainsafe/discv5": "^12.0.2",
106
105
  "@chainsafe/enr": "^6.0.2",
107
106
  "@chainsafe/libp2p-noise": "^17.0.0",
108
107
  "@chainsafe/libp2p-quic": "^2.1.3",
108
+ "@chainsafe/lodestar-z": "catalog:",
109
109
  "@chainsafe/persistent-merkle-tree": "^1.3.0",
110
110
  "@chainsafe/prometheus-gc-stats": "^1.0.0",
111
111
  "@chainsafe/snappy-wasm": "^0.5.0",
@@ -126,17 +126,17 @@
126
126
  "@libp2p/peer-id": "^6.0.4",
127
127
  "@libp2p/prometheus-metrics": "^5.0.14",
128
128
  "@libp2p/tcp": "^11.0.13",
129
- "@lodestar/api": "^1.47.0-dev.41653ebb93",
130
- "@lodestar/config": "^1.47.0-dev.41653ebb93",
131
- "@lodestar/db": "^1.47.0-dev.41653ebb93",
132
- "@lodestar/fork-choice": "^1.47.0-dev.41653ebb93",
133
- "@lodestar/logger": "^1.47.0-dev.41653ebb93",
134
- "@lodestar/params": "^1.47.0-dev.41653ebb93",
135
- "@lodestar/reqresp": "^1.47.0-dev.41653ebb93",
136
- "@lodestar/state-transition": "^1.47.0-dev.41653ebb93",
137
- "@lodestar/types": "^1.47.0-dev.41653ebb93",
138
- "@lodestar/utils": "^1.47.0-dev.41653ebb93",
139
- "@lodestar/validator": "^1.47.0-dev.41653ebb93",
129
+ "@lodestar/api": "^1.47.0-dev.57f6ac1a8b",
130
+ "@lodestar/config": "^1.47.0-dev.57f6ac1a8b",
131
+ "@lodestar/db": "^1.47.0-dev.57f6ac1a8b",
132
+ "@lodestar/fork-choice": "^1.47.0-dev.57f6ac1a8b",
133
+ "@lodestar/logger": "^1.47.0-dev.57f6ac1a8b",
134
+ "@lodestar/params": "^1.47.0-dev.57f6ac1a8b",
135
+ "@lodestar/reqresp": "^1.47.0-dev.57f6ac1a8b",
136
+ "@lodestar/state-transition": "^1.47.0-dev.57f6ac1a8b",
137
+ "@lodestar/types": "^1.47.0-dev.57f6ac1a8b",
138
+ "@lodestar/utils": "^1.47.0-dev.57f6ac1a8b",
139
+ "@lodestar/validator": "^1.47.0-dev.57f6ac1a8b",
140
140
  "@multiformats/multiaddr": "^13.0.1",
141
141
  "datastore-core": "^11.0.2",
142
142
  "datastore-level": "^12.0.2",
@@ -158,7 +158,7 @@
158
158
  "@libp2p/interface-internal": "^3.0.13",
159
159
  "@libp2p/logger": "^6.2.2",
160
160
  "@libp2p/utils": "^7.0.13",
161
- "@lodestar/spec-test-util": "^1.47.0-dev.41653ebb93",
161
+ "@lodestar/spec-test-util": "^1.47.0-dev.57f6ac1a8b",
162
162
  "@types/js-yaml": "^4.0.5",
163
163
  "@types/qs": "^6.9.7",
164
164
  "@types/tmp": "^0.2.3",
@@ -175,5 +175,5 @@
175
175
  "beacon",
176
176
  "blockchain"
177
177
  ],
178
- "gitHead": "32e9105b00029b3a97d84cfb55b5d1232423658f"
178
+ "gitHead": "68369436a21b3cc1c2f40816f422f3311ce983c5"
179
179
  }
@@ -401,7 +401,7 @@ export function getBeaconBlockApi({
401
401
  for (let i = 0; i < dataColumnSidecars.length; i++) {
402
402
  // + 1 because we publish to beacon_block first
403
403
  const {sentPeers, alreadyPublished} = sentPeersArr[i + 1] as {sentPeers: number; alreadyPublished: boolean};
404
- // sent peers could be 0 as we set `allowPublishToZeroTopicPeers=true` in network.publishDataColumnSidecar()
404
+ // sent peers could be 0, data_column_sidecar opts out of the zero peers publish error, see gossipTopicAllowPublishToZeroPeers
405
405
  metrics?.dataColumns.sentPeersPerSubnet.observe(sentPeers);
406
406
  // A duplicate publish (alreadyPublished=true) means the column is already propagating on the network —
407
407
  // expected in self-build flows where peers gossip columns back to us before we publish the envelope.
@@ -100,7 +100,9 @@ export function getBeaconPoolApi({
100
100
  const {indexedAttestation, subnet, attDataRootHex, committeeIndex, validatorCommitteeIndex, committeeSize} =
101
101
  await validateGossipFnRetryUnknownRoot(validateFn, network, chain, slot, beaconBlockRoot);
102
102
 
103
- if (network.shouldAggregate(subnet, slot)) {
103
+ try {
104
+ // `is_aggregator` only covers aggregating what we receive on the subnet via gossip, not what
105
+ // a validator client hands us directly, see https://github.com/ChainSafe/lodestar/issues/7548
104
106
  const insertOutcome = chain.attestationPool.add(
105
107
  committeeIndex,
106
108
  attestation,
@@ -110,6 +112,10 @@ export function getBeaconPoolApi({
110
112
  priority
111
113
  );
112
114
  metrics?.opPool.attestationPool.apiInsertOutcome.inc({insertOutcome});
115
+ } catch (e) {
116
+ // The pool is a local optimization, failing to insert must not stop us from publishing a
117
+ // validated attestation, which the route requires us to do. Same handling as the gossip path
118
+ logger.debug("Error adding unaggregated attestation to pool", {subnet}, e as Error);
113
119
  }
114
120
 
115
121
  if (isForkPostElectra(fork)) {
@@ -1,7 +1,8 @@
1
+ import {type PubkeyCache} from "@chainsafe/lodestar-z/pubkeys";
1
2
  import {routes} from "@lodestar/api";
2
3
  import {CheckpointWithHex, IForkChoice} from "@lodestar/fork-choice";
3
4
  import {GENESIS_SLOT} from "@lodestar/params";
4
- import {IBeaconStateView, IBeaconStateViewGloas, PubkeyCache} from "@lodestar/state-transition";
5
+ import {IBeaconStateView, IBeaconStateViewGloas} from "@lodestar/state-transition";
5
6
  import {
6
7
  BLSPubkey,
7
8
  BuilderIndex,
@@ -4,7 +4,8 @@ import {ApiModules} from "../types.js";
4
4
 
5
5
  export function getEventsApi({
6
6
  chain,
7
- }: Pick<ApiModules, "chain" | "config">): ApplicationMethods<routes.events.Endpoints> {
7
+ logger,
8
+ }: Pick<ApiModules, "chain" | "config" | "logger">): ApplicationMethods<routes.events.Endpoints> {
8
9
  return {
9
10
  async eventstream({topics, signal, onEvent}) {
10
11
  const onAbortFns: (() => void)[] = [];
@@ -12,9 +13,14 @@ export function getEventsApi({
12
13
  for (const topic of topics) {
13
14
  // biome-ignore lint/suspicious/noExplicitAny: We need to use `any` type here
14
15
  const handler = (data: any): void => {
15
- // TODO: What happens if this handler throws? Does it break the other chain.emitter listeners?
16
-
17
- onEvent({type: topic, message: data});
16
+ try {
17
+ onEvent({type: topic, message: data});
18
+ } catch (e) {
19
+ // `chain.emitter` emits synchronously, a throwing listener would propagate the error to
20
+ // whoever emitted the event, e.g. a gossip handler, and skip the remaining listeners.
21
+ // A single misbehaving event or client must not affect the node or other subscribers.
22
+ logger.warn("Error sending event to client", {topic}, e as Error);
23
+ }
18
24
  };
19
25
 
20
26
  chain.emitter.on(topic, handler);
@@ -184,7 +184,6 @@ export async function importExecutionPayload(
184
184
  : verifyExecutionPayloadEnvelopeSignature(
185
185
  this.config,
186
186
  blockState,
187
- this.pubkeyCache,
188
187
  signedEnvelope,
189
188
  payloadInput.proposerIndex,
190
189
  this.bls
@@ -1,7 +1,6 @@
1
1
  import {BeaconConfig} from "@lodestar/config";
2
2
  import {
3
3
  type IBeaconStateViewGloas,
4
- type PubkeyCache,
5
4
  computeTimeAtSlot,
6
5
  getExecutionPayloadEnvelopeSignatureSet,
7
6
  } from "@lodestar/state-transition";
@@ -119,17 +118,10 @@ export function verifyExecutionPayloadEnvelope(
119
118
  export async function verifyExecutionPayloadEnvelopeSignature(
120
119
  config: BeaconConfig,
121
120
  state: IBeaconStateViewGloas,
122
- pubkeyCache: PubkeyCache,
123
121
  signedEnvelope: gloas.SignedExecutionPayloadEnvelope,
124
122
  proposerIndex: number,
125
123
  bls: IBlsVerifier
126
124
  ): Promise<boolean> {
127
- const signatureSet = getExecutionPayloadEnvelopeSignatureSet(
128
- config,
129
- pubkeyCache,
130
- state,
131
- signedEnvelope,
132
- proposerIndex
133
- );
125
+ const signatureSet = getExecutionPayloadEnvelopeSignatureSet(config, state, signedEnvelope, proposerIndex);
134
126
  return bls.verifySignatureSets([signatureSet]);
135
127
  }
@@ -1,4 +1,4 @@
1
- export type {IBlsVerifier} from "./interface.js";
1
+ export type {IBlsVerifier, SameMessageSignatureSet} from "./interface.js";
2
2
  export type {BlsMultiThreadWorkerPoolModules, JobQueueItemType} from "./multithread/index.js";
3
3
  export {BlsMultiThreadWorkerPool} from "./multithread/index.js";
4
4
  export {BlsSingleThreadVerifier} from "./singleThread.js";
@@ -1,6 +1,10 @@
1
- import {PublicKey} from "@chainsafe/blst";
2
1
  import {ISignatureSet} from "@lodestar/state-transition";
3
2
 
3
+ export type SameMessageSignatureSet = {
4
+ index: number;
5
+ signature: Uint8Array;
6
+ };
7
+
4
8
  export type VerifySignatureOpts = {
5
9
  /**
6
10
  * A batchable set MAY be verified with more sets to reduce the verification costs.
@@ -53,8 +57,8 @@ export interface IBlsVerifier {
53
57
  * - only support `batchable` option
54
58
  */
55
59
  verifySignatureSetsSameMessage(
56
- sets: {publicKey: PublicKey; signature: Uint8Array}[],
57
- messsage: Uint8Array,
60
+ sets: SameMessageSignatureSet[],
61
+ message: Uint8Array,
58
62
  opts?: Omit<VerifySignatureOpts, "verifyOnMainThread">
59
63
  ): Promise<boolean[]>;
60
64