@lodestar/beacon-node 1.47.0-dev.d2f4b96574 → 1.47.0-dev.d477ac6ef7

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 (384) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +47 -18
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/pool/index.js +25 -2
  6. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  7. package/lib/api/impl/beacon/state/utils.d.ts +2 -1
  8. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  9. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  10. package/lib/api/impl/events/index.d.ts +1 -1
  11. package/lib/api/impl/events/index.d.ts.map +1 -1
  12. package/lib/api/impl/events/index.js +12 -3
  13. package/lib/api/impl/events/index.js.map +1 -1
  14. package/lib/api/impl/lodestar/index.d.ts.map +1 -1
  15. package/lib/api/impl/lodestar/index.js +12 -13
  16. package/lib/api/impl/lodestar/index.js.map +1 -1
  17. package/lib/api/impl/validator/index.d.ts.map +1 -1
  18. package/lib/api/impl/validator/index.js +238 -65
  19. package/lib/api/impl/validator/index.js.map +1 -1
  20. package/lib/api/impl/validator/utils.d.ts +5 -0
  21. package/lib/api/impl/validator/utils.d.ts.map +1 -1
  22. package/lib/api/impl/validator/utils.js +18 -12
  23. package/lib/api/impl/validator/utils.js.map +1 -1
  24. package/lib/api/rest/base.d.ts.map +1 -1
  25. package/lib/api/rest/base.js +7 -0
  26. package/lib/api/rest/base.js.map +1 -1
  27. package/lib/chain/archiveStore/archiveStore.js +1 -1
  28. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  29. package/lib/chain/archiveStore/historicalState/metrics.d.ts.map +1 -1
  30. package/lib/chain/archiveStore/historicalState/metrics.js +21 -0
  31. package/lib/chain/archiveStore/historicalState/metrics.js.map +1 -1
  32. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  33. package/lib/chain/blocks/importBlock.js +2 -7
  34. package/lib/chain/blocks/importBlock.js.map +1 -1
  35. package/lib/chain/blocks/importExecutionPayload.d.ts +3 -2
  36. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  37. package/lib/chain/blocks/importExecutionPayload.js +11 -9
  38. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  39. package/lib/chain/blocks/index.d.ts.map +1 -1
  40. package/lib/chain/blocks/index.js +22 -14
  41. package/lib/chain/blocks/index.js.map +1 -1
  42. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts +2 -1
  43. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.d.ts.map +1 -1
  44. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js +6 -2
  45. package/lib/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.js.map +1 -1
  46. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +14 -5
  47. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  48. package/lib/chain/blocks/payloadEnvelopeInput/types.js +5 -0
  49. package/lib/chain/blocks/payloadEnvelopeInput/types.js.map +1 -1
  50. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  51. package/lib/chain/blocks/verifyBlock.js +5 -2
  52. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  53. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  54. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +22 -12
  55. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  56. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts +2 -2
  57. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.d.ts.map +1 -1
  58. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js +2 -2
  59. package/lib/chain/blocks/verifyExecutionPayloadEnvelope.js.map +1 -1
  60. package/lib/chain/bls/index.d.ts +1 -1
  61. package/lib/chain/bls/index.d.ts.map +1 -1
  62. package/lib/chain/bls/interface.d.ts +5 -5
  63. package/lib/chain/bls/interface.d.ts.map +1 -1
  64. package/lib/chain/bls/multithread/index.d.ts +5 -11
  65. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  66. package/lib/chain/bls/multithread/index.js +116 -101
  67. package/lib/chain/bls/multithread/index.js.map +1 -1
  68. package/lib/chain/bls/multithread/jobItem.d.ts +5 -19
  69. package/lib/chain/bls/multithread/jobItem.d.ts.map +1 -1
  70. package/lib/chain/bls/multithread/jobItem.js +10 -65
  71. package/lib/chain/bls/multithread/jobItem.js.map +1 -1
  72. package/lib/chain/bls/multithread/types.d.ts +29 -8
  73. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  74. package/lib/chain/bls/multithread/types.js +12 -0
  75. package/lib/chain/bls/multithread/types.js.map +1 -1
  76. package/lib/chain/bls/multithread/utils.d.ts +4 -0
  77. package/lib/chain/bls/multithread/utils.d.ts.map +1 -1
  78. package/lib/chain/bls/multithread/utils.js +10 -0
  79. package/lib/chain/bls/multithread/utils.js.map +1 -1
  80. package/lib/chain/bls/multithread/worker.js +49 -23
  81. package/lib/chain/bls/multithread/worker.js.map +1 -1
  82. package/lib/chain/bls/singleThread.d.ts +4 -10
  83. package/lib/chain/bls/singleThread.d.ts.map +1 -1
  84. package/lib/chain/bls/singleThread.js +8 -45
  85. package/lib/chain/bls/singleThread.js.map +1 -1
  86. package/lib/chain/bls/utils.d.ts +4 -4
  87. package/lib/chain/bls/utils.d.ts.map +1 -1
  88. package/lib/chain/bls/utils.js +18 -19
  89. package/lib/chain/bls/utils.js.map +1 -1
  90. package/lib/chain/builderCircuitBreaker.d.ts +6 -5
  91. package/lib/chain/builderCircuitBreaker.d.ts.map +1 -1
  92. package/lib/chain/builderCircuitBreaker.js +28 -15
  93. package/lib/chain/builderCircuitBreaker.js.map +1 -1
  94. package/lib/chain/chain.d.ts +10 -5
  95. package/lib/chain/chain.d.ts.map +1 -1
  96. package/lib/chain/chain.js +24 -9
  97. package/lib/chain/chain.js.map +1 -1
  98. package/lib/chain/errors/blockError.d.ts +2 -0
  99. package/lib/chain/errors/blockError.d.ts.map +1 -1
  100. package/lib/chain/errors/blockError.js +6 -1
  101. package/lib/chain/errors/blockError.js.map +1 -1
  102. package/lib/chain/errors/proposerPreferences.d.ts +6 -0
  103. package/lib/chain/errors/proposerPreferences.d.ts.map +1 -1
  104. package/lib/chain/errors/proposerPreferences.js +1 -0
  105. package/lib/chain/errors/proposerPreferences.js.map +1 -1
  106. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  107. package/lib/chain/forkChoice/index.js +4 -0
  108. package/lib/chain/forkChoice/index.js.map +1 -1
  109. package/lib/chain/interface.d.ts +8 -4
  110. package/lib/chain/interface.d.ts.map +1 -1
  111. package/lib/chain/interface.js.map +1 -1
  112. package/lib/chain/opPools/aggregatedAttestationPool.js +1 -1
  113. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  114. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  115. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  116. package/lib/chain/opPools/attestationPool.js +1 -1
  117. package/lib/chain/opPools/attestationPool.js.map +1 -1
  118. package/lib/chain/opPools/deferredVoluntaryExitPool.d.ts +16 -0
  119. package/lib/chain/opPools/deferredVoluntaryExitPool.d.ts.map +1 -0
  120. package/lib/chain/opPools/deferredVoluntaryExitPool.js +57 -0
  121. package/lib/chain/opPools/deferredVoluntaryExitPool.js.map +1 -0
  122. package/lib/chain/opPools/executionPayloadBidPool.d.ts +7 -2
  123. package/lib/chain/opPools/executionPayloadBidPool.d.ts.map +1 -1
  124. package/lib/chain/opPools/executionPayloadBidPool.js +4 -4
  125. package/lib/chain/opPools/executionPayloadBidPool.js.map +1 -1
  126. package/lib/chain/opPools/index.d.ts +2 -1
  127. package/lib/chain/opPools/index.d.ts.map +1 -1
  128. package/lib/chain/opPools/index.js +1 -0
  129. package/lib/chain/opPools/index.js.map +1 -1
  130. package/lib/chain/opPools/payloadAttestationPool.js +3 -3
  131. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  132. package/lib/chain/opPools/syncCommitteeMessagePool.js +1 -1
  133. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  134. package/lib/chain/opPools/syncContributionAndProofPool.js +1 -1
  135. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  136. package/lib/chain/opPools/utils.d.ts +1 -1
  137. package/lib/chain/opPools/utils.d.ts.map +1 -1
  138. package/lib/chain/opPools/utils.js +1 -1
  139. package/lib/chain/opPools/utils.js.map +1 -1
  140. package/lib/chain/options.d.ts +1 -1
  141. package/lib/chain/options.d.ts.map +1 -1
  142. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  143. package/lib/chain/prepareNextSlot.js +25 -7
  144. package/lib/chain/prepareNextSlot.js.map +1 -1
  145. package/lib/chain/produceBlock/computeNewStateRoot.d.ts.map +1 -1
  146. package/lib/chain/produceBlock/computeNewStateRoot.js +3 -25
  147. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  148. package/lib/chain/produceBlock/produceBlockBody.d.ts +2 -0
  149. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  150. package/lib/chain/produceBlock/produceBlockBody.js +7 -2
  151. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  152. package/lib/chain/regen/interface.d.ts +5 -2
  153. package/lib/chain/regen/interface.d.ts.map +1 -1
  154. package/lib/chain/regen/interface.js +3 -0
  155. package/lib/chain/regen/interface.js.map +1 -1
  156. package/lib/chain/regen/queued.d.ts +2 -2
  157. package/lib/chain/regen/queued.d.ts.map +1 -1
  158. package/lib/chain/regen/queued.js +5 -5
  159. package/lib/chain/regen/queued.js.map +1 -1
  160. package/lib/chain/seenCache/seenAttesters.d.ts +9 -5
  161. package/lib/chain/seenCache/seenAttesters.d.ts.map +1 -1
  162. package/lib/chain/seenCache/seenAttesters.js +25 -4
  163. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  164. package/lib/chain/seenCache/seenBlockProposers.d.ts +5 -1
  165. package/lib/chain/seenCache/seenBlockProposers.d.ts.map +1 -1
  166. package/lib/chain/seenCache/seenBlockProposers.js +10 -3
  167. package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
  168. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +28 -1
  169. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  170. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +121 -13
  171. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  172. package/lib/chain/stateCache/fifoBlockStateCache.d.ts +5 -1
  173. package/lib/chain/stateCache/fifoBlockStateCache.d.ts.map +1 -1
  174. package/lib/chain/stateCache/fifoBlockStateCache.js +6 -0
  175. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  176. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts +47 -5
  177. package/lib/chain/stateCache/persistentCheckpointsCache.d.ts.map +1 -1
  178. package/lib/chain/stateCache/persistentCheckpointsCache.js +117 -7
  179. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  180. package/lib/chain/stateCache/types.d.ts +3 -3
  181. package/lib/chain/stateCache/types.d.ts.map +1 -1
  182. package/lib/chain/validation/attestation.d.ts.map +1 -1
  183. package/lib/chain/validation/attestation.js +1 -4
  184. package/lib/chain/validation/attestation.js.map +1 -1
  185. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  186. package/lib/chain/validation/attesterSlashing.js +1 -1
  187. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  188. package/lib/chain/validation/block.d.ts.map +1 -1
  189. package/lib/chain/validation/block.js +61 -17
  190. package/lib/chain/validation/block.js.map +1 -1
  191. package/lib/chain/validation/executionPayloadBid.d.ts +13 -3
  192. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  193. package/lib/chain/validation/executionPayloadBid.js +147 -12
  194. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  195. package/lib/chain/validation/executionPayloadEnvelope.js +1 -1
  196. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  197. package/lib/chain/validation/payloadAttestationMessage.d.ts.map +1 -1
  198. package/lib/chain/validation/payloadAttestationMessage.js +5 -14
  199. package/lib/chain/validation/payloadAttestationMessage.js.map +1 -1
  200. package/lib/chain/validation/proposerPreferences.d.ts +1 -1
  201. package/lib/chain/validation/proposerPreferences.d.ts.map +1 -1
  202. package/lib/chain/validation/proposerPreferences.js +13 -4
  203. package/lib/chain/validation/proposerPreferences.js.map +1 -1
  204. package/lib/chain/validation/proposerSlashing.js +1 -1
  205. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  206. package/lib/chain/validation/voluntaryExit.d.ts +9 -1
  207. package/lib/chain/validation/voluntaryExit.d.ts.map +1 -1
  208. package/lib/chain/validation/voluntaryExit.js +46 -1
  209. package/lib/chain/validation/voluntaryExit.js.map +1 -1
  210. package/lib/execution/builder/apiClient.d.ts +64 -0
  211. package/lib/execution/builder/apiClient.d.ts.map +1 -0
  212. package/lib/execution/builder/apiClient.js +184 -0
  213. package/lib/execution/builder/apiClient.js.map +1 -0
  214. package/lib/execution/builder/http.d.ts +10 -7
  215. package/lib/execution/builder/http.d.ts.map +1 -1
  216. package/lib/execution/builder/http.js +11 -8
  217. package/lib/execution/builder/http.js.map +1 -1
  218. package/lib/execution/builder/validateBid.d.ts +22 -0
  219. package/lib/execution/builder/validateBid.d.ts.map +1 -0
  220. package/lib/execution/builder/validateBid.js +111 -0
  221. package/lib/execution/builder/validateBid.js.map +1 -0
  222. package/lib/metrics/metrics/beacon.d.ts +3 -3
  223. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  224. package/lib/metrics/metrics/beacon.js +9 -9
  225. package/lib/metrics/metrics/beacon.js.map +1 -1
  226. package/lib/metrics/metrics/lodestar.d.ts +91 -23
  227. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  228. package/lib/metrics/metrics/lodestar.js +172 -55
  229. package/lib/metrics/metrics/lodestar.js.map +1 -1
  230. package/lib/network/gossip/topic.d.ts +13 -0
  231. package/lib/network/gossip/topic.d.ts.map +1 -1
  232. package/lib/network/gossip/topic.js +37 -0
  233. package/lib/network/gossip/topic.js.map +1 -1
  234. package/lib/network/libp2p/index.d.ts.map +1 -1
  235. package/lib/network/libp2p/index.js +10 -2
  236. package/lib/network/libp2p/index.js.map +1 -1
  237. package/lib/network/network.d.ts.map +1 -1
  238. package/lib/network/network.js +23 -43
  239. package/lib/network/network.js.map +1 -1
  240. package/lib/network/processor/constants.d.ts +7 -0
  241. package/lib/network/processor/constants.d.ts.map +1 -0
  242. package/lib/network/processor/constants.js +7 -0
  243. package/lib/network/processor/constants.js.map +1 -0
  244. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  245. package/lib/network/processor/gossipHandlers.js +38 -7
  246. package/lib/network/processor/gossipHandlers.js.map +1 -1
  247. package/lib/network/processor/gossipQueues/indexed.d.ts.map +1 -1
  248. package/lib/network/processor/gossipQueues/indexed.js +0 -1
  249. package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
  250. package/lib/network/processor/index.d.ts +3 -0
  251. package/lib/network/processor/index.d.ts.map +1 -1
  252. package/lib/network/processor/index.js +52 -23
  253. package/lib/network/processor/index.js.map +1 -1
  254. package/lib/network/reqresp/score.d.ts.map +1 -1
  255. package/lib/network/reqresp/score.js +5 -11
  256. package/lib/network/reqresp/score.js.map +1 -1
  257. package/lib/network/util.d.ts +0 -1
  258. package/lib/network/util.d.ts.map +1 -1
  259. package/lib/network/util.js +0 -4
  260. package/lib/network/util.js.map +1 -1
  261. package/lib/node/deferredVoluntaryExitPublisher.d.ts +15 -0
  262. package/lib/node/deferredVoluntaryExitPublisher.d.ts.map +1 -0
  263. package/lib/node/deferredVoluntaryExitPublisher.js +38 -0
  264. package/lib/node/deferredVoluntaryExitPublisher.js.map +1 -0
  265. package/lib/node/nodejs.d.ts +2 -1
  266. package/lib/node/nodejs.d.ts.map +1 -1
  267. package/lib/node/nodejs.js +7 -0
  268. package/lib/node/nodejs.js.map +1 -1
  269. package/lib/sync/range/batch.d.ts +23 -5
  270. package/lib/sync/range/batch.d.ts.map +1 -1
  271. package/lib/sync/range/batch.js +61 -22
  272. package/lib/sync/range/batch.js.map +1 -1
  273. package/lib/sync/range/chain.d.ts +2 -1
  274. package/lib/sync/range/chain.d.ts.map +1 -1
  275. package/lib/sync/range/chain.js +32 -12
  276. package/lib/sync/range/chain.js.map +1 -1
  277. package/lib/sync/range/range.js +1 -1
  278. package/lib/sync/range/range.js.map +1 -1
  279. package/lib/sync/types.d.ts +32 -0
  280. package/lib/sync/types.d.ts.map +1 -1
  281. package/lib/sync/types.js +33 -0
  282. package/lib/sync/types.js.map +1 -1
  283. package/lib/sync/unknownBlock.d.ts +15 -2
  284. package/lib/sync/unknownBlock.d.ts.map +1 -1
  285. package/lib/sync/unknownBlock.js +234 -63
  286. package/lib/sync/unknownBlock.js.map +1 -1
  287. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  288. package/lib/sync/utils/downloadByRange.js +16 -11
  289. package/lib/sync/utils/downloadByRange.js.map +1 -1
  290. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  291. package/lib/sync/utils/downloadByRoot.js +3 -1
  292. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  293. package/package.json +35 -35
  294. package/src/api/impl/beacon/blocks/index.ts +55 -21
  295. package/src/api/impl/beacon/pool/index.ts +27 -2
  296. package/src/api/impl/beacon/state/utils.ts +2 -1
  297. package/src/api/impl/events/index.ts +12 -4
  298. package/src/api/impl/lodestar/index.ts +12 -13
  299. package/src/api/impl/validator/index.ts +300 -69
  300. package/src/api/impl/validator/utils.ts +30 -15
  301. package/src/api/rest/base.ts +7 -0
  302. package/src/chain/archiveStore/archiveStore.ts +1 -1
  303. package/src/chain/archiveStore/historicalState/metrics.ts +22 -0
  304. package/src/chain/blocks/importBlock.ts +1 -6
  305. package/src/chain/blocks/importExecutionPayload.ts +12 -11
  306. package/src/chain/blocks/index.ts +26 -14
  307. package/src/chain/blocks/payloadEnvelopeInput/payloadEnvelopeInput.ts +8 -2
  308. package/src/chain/blocks/payloadEnvelopeInput/types.ts +17 -4
  309. package/src/chain/blocks/verifyBlock.ts +5 -2
  310. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +25 -16
  311. package/src/chain/blocks/verifyExecutionPayloadEnvelope.ts +1 -9
  312. package/src/chain/bls/index.ts +1 -1
  313. package/src/chain/bls/interface.ts +7 -3
  314. package/src/chain/bls/multithread/index.ts +148 -120
  315. package/src/chain/bls/multithread/jobItem.ts +12 -82
  316. package/src/chain/bls/multithread/types.ts +33 -8
  317. package/src/chain/bls/multithread/utils.ts +11 -0
  318. package/src/chain/bls/multithread/worker.ts +85 -27
  319. package/src/chain/bls/singleThread.ts +11 -55
  320. package/src/chain/bls/utils.ts +23 -24
  321. package/src/chain/builderCircuitBreaker.ts +31 -17
  322. package/src/chain/chain.ts +27 -7
  323. package/src/chain/errors/blockError.ts +9 -3
  324. package/src/chain/errors/proposerPreferences.ts +7 -0
  325. package/src/chain/forkChoice/index.ts +4 -0
  326. package/src/chain/interface.ts +8 -3
  327. package/src/chain/opPools/aggregatedAttestationPool.ts +1 -1
  328. package/src/chain/opPools/attestationPool.ts +1 -1
  329. package/src/chain/opPools/deferredVoluntaryExitPool.ts +65 -0
  330. package/src/chain/opPools/executionPayloadBidPool.ts +13 -7
  331. package/src/chain/opPools/index.ts +2 -1
  332. package/src/chain/opPools/payloadAttestationPool.ts +3 -3
  333. package/src/chain/opPools/syncCommitteeMessagePool.ts +1 -1
  334. package/src/chain/opPools/syncContributionAndProofPool.ts +1 -1
  335. package/src/chain/opPools/utils.ts +1 -1
  336. package/src/chain/options.ts +1 -1
  337. package/src/chain/prepareNextSlot.ts +25 -7
  338. package/src/chain/produceBlock/computeNewStateRoot.ts +3 -38
  339. package/src/chain/produceBlock/produceBlockBody.ts +14 -1
  340. package/src/chain/regen/interface.ts +5 -2
  341. package/src/chain/regen/queued.ts +5 -5
  342. package/src/chain/seenCache/seenAttesters.ts +31 -5
  343. package/src/chain/seenCache/seenBlockProposers.ts +13 -3
  344. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +143 -14
  345. package/src/chain/stateCache/fifoBlockStateCache.ts +8 -1
  346. package/src/chain/stateCache/persistentCheckpointsCache.ts +133 -8
  347. package/src/chain/stateCache/types.ts +3 -3
  348. package/src/chain/validation/attestation.ts +1 -7
  349. package/src/chain/validation/attesterSlashing.ts +1 -8
  350. package/src/chain/validation/block.ts +64 -17
  351. package/src/chain/validation/executionPayloadBid.ts +168 -14
  352. package/src/chain/validation/executionPayloadEnvelope.ts +0 -1
  353. package/src/chain/validation/payloadAttestationMessage.ts +6 -17
  354. package/src/chain/validation/proposerPreferences.ts +15 -5
  355. package/src/chain/validation/proposerSlashing.ts +1 -1
  356. package/src/chain/validation/voluntaryExit.ts +59 -2
  357. package/src/execution/builder/apiClient.ts +244 -0
  358. package/src/execution/builder/http.ts +11 -11
  359. package/src/execution/builder/validateBid.ts +166 -0
  360. package/src/metrics/metrics/beacon.ts +9 -9
  361. package/src/metrics/metrics/lodestar.ts +187 -61
  362. package/src/network/gossip/topic.ts +38 -0
  363. package/src/network/libp2p/index.ts +11 -2
  364. package/src/network/network.ts +29 -54
  365. package/src/network/processor/constants.ts +6 -0
  366. package/src/network/processor/gossipHandlers.ts +41 -5
  367. package/src/network/processor/gossipQueues/indexed.ts +0 -1
  368. package/src/network/processor/index.ts +67 -30
  369. package/src/network/reqresp/score.ts +5 -11
  370. package/src/network/util.ts +0 -5
  371. package/src/node/deferredVoluntaryExitPublisher.ts +54 -0
  372. package/src/node/nodejs.ts +10 -1
  373. package/src/sync/range/batch.ts +83 -28
  374. package/src/sync/range/chain.ts +35 -13
  375. package/src/sync/range/range.ts +1 -1
  376. package/src/sync/types.ts +36 -1
  377. package/src/sync/unknownBlock.ts +273 -70
  378. package/src/sync/utils/downloadByRange.ts +21 -12
  379. package/src/sync/utils/downloadByRoot.ts +3 -1
  380. package/lib/chain/bls/maybeBatch.d.ts +0 -12
  381. package/lib/chain/bls/maybeBatch.d.ts.map +0 -1
  382. package/lib/chain/bls/maybeBatch.js +0 -35
  383. package/lib/chain/bls/maybeBatch.js.map +0 -1
  384. package/src/chain/bls/maybeBatch.ts +0 -45
@@ -115,7 +115,7 @@ export function getLodestarApi({ chain, config, db, network, sync, }) {
115
115
  global.gc();
116
116
  },
117
117
  async dropStateCache() {
118
- chain.regen.dropCache();
118
+ await chain.regen.dropCache();
119
119
  },
120
120
  async connectPeer({ peerId, multiaddrs }) {
121
121
  await network.connectToPeer(peerId, multiaddrs);
@@ -219,7 +219,7 @@ export function getLodestarApi({ chain, config, db, network, sync, }) {
219
219
  };
220
220
  },
221
221
  async getFastConfirmationInfo() {
222
- const confirmedRoot = chain.forkChoice.getConfirmedRoot();
222
+ const fcrStore = chain.forkChoice.getFastConfirmationStore();
223
223
  const confirmedBlock = chain.forkChoice.getConfirmedBlock();
224
224
  const justifiedCheckpoint = chain.forkChoice.getJustifiedCheckpoint();
225
225
  const finalizedCheckpoint = chain.forkChoice.getFinalizedCheckpoint();
@@ -228,21 +228,20 @@ export function getLodestarApi({ chain, config, db, network, sync, }) {
228
228
  return {
229
229
  data: {
230
230
  confirmed: {
231
- rootHex: confirmedRoot,
232
- slot: confirmedBlock?.slot ?? null,
231
+ root: fromHex(fcrStore.confirmedRoot),
232
+ slot: confirmedBlock?.slot ?? 0,
233
233
  },
234
234
  head: {
235
- rootHex: headRoot,
235
+ root: fromHex(headRoot),
236
236
  slot: head.slot,
237
237
  },
238
- justifiedCheckpoint: {
239
- rootHex: justifiedCheckpoint.rootHex,
240
- epoch: justifiedCheckpoint.epoch,
241
- },
242
- finalizedCheckpoint: {
243
- rootHex: finalizedCheckpoint.rootHex,
244
- epoch: finalizedCheckpoint.epoch,
245
- },
238
+ justifiedCheckpoint,
239
+ finalizedCheckpoint,
240
+ previousEpochObservedJustifiedCheckpoint: fcrStore.previousEpochObservedJustifiedCheckpoint,
241
+ currentEpochObservedJustifiedCheckpoint: fcrStore.currentEpochObservedJustifiedCheckpoint,
242
+ previousEpochGreatestUnrealizedCheckpoint: fcrStore.previousEpochGreatestUnrealizedCheckpoint,
243
+ previousSlotHead: fromHex(fcrStore.previousSlotHead),
244
+ currentSlotHead: fromHex(fcrStore.currentSlotHead),
246
245
  },
247
246
  };
248
247
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/impl/lodestar/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/impl/lodestar/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/impl/validator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AA+BxD,OAAO,EAQL,mBAAmB,EAUpB,MAAM,iBAAiB,CAAC;AAuCzB,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAgCvC;;GAEG;AACH,oBAAY,0BAA0B;IACpC,eAAe,qBAAqB;IACpC,YAAY,kBAAkB;IAC9B,cAAc,oBAAoB;IAClC,cAAc,oBAAoB;IAClC,YAAY,mBAAmB;IAC/B,iBAAiB,uBAAuB;IACxC,UAAU,gBAAgB;IAC1B,eAAe,qBAAqB;CACrC;AAED;;GAEG;AACH,oBAAY,2BAA2B;IACrC,cAAc,oBAAoB;IAClC,WAAW,iBAAiB;IAC5B,aAAa,mBAAmB;IAChC,UAAU,gBAAgB;IAC1B,gBAAgB,sBAAsB;CACvC;AAED,MAAM,MAAM,oBAAoB,GAC5B;IACE,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,0BAA0B,CAAC;CACpC,GACD;IACE,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC;IACpC,MAAM,EAAE,2BAA2B,CAAC;CACrC,CAAC;AAEN;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,EAAE,UAAU,GAC1D,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAkvDhD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/impl/validator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AA+BxD,OAAO,EAQL,mBAAmB,EAUpB,MAAM,iBAAiB,CAAC;AA8CzB,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAsFvC;;GAEG;AACH,oBAAY,0BAA0B;IACpC,eAAe,qBAAqB;IACpC,YAAY,kBAAkB;IAC9B,cAAc,oBAAoB;IAClC,cAAc,oBAAoB;IAClC,YAAY,mBAAmB;IAC/B,iBAAiB,uBAAuB;IACxC,UAAU,gBAAgB;IAC1B,eAAe,qBAAqB;CACrC;AAED;;GAEG;AACH,oBAAY,2BAA2B;IACrC,cAAc,oBAAoB;IAClC,WAAW,iBAAiB;IAC5B,aAAa,mBAAmB;IAChC,UAAU,gBAAgB;IAC1B,gBAAgB,sBAAsB;CACvC;AAED,MAAM,MAAM,oBAAoB,GAC5B;IACE,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,0BAA0B,CAAC;CACpC,GACD;IACE,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC;IACpC,MAAM,EAAE,2BAA2B,CAAC;CACrC,CAAC;AAEN;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,EAAE,UAAU,GAC1D,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CA45DhD"}
@@ -3,7 +3,7 @@ import { ExecutionStatus, PayloadStatus } from "@lodestar/fork-choice";
3
3
  import { BUILDER_INDEX_SELF_BUILD, ForkName, ForkSeq, GENESIS_SLOT, SLOTS_PER_EPOCH, SLOTS_PER_HISTORICAL_ROOT, SYNC_COMMITTEE_SUBNET_SIZE, isForkPostBellatrix, isForkPostDeneb, isForkPostElectra, isForkPostFulu, isForkPostGloas, } from "@lodestar/params";
4
4
  import { DataAvailabilityStatus, beaconBlockToBlinded, calculateCommitteeAssignments, computeEpochAtSlot, computeStartSlotAtEpoch, computeTimeAtSlot, getCurrentSlot, isStatePostAltair, isStatePostGloas, proposerShufflingDecisionRoot, } from "@lodestar/state-transition";
5
5
  import { ProducedBlockSource, getValidatorStatus, ssz, } from "@lodestar/types";
6
- import { GWEI_TO_WEI, TimeoutError, defer, formatWeiToEth, fromHex, prettyWeiToEth, resolveOrRacePromises, toHex, toRootHex, } from "@lodestar/utils";
6
+ import { GWEI_TO_WEI, TimeoutError, byteArrayEquals, defer, formatWeiToEth, fromHex, prettyGweiToEth, prettyWeiToEth, resolveOrRacePromises, sleep, toHex, toPrintableUrl, toRootHex, } from "@lodestar/utils";
7
7
  import { MAX_BUILDER_BOOST_FACTOR } from "@lodestar/validator";
8
8
  import { BlockInputSource } from "../../../chain/blocks/blockInput/types.js";
9
9
  import { AttestationError, AttestationErrorCode, GossipAction, ProposerPreferencesError, ProposerPreferencesErrorCode, SyncCommitteeError, SyncCommitteeErrorCode, } from "../../../chain/errors/index.js";
@@ -15,7 +15,9 @@ import { validateApiAggregateAndProof } from "../../../chain/validation/index.js
15
15
  import { validateGossipProposerPreferences } from "../../../chain/validation/proposerPreferences.js";
16
16
  import { validateSyncCommitteeGossipContributionAndProof } from "../../../chain/validation/syncCommitteeContributionAndProof.js";
17
17
  import { ZERO_HASH } from "../../../constants/index.js";
18
+ import { BUILDER_BID_DEADLINE_MS, decodeBuilderUrl } from "../../../execution/builder/apiClient.js";
18
19
  import { BuilderStatus, NoBidReceived } from "../../../execution/builder/http.js";
20
+ import { getBuilderBidTotalGwei, validateBuilderApiExecutionPayloadBid } from "../../../execution/builder/validateBid.js";
19
21
  import { validateGossipFnRetryUnknownRoot } from "../../../network/processor/gossipHandlers.js";
20
22
  import { callInNextEventLoop } from "../../../util/eventLoop.js";
21
23
  import { isOptimisticBlock } from "../../../util/forkChoice.js";
@@ -24,7 +26,7 @@ import { getLodestarClientVersion } from "../../../util/metadata.js";
24
26
  import { getStateResponseWithRegen } from "../beacon/state/utils.js";
25
27
  import { ApiError, IndexedError, NodeIsSyncing, OnlySupportedByDVT } from "../errors.js";
26
28
  import { notWhileSyncing } from "../utils.js";
27
- import { computeSubnetForCommitteesAtSlot, getPubkeysForIndices, selectBlockProductionSource } from "./utils.js";
29
+ import { computeSubnetForCommitteesAtSlot, getPubkeysForIndices, selectBlockProductionSource, selectBlockProductionSourceByBoostFactor, } from "./utils.js";
28
30
  /**
29
31
  * Cutoff time to wait from start of the slot for execution and builder block production apis to resolve.
30
32
  * Post this time, race execution and builder to pick whatever resolves first.
@@ -38,6 +40,43 @@ import { computeSubnetForCommitteesAtSlot, getPubkeysForIndices, selectBlockProd
38
40
  const BLOCK_PRODUCTION_RACE_CUTOFF_MS = 2_000;
39
41
  /** Overall timeout for execution and block production apis */
40
42
  const BLOCK_PRODUCTION_RACE_TIMEOUT_MS = 12_000;
43
+ /** Rejection message of the bid block branch when there is no viable bid to commit to */
44
+ const NO_BID_AVAILABLE = "No builder bid available";
45
+ /**
46
+ * Return the best bid by boosted total payment. A candidate with the max boost factor is
47
+ * preferred over any other regardless of value, ties prefer a builder api bid over the
48
+ * p2p bid, and the earlier received bid between builder api bids.
49
+ */
50
+ function selectBestBid(candidates) {
51
+ const boostedValue = ({ totalGwei, boostFactor }) => boostFactor * totalGwei;
52
+ let best = null;
53
+ for (const candidate of candidates) {
54
+ if (best === null) {
55
+ best = candidate;
56
+ continue;
57
+ }
58
+ // Preserve max boost preference before comparing bid values
59
+ const candidateIsMaxBoost = candidate.boostFactor === MAX_BUILDER_BOOST_FACTOR;
60
+ const bestIsMaxBoost = best.boostFactor === MAX_BUILDER_BOOST_FACTOR;
61
+ if (candidateIsMaxBoost !== bestIsMaxBoost) {
62
+ if (candidateIsMaxBoost) {
63
+ best = candidate;
64
+ }
65
+ continue;
66
+ }
67
+ const candidateValue = boostedValue(candidate);
68
+ const bestValue = boostedValue(best);
69
+ if (candidateValue > bestValue) {
70
+ best = candidate;
71
+ }
72
+ else if (candidateValue === bestValue &&
73
+ // A tie prefers a builder api bid over the p2p bid, and the earlier received bid otherwise
74
+ (best.url === undefined || (candidate.url !== undefined && candidate.receivedMs < best.receivedMs))) {
75
+ best = candidate;
76
+ }
77
+ }
78
+ return best;
79
+ }
41
80
  /**
42
81
  * Engine block selection reasons tracked in metrics / logs
43
82
  */
@@ -399,8 +438,7 @@ export function getValidatorApi(opts, { chain, config, logger, metrics, network,
399
438
  builderSelection,
400
439
  isBuilderEnabled,
401
440
  strictFeeRecipientCheck,
402
- // winston logger doesn't like bigint
403
- builderBoostFactor: `${builderBoostFactor}`,
441
+ builderBoostFactor,
404
442
  };
405
443
  logger.verbose("Assembling block with produceEngineOrBuilderBlock", loggerContext);
406
444
  // Defer common block body production to make sure we sent async builder and engine requests before
@@ -614,17 +652,12 @@ export function getValidatorApi(opts, { chain, config, logger, metrics, network,
614
652
  }
615
653
  return { data, meta };
616
654
  },
617
- async produceBlockV4({ slot, randaoReveal, graffiti, feeRecipient, includePayload, builderSelection, builderBoostFactor, }) {
655
+ async produceBlockV4({ slot, randaoReveal, graffiti, feeRecipient, strictFeeRecipientCheck, includePayload, builderConfig, }) {
618
656
  const fork = config.getForkName(slot);
619
657
  if (!isForkPostGloas(fork)) {
620
658
  throw new ApiError(400, `produceBlockV4 not supported for pre-gloas fork=${fork}`);
621
659
  }
622
- builderSelection = builderSelection ?? routes.validator.BuilderSelection.MaxProfit;
623
- if (builderSelection === routes.validator.BuilderSelection.BuilderOnly) {
624
- logger.warn("Builder selection builderonly is no longer supported, treating as builderalways");
625
- builderSelection = routes.validator.BuilderSelection.BuilderAlways;
626
- }
627
- builderBoostFactor = builderBoostFactor ?? BigInt(100);
660
+ const builderBoostFactor = builderConfig.builderBoostFactor;
628
661
  if (builderBoostFactor > MAX_BUILDER_BOOST_FACTOR) {
629
662
  throw new ApiError(400, `Invalid builderBoostFactor=${builderBoostFactor} > MAX_BUILDER_BOOST_FACTOR`);
630
663
  }
@@ -643,33 +676,98 @@ export function getValidatorApi(opts, { chain, config, logger, metrics, network,
643
676
  private: opts.private,
644
677
  graffitiAppend: chain.opts.graffitiAppend,
645
678
  }));
646
- // TODO GLOAS: add external builder api support when it is implemented
647
679
  const isBuildingOnFull = chain.forkChoice.shouldBuildOnFull(parentBlock, slot);
648
680
  const bidParentBlockHash = isBuildingOnFull ? parentBlock.executionPayloadBlockHash : parentBlock.parentBlockHash;
649
- // Bids are only skipped entirely with executiononly or while the circuit breaker is active,
650
- // other engine-preferring selections still build a block with the best bid as fallback in
651
- // case local production fails
652
- const circuitBreakerActive = chain.builderCircuitBreaker.isActive(slot);
653
- const builderBid = builderSelection === routes.validator.BuilderSelection.ExecutionOnly || circuitBreakerActive
654
- ? null
655
- : chain.executionPayloadBidPool.getBestBid(slot, bidParentBlockHash, parentBlockRootHex);
656
- const logCtx = {
657
- slot,
658
- parentSlot,
659
- parentBlockRoot: parentBlockRootHex,
660
- parentBlockHash: parentBlock.executionPayloadBlockHash,
661
- fork,
662
- builderSelection,
663
- builderBoostFactor,
664
- circuitBreakerActive,
665
- ...(builderBid !== null
666
- ? {
667
- bidValue: builderBid.message.value,
668
- builderIndex: builderBid.message.builderIndex,
669
- bidBlockHash: toRootHex(builderBid.message.blockHash),
681
+ // Post-gloas every proposal parent has an execution payload hash
682
+ if (bidParentBlockHash === null) {
683
+ throw new ApiError(500, `Unknown parent block hash for proposal parent ${parentBlockRootHex}`);
684
+ }
685
+ const circuitBreakerActive = chain.builderCircuitBreaker.isActive(slot, parentBlock);
686
+ // Fire builder API bid requests while the local payload is built, one request per entry.
687
+ // Any entry failure yields no bid and never fails block production.
688
+ let builderApiBidsPromise = Promise.resolve([]);
689
+ if (builderConfig.builders.length > 0 && !circuitBreakerActive) {
690
+ try {
691
+ const proposerIndex = chain.getHeadState().getBeaconProposer(slot);
692
+ const proposerPubkey = chain.pubkeyCache.getOrThrow(proposerIndex).toBytes();
693
+ builderApiBidsPromise = chain.builderApiClient.getExecutionPayloadBids(builderConfig.builders, slot, fromHex(bidParentBlockHash), parentBlockRoot, proposerPubkey);
694
+ }
695
+ catch (e) {
696
+ logger.warn("Unable to request builder API bids", { slot }, e);
697
+ }
698
+ }
699
+ // A builder bid is expected if builders are configured or a p2p bid was already received.
700
+ // Used by the censorship override which may run before the bid deadline
701
+ const builderBidExpected = builderConfig.builders.length > 0 ||
702
+ (!circuitBreakerActive &&
703
+ chain.executionPayloadBidPool.getBestBid(slot, bidParentBlockHash, parentBlockRootHex) !== null);
704
+ // Select the p2p bid once builders had time to bid up, matching the deadline advertised
705
+ // on builder API bid requests, unless the circuit breaker is active
706
+ const p2pBidPromise = circuitBreakerActive
707
+ ? Promise.resolve(null)
708
+ : sleep(Math.max(0, BUILDER_BID_DEADLINE_MS - chain.clock.msFromSlot(slot))).then(() => {
709
+ const p2pBid = chain.executionPayloadBidPool.getBestBid(slot, bidParentBlockHash, parentBlockRootHex);
710
+ // Discard p2p bids below the proposer's configured floor on the total payment.
711
+ // A p2p bid's total is just its value since gossip validation enforces executionPayment=0.
712
+ if (p2pBid !== null && BigInt(p2pBid.signedBid.message.value) < builderConfig.minBid) {
713
+ logger.info("Best p2p bid below configured minimum", {
714
+ slot,
715
+ bidValue: prettyGweiToEth(p2pBid.signedBid.message.value),
716
+ minBid: prettyGweiToEth(builderConfig.minBid),
717
+ });
718
+ return null;
670
719
  }
671
- : {}),
672
- };
720
+ return p2pBid;
721
+ });
722
+ // Candidates are ranked by their boosted counted total payment, the p2p bid is governed
723
+ // by the top-level factors and each builder API bid by its own entry. Ties prefer the
724
+ // earliest received builder API bid, so the signed block can be routed back to its
725
+ // builder directly.
726
+ const bestBidPromise = (async () => {
727
+ const [builderApiBids, p2pBid] = await Promise.all([builderApiBidsPromise, p2pBidPromise]);
728
+ const candidates = (await Promise.all(builderApiBids.map(async ({ url, entry, signedBid, receivedMs }) => {
729
+ try {
730
+ await validateBuilderApiExecutionPayloadBid(chain, signedBid, {
731
+ slot,
732
+ parentBlock,
733
+ parentBlockHash: bidParentBlockHash,
734
+ parentBlockRoot: parentBlockRootHex,
735
+ entry,
736
+ });
737
+ return {
738
+ signedBid,
739
+ totalGwei: getBuilderBidTotalGwei(signedBid.message, entry.maxExecutionPayment),
740
+ boostFactor: entry.builderBoostFactor,
741
+ url,
742
+ receivedMs,
743
+ };
744
+ }
745
+ catch (e) {
746
+ metrics?.builderApi.bidsDiscarded.inc();
747
+ logger.warn("Ignoring invalid builder API bid", { slot, builder: toPrintableUrl(url) }, e);
748
+ return null;
749
+ }
750
+ }))).filter((candidate) => candidate !== null);
751
+ if (p2pBid !== null) {
752
+ candidates.push({
753
+ signedBid: p2pBid.signedBid,
754
+ totalGwei: BigInt(p2pBid.signedBid.message.value),
755
+ boostFactor: builderConfig.builderBoostFactor,
756
+ receivedMs: p2pBid.receivedMs,
757
+ });
758
+ }
759
+ const best = selectBestBid(candidates);
760
+ if (candidates.length > 0) {
761
+ logger.debug("Ranked builder bid candidates", {
762
+ slot,
763
+ candidates: candidates
764
+ .map((candidate) => `${candidate.url ?? "p2p"}:total=${prettyGweiToEth(candidate.totalGwei)}:boost=${candidate.boostFactor}:received=${candidate.receivedMs}ms`)
765
+ .join(","),
766
+ bidSource: best?.url ?? "p2p",
767
+ });
768
+ }
769
+ return best;
770
+ })();
673
771
  const commonBlockBodyPromise = chain.produceCommonBlockBody({
674
772
  slot,
675
773
  parentBlock,
@@ -682,12 +780,10 @@ export function getValidatorApi(opts, { chain, config, logger, metrics, network,
682
780
  randaoReveal,
683
781
  graffiti: graffitiBytes,
684
782
  feeRecipient,
783
+ strictFeeRecipientCheck,
685
784
  commonBlockBodyPromise,
686
785
  };
687
786
  metrics?.blockProductionRequests.inc({ source: ProducedBlockSource.engine });
688
- if (builderBid !== null) {
689
- metrics?.blockProductionRequests.inc({ source: ProducedBlockSource.builder });
690
- }
691
787
  const timed = (source, fn) => {
692
788
  const t = metrics?.blockProductionTime.startTimer();
693
789
  return fn().finally(() => t?.({ source }));
@@ -698,51 +794,92 @@ export function getValidatorApi(opts, { chain, config, logger, metrics, network,
698
794
  // use abort controller to stop waiting for the bid block if the engine block will be selected
699
795
  const controller = new AbortController();
700
796
  const enginePromise = timed(ProducedBlockSource.engine, () => chain.produceBlock(baseAttrs)).then((engineBlock) => {
701
- // No need to wait for the bid block if the engine block will always be selected due to
702
- // suspected builder censorship, a builder boost factor of 0 or executionalways selection
703
- if (engineBlock.shouldOverrideBuilder ||
704
- builderBoostFactor === BigInt(0) ||
705
- builderSelection === routes.validator.BuilderSelection.ExecutionAlways) {
797
+ // No need to wait for the bid block if the engine block will always be selected, either
798
+ // due to suspected builder censorship, or because no builders are configured and the
799
+ // boost factor of 0 always prefers the local block over p2p bids
800
+ if (engineBlock.shouldOverrideBuilder || (builderConfig.builders.length === 0 && builderBoostFactor === 0n)) {
706
801
  controller.abort();
707
802
  }
708
803
  return engineBlock;
709
804
  });
710
- const bidPromise = builderBid !== null
711
- ? timed(ProducedBlockSource.builder, () => chain.produceBlock({ ...baseAttrs, builderBid }))
712
- : Promise.reject(new Error("No builder bid available"));
713
- const [engineResult, bidResult] = await resolveOrRacePromises([enginePromise, bidPromise], {
805
+ const bidBlockPromise = bestBidPromise.then((candidate) => {
806
+ if (candidate === null) {
807
+ throw new Error(NO_BID_AVAILABLE);
808
+ }
809
+ metrics?.blockProductionRequests.inc({ source: ProducedBlockSource.builder });
810
+ return timed(ProducedBlockSource.builder, () => chain.produceBlock({ ...baseAttrs, builderBid: candidate.signedBid }));
811
+ });
812
+ const [engineResult, bidBlockResult] = await resolveOrRacePromises([enginePromise, bidBlockPromise], {
714
813
  resolveTimeoutMs: cutoffMs,
715
814
  raceTimeoutMs: BLOCK_PRODUCTION_RACE_TIMEOUT_MS,
716
815
  signal: controller.signal,
717
816
  });
718
817
  let bestResult = null;
719
818
  let source = ProducedBlockSource.engine;
819
+ // Resolved instantly whenever the bid branch produced a block
820
+ const bestBid = bidBlockResult.status === "fulfilled" ? await bestBidPromise : null;
821
+ const logCtx = {
822
+ slot,
823
+ parentSlot,
824
+ parentBlockRoot: parentBlockRootHex,
825
+ parentBlockHash: parentBlock.executionPayloadBlockHash,
826
+ fork,
827
+ builderBoostFactor,
828
+ strictFeeRecipientCheck,
829
+ circuitBreakerActive,
830
+ builderEntries: builderConfig.builders.length,
831
+ ...(bestBid !== null
832
+ ? {
833
+ bidSource: bestBid.url !== undefined ? toPrintableUrl(bestBid.url) : "p2p",
834
+ bidValue: prettyGweiToEth(bestBid.signedBid.message.value),
835
+ bidExecutionPayment: prettyGweiToEth(bestBid.signedBid.message.executionPayment),
836
+ // The full bid total and the counted total used during bid selection
837
+ bidTotal: prettyGweiToEth(BigInt(bestBid.signedBid.message.value) + bestBid.signedBid.message.executionPayment),
838
+ bidCountedTotal: prettyGweiToEth(bestBid.totalGwei),
839
+ bidBoostFactor: bestBid.boostFactor,
840
+ builderIndex: bestBid.signedBid.message.builderIndex,
841
+ bidBlockHash: toRootHex(bestBid.signedBid.message.blockHash),
842
+ bidReceivedMs: bestBid.receivedMs,
843
+ }
844
+ : {}),
845
+ };
720
846
  // handle shouldOverrideBuilder separately
721
- if (engineResult.status === "fulfilled" && engineResult.value.shouldOverrideBuilder && builderBid !== null) {
847
+ if (engineResult.status === "fulfilled" &&
848
+ engineResult.value.shouldOverrideBuilder &&
849
+ (builderBidExpected || bidBlockResult.status === "fulfilled")) {
722
850
  source = ProducedBlockSource.engine;
723
851
  bestResult = engineResult;
724
852
  metrics?.blockProductionSelectionResults.inc({
725
853
  source: ProducedBlockSource.engine,
726
854
  reason: EngineBlockSelectionReason.BuilderCensorship,
727
855
  });
728
- logger.warn("Selected local block: censorship suspected in builder bid", logCtx);
856
+ logger.warn("Selected local block: censorship suspected in builder bid", {
857
+ ...logCtx,
858
+ durationMs: engineResult.durationMs,
859
+ ...getBlockValueLogInfo(engineResult.value),
860
+ });
729
861
  }
730
- else if (engineResult.status === "fulfilled" && bidResult.status === "fulfilled") {
731
- const result = selectBlockProductionSource({
732
- builderSelection,
733
- builderBoostFactor,
862
+ else if (engineResult.status === "fulfilled" && bidBlockResult.status === "fulfilled") {
863
+ const result = selectBlockProductionSourceByBoostFactor({
864
+ builderBoostFactor: bestBid?.boostFactor ?? builderBoostFactor,
734
865
  engineExecutionPayloadValue: engineResult.value.executionPayloadValue,
735
- // The bid value is the payment to the proposer, in Gwei
736
- builderExecutionPayloadValue: BigInt(builderBid?.message.value ?? 0) * GWEI_TO_WEI,
866
+ // The bid total payment is its value plus its counted executionPayment, in Gwei
867
+ builderExecutionPayloadValue: (bestBid?.totalGwei ?? 0n) * GWEI_TO_WEI,
737
868
  });
738
869
  source = result.source;
739
870
  metrics?.blockProductionSelectionResults.inc(result);
740
- logger.info(`Selected ${source} block`, { reason: result.reason, ...logCtx });
741
- bestResult = source === ProducedBlockSource.builder ? bidResult : engineResult;
871
+ logger.info(`Selected ${source} block`, {
872
+ reason: result.reason,
873
+ ...logCtx,
874
+ engineDurationMs: engineResult.durationMs,
875
+ ...getBlockValueLogInfo(engineResult.value, ProducedBlockSource.engine),
876
+ builderDurationMs: bidBlockResult.durationMs,
877
+ });
878
+ bestResult = source === ProducedBlockSource.builder ? bidBlockResult : engineResult;
742
879
  }
743
- else if (bidResult.status === "fulfilled") {
880
+ else if (bidBlockResult.status === "fulfilled") {
744
881
  source = ProducedBlockSource.builder;
745
- bestResult = bidResult;
882
+ bestResult = bidBlockResult;
746
883
  const reason = engineResult.status === "pending"
747
884
  ? BuilderBlockSelectionReason.EnginePending
748
885
  : BuilderBlockSelectionReason.EngineError;
@@ -750,27 +887,31 @@ export function getValidatorApi(opts, { chain, config, logger, metrics, network,
750
887
  logger.info("Selected builder bid block: no local block produced", {
751
888
  reason,
752
889
  ...logCtx,
890
+ durationMs: bidBlockResult.durationMs,
891
+ ...getBlockValueLogInfo(bidBlockResult.value),
753
892
  error: engineResult.status === "rejected" ? engineResult.reason.message : undefined,
754
893
  });
755
894
  }
756
895
  else if (engineResult.status === "fulfilled") {
757
896
  source = ProducedBlockSource.engine;
758
897
  bestResult = engineResult;
759
- const reason = builderBid === null
898
+ const reason = bidBlockResult.status === "rejected" && bidBlockResult.reason.message === NO_BID_AVAILABLE
760
899
  ? EngineBlockSelectionReason.BuilderNoBid
761
- : bidResult.status === "pending"
900
+ : bidBlockResult.status === "pending"
762
901
  ? EngineBlockSelectionReason.BuilderPending
763
902
  : EngineBlockSelectionReason.BuilderError;
764
903
  metrics?.blockProductionSelectionResults.inc({ source: ProducedBlockSource.engine, reason });
765
904
  logger.info("Selected local block: no builder bid block produced", {
766
905
  reason,
767
906
  ...logCtx,
768
- error: bidResult.status === "rejected" ? bidResult.reason.message : undefined,
907
+ durationMs: engineResult.durationMs,
908
+ ...getBlockValueLogInfo(engineResult.value),
909
+ error: bidBlockResult.status === "rejected" ? bidBlockResult.reason.message : undefined,
769
910
  });
770
911
  }
771
912
  if (bestResult === null || bestResult.status !== "fulfilled") {
772
913
  const engineReason = engineResult.status === "rejected" ? engineResult.reason : engineResult.status;
773
- const bidReason = bidResult.status === "rejected" ? bidResult.reason : bidResult.status;
914
+ const bidReason = bidBlockResult.status === "rejected" ? bidBlockResult.reason : bidBlockResult.status;
774
915
  logger.error("Block production failed", {
775
916
  ...logCtx,
776
917
  engineReason: String(engineReason),
@@ -791,7 +932,7 @@ export function getValidatorApi(opts, { chain, config, logger, metrics, network,
791
932
  root: blockRoot,
792
933
  });
793
934
  if (chain.opts.persistProducedBlocks) {
794
- void chain.persistBlock(block, "produced_engine_block");
935
+ void chain.persistBlock(block, source === ProducedBlockSource.builder ? "produced_builder_block" : "produced_engine_block");
795
936
  }
796
937
  // Include the payload for self-builds unless disabled (stateless flow)
797
938
  const isSelfBuild = source === ProducedBlockSource.engine;
@@ -822,7 +963,13 @@ export function getValidatorApi(opts, { chain, config, logger, metrics, network,
822
963
  }
823
964
  return {
824
965
  data: block,
825
- meta: { version: fork, consensusBlockValue, executionPayloadValue, executionPayloadIncluded: false },
966
+ meta: {
967
+ version: fork,
968
+ consensusBlockValue,
969
+ executionPayloadValue,
970
+ executionPayloadIncluded: false,
971
+ builderUrl: source === ProducedBlockSource.builder ? bestBid?.url : undefined,
972
+ },
826
973
  };
827
974
  },
828
975
  async produceAttestationData({ committeeIndex, slot }) {
@@ -1453,6 +1600,32 @@ export function getValidatorApi(opts, { chain, config, logger, metrics, network,
1453
1600
  throw new IndexedError("Error processing signed proposer preferences", failures);
1454
1601
  }
1455
1602
  },
1603
+ async submitBuilderPreferences({ builderPreferences }) {
1604
+ const failures = [];
1605
+ await Promise.all(builderPreferences.map(async (entry, i) => {
1606
+ let builder = Buffer.from(entry.url).toString("utf8");
1607
+ try {
1608
+ const url = decodeBuilderUrl(entry.url);
1609
+ builder = toPrintableUrl(url);
1610
+ const proposerIndex = chain.getHeadState().getBeaconProposer(entry.auth.message.slot);
1611
+ const expectedProposerPubkey = chain.pubkeyCache.getOrThrow(proposerIndex).toBytes();
1612
+ if (!byteArrayEquals(entry.proposerPubkey, expectedProposerPubkey)) {
1613
+ throw new ApiError(400, `Invalid proposer pubkey for builder preferences slot=${entry.auth.message.slot}`);
1614
+ }
1615
+ await chain.builderApiClient.submitBuilderPreferences(url, entry.proposerPubkey, {
1616
+ preferences: { maxExecutionPayment: entry.maxExecutionPayment },
1617
+ auth: entry.auth,
1618
+ });
1619
+ }
1620
+ catch (e) {
1621
+ failures.push({ index: i, message: e.message });
1622
+ logger.verbose(`Error on submitBuilderPreferences [${i}]`, { slot: entry.auth.message.slot, builder }, e);
1623
+ }
1624
+ }));
1625
+ if (failures.length > 0) {
1626
+ throw new IndexedError("Error submitting builder preferences", failures);
1627
+ }
1628
+ },
1456
1629
  async getExecutionPayloadEnvelope({ slot, beaconBlockRoot }) {
1457
1630
  const fork = config.getForkName(slot);
1458
1631
  if (!isForkPostGloas(fork)) {