@lodestar/beacon-node 1.51.0-dev.17f78227c7 → 1.51.0-dev.1b22218e60

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 (642) hide show
  1. package/lib/api/impl/api.js +1 -1
  2. package/lib/api/impl/api.js.map +1 -1
  3. package/lib/api/impl/beacon/blocks/index.d.ts +2 -1
  4. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/blocks/index.js +48 -95
  6. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  7. package/lib/api/impl/beacon/index.d.ts +2 -1
  8. package/lib/api/impl/beacon/index.d.ts.map +1 -1
  9. package/lib/api/impl/beacon/index.js +2 -2
  10. package/lib/api/impl/beacon/index.js.map +1 -1
  11. package/lib/api/impl/beacon/pool/index.d.ts.map +1 -1
  12. package/lib/api/impl/beacon/pool/index.js +22 -2
  13. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  14. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  15. package/lib/api/impl/beacon/state/index.js +8 -2
  16. package/lib/api/impl/beacon/state/index.js.map +1 -1
  17. package/lib/api/impl/beacon/state/utils.d.ts +3 -2
  18. package/lib/api/impl/beacon/state/utils.d.ts.map +1 -1
  19. package/lib/api/impl/beacon/state/utils.js +17 -9
  20. package/lib/api/impl/beacon/state/utils.js.map +1 -1
  21. package/lib/api/impl/debug/index.d.ts.map +1 -1
  22. package/lib/api/impl/debug/index.js +3 -0
  23. package/lib/api/impl/debug/index.js.map +1 -1
  24. package/lib/api/impl/validator/index.d.ts +6 -0
  25. package/lib/api/impl/validator/index.d.ts.map +1 -1
  26. package/lib/api/impl/validator/index.js +143 -35
  27. package/lib/api/impl/validator/index.js.map +1 -1
  28. package/lib/api/options.d.ts +2 -0
  29. package/lib/api/options.d.ts.map +1 -1
  30. package/lib/api/options.js +1 -0
  31. package/lib/api/options.js.map +1 -1
  32. package/lib/chain/GetBlobsTracker.d.ts +13 -2
  33. package/lib/chain/GetBlobsTracker.d.ts.map +1 -1
  34. package/lib/chain/GetBlobsTracker.js +69 -35
  35. package/lib/chain/GetBlobsTracker.js.map +1 -1
  36. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  37. package/lib/chain/archiveStore/archiveStore.js +1 -0
  38. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  39. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts +4 -0
  40. package/lib/chain/archiveStore/utils/archiveBlocks.d.ts.map +1 -1
  41. package/lib/chain/archiveStore/utils/archiveBlocks.js +61 -97
  42. package/lib/chain/archiveStore/utils/archiveBlocks.js.map +1 -1
  43. package/lib/chain/blocks/blockInput/blockInput.d.ts +11 -56
  44. package/lib/chain/blocks/blockInput/blockInput.d.ts.map +1 -1
  45. package/lib/chain/blocks/blockInput/blockInput.js +5 -241
  46. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  47. package/lib/chain/blocks/blockInput/errors.d.ts +2 -4
  48. package/lib/chain/blocks/blockInput/errors.d.ts.map +1 -1
  49. package/lib/chain/blocks/blockInput/errors.js.map +1 -1
  50. package/lib/chain/blocks/blockInput/types.d.ts +2 -18
  51. package/lib/chain/blocks/blockInput/types.d.ts.map +1 -1
  52. package/lib/chain/blocks/blockInput/types.js +0 -1
  53. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  54. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  55. package/lib/chain/blocks/importBlock.js +42 -57
  56. package/lib/chain/blocks/importBlock.js.map +1 -1
  57. package/lib/chain/blocks/importExecutionPayload.d.ts +10 -11
  58. package/lib/chain/blocks/importExecutionPayload.d.ts.map +1 -1
  59. package/lib/chain/blocks/importExecutionPayload.js +82 -20
  60. package/lib/chain/blocks/importExecutionPayload.js.map +1 -1
  61. package/lib/chain/blocks/index.d.ts.map +1 -1
  62. package/lib/chain/blocks/index.js +4 -4
  63. package/lib/chain/blocks/index.js.map +1 -1
  64. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts +12 -9
  65. package/lib/chain/blocks/payloadEnvelopeProcessor.d.ts.map +1 -1
  66. package/lib/chain/blocks/payloadEnvelopeProcessor.js +24 -19
  67. package/lib/chain/blocks/payloadEnvelopeProcessor.js.map +1 -1
  68. package/lib/chain/blocks/types.d.ts +7 -19
  69. package/lib/chain/blocks/types.d.ts.map +1 -1
  70. package/lib/chain/blocks/types.js +5 -24
  71. package/lib/chain/blocks/types.js.map +1 -1
  72. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  73. package/lib/chain/blocks/verifyBlock.js +18 -7
  74. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  75. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts.map +1 -1
  76. package/lib/chain/blocks/verifyBlocksDataAvailability.js +14 -2
  77. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  78. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +1 -1
  79. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts.map +1 -1
  80. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +7 -3
  81. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  82. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts.map +1 -1
  83. package/lib/chain/blocks/verifyBlocksSanityChecks.js +4 -0
  84. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  85. package/lib/chain/blocks/verifyBlocksSignatures.d.ts.map +1 -1
  86. package/lib/chain/blocks/verifyBlocksSignatures.js +10 -5
  87. package/lib/chain/blocks/verifyBlocksSignatures.js.map +1 -1
  88. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts +3 -3
  89. package/lib/chain/blocks/verifyPayloadsDataAvailability.d.ts.map +1 -1
  90. package/lib/chain/blocks/verifyPayloadsDataAvailability.js +11 -6
  91. package/lib/chain/blocks/verifyPayloadsDataAvailability.js.map +1 -1
  92. package/lib/chain/blocks/writeBlockInputToDb.d.ts +0 -2
  93. package/lib/chain/blocks/writeBlockInputToDb.d.ts.map +1 -1
  94. package/lib/chain/blocks/writeBlockInputToDb.js +6 -24
  95. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  96. package/lib/chain/bls/interface.d.ts +2 -0
  97. package/lib/chain/bls/interface.d.ts.map +1 -1
  98. package/lib/chain/bls/multithread/index.d.ts +1 -1
  99. package/lib/chain/bls/multithread/index.d.ts.map +1 -1
  100. package/lib/chain/bls/multithread/index.js +50 -22
  101. package/lib/chain/bls/multithread/index.js.map +1 -1
  102. package/lib/chain/bls/multithread/types.d.ts +1 -1
  103. package/lib/chain/bls/multithread/types.d.ts.map +1 -1
  104. package/lib/chain/bls/multithread/worker.js +1 -1
  105. package/lib/chain/bls/multithread/worker.js.map +1 -1
  106. package/lib/chain/bls/singleThread.js +1 -1
  107. package/lib/chain/bls/singleThread.js.map +1 -1
  108. package/lib/chain/bls/utils.js +1 -1
  109. package/lib/chain/bls/utils.js.map +1 -1
  110. package/lib/chain/chain.d.ts +26 -4
  111. package/lib/chain/chain.d.ts.map +1 -1
  112. package/lib/chain/chain.js +127 -43
  113. package/lib/chain/chain.js.map +1 -1
  114. package/lib/chain/emitter.d.ts +7 -7
  115. package/lib/chain/emitter.d.ts.map +1 -1
  116. package/lib/chain/emitter.js +5 -5
  117. package/lib/chain/emitter.js.map +1 -1
  118. package/lib/chain/errors/blockError.d.ts +1 -1
  119. package/lib/chain/errors/blockError.d.ts.map +1 -1
  120. package/lib/chain/errors/blockError.js +1 -1
  121. package/lib/chain/errors/blockError.js.map +1 -1
  122. package/lib/chain/errors/executionPayloadBid.d.ts +11 -1
  123. package/lib/chain/errors/executionPayloadBid.d.ts.map +1 -1
  124. package/lib/chain/errors/executionPayloadBid.js +2 -0
  125. package/lib/chain/errors/executionPayloadBid.js.map +1 -1
  126. package/lib/chain/errors/executionPayloadEnvelope.d.ts +7 -0
  127. package/lib/chain/errors/executionPayloadEnvelope.d.ts.map +1 -1
  128. package/lib/chain/errors/executionPayloadEnvelope.js +1 -0
  129. package/lib/chain/errors/executionPayloadEnvelope.js.map +1 -1
  130. package/lib/chain/errors/inclusionList.d.ts +60 -0
  131. package/lib/chain/errors/inclusionList.d.ts.map +1 -0
  132. package/lib/chain/errors/inclusionList.js +19 -0
  133. package/lib/chain/errors/inclusionList.js.map +1 -0
  134. package/lib/chain/errors/index.d.ts +1 -1
  135. package/lib/chain/errors/index.d.ts.map +1 -1
  136. package/lib/chain/errors/index.js +1 -1
  137. package/lib/chain/errors/index.js.map +1 -1
  138. package/lib/chain/forkChoice/index.d.ts +11 -1
  139. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  140. package/lib/chain/forkChoice/index.js +11 -0
  141. package/lib/chain/forkChoice/index.js.map +1 -1
  142. package/lib/chain/forkChoiceExecutionEngine.d.ts +51 -0
  143. package/lib/chain/forkChoiceExecutionEngine.d.ts.map +1 -0
  144. package/lib/chain/forkChoiceExecutionEngine.js +117 -0
  145. package/lib/chain/forkChoiceExecutionEngine.js.map +1 -0
  146. package/lib/chain/interface.d.ts +10 -7
  147. package/lib/chain/interface.d.ts.map +1 -1
  148. package/lib/chain/interface.js.map +1 -1
  149. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +17 -4
  150. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  151. package/lib/chain/opPools/aggregatedAttestationPool.js +199 -46
  152. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  153. package/lib/chain/opPools/attestationPool.d.ts +1 -1
  154. package/lib/chain/opPools/attestationPool.d.ts.map +1 -1
  155. package/lib/chain/opPools/attestationPool.js +15 -4
  156. package/lib/chain/opPools/attestationPool.js.map +1 -1
  157. package/lib/chain/opPools/inclusionListStore.d.ts +63 -0
  158. package/lib/chain/opPools/inclusionListStore.d.ts.map +1 -0
  159. package/lib/chain/opPools/inclusionListStore.js +171 -0
  160. package/lib/chain/opPools/inclusionListStore.js.map +1 -0
  161. package/lib/chain/opPools/index.d.ts +2 -0
  162. package/lib/chain/opPools/index.d.ts.map +1 -1
  163. package/lib/chain/opPools/index.js +2 -0
  164. package/lib/chain/opPools/index.js.map +1 -1
  165. package/lib/chain/opPools/payloadAttestationPool.d.ts.map +1 -1
  166. package/lib/chain/opPools/payloadAttestationPool.js +17 -7
  167. package/lib/chain/opPools/payloadAttestationPool.js.map +1 -1
  168. package/lib/chain/opPools/singleAttestationPool.d.ts +77 -0
  169. package/lib/chain/opPools/singleAttestationPool.d.ts.map +1 -0
  170. package/lib/chain/opPools/singleAttestationPool.js +209 -0
  171. package/lib/chain/opPools/singleAttestationPool.js.map +1 -0
  172. package/lib/chain/opPools/syncCommitteeMessagePool.d.ts.map +1 -1
  173. package/lib/chain/opPools/syncCommitteeMessagePool.js +9 -3
  174. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  175. package/lib/chain/opPools/syncContributionAndProofPool.d.ts.map +1 -1
  176. package/lib/chain/opPools/syncContributionAndProofPool.js +11 -3
  177. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  178. package/lib/chain/opPools/utils.d.ts +1 -1
  179. package/lib/chain/opPools/utils.d.ts.map +1 -1
  180. package/lib/chain/opPools/utils.js +1 -1
  181. package/lib/chain/opPools/utils.js.map +1 -1
  182. package/lib/chain/options.d.ts +5 -3
  183. package/lib/chain/options.d.ts.map +1 -1
  184. package/lib/chain/options.js +0 -1
  185. package/lib/chain/options.js.map +1 -1
  186. package/lib/chain/produceBlock/produceBlockBody.d.ts +6 -3
  187. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  188. package/lib/chain/produceBlock/produceBlockBody.js +32 -11
  189. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  190. package/lib/chain/proposerTracker.d.ts +31 -0
  191. package/lib/chain/proposerTracker.d.ts.map +1 -0
  192. package/lib/chain/proposerTracker.js +75 -0
  193. package/lib/chain/proposerTracker.js.map +1 -0
  194. package/lib/chain/regen/interface.d.ts +2 -2
  195. package/lib/chain/regen/interface.d.ts.map +1 -1
  196. package/lib/chain/regen/interface.js +1 -1
  197. package/lib/chain/regen/interface.js.map +1 -1
  198. package/lib/chain/regen/queued.d.ts +1 -1
  199. package/lib/chain/regen/queued.d.ts.map +1 -1
  200. package/lib/chain/regen/queued.js +5 -3
  201. package/lib/chain/regen/queued.js.map +1 -1
  202. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -14
  203. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  204. package/lib/chain/seenCache/seenGossipBlockInput.js +6 -65
  205. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  206. package/lib/chain/validation/aggregateAndProof.js +1 -1
  207. package/lib/chain/validation/aggregateAndProof.js.map +1 -1
  208. package/lib/chain/validation/attestation.js +1 -1
  209. package/lib/chain/validation/attestation.js.map +1 -1
  210. package/lib/chain/validation/executionPayloadBid.d.ts +0 -15
  211. package/lib/chain/validation/executionPayloadBid.d.ts.map +1 -1
  212. package/lib/chain/validation/executionPayloadBid.js +37 -158
  213. package/lib/chain/validation/executionPayloadBid.js.map +1 -1
  214. package/lib/chain/validation/executionPayloadEnvelope.d.ts +6 -0
  215. package/lib/chain/validation/executionPayloadEnvelope.d.ts.map +1 -1
  216. package/lib/chain/validation/executionPayloadEnvelope.js +53 -0
  217. package/lib/chain/validation/executionPayloadEnvelope.js.map +1 -1
  218. package/lib/chain/validation/inclusionList.d.ts +14 -0
  219. package/lib/chain/validation/inclusionList.d.ts.map +1 -0
  220. package/lib/chain/validation/inclusionList.js +150 -0
  221. package/lib/chain/validation/inclusionList.js.map +1 -0
  222. package/lib/chain/validation/index.d.ts +1 -0
  223. package/lib/chain/validation/index.d.ts.map +1 -1
  224. package/lib/chain/validation/index.js +1 -0
  225. package/lib/chain/validation/index.js.map +1 -1
  226. package/lib/chain/validation/syncCommittee.d.ts.map +1 -1
  227. package/lib/chain/validation/syncCommittee.js +16 -10
  228. package/lib/chain/validation/syncCommittee.js.map +1 -1
  229. package/lib/chain/validation/syncCommitteeContributionAndProof.d.ts.map +1 -1
  230. package/lib/chain/validation/syncCommitteeContributionAndProof.js +11 -0
  231. package/lib/chain/validation/syncCommitteeContributionAndProof.js.map +1 -1
  232. package/lib/chain/validatorMonitor.d.ts +1 -2
  233. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  234. package/lib/chain/validatorMonitor.js +0 -3
  235. package/lib/chain/validatorMonitor.js.map +1 -1
  236. package/lib/db/beacon.d.ts +7 -0
  237. package/lib/db/beacon.d.ts.map +1 -1
  238. package/lib/db/beacon.js +34 -0
  239. package/lib/db/beacon.js.map +1 -1
  240. package/lib/db/dataColumnStore.d.ts +1 -1
  241. package/lib/db/dataColumnStore.d.ts.map +1 -1
  242. package/lib/db/dataColumnStore.js +1 -4
  243. package/lib/db/dataColumnStore.js.map +1 -1
  244. package/lib/db/flatFileStore/flatFileStore.js +5 -5
  245. package/lib/db/flatFileStore/flatFileStore.js.map +1 -1
  246. package/lib/db/flatFileStore/slotIndex.d.ts.map +1 -1
  247. package/lib/db/flatFileStore/slotIndex.js +2 -2
  248. package/lib/db/flatFileStore/slotIndex.js.map +1 -1
  249. package/lib/db/interface.d.ts +1 -0
  250. package/lib/db/interface.d.ts.map +1 -1
  251. package/lib/db/repositories/blobSidecars.d.ts +0 -1
  252. package/lib/db/repositories/blobSidecars.d.ts.map +1 -1
  253. package/lib/db/repositories/blobSidecars.js +0 -1
  254. package/lib/db/repositories/blobSidecars.js.map +1 -1
  255. package/lib/db/repositories/dataColumnSidecarArchive.d.ts +6 -0
  256. package/lib/db/repositories/dataColumnSidecarArchive.d.ts.map +1 -1
  257. package/lib/db/repositories/dataColumnSidecarArchive.js +19 -0
  258. package/lib/db/repositories/dataColumnSidecarArchive.js.map +1 -1
  259. package/lib/execution/builder/apiClient.d.ts +14 -8
  260. package/lib/execution/builder/apiClient.d.ts.map +1 -1
  261. package/lib/execution/builder/apiClient.js +12 -10
  262. package/lib/execution/builder/apiClient.js.map +1 -1
  263. package/lib/execution/builder/http.d.ts +2 -0
  264. package/lib/execution/builder/http.d.ts.map +1 -1
  265. package/lib/execution/builder/http.js +2 -0
  266. package/lib/execution/builder/http.js.map +1 -1
  267. package/lib/execution/builder/validateBid.d.ts.map +1 -1
  268. package/lib/execution/builder/validateBid.js +14 -1
  269. package/lib/execution/builder/validateBid.js.map +1 -1
  270. package/lib/execution/engine/blobVersionedHashes.d.ts +1 -1
  271. package/lib/execution/engine/blobVersionedHashes.d.ts.map +1 -1
  272. package/lib/execution/engine/blobVersionedHashes.js.map +1 -1
  273. package/lib/execution/engine/disabled.d.ts +1 -0
  274. package/lib/execution/engine/disabled.d.ts.map +1 -1
  275. package/lib/execution/engine/disabled.js +3 -0
  276. package/lib/execution/engine/disabled.js.map +1 -1
  277. package/lib/execution/engine/http.d.ts +12 -8
  278. package/lib/execution/engine/http.d.ts.map +1 -1
  279. package/lib/execution/engine/http.js +35 -14
  280. package/lib/execution/engine/http.js.map +1 -1
  281. package/lib/execution/engine/index.d.ts +1 -1
  282. package/lib/execution/engine/index.d.ts.map +1 -1
  283. package/lib/execution/engine/index.js +1 -1
  284. package/lib/execution/engine/index.js.map +1 -1
  285. package/lib/execution/engine/interface.d.ts +29 -8
  286. package/lib/execution/engine/interface.d.ts.map +1 -1
  287. package/lib/execution/engine/interface.js.map +1 -1
  288. package/lib/execution/engine/jsonRpcTransport.d.ts +5 -6
  289. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -1
  290. package/lib/execution/engine/jsonRpcTransport.js +34 -20
  291. package/lib/execution/engine/jsonRpcTransport.js.map +1 -1
  292. package/lib/execution/engine/mock.d.ts +1 -1
  293. package/lib/execution/engine/mock.d.ts.map +1 -1
  294. package/lib/execution/engine/mock.js +31 -11
  295. package/lib/execution/engine/mock.js.map +1 -1
  296. package/lib/execution/engine/payloadIdCache.d.ts +5 -3
  297. package/lib/execution/engine/payloadIdCache.d.ts.map +1 -1
  298. package/lib/execution/engine/payloadIdCache.js +15 -4
  299. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  300. package/lib/execution/engine/restTransport.d.ts +4 -5
  301. package/lib/execution/engine/restTransport.d.ts.map +1 -1
  302. package/lib/execution/engine/restTransport.js +4 -15
  303. package/lib/execution/engine/restTransport.js.map +1 -1
  304. package/lib/execution/engine/sszTypes.d.ts +38 -47
  305. package/lib/execution/engine/sszTypes.d.ts.map +1 -1
  306. package/lib/execution/engine/sszTypes.js +0 -5
  307. package/lib/execution/engine/sszTypes.js.map +1 -1
  308. package/lib/execution/engine/transport.d.ts +4 -14
  309. package/lib/execution/engine/transport.d.ts.map +1 -1
  310. package/lib/execution/engine/types.d.ts +25 -9
  311. package/lib/execution/engine/types.d.ts.map +1 -1
  312. package/lib/execution/engine/types.js +19 -14
  313. package/lib/execution/engine/types.js.map +1 -1
  314. package/lib/execution/engine/utils.d.ts.map +1 -1
  315. package/lib/execution/engine/utils.js +3 -2
  316. package/lib/execution/engine/utils.js.map +1 -1
  317. package/lib/index.d.ts +1 -0
  318. package/lib/index.d.ts.map +1 -1
  319. package/lib/index.js +2 -0
  320. package/lib/index.js.map +1 -1
  321. package/lib/metrics/metrics/beacon.d.ts +16 -9
  322. package/lib/metrics/metrics/beacon.d.ts.map +1 -1
  323. package/lib/metrics/metrics/beacon.js +35 -30
  324. package/lib/metrics/metrics/beacon.js.map +1 -1
  325. package/lib/metrics/metrics/lodestar.d.ts +42 -8
  326. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  327. package/lib/metrics/metrics/lodestar.js +104 -18
  328. package/lib/metrics/metrics/lodestar.js.map +1 -1
  329. package/lib/metrics/server/http.js +5 -5
  330. package/lib/metrics/server/http.js.map +1 -1
  331. package/lib/monitoring/service.js +1 -1
  332. package/lib/monitoring/service.js.map +1 -1
  333. package/lib/network/core/networkCore.d.ts +4 -1
  334. package/lib/network/core/networkCore.d.ts.map +1 -1
  335. package/lib/network/core/networkCore.js +7 -0
  336. package/lib/network/core/networkCore.js.map +1 -1
  337. package/lib/network/core/networkCoreWorker.js +2 -0
  338. package/lib/network/core/networkCoreWorker.js.map +1 -1
  339. package/lib/network/core/networkCoreWorkerHandler.d.ts +4 -1
  340. package/lib/network/core/networkCoreWorkerHandler.d.ts.map +1 -1
  341. package/lib/network/core/networkCoreWorkerHandler.js +6 -0
  342. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  343. package/lib/network/core/types.d.ts +6 -1
  344. package/lib/network/core/types.d.ts.map +1 -1
  345. package/lib/network/gossip/gossipsub.d.ts +1 -0
  346. package/lib/network/gossip/gossipsub.d.ts.map +1 -1
  347. package/lib/network/gossip/gossipsub.js +10 -0
  348. package/lib/network/gossip/gossipsub.js.map +1 -1
  349. package/lib/network/gossip/interface.d.ts +8 -9
  350. package/lib/network/gossip/interface.d.ts.map +1 -1
  351. package/lib/network/gossip/interface.js +1 -1
  352. package/lib/network/gossip/interface.js.map +1 -1
  353. package/lib/network/gossip/topic.d.ts +13 -21
  354. package/lib/network/gossip/topic.d.ts.map +1 -1
  355. package/lib/network/gossip/topic.js +13 -24
  356. package/lib/network/gossip/topic.js.map +1 -1
  357. package/lib/network/interface.d.ts +5 -5
  358. package/lib/network/interface.d.ts.map +1 -1
  359. package/lib/network/libp2p/index.d.ts.map +1 -1
  360. package/lib/network/libp2p/index.js +5 -1
  361. package/lib/network/libp2p/index.js.map +1 -1
  362. package/lib/network/network.d.ts +9 -7
  363. package/lib/network/network.d.ts.map +1 -1
  364. package/lib/network/network.js +58 -35
  365. package/lib/network/network.js.map +1 -1
  366. package/lib/network/options.d.ts +2 -0
  367. package/lib/network/options.d.ts.map +1 -1
  368. package/lib/network/options.js +2 -0
  369. package/lib/network/options.js.map +1 -1
  370. package/lib/network/peers/peerManager.d.ts +2 -1
  371. package/lib/network/peers/peerManager.d.ts.map +1 -1
  372. package/lib/network/peers/peerManager.js +28 -1
  373. package/lib/network/peers/peerManager.js.map +1 -1
  374. package/lib/network/peers/utils/assertPeerRelevance.d.ts +9 -1
  375. package/lib/network/peers/utils/assertPeerRelevance.d.ts.map +1 -1
  376. package/lib/network/peers/utils/assertPeerRelevance.js +32 -21
  377. package/lib/network/peers/utils/assertPeerRelevance.js.map +1 -1
  378. package/lib/network/peers/utils/prioritizePeers.d.ts +4 -1
  379. package/lib/network/peers/utils/prioritizePeers.d.ts.map +1 -1
  380. package/lib/network/peers/utils/prioritizePeers.js +8 -16
  381. package/lib/network/peers/utils/prioritizePeers.js.map +1 -1
  382. package/lib/network/peers/utils/subnetMap.d.ts +5 -2
  383. package/lib/network/peers/utils/subnetMap.d.ts.map +1 -1
  384. package/lib/network/peers/utils/subnetMap.js +6 -3
  385. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  386. package/lib/network/processor/extractSlotRootFns.d.ts.map +1 -1
  387. package/lib/network/processor/extractSlotRootFns.js +1 -8
  388. package/lib/network/processor/extractSlotRootFns.js.map +1 -1
  389. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  390. package/lib/network/processor/gossipHandlers.js +118 -149
  391. package/lib/network/processor/gossipHandlers.js.map +1 -1
  392. package/lib/network/processor/gossipQueues/index.js +6 -6
  393. package/lib/network/processor/gossipQueues/index.js.map +1 -1
  394. package/lib/network/processor/gossipValidatorFn.js +5 -5
  395. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  396. package/lib/network/processor/index.d.ts +6 -0
  397. package/lib/network/processor/index.d.ts.map +1 -1
  398. package/lib/network/processor/index.js +56 -29
  399. package/lib/network/processor/index.js.map +1 -1
  400. package/lib/network/reqresp/ReqRespBeaconNode.js +6 -3
  401. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  402. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts +2 -2
  403. package/lib/network/reqresp/handlers/beaconBlocksByRange.d.ts.map +1 -1
  404. package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts +10 -0
  405. package/lib/network/reqresp/handlers/inclusionListsByIndices.d.ts.map +1 -0
  406. package/lib/network/reqresp/handlers/inclusionListsByIndices.js +30 -0
  407. package/lib/network/reqresp/handlers/inclusionListsByIndices.js.map +1 -0
  408. package/lib/network/reqresp/handlers/index.d.ts.map +1 -1
  409. package/lib/network/reqresp/handlers/index.js +6 -12
  410. package/lib/network/reqresp/handlers/index.js.map +1 -1
  411. package/lib/network/reqresp/protocols.d.ts +1 -2
  412. package/lib/network/reqresp/protocols.d.ts.map +1 -1
  413. package/lib/network/reqresp/protocols.js +5 -10
  414. package/lib/network/reqresp/protocols.js.map +1 -1
  415. package/lib/network/reqresp/rateLimit.d.ts.map +1 -1
  416. package/lib/network/reqresp/rateLimit.js +5 -17
  417. package/lib/network/reqresp/rateLimit.js.map +1 -1
  418. package/lib/network/reqresp/types.d.ts +6 -9
  419. package/lib/network/reqresp/types.d.ts.map +1 -1
  420. package/lib/network/reqresp/types.js +4 -7
  421. package/lib/network/reqresp/types.js.map +1 -1
  422. package/lib/network/subnets/attnetsService.d.ts +35 -5
  423. package/lib/network/subnets/attnetsService.d.ts.map +1 -1
  424. package/lib/network/subnets/attnetsService.js +84 -6
  425. package/lib/network/subnets/attnetsService.js.map +1 -1
  426. package/lib/network/subnets/interface.d.ts +7 -0
  427. package/lib/network/subnets/interface.d.ts.map +1 -1
  428. package/lib/network/subnets/interface.js.map +1 -1
  429. package/lib/node/nodejs.d.ts +3 -1
  430. package/lib/node/nodejs.d.ts.map +1 -1
  431. package/lib/node/nodejs.js +47 -21
  432. package/lib/node/nodejs.js.map +1 -1
  433. package/lib/node/options.d.ts +3 -1
  434. package/lib/node/options.d.ts.map +1 -1
  435. package/lib/node/options.js +4 -2
  436. package/lib/node/options.js.map +1 -1
  437. package/lib/sync/interface.d.ts.map +1 -1
  438. package/lib/sync/interface.js.map +1 -1
  439. package/lib/sync/range/batch.d.ts +2 -3
  440. package/lib/sync/range/batch.d.ts.map +1 -1
  441. package/lib/sync/range/batch.js +9 -22
  442. package/lib/sync/range/batch.js.map +1 -1
  443. package/lib/sync/range/chain.d.ts.map +1 -1
  444. package/lib/sync/range/chain.js +2 -15
  445. package/lib/sync/range/chain.js.map +1 -1
  446. package/lib/sync/sync.d.ts +15 -0
  447. package/lib/sync/sync.d.ts.map +1 -1
  448. package/lib/sync/sync.js +103 -25
  449. package/lib/sync/sync.js.map +1 -1
  450. package/lib/sync/unknownBlock.d.ts.map +1 -1
  451. package/lib/sync/unknownBlock.js +43 -25
  452. package/lib/sync/unknownBlock.js.map +1 -1
  453. package/lib/sync/utils/downloadByRange.d.ts +6 -34
  454. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  455. package/lib/sync/utils/downloadByRange.js +24 -128
  456. package/lib/sync/utils/downloadByRange.js.map +1 -1
  457. package/lib/sync/utils/downloadByRoot.d.ts +2 -18
  458. package/lib/sync/utils/downloadByRoot.d.ts.map +1 -1
  459. package/lib/sync/utils/downloadByRoot.js +14 -99
  460. package/lib/sync/utils/downloadByRoot.js.map +1 -1
  461. package/lib/util/blobs.d.ts +1 -7
  462. package/lib/util/blobs.d.ts.map +1 -1
  463. package/lib/util/blobs.js +0 -19
  464. package/lib/util/blobs.js.map +1 -1
  465. package/lib/util/execution.d.ts +3 -4
  466. package/lib/util/execution.d.ts.map +1 -1
  467. package/lib/util/execution.js +1 -73
  468. package/lib/util/execution.js.map +1 -1
  469. package/lib/util/file.d.ts.map +1 -1
  470. package/lib/util/file.js +8 -9
  471. package/lib/util/file.js.map +1 -1
  472. package/lib/util/queue/itemQueue.js +1 -1
  473. package/lib/util/queue/itemQueue.js.map +1 -1
  474. package/lib/util/sszBytes.d.ts +5 -1
  475. package/lib/util/sszBytes.d.ts.map +1 -1
  476. package/lib/util/sszBytes.js +36 -19
  477. package/lib/util/sszBytes.js.map +1 -1
  478. package/lib/util/types.d.ts +0 -5
  479. package/lib/util/types.d.ts.map +1 -1
  480. package/lib/util/types.js +1 -2
  481. package/lib/util/types.js.map +1 -1
  482. package/package.json +31 -32
  483. package/src/api/impl/api.ts +1 -1
  484. package/src/api/impl/beacon/blocks/index.ts +81 -126
  485. package/src/api/impl/beacon/index.ts +3 -1
  486. package/src/api/impl/beacon/pool/index.ts +31 -1
  487. package/src/api/impl/beacon/state/index.ts +10 -1
  488. package/src/api/impl/beacon/state/utils.ts +20 -10
  489. package/src/api/impl/debug/index.ts +4 -0
  490. package/src/api/impl/validator/index.ts +178 -39
  491. package/src/api/options.ts +3 -0
  492. package/src/chain/GetBlobsTracker.ts +82 -52
  493. package/src/chain/archiveStore/archiveStore.ts +1 -0
  494. package/src/chain/archiveStore/utils/archiveBlocks.ts +76 -130
  495. package/src/chain/blocks/blockInput/blockInput.ts +11 -343
  496. package/src/chain/blocks/blockInput/errors.ts +1 -2
  497. package/src/chain/blocks/blockInput/types.ts +2 -20
  498. package/src/chain/blocks/importBlock.ts +58 -77
  499. package/src/chain/blocks/importExecutionPayload.ts +123 -36
  500. package/src/chain/blocks/index.ts +11 -4
  501. package/src/chain/blocks/payloadEnvelopeProcessor.ts +35 -24
  502. package/src/chain/blocks/types.ts +8 -29
  503. package/src/chain/blocks/verifyBlock.ts +31 -16
  504. package/src/chain/blocks/verifyBlocksDataAvailability.ts +16 -2
  505. package/src/chain/blocks/verifyBlocksExecutionPayloads.ts +9 -6
  506. package/src/chain/blocks/verifyBlocksSanityChecks.ts +4 -1
  507. package/src/chain/blocks/verifyBlocksSignatures.ts +10 -5
  508. package/src/chain/blocks/verifyPayloadsDataAvailability.ts +14 -6
  509. package/src/chain/blocks/writeBlockInputToDb.ts +6 -29
  510. package/src/chain/bls/interface.ts +2 -0
  511. package/src/chain/bls/multithread/index.ts +48 -24
  512. package/src/chain/bls/multithread/types.ts +1 -1
  513. package/src/chain/bls/multithread/worker.ts +1 -5
  514. package/src/chain/bls/singleThread.ts +1 -1
  515. package/src/chain/bls/utils.ts +1 -1
  516. package/src/chain/chain.ts +144 -42
  517. package/src/chain/emitter.ts +8 -8
  518. package/src/chain/errors/blockError.ts +1 -1
  519. package/src/chain/errors/executionPayloadBid.ts +12 -0
  520. package/src/chain/errors/executionPayloadEnvelope.ts +8 -0
  521. package/src/chain/errors/inclusionList.ts +38 -0
  522. package/src/chain/errors/index.ts +1 -1
  523. package/src/chain/forkChoice/index.ts +11 -0
  524. package/src/chain/forkChoiceExecutionEngine.ts +183 -0
  525. package/src/chain/interface.ts +11 -6
  526. package/src/chain/opPools/aggregatedAttestationPool.ts +246 -43
  527. package/src/chain/opPools/attestationPool.ts +16 -4
  528. package/src/chain/opPools/inclusionListStore.ts +208 -0
  529. package/src/chain/opPools/index.ts +2 -0
  530. package/src/chain/opPools/payloadAttestationPool.ts +18 -7
  531. package/src/chain/opPools/singleAttestationPool.ts +287 -0
  532. package/src/chain/opPools/syncCommitteeMessagePool.ts +10 -3
  533. package/src/chain/opPools/syncContributionAndProofPool.ts +13 -3
  534. package/src/chain/opPools/utils.ts +1 -1
  535. package/src/chain/options.ts +5 -4
  536. package/src/chain/produceBlock/produceBlockBody.ts +67 -22
  537. package/src/chain/proposerTracker.ts +94 -0
  538. package/src/chain/regen/interface.ts +2 -2
  539. package/src/chain/regen/queued.ts +6 -4
  540. package/src/chain/seenCache/seenGossipBlockInput.ts +9 -93
  541. package/src/chain/validation/aggregateAndProof.ts +1 -1
  542. package/src/chain/validation/attestation.ts +1 -1
  543. package/src/chain/validation/executionPayloadBid.ts +54 -183
  544. package/src/chain/validation/executionPayloadEnvelope.ts +68 -1
  545. package/src/chain/validation/inclusionList.ts +192 -0
  546. package/src/chain/validation/index.ts +1 -0
  547. package/src/chain/validation/syncCommittee.ts +31 -15
  548. package/src/chain/validation/syncCommitteeContributionAndProof.ts +13 -0
  549. package/src/chain/validatorMonitor.ts +0 -6
  550. package/src/db/beacon.ts +44 -0
  551. package/src/db/dataColumnStore.ts +2 -4
  552. package/src/db/flatFileStore/flatFileStore.ts +7 -7
  553. package/src/db/flatFileStore/slotIndex.ts +4 -3
  554. package/src/db/interface.ts +2 -0
  555. package/src/db/repositories/blobSidecars.ts +0 -1
  556. package/src/db/repositories/dataColumnSidecarArchive.ts +20 -0
  557. package/src/execution/builder/apiClient.ts +16 -13
  558. package/src/execution/builder/http.ts +4 -0
  559. package/src/execution/builder/validateBid.ts +23 -2
  560. package/src/execution/engine/blobVersionedHashes.ts +1 -1
  561. package/src/execution/engine/disabled.ts +4 -0
  562. package/src/execution/engine/http.ts +59 -47
  563. package/src/execution/engine/index.ts +1 -1
  564. package/src/execution/engine/interface.ts +46 -13
  565. package/src/execution/engine/jsonRpcTransport.ts +56 -31
  566. package/src/execution/engine/mock.ts +32 -14
  567. package/src/execution/engine/payloadIdCache.ts +24 -6
  568. package/src/execution/engine/restTransport.ts +18 -23
  569. package/src/execution/engine/sszTypes.ts +0 -9
  570. package/src/execution/engine/transport.ts +13 -17
  571. package/src/execution/engine/types.ts +44 -24
  572. package/src/execution/engine/utils.ts +4 -2
  573. package/src/index.ts +2 -0
  574. package/src/metrics/metrics/beacon.ts +37 -30
  575. package/src/metrics/metrics/lodestar.ts +106 -18
  576. package/src/metrics/server/http.ts +5 -5
  577. package/src/monitoring/service.ts +1 -1
  578. package/src/network/core/networkCore.ts +11 -1
  579. package/src/network/core/networkCoreWorker.ts +2 -0
  580. package/src/network/core/networkCoreWorkerHandler.ts +8 -1
  581. package/src/network/core/types.ts +6 -1
  582. package/src/network/gossip/gossipsub.ts +11 -0
  583. package/src/network/gossip/interface.ts +5 -5
  584. package/src/network/gossip/topic.ts +14 -25
  585. package/src/network/interface.ts +4 -5
  586. package/src/network/libp2p/index.ts +5 -1
  587. package/src/network/network.ts +66 -58
  588. package/src/network/options.ts +4 -0
  589. package/src/network/peers/peerManager.ts +28 -3
  590. package/src/network/peers/utils/assertPeerRelevance.ts +39 -23
  591. package/src/network/peers/utils/prioritizePeers.ts +14 -22
  592. package/src/network/peers/utils/subnetMap.ts +6 -3
  593. package/src/network/processor/extractSlotRootFns.ts +0 -9
  594. package/src/network/processor/gossipHandlers.ts +150 -183
  595. package/src/network/processor/gossipQueues/index.ts +6 -6
  596. package/src/network/processor/gossipValidatorFn.ts +5 -5
  597. package/src/network/processor/index.ts +48 -27
  598. package/src/network/processor/types.ts +1 -1
  599. package/src/network/reqresp/ReqRespBeaconNode.ts +7 -7
  600. package/src/network/reqresp/handlers/beaconBlocksByRange.ts +2 -2
  601. package/src/network/reqresp/handlers/inclusionListsByIndices.ts +44 -0
  602. package/src/network/reqresp/handlers/index.ts +5 -17
  603. package/src/network/reqresp/protocols.ts +6 -12
  604. package/src/network/reqresp/rateLimit.ts +5 -17
  605. package/src/network/reqresp/types.ts +6 -13
  606. package/src/network/subnets/attnetsService.ts +94 -6
  607. package/src/network/subnets/interface.ts +7 -0
  608. package/src/node/nodejs.ts +58 -22
  609. package/src/node/options.ts +9 -6
  610. package/src/sync/interface.ts +1 -0
  611. package/src/sync/range/batch.ts +9 -21
  612. package/src/sync/range/chain.ts +2 -14
  613. package/src/sync/sync.ts +108 -26
  614. package/src/sync/unknownBlock.ts +48 -36
  615. package/src/sync/utils/downloadByRange.ts +31 -230
  616. package/src/sync/utils/downloadByRoot.ts +15 -142
  617. package/src/util/blobs.ts +0 -34
  618. package/src/util/execution.ts +8 -102
  619. package/src/util/file.ts +8 -9
  620. package/src/util/queue/itemQueue.ts +1 -1
  621. package/src/util/sszBytes.ts +42 -24
  622. package/src/util/types.ts +1 -8
  623. package/lib/chain/errors/blobSidecarError.d.ts +0 -108
  624. package/lib/chain/errors/blobSidecarError.d.ts.map +0 -1
  625. package/lib/chain/errors/blobSidecarError.js +0 -38
  626. package/lib/chain/errors/blobSidecarError.js.map +0 -1
  627. package/lib/chain/validation/blobSidecar.d.ts +0 -16
  628. package/lib/chain/validation/blobSidecar.d.ts.map +0 -1
  629. package/lib/chain/validation/blobSidecar.js +0 -276
  630. package/lib/chain/validation/blobSidecar.js.map +0 -1
  631. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts +0 -9
  632. package/lib/network/reqresp/handlers/blobSidecarsByRange.d.ts.map +0 -1
  633. package/lib/network/reqresp/handlers/blobSidecarsByRange.js +0 -91
  634. package/lib/network/reqresp/handlers/blobSidecarsByRange.js.map +0 -1
  635. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts +0 -5
  636. package/lib/network/reqresp/handlers/blobSidecarsByRoot.d.ts.map +0 -1
  637. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js +0 -46
  638. package/lib/network/reqresp/handlers/blobSidecarsByRoot.js.map +0 -1
  639. package/src/chain/errors/blobSidecarError.ts +0 -70
  640. package/src/chain/validation/blobSidecar.ts +0 -357
  641. package/src/network/reqresp/handlers/blobSidecarsByRange.ts +0 -133
  642. package/src/network/reqresp/handlers/blobSidecarsByRoot.ts +0 -69
@@ -21,9 +21,9 @@ import {
21
21
  Slot,
22
22
  SubnetID,
23
23
  UintNum64,
24
- deneb,
25
24
  fulu,
26
25
  gloas,
26
+ isGloasBeaconBlock,
27
27
  isGloasDataColumnSidecar,
28
28
  ssz,
29
29
  sszTypesFor,
@@ -38,13 +38,11 @@ import {
38
38
  } from "../../chain/blocks/blockInput/index.js";
39
39
  import {PayloadError, PayloadErrorCode} from "../../chain/blocks/importExecutionPayload.js";
40
40
  import {PayloadEnvelopeInput, PayloadEnvelopeInputSource} from "../../chain/blocks/payloadEnvelopeInput/index.js";
41
- import {BlobSidecarValidation} from "../../chain/blocks/types.js";
41
+ import {InclusionListSource} from "../../chain/blocks/types.js";
42
42
  import {ChainEvent} from "../../chain/emitter.js";
43
43
  import {
44
44
  AttestationError,
45
45
  AttestationErrorCode,
46
- BlobSidecarErrorCode,
47
- BlobSidecarGossipError,
48
46
  BlockError,
49
47
  BlockErrorCode,
50
48
  BlockGossipError,
@@ -59,13 +57,16 @@ import {
59
57
  SyncCommitteeError,
60
58
  } from "../../chain/errors/index.js";
61
59
  import {IBeaconChain} from "../../chain/interface.js";
62
- import {validateGossipBlobSidecar} from "../../chain/validation/blobSidecar.js";
63
60
  import {
64
61
  validateGossipFuluDataColumnSidecar,
65
62
  validateGossipGloasDataColumnSidecar,
66
63
  } from "../../chain/validation/dataColumnSidecar.js";
67
64
  import {validateGossipExecutionPayloadBid} from "../../chain/validation/executionPayloadBid.js";
68
- import {validateGossipExecutionPayloadEnvelope} from "../../chain/validation/executionPayloadEnvelope.js";
65
+ import {
66
+ validateGossipExecutionPayloadEnvelope,
67
+ validateGossipExecutionPayloadEnvelopeSerialized,
68
+ } from "../../chain/validation/executionPayloadEnvelope.js";
69
+ import {InclusionListValidationResult, validateGossipInclusionList} from "../../chain/validation/inclusionList.js";
69
70
  import {
70
71
  AggregateAndProofValidationResult,
71
72
  GossipAttestation,
@@ -87,7 +88,6 @@ import {validateGossipPayloadAttestationMessage} from "../../chain/validation/pa
87
88
  import {validateGossipProposerPreferences} from "../../chain/validation/proposerPreferences.js";
88
89
  import {OpSource} from "../../chain/validatorMonitor.js";
89
90
  import {Metrics} from "../../metrics/index.js";
90
- import {kzgCommitmentToVersionedHash} from "../../util/blobs.js";
91
91
  import {getBlobKzgCommitments, getDataColumnSidecarSlot} from "../../util/dataColumns.js";
92
92
  import {callInNextEventLoop} from "../../util/eventLoop.js";
93
93
  import {INetworkCore} from "../core/index.js";
@@ -149,6 +149,31 @@ export function getGossipHandlers(modules: ValidatorFnsModules, options: GossipH
149
149
  */
150
150
  function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHandlerOpts): SequentialGossipHandlers {
151
151
  const {chain, config, metrics, logger, core} = modules;
152
+ const incompletePayloadWaits = new WeakSet<PayloadEnvelopeInput>();
153
+
154
+ function scheduleIncompletePayloadEnvelope(payloadInput: PayloadEnvelopeInput, peer: string): void {
155
+ if (payloadInput.isComplete() || incompletePayloadWaits.has(payloadInput)) {
156
+ return;
157
+ }
158
+ incompletePayloadWaits.add(payloadInput);
159
+
160
+ const fork = config.getForkName(payloadInput.slot);
161
+ const cutoffTimeMs = getCutoffTimeMs(chain, payloadInput.slot, config.getPayloadDueMs(fork));
162
+ payloadInput.waitForEnvelopeAndAllData(cutoffTimeMs).catch(() => {
163
+ if (
164
+ payloadInput.isComplete() ||
165
+ chain.seenPayloadEnvelopeInputCache.get(payloadInput.blockRootHex) !== payloadInput
166
+ ) {
167
+ return;
168
+ }
169
+ chain.logger.debug("Payload envelope incomplete at payload deadline", payloadInput.getLogMeta());
170
+ chain.emitter.emit(ChainEvent.incompletePayloadEnvelope, {
171
+ payloadInput,
172
+ peer,
173
+ source: BlockInputSource.gossip,
174
+ });
175
+ });
176
+ }
152
177
 
153
178
  /**
154
179
  * Add a gossip block to the seen caches. The proposer signature of the block MUST be verified.
@@ -295,90 +320,6 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
295
320
  }
296
321
  }
297
322
 
298
- async function validateBeaconBlob(
299
- blobSidecar: deneb.BlobSidecar,
300
- subnet: SubnetID,
301
- peerIdStr: string,
302
- seenTimestampSec: number
303
- ): Promise<BlockInput> {
304
- const blobBlockHeader = blobSidecar.signedBlockHeader.message;
305
- const slot = blobBlockHeader.slot;
306
- const fork = config.getForkName(slot);
307
- const blockRootHex = toRootHex(ssz.phase0.BeaconBlockHeader.hashTreeRoot(blobBlockHeader));
308
-
309
- const delaySec = chain.clock.secFromSlot(slot, seenTimestampSec);
310
- const recvToValLatency = Date.now() / 1000 - seenTimestampSec;
311
-
312
- try {
313
- await validateGossipBlobSidecar(fork, chain, blobSidecar, subnet);
314
- const blockInput = chain.seenBlockInputCache.getByBlob({
315
- blockRootHex,
316
- blobSidecar,
317
- source: BlockInputSource.gossip,
318
- seenTimestampSec,
319
- peerIdStr,
320
- });
321
- const recvToValidation = Date.now() / 1000 - seenTimestampSec;
322
- const validationTime = recvToValidation - recvToValLatency;
323
-
324
- metrics?.gossipBlob.recvToValidation.observe(recvToValidation);
325
- metrics?.gossipBlob.validationTime.observe(validationTime);
326
-
327
- if (chain.emitter.listenerCount(routes.events.EventType.blobSidecar)) {
328
- let versionedHash: Uint8Array;
329
- if (blockInput.hasBlock()) {
330
- // if block hasn't arrived yet then this will throw and need to calculate the versionedHash as a 1-off
331
- versionedHash = blockInput.getVersionedHashes()[blobSidecar.index];
332
- } else {
333
- versionedHash = kzgCommitmentToVersionedHash(blobSidecar.kzgCommitment);
334
- }
335
- chain.emitter.emit(routes.events.EventType.blobSidecar, {
336
- blockRoot: blockRootHex,
337
- slot,
338
- index: blobSidecar.index,
339
- kzgCommitment: toHex(blobSidecar.kzgCommitment),
340
- versionedHash: toHex(versionedHash),
341
- });
342
- }
343
-
344
- logger.debug("Received gossip blob", {
345
- ...blockInput.getLogMeta(),
346
- currentSlot: chain.clock.currentSlot,
347
- peerId: peerIdStr,
348
- delaySec,
349
- subnet,
350
- recvToValLatency,
351
- recvToValidation,
352
- validationTime,
353
- });
354
-
355
- return blockInput;
356
- } catch (e) {
357
- if (e instanceof BlobSidecarGossipError) {
358
- // Don't trigger this yet if full block and blobs haven't arrived yet
359
- if (e.type.code === BlobSidecarErrorCode.PARENT_UNKNOWN) {
360
- logger.debug("Gossip blob has error", {slot, root: blockRootHex, code: e.type.code});
361
- // no need to trigger `unknownBlockParent` event here, as we already did it in `validateBeaconBlock()`
362
- //
363
- // TODO(fulu): is this note above correct? Could have random blob that we see that could trigger
364
- // unknownBlockSync. And duplicate addition of a block will be deduplicated by the
365
- // BlockInputSync event handler. Check this!!
366
- // events.emit(NetworkEvent.unknownBlockParent, {blockInput, peer: peerIdStr});
367
- }
368
-
369
- if (e.action === GossipAction.REJECT) {
370
- chain.persistInvalidSszValue(
371
- ssz.deneb.BlobSidecar,
372
- blobSidecar,
373
- `gossip_reject_slot_${slot}_index_${blobSidecar.index}`
374
- );
375
- }
376
- }
377
-
378
- throw e;
379
- }
380
- }
381
-
382
323
  async function validateBeaconDataColumn(
383
324
  dataColumnSidecar: fulu.DataColumnSidecar,
384
325
  _dataColumnBytes: Uint8Array,
@@ -649,8 +590,6 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
649
590
  ignoreIfKnown: true,
650
591
  // proposer signature already checked in validateBeaconBlock()
651
592
  validProposerSignature: true,
652
- // blobSidecars already checked in validateGossipBlobSidecars()
653
- validBlobSidecars: BlobSidecarValidation.Individual,
654
593
  // It's critical to keep a good number of mesh peers.
655
594
  // To do that, the Gossip Job Wait Time should be consistently <3s to avoid the behavior penalties in gossip
656
595
  // Gossip Job Wait Time depends on the BLS Job Wait Time
@@ -678,10 +617,8 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
678
617
 
679
618
  // Immediately attempt fetch of data columns from execution engine as the bid contains kzg commitments
680
619
  // which is all the information we need so there is no reason to delay until execution payload arrives
681
- // TODO GLOAS: If we want EL retries after this initial attempt, add an explicit retry policy here
682
- // (for example later in the slot). Do not couple retries to incoming gossip columns.
683
- // Columns fetched here feed payloadInput.addColumn, which resolves waitForAllData for any
684
- // in-flight importExecutionPayload. No processExecutionPayload trigger needed from this path.
620
+ // Columns fetched here feed payloadInput.addColumn, which resolves the waitForAllData of a
621
+ // pending payload import. No processExecutionPayload trigger needed from this path.
685
622
  chain.getBlobsTracker.triggerGetBlobs(payloadInput);
686
623
  }
687
624
  })
@@ -691,11 +628,10 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
691
628
 
692
629
  if (e instanceof BlockError) {
693
630
  switch (e.type.code) {
694
- case BlockErrorCode.DATA_UNAVAILABLE: {
695
- // Error is quite frequent and not critical
631
+ case BlockErrorCode.DATA_UNAVAILABLE:
632
+ // Data did not arrive in time, BlockInputSync keeps pulling it and retries the import
696
633
  logLevel = LogLevel.debug;
697
634
  break;
698
- }
699
635
  // ALREADY_KNOWN should not happen with ignoreIfKnown=true above
700
636
  // PARENT_BLOCK_UNKNOWN should not happen, we handled this in validateBeaconBlock() function above
701
637
  case BlockErrorCode.ALREADY_KNOWN:
@@ -763,7 +699,12 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
763
699
  // roots per proposer and slot, which bounds full imports over gossip to one alternate
764
700
  chain.seenBlockProposers.hasBlockRoot(signedBlock.message.slot, e.type.proposerIndex, e.type.root) &&
765
701
  // A sibling with an unknown parent cannot be imported, sync fetches it if its branch becomes relevant
766
- chain.forkChoice.getBlockHexDefaultStatus(toRootHex(signedBlock.message.parentRoot)) !== null
702
+ chain.forkChoice.getBlockHexDefaultStatus(toRootHex(signedBlock.message.parentRoot)) !== null &&
703
+ (!isGloasBeaconBlock(signedBlock.message) ||
704
+ chain.forkChoice.getBlockHexAndBlockHash(
705
+ toRootHex(signedBlock.message.parentRoot),
706
+ toRootHex(signedBlock.message.body.signedExecutionPayloadBid.message.parentBlockHash)
707
+ ) !== null)
767
708
  ) {
768
709
  const blockInput = cacheSignatureVerifiedBlock(
769
710
  signedBlock,
@@ -784,57 +725,6 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
784
725
  }
785
726
  },
786
727
 
787
- [GossipType.blob_sidecar]: async ({
788
- gossipData,
789
- topic,
790
- peerIdStr,
791
- seenTimestampSec,
792
- }: GossipHandlerParamGeneric<GossipType.blob_sidecar>) => {
793
- const {serializedData} = gossipData;
794
- const blobSidecar = sszDeserialize(topic, serializedData);
795
- const blobSlot = blobSidecar.signedBlockHeader.message.slot;
796
- const index = blobSidecar.index;
797
-
798
- if (config.getForkSeq(blobSlot) < ForkSeq.deneb) {
799
- throw new GossipActionError(GossipAction.REJECT, {code: "PRE_DENEB_BLOCK"});
800
- }
801
- const blockInput = await validateBeaconBlob(blobSidecar, topic.subnet, peerIdStr, seenTimestampSec);
802
- // Handler - deferred to next event loop so the validation result propagates first
803
- callInNextEventLoop(() => {
804
- try {
805
- chain.serializedCache.set(blobSidecar, serializedData);
806
- if (!blockInput.hasBlockAndAllData()) {
807
- const cutoffTimeMs = getCutoffTimeMs(chain, blobSlot, BLOCK_AVAILABILITY_CUTOFF_MS);
808
- chain.logger.debug("Received gossip blob, waiting for full data availability", {
809
- msToWait: cutoffTimeMs,
810
- blobIndex: index,
811
- ...blockInput.getLogMeta(),
812
- });
813
- blockInput.waitForAllData(cutoffTimeMs).catch((_e) => {
814
- chain.logger.debug(
815
- "Waited for data after receiving gossip blob. Cut-off reached so attempting to fetch remainder of BlockInput",
816
- {
817
- blobIndex: index,
818
- ...blockInput.getLogMeta(),
819
- }
820
- );
821
- chain.emitter.emit(ChainEvent.incompleteBlockInput, {
822
- blockInput,
823
- peer: peerIdStr,
824
- source: BlockInputSource.gossip,
825
- });
826
- });
827
- }
828
- } catch (e) {
829
- logger.debug(
830
- "Error handling gossip blob",
831
- {slot: blobSlot, root: blockInput.blockRootHex, index},
832
- e as Error
833
- );
834
- }
835
- });
836
- },
837
-
838
728
  [GossipType.data_column_sidecar]: async ({
839
729
  gossipData,
840
730
  topic,
@@ -898,28 +788,10 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
898
788
  }
899
789
 
900
790
  // NOTE: we do NOT call chain.processExecutionPayload here. That is triggered only by
901
- // envelope arrival (gossip or API). An in-flight importExecutionPayload is awaiting
791
+ // envelope arrival (gossip or API). A pending payload import is awaiting
902
792
  // payloadInput.waitForAllData(); addColumn above will resolve it once hasAllData flips.
903
793
 
904
- if (!payloadInput.isComplete()) {
905
- const cutoffTimeMs = getCutoffTimeMs(chain, dataColumnSlot, BLOCK_AVAILABILITY_CUTOFF_MS);
906
- // do not await here to not delay gossip validation
907
- payloadInput.waitForEnvelopeAndAllData(cutoffTimeMs).catch((_e) => {
908
- chain.logger.debug(
909
- "Waited for envelope and data after receiving gossip column. Cut-off reached so emitting incompletePayloadEnvelope",
910
- {
911
- dataColumnIndex: index,
912
- ...payloadInputMeta,
913
- }
914
- );
915
- // TODO GLOAS: UnknownBlockSync to handle this event
916
- chain.emitter.emit(ChainEvent.incompletePayloadEnvelope, {
917
- payloadInput,
918
- peer: peerIdStr,
919
- source: BlockInputSource.gossip,
920
- });
921
- });
922
- }
794
+ scheduleIncompletePayloadEnvelope(payloadInput, peerIdStr);
923
795
  } catch (e) {
924
796
  logger.debug(
925
797
  "Error handling gossip data column",
@@ -1265,6 +1137,7 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
1265
1137
  seenTimestampSec,
1266
1138
  }: GossipHandlerParamGeneric<GossipType.execution_payload>) => {
1267
1139
  const {serializedData} = gossipData;
1140
+ validateGossipExecutionPayloadEnvelopeSerialized(chain, serializedData);
1268
1141
  const signedEnvelope = sszDeserialize(topic, serializedData);
1269
1142
  const envelope = signedEnvelope.message;
1270
1143
 
@@ -1317,17 +1190,23 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
1317
1190
  });
1318
1191
  }
1319
1192
 
1193
+ // Add the envelope in the same tick as validation, otherwise a by-root download that completes
1194
+ // before the next event loop sees no envelope, validates it again and adds it first
1195
+ if (!payloadInput.hasPayloadEnvelope()) {
1196
+ chain.serializedCache.set(signedEnvelope, serializedData);
1197
+
1198
+ payloadInput.addPayloadEnvelope({
1199
+ envelope: signedEnvelope,
1200
+ source: PayloadEnvelopeInputSource.gossip,
1201
+ seenTimestampSec,
1202
+ peerIdStr,
1203
+ });
1204
+ }
1205
+
1320
1206
  // Handler - deferred to next event loop so the validation result propagates first
1321
1207
  callInNextEventLoop(() => {
1322
1208
  try {
1323
- chain.serializedCache.set(signedEnvelope, serializedData);
1324
-
1325
- payloadInput.addPayloadEnvelope({
1326
- envelope: signedEnvelope,
1327
- source: PayloadEnvelopeInputSource.gossip,
1328
- seenTimestampSec,
1329
- peerIdStr,
1330
- });
1209
+ scheduleIncompletePayloadEnvelope(payloadInput, peerIdStr);
1331
1210
 
1332
1211
  chain.emitter.emit(routes.events.EventType.executionPayloadGossip, {
1333
1212
  slot,
@@ -1336,12 +1215,18 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
1336
1215
  blockRoot: blockRootHex,
1337
1216
  });
1338
1217
 
1339
- chain.processExecutionPayload(payloadInput, {validSignature: true}).catch((e) => {
1218
+ // Signature is verified above only for this envelope, one added by another source is verified at import
1219
+ const validSignature = payloadInput.getPayloadEnvelope() === signedEnvelope;
1220
+ chain.processExecutionPayload(payloadInput, {validSignature}).catch((e) => {
1340
1221
  // Adjust verbosity based on error type
1341
1222
  let logLevel: LogLevel;
1342
1223
 
1343
1224
  if (e instanceof PayloadError) {
1344
1225
  switch (e.type.code) {
1226
+ case PayloadErrorCode.DATA_UNAVAILABLE:
1227
+ // Columns did not arrive in time, BlockInputSync keeps pulling them and retries the import
1228
+ logLevel = LogLevel.debug;
1229
+ break;
1345
1230
  // BLOCK_NOT_IN_FORK_CHOICE should not happen, validateGossipExecutionPayloadEnvelope above
1346
1231
  // already verified the block is in fork choice
1347
1232
  case PayloadErrorCode.BLOCK_NOT_IN_FORK_CHOICE:
@@ -1350,11 +1235,17 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
1350
1235
  // Errors might indicate an issue with our node or the connected EL client
1351
1236
  logLevel = LogLevel.error;
1352
1237
  break;
1353
- // INVALID_SIGNATURE should not happen, signature is verified during gossip validation
1238
+ case PayloadErrorCode.BLOCK_EXECUTION_INVALID:
1239
+ logLevel = LogLevel.warn;
1240
+ break;
1241
+ // INVALID_SIGNATURE only happens for an envelope added by another source
1354
1242
  case PayloadErrorCode.INVALID_SIGNATURE:
1355
1243
  case PayloadErrorCode.ENVELOPE_VERIFICATION_ERROR:
1356
1244
  case PayloadErrorCode.EXECUTION_ENGINE_INVALID:
1357
- core.reportPeer(peerIdStr, PeerAction.LowToleranceError, "BadGossipPayload");
1245
+ // Penalize only when the stored envelope is the one this peer sent, not one added by another source
1246
+ if (validSignature) {
1247
+ core.reportPeer(peerIdStr, PeerAction.LowToleranceError, "BadGossipPayload");
1248
+ }
1358
1249
  // The builder may have signed another envelope that is valid, keeping this one would make
1359
1250
  // by-root and range sync reuse it and never import the payload
1360
1251
  chain.seenPayloadEnvelopeInputCache.removeInvalid(payloadInput);
@@ -1501,6 +1392,56 @@ function getSequentialHandlers(modules: ValidatorFnsModules, options: GossipHand
1501
1392
  }
1502
1393
  });
1503
1394
  },
1395
+
1396
+ [GossipType.inclusion_list]: async ({
1397
+ gossipData,
1398
+ topic,
1399
+ seenTimestampSec,
1400
+ }: GossipHandlerParamGeneric<GossipType.inclusion_list>) => {
1401
+ const {serializedData} = gossipData;
1402
+ const signedInclusionList = sszDeserialize(topic, serializedData);
1403
+ const {slot} = signedInclusionList.message;
1404
+
1405
+ metrics?.inclusionListsReceived.inc({source: InclusionListSource.gossip});
1406
+ metrics?.inclusionListTransactionsReceived.inc(
1407
+ {source: InclusionListSource.gossip},
1408
+ signedInclusionList.message.transactions.length
1409
+ );
1410
+
1411
+ const timer = metrics?.inclusionListsValidationTime.startTimer();
1412
+ let validationResult: InclusionListValidationResult;
1413
+ try {
1414
+ validationResult = await validateGossipInclusionList(chain, signedInclusionList);
1415
+ } finally {
1416
+ timer?.({source: InclusionListSource.gossip});
1417
+ }
1418
+ const {committeeIndices, totalBytes} = validationResult;
1419
+
1420
+ // Handler - deferred to next event loop so the validation result propagates first
1421
+ callInNextEventLoop(() => {
1422
+ try {
1423
+ metrics?.inclusionListsValid.inc({source: InclusionListSource.gossip});
1424
+ metrics?.inclusionListsValidSize.inc(totalBytes);
1425
+ // Timely only if received within its own slot before the deadline, so a list for the next slot that
1426
+ // passed validation under clock disparity is untimely. Late lists are still stored, marked untimely
1427
+ const secFromSlot = chain.clock.secFromSlot(slot, seenTimestampSec);
1428
+ metrics?.inclusionListArrivalTime.observe(secFromSlot);
1429
+ const isTimely =
1430
+ secFromSlot >= 0 && secFromSlot * 1000 < config.getInclusionListDueMs(config.getForkName(slot));
1431
+
1432
+ const insertOutcome = chain.inclusionListStore.process(signedInclusionList, committeeIndices, isTimely);
1433
+ metrics?.inclusionListStore.insertOutcome.inc({insertOutcome});
1434
+ metrics?.inclusionListStore.size.set(chain.inclusionListStore.size);
1435
+
1436
+ chain.emitter.emit(routes.events.EventType.inclusionList, {
1437
+ version: config.getForkName(slot),
1438
+ data: signedInclusionList,
1439
+ });
1440
+ } catch (e) {
1441
+ logger.debug("Error handling gossip inclusion list", {slot}, e as Error);
1442
+ }
1443
+ });
1444
+ },
1504
1445
  };
1505
1446
  }
1506
1447
 
@@ -1579,6 +1520,32 @@ function getBatchHandlers(modules: ValidatorFnsModules, options: GossipHandlerOp
1579
1520
  logger.debug("Error adding gossip unaggregated attestation to pool", {subnet}, e as Error);
1580
1521
  }
1581
1522
 
1523
+ // Collected only for vote slots that an upcoming block of a connected validator can include
1524
+ if (isForkPostElectra(fork) && chain.proposerTracker.shouldCollect(indexedAttestation.data.slot)) {
1525
+ try {
1526
+ const insertOutcome = chain.singleAttestationPool.add(
1527
+ attestation as SingleAttestation<ForkPostElectra>,
1528
+ attDataRootHex,
1529
+ validatorCommitteeIndex,
1530
+ committeeSize
1531
+ );
1532
+ metrics?.opPool.singleAttestationPool.gossipInsertOutcome.inc({insertOutcome});
1533
+ } catch (e) {
1534
+ logger.debug(
1535
+ "Error adding gossip single attestation to pool",
1536
+ {
1537
+ slot: indexedAttestation.data.slot,
1538
+ committeeIndex,
1539
+ validatorCommitteeIndex,
1540
+ validatorIndex: (attestation as SingleAttestation<ForkPostElectra>).attesterIndex,
1541
+ subnet,
1542
+ attDataRoot: attDataRootHex,
1543
+ },
1544
+ e as Error
1545
+ );
1546
+ }
1547
+ }
1548
+
1582
1549
  // Separate boundary: a pool insertion error above must not skip the fork-choice vote
1583
1550
  if (!options.dontSendGossipAttestationsToForkchoice) {
1584
1551
  try {
@@ -25,12 +25,6 @@ const linearGossipQueueOpts: {
25
25
  } = {
26
26
  // validation gossip block asap
27
27
  [GossipType.beacon_block]: {maxLength: 1024, type: QueueType.FIFO, dropOpts: {type: DropType.count, count: 1}},
28
- // gossip length for blob is beacon block length * max blobs per block = 4096
29
- [GossipType.blob_sidecar]: {
30
- maxLength: 4096,
31
- type: QueueType.FIFO,
32
- dropOpts: {type: DropType.count, count: 1},
33
- },
34
28
  [GossipType.data_column_sidecar]: {
35
29
  maxLength: 4096,
36
30
  type: QueueType.FIFO,
@@ -88,6 +82,12 @@ const linearGossipQueueOpts: {
88
82
  type: QueueType.FIFO,
89
83
  dropOpts: {type: DropType.count, count: 1},
90
84
  },
85
+ [GossipType.inclusion_list]: {
86
+ // 16 committee members, two lists each under the first-or-second-message rule, 32 per slot
87
+ maxLength: 1024,
88
+ type: QueueType.FIFO,
89
+ dropOpts: {type: DropType.count, count: 1},
90
+ },
91
91
  };
92
92
 
93
93
  const indexedGossipQueueOpts: {
@@ -5,7 +5,6 @@ import {
5
5
  AttestationError,
6
6
  AttestationErrorCode,
7
7
  AttesterSlashingErrorCode,
8
- BlobSidecarErrorCode,
9
8
  BlockErrorCode,
10
9
  BlsToExecutionChangeErrorCode,
11
10
  DataColumnSidecarErrorCode,
@@ -13,6 +12,7 @@ import {
13
12
  ExecutionPayloadEnvelopeErrorCode,
14
13
  GossipAction,
15
14
  GossipActionError,
15
+ InclusionListErrorCode,
16
16
  PayloadAttestationErrorCode,
17
17
  ProposerPreferencesErrorCode,
18
18
  ProposerSlashingErrorCode,
@@ -54,10 +54,6 @@ const gossipRejectPeerAction: Record<GossipType, RejectPeerActionRule> = {
54
54
  default: PeerAction.LowToleranceError,
55
55
  byCode: {[BlockErrorCode.PROPOSAL_SIGNATURE_INVALID]: PeerAction.Fatal},
56
56
  },
57
- [GossipType.blob_sidecar]: {
58
- default: PeerAction.LowToleranceError,
59
- byCode: {[BlobSidecarErrorCode.PROPOSAL_SIGNATURE_INVALID]: PeerAction.Fatal},
60
- },
61
57
  [GossipType.data_column_sidecar]: {
62
58
  default: PeerAction.LowToleranceError,
63
59
  byCode: {[DataColumnSidecarErrorCode.PROPOSAL_SIGNATURE_INVALID]: PeerAction.Fatal},
@@ -86,6 +82,10 @@ const gossipRejectPeerAction: Record<GossipType, RejectPeerActionRule> = {
86
82
  default: PeerAction.MidToleranceError,
87
83
  byCode: {[PayloadAttestationErrorCode.INVALID_SIGNATURE]: PeerAction.Fatal},
88
84
  },
85
+ [GossipType.inclusion_list]: {
86
+ default: PeerAction.MidToleranceError,
87
+ byCode: {[InclusionListErrorCode.INVALID_SIGNATURE]: PeerAction.Fatal},
88
+ },
89
89
  [GossipType.execution_payload_bid]: {
90
90
  default: PeerAction.HighToleranceError,
91
91
  byCode: {[ExecutionPayloadBidErrorCode.INVALID_SIGNATURE]: PeerAction.Fatal},