@lodestar/beacon-node 1.50.0-dev.fef46df5ba → 1.50.0

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 (349) hide show
  1. package/lib/api/impl/beacon/blocks/index.d.ts.map +1 -1
  2. package/lib/api/impl/beacon/blocks/index.js +6 -1
  3. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  4. package/lib/api/impl/beacon/index.d.ts.map +1 -1
  5. package/lib/api/impl/beacon/index.js +13 -0
  6. package/lib/api/impl/beacon/index.js.map +1 -1
  7. package/lib/api/impl/beacon/pool/index.js +4 -4
  8. package/lib/api/impl/beacon/pool/index.js.map +1 -1
  9. package/lib/api/impl/beacon/state/index.d.ts.map +1 -1
  10. package/lib/api/impl/beacon/state/index.js +28 -6
  11. package/lib/api/impl/beacon/state/index.js.map +1 -1
  12. package/lib/api/impl/debug/index.d.ts.map +1 -1
  13. package/lib/api/impl/debug/index.js +26 -18
  14. package/lib/api/impl/debug/index.js.map +1 -1
  15. package/lib/api/impl/validator/index.d.ts +1 -0
  16. package/lib/api/impl/validator/index.d.ts.map +1 -1
  17. package/lib/api/impl/validator/index.js +49 -1
  18. package/lib/api/impl/validator/index.js.map +1 -1
  19. package/lib/chain/archiveStore/archiveStore.d.ts +5 -0
  20. package/lib/chain/archiveStore/archiveStore.d.ts.map +1 -1
  21. package/lib/chain/archiveStore/archiveStore.js +14 -24
  22. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  23. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts +2 -2
  24. package/lib/chain/archiveStore/historicalState/getHistoricalState.d.ts.map +1 -1
  25. package/lib/chain/archiveStore/historicalState/getHistoricalState.js +5 -7
  26. package/lib/chain/archiveStore/historicalState/getHistoricalState.js.map +1 -1
  27. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +1 -1
  28. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  29. package/lib/chain/archiveStore/historicalState/types.d.ts +2 -2
  30. package/lib/chain/archiveStore/historicalState/types.d.ts.map +1 -1
  31. package/lib/chain/archiveStore/historicalState/worker.js +1 -1
  32. package/lib/chain/archiveStore/historicalState/worker.js.map +1 -1
  33. package/lib/chain/archiveStore/interface.d.ts +1 -1
  34. package/lib/chain/archiveStore/interface.d.ts.map +1 -1
  35. package/lib/chain/archiveStore/utils/pruneHistory.d.ts +1 -1
  36. package/lib/chain/archiveStore/utils/pruneHistory.d.ts.map +1 -1
  37. package/lib/chain/archiveStore/utils/pruneHistory.js +2 -1
  38. package/lib/chain/archiveStore/utils/pruneHistory.js.map +1 -1
  39. package/lib/chain/beaconProposerCache.d.ts +6 -0
  40. package/lib/chain/beaconProposerCache.d.ts.map +1 -1
  41. package/lib/chain/beaconProposerCache.js +16 -0
  42. package/lib/chain/beaconProposerCache.js.map +1 -1
  43. package/lib/chain/blocks/importBlock.d.ts.map +1 -1
  44. package/lib/chain/blocks/importBlock.js +18 -8
  45. package/lib/chain/blocks/importBlock.js.map +1 -1
  46. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts +2 -1
  47. package/lib/chain/blocks/payloadEnvelopeInput/types.d.ts.map +1 -1
  48. package/lib/chain/blocks/verifyBlock.d.ts.map +1 -1
  49. package/lib/chain/blocks/verifyBlock.js +7 -7
  50. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  51. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +2 -1
  52. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts.map +1 -1
  53. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +5 -4
  54. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  55. package/lib/chain/chain.d.ts +10 -5
  56. package/lib/chain/chain.d.ts.map +1 -1
  57. package/lib/chain/chain.js +105 -36
  58. package/lib/chain/chain.js.map +1 -1
  59. package/lib/chain/emitter.d.ts +7 -1
  60. package/lib/chain/emitter.d.ts.map +1 -1
  61. package/lib/chain/emitter.js +5 -0
  62. package/lib/chain/emitter.js.map +1 -1
  63. package/lib/chain/errors/envelopeReconstructionError.d.ts +5 -0
  64. package/lib/chain/errors/envelopeReconstructionError.d.ts.map +1 -1
  65. package/lib/chain/errors/envelopeReconstructionError.js +2 -0
  66. package/lib/chain/errors/envelopeReconstructionError.js.map +1 -1
  67. package/lib/chain/errors/gossipValidation.d.ts +3 -1
  68. package/lib/chain/errors/gossipValidation.d.ts.map +1 -1
  69. package/lib/chain/errors/gossipValidation.js +2 -0
  70. package/lib/chain/errors/gossipValidation.js.map +1 -1
  71. package/lib/chain/forkChoice/index.d.ts.map +1 -1
  72. package/lib/chain/forkChoice/index.js +2 -0
  73. package/lib/chain/forkChoice/index.js.map +1 -1
  74. package/lib/chain/interface.d.ts +5 -2
  75. package/lib/chain/interface.d.ts.map +1 -1
  76. package/lib/chain/opPools/aggregatedAttestationPool.d.ts +4 -2
  77. package/lib/chain/opPools/aggregatedAttestationPool.d.ts.map +1 -1
  78. package/lib/chain/opPools/aggregatedAttestationPool.js +30 -8
  79. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  80. package/lib/chain/opPools/opPool.d.ts +5 -4
  81. package/lib/chain/opPools/opPool.d.ts.map +1 -1
  82. package/lib/chain/opPools/opPool.js +60 -38
  83. package/lib/chain/opPools/opPool.js.map +1 -1
  84. package/lib/chain/opPools/proposerPreferencesPool.d.ts +8 -4
  85. package/lib/chain/opPools/proposerPreferencesPool.d.ts.map +1 -1
  86. package/lib/chain/opPools/proposerPreferencesPool.js +27 -12
  87. package/lib/chain/opPools/proposerPreferencesPool.js.map +1 -1
  88. package/lib/chain/opPools/utils.d.ts +15 -1
  89. package/lib/chain/opPools/utils.d.ts.map +1 -1
  90. package/lib/chain/opPools/utils.js +33 -1
  91. package/lib/chain/opPools/utils.js.map +1 -1
  92. package/lib/chain/options.d.ts +2 -1
  93. package/lib/chain/options.d.ts.map +1 -1
  94. package/lib/chain/options.js +1 -1
  95. package/lib/chain/options.js.map +1 -1
  96. package/lib/chain/prepareNextSlot.d.ts.map +1 -1
  97. package/lib/chain/prepareNextSlot.js +16 -5
  98. package/lib/chain/prepareNextSlot.js.map +1 -1
  99. package/lib/chain/produceBlock/computeNewStateRoot.js +1 -1
  100. package/lib/chain/produceBlock/computeNewStateRoot.js.map +1 -1
  101. package/lib/chain/produceBlock/produceBlockBody.d.ts +11 -1
  102. package/lib/chain/produceBlock/produceBlockBody.d.ts.map +1 -1
  103. package/lib/chain/produceBlock/produceBlockBody.js +46 -30
  104. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  105. package/lib/chain/regen/regen.d.ts +2 -0
  106. package/lib/chain/regen/regen.d.ts.map +1 -1
  107. package/lib/chain/regen/regen.js +10 -4
  108. package/lib/chain/regen/regen.js.map +1 -1
  109. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +7 -0
  110. package/lib/chain/seenCache/seenGossipBlockInput.d.ts.map +1 -1
  111. package/lib/chain/seenCache/seenGossipBlockInput.js +21 -0
  112. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  113. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts +9 -2
  114. package/lib/chain/seenCache/seenPayloadEnvelopeInput.d.ts.map +1 -1
  115. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js +23 -13
  116. package/lib/chain/seenCache/seenPayloadEnvelopeInput.js.map +1 -1
  117. package/lib/chain/shufflingCache.d.ts +18 -8
  118. package/lib/chain/shufflingCache.d.ts.map +1 -1
  119. package/lib/chain/shufflingCache.js +72 -18
  120. package/lib/chain/shufflingCache.js.map +1 -1
  121. package/lib/chain/validation/attesterSlashing.d.ts +4 -4
  122. package/lib/chain/validation/attesterSlashing.d.ts.map +1 -1
  123. package/lib/chain/validation/attesterSlashing.js +3 -0
  124. package/lib/chain/validation/attesterSlashing.js.map +1 -1
  125. package/lib/chain/validation/proposerSlashing.d.ts +3 -3
  126. package/lib/chain/validation/proposerSlashing.d.ts.map +1 -1
  127. package/lib/chain/validation/proposerSlashing.js +3 -0
  128. package/lib/chain/validation/proposerSlashing.js.map +1 -1
  129. package/lib/chain/validatorMonitor.d.ts +5 -1
  130. package/lib/chain/validatorMonitor.d.ts.map +1 -1
  131. package/lib/chain/validatorMonitor.js +64 -54
  132. package/lib/chain/validatorMonitor.js.map +1 -1
  133. package/lib/db/beacon.d.ts +4 -1
  134. package/lib/db/beacon.d.ts.map +1 -1
  135. package/lib/db/beacon.js +6 -1
  136. package/lib/db/beacon.js.map +1 -1
  137. package/lib/db/buckets.d.ts +3 -1
  138. package/lib/db/buckets.d.ts.map +1 -1
  139. package/lib/db/buckets.js +2 -0
  140. package/lib/db/buckets.js.map +1 -1
  141. package/lib/db/interface.d.ts +4 -1
  142. package/lib/db/interface.d.ts.map +1 -1
  143. package/lib/db/repositories/blockArchiveIndex.d.ts +2 -2
  144. package/lib/db/repositories/blockArchiveIndex.d.ts.map +1 -1
  145. package/lib/db/repositories/earliestAvailableSlot.d.ts +11 -0
  146. package/lib/db/repositories/earliestAvailableSlot.d.ts.map +1 -0
  147. package/lib/db/repositories/earliestAvailableSlot.js +19 -0
  148. package/lib/db/repositories/earliestAvailableSlot.js.map +1 -0
  149. package/lib/db/repositories/index.d.ts +1 -0
  150. package/lib/db/repositories/index.d.ts.map +1 -1
  151. package/lib/db/repositories/index.js +1 -0
  152. package/lib/db/repositories/index.js.map +1 -1
  153. package/lib/db/repositories/proposerPreferences.d.ts +14 -0
  154. package/lib/db/repositories/proposerPreferences.d.ts.map +1 -0
  155. package/lib/db/repositories/proposerPreferences.js +21 -0
  156. package/lib/db/repositories/proposerPreferences.js.map +1 -0
  157. package/lib/db/repositories/proposerSlashing.d.ts +1 -0
  158. package/lib/db/repositories/proposerSlashing.d.ts.map +1 -1
  159. package/lib/db/repositories/proposerSlashing.js +5 -1
  160. package/lib/db/repositories/proposerSlashing.js.map +1 -1
  161. package/lib/execution/engine/blobVersionedHashes.d.ts +9 -0
  162. package/lib/execution/engine/blobVersionedHashes.d.ts.map +1 -0
  163. package/lib/execution/engine/blobVersionedHashes.js +74 -0
  164. package/lib/execution/engine/blobVersionedHashes.js.map +1 -0
  165. package/lib/execution/engine/disabled.d.ts +0 -2
  166. package/lib/execution/engine/disabled.d.ts.map +1 -1
  167. package/lib/execution/engine/disabled.js +0 -6
  168. package/lib/execution/engine/disabled.js.map +1 -1
  169. package/lib/execution/engine/http.d.ts +46 -16
  170. package/lib/execution/engine/http.d.ts.map +1 -1
  171. package/lib/execution/engine/http.js +236 -213
  172. package/lib/execution/engine/http.js.map +1 -1
  173. package/lib/execution/engine/index.d.ts +3 -2
  174. package/lib/execution/engine/index.d.ts.map +1 -1
  175. package/lib/execution/engine/index.js +33 -8
  176. package/lib/execution/engine/index.js.map +1 -1
  177. package/lib/execution/engine/interface.d.ts +2 -4
  178. package/lib/execution/engine/interface.d.ts.map +1 -1
  179. package/lib/execution/engine/jsonRpcTransport.d.ts +25 -0
  180. package/lib/execution/engine/jsonRpcTransport.d.ts.map +1 -0
  181. package/lib/execution/engine/jsonRpcTransport.js +158 -0
  182. package/lib/execution/engine/jsonRpcTransport.js.map +1 -0
  183. package/lib/execution/engine/mock.d.ts +0 -2
  184. package/lib/execution/engine/mock.d.ts.map +1 -1
  185. package/lib/execution/engine/mock.js +0 -8
  186. package/lib/execution/engine/mock.js.map +1 -1
  187. package/lib/execution/engine/restHttpClient.d.ts +71 -0
  188. package/lib/execution/engine/restHttpClient.d.ts.map +1 -0
  189. package/lib/execution/engine/restHttpClient.js +201 -0
  190. package/lib/execution/engine/restHttpClient.js.map +1 -0
  191. package/lib/execution/engine/restTransport.d.ts +46 -0
  192. package/lib/execution/engine/restTransport.d.ts.map +1 -0
  193. package/lib/execution/engine/restTransport.js +399 -0
  194. package/lib/execution/engine/restTransport.js.map +1 -0
  195. package/lib/execution/engine/sszTypes.d.ts +1261 -0
  196. package/lib/execution/engine/sszTypes.d.ts.map +1 -0
  197. package/lib/execution/engine/sszTypes.js +216 -0
  198. package/lib/execution/engine/sszTypes.js.map +1 -0
  199. package/lib/execution/engine/transport.d.ts +39 -0
  200. package/lib/execution/engine/transport.d.ts.map +1 -0
  201. package/lib/execution/engine/transport.js +2 -0
  202. package/lib/execution/engine/transport.js.map +1 -0
  203. package/lib/execution/engine/types.d.ts +2 -8
  204. package/lib/execution/engine/types.d.ts.map +1 -1
  205. package/lib/execution/engine/types.js +24 -57
  206. package/lib/execution/engine/types.js.map +1 -1
  207. package/lib/execution/engine/utils.d.ts.map +1 -1
  208. package/lib/execution/engine/utils.js +9 -2
  209. package/lib/execution/engine/utils.js.map +1 -1
  210. package/lib/metrics/metrics/lodestar.d.ts +10 -0
  211. package/lib/metrics/metrics/lodestar.d.ts.map +1 -1
  212. package/lib/metrics/metrics/lodestar.js +22 -0
  213. package/lib/metrics/metrics/lodestar.js.map +1 -1
  214. package/lib/metrics/metrics.d.ts +7 -3
  215. package/lib/metrics/metrics.d.ts.map +1 -1
  216. package/lib/metrics/metrics.js +4 -4
  217. package/lib/metrics/metrics.js.map +1 -1
  218. package/lib/network/core/events.d.ts +5 -1
  219. package/lib/network/core/events.d.ts.map +1 -1
  220. package/lib/network/core/events.js +8 -0
  221. package/lib/network/core/events.js.map +1 -1
  222. package/lib/network/processor/gossipHandlers.d.ts.map +1 -1
  223. package/lib/network/processor/gossipHandlers.js +67 -68
  224. package/lib/network/processor/gossipHandlers.js.map +1 -1
  225. package/lib/network/processor/gossipValidatorFn.d.ts +7 -3
  226. package/lib/network/processor/gossipValidatorFn.d.ts.map +1 -1
  227. package/lib/network/processor/gossipValidatorFn.js +7 -3
  228. package/lib/network/processor/gossipValidatorFn.js.map +1 -1
  229. package/lib/network/processor/index.d.ts +9 -0
  230. package/lib/network/processor/index.d.ts.map +1 -1
  231. package/lib/network/processor/index.js +77 -10
  232. package/lib/network/processor/index.js.map +1 -1
  233. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js +1 -1
  234. package/lib/network/reqresp/handlers/executionPayloadEnvelopesByRoot.js.map +1 -1
  235. package/lib/node/nodejs.d.ts +3 -1
  236. package/lib/node/nodejs.d.ts.map +1 -1
  237. package/lib/node/nodejs.js +27 -4
  238. package/lib/node/nodejs.js.map +1 -1
  239. package/lib/node/options.d.ts +3 -2
  240. package/lib/node/options.d.ts.map +1 -1
  241. package/lib/node/options.js +2 -2
  242. package/lib/node/options.js.map +1 -1
  243. package/lib/sync/range/batch.d.ts +11 -5
  244. package/lib/sync/range/batch.d.ts.map +1 -1
  245. package/lib/sync/range/batch.js +21 -17
  246. package/lib/sync/range/batch.js.map +1 -1
  247. package/lib/sync/range/chain.d.ts +4 -4
  248. package/lib/sync/range/chain.d.ts.map +1 -1
  249. package/lib/sync/range/chain.js +12 -6
  250. package/lib/sync/range/chain.js.map +1 -1
  251. package/lib/sync/range/range.d.ts.map +1 -1
  252. package/lib/sync/range/range.js +75 -29
  253. package/lib/sync/range/range.js.map +1 -1
  254. package/lib/sync/unknownBlock.d.ts +5 -2
  255. package/lib/sync/unknownBlock.d.ts.map +1 -1
  256. package/lib/sync/unknownBlock.js +49 -24
  257. package/lib/sync/unknownBlock.js.map +1 -1
  258. package/lib/sync/utils/downloadByRange.d.ts +38 -14
  259. package/lib/sync/utils/downloadByRange.d.ts.map +1 -1
  260. package/lib/sync/utils/downloadByRange.js +84 -39
  261. package/lib/sync/utils/downloadByRange.js.map +1 -1
  262. package/lib/util/asyncIterableToEvents.d.ts +10 -2
  263. package/lib/util/asyncIterableToEvents.d.ts.map +1 -1
  264. package/lib/util/asyncIterableToEvents.js +29 -3
  265. package/lib/util/asyncIterableToEvents.js.map +1 -1
  266. package/lib/util/execution.d.ts +9 -11
  267. package/lib/util/execution.d.ts.map +1 -1
  268. package/lib/util/execution.js +5 -1
  269. package/lib/util/execution.js.map +1 -1
  270. package/lib/util/metadata.d.ts.map +1 -1
  271. package/lib/util/metadata.js +2 -1
  272. package/lib/util/metadata.js.map +1 -1
  273. package/package.json +18 -17
  274. package/src/api/impl/beacon/blocks/index.ts +7 -4
  275. package/src/api/impl/beacon/index.ts +15 -0
  276. package/src/api/impl/beacon/pool/index.ts +4 -4
  277. package/src/api/impl/beacon/state/index.ts +43 -6
  278. package/src/api/impl/debug/index.ts +28 -19
  279. package/src/api/impl/validator/index.ts +61 -2
  280. package/src/chain/archiveStore/archiveStore.ts +19 -25
  281. package/src/chain/archiveStore/historicalState/getHistoricalState.ts +5 -7
  282. package/src/chain/archiveStore/historicalState/historicalStateRegen.ts +1 -1
  283. package/src/chain/archiveStore/historicalState/types.ts +2 -2
  284. package/src/chain/archiveStore/historicalState/worker.ts +1 -2
  285. package/src/chain/archiveStore/interface.ts +1 -1
  286. package/src/chain/archiveStore/utils/pruneHistory.ts +4 -1
  287. package/src/chain/beaconProposerCache.ts +19 -1
  288. package/src/chain/blocks/importBlock.ts +21 -7
  289. package/src/chain/blocks/payloadEnvelopeInput/types.ts +2 -1
  290. package/src/chain/blocks/verifyBlock.ts +8 -6
  291. package/src/chain/blocks/verifyBlocksStateTransitionOnly.ts +6 -3
  292. package/src/chain/chain.ts +135 -38
  293. package/src/chain/emitter.ts +7 -1
  294. package/src/chain/errors/envelopeReconstructionError.ts +3 -0
  295. package/src/chain/errors/gossipValidation.ts +2 -0
  296. package/src/chain/forkChoice/index.ts +2 -0
  297. package/src/chain/interface.ts +5 -2
  298. package/src/chain/opPools/aggregatedAttestationPool.ts +34 -10
  299. package/src/chain/opPools/opPool.ts +89 -46
  300. package/src/chain/opPools/proposerPreferencesPool.ts +34 -11
  301. package/src/chain/opPools/utils.ts +62 -3
  302. package/src/chain/options.ts +3 -3
  303. package/src/chain/prepareNextSlot.ts +21 -6
  304. package/src/chain/produceBlock/computeNewStateRoot.ts +1 -1
  305. package/src/chain/produceBlock/produceBlockBody.ts +76 -35
  306. package/src/chain/regen/regen.ts +12 -4
  307. package/src/chain/seenCache/seenGossipBlockInput.ts +23 -0
  308. package/src/chain/seenCache/seenPayloadEnvelopeInput.ts +31 -13
  309. package/src/chain/shufflingCache.ts +84 -22
  310. package/src/chain/validation/attesterSlashing.ts +7 -4
  311. package/src/chain/validation/proposerSlashing.ts +7 -4
  312. package/src/chain/validatorMonitor.ts +75 -57
  313. package/src/db/beacon.ts +6 -0
  314. package/src/db/buckets.ts +2 -0
  315. package/src/db/interface.ts +4 -0
  316. package/src/db/repositories/earliestAvailableSlot.ts +19 -0
  317. package/src/db/repositories/index.ts +1 -0
  318. package/src/db/repositories/proposerPreferences.ts +23 -0
  319. package/src/db/repositories/proposerSlashing.ts +6 -1
  320. package/src/execution/engine/blobVersionedHashes.ts +72 -0
  321. package/src/execution/engine/disabled.ts +0 -8
  322. package/src/execution/engine/http.ts +304 -300
  323. package/src/execution/engine/index.ts +41 -7
  324. package/src/execution/engine/interface.ts +2 -6
  325. package/src/execution/engine/jsonRpcTransport.ts +247 -0
  326. package/src/execution/engine/mock.ts +1 -19
  327. package/src/execution/engine/restHttpClient.ts +269 -0
  328. package/src/execution/engine/restTransport.ts +544 -0
  329. package/src/execution/engine/sszTypes.ts +354 -0
  330. package/src/execution/engine/transport.ts +61 -0
  331. package/src/execution/engine/types.ts +34 -84
  332. package/src/execution/engine/utils.ts +12 -2
  333. package/src/metrics/metrics/lodestar.ts +23 -0
  334. package/src/metrics/metrics.ts +21 -6
  335. package/src/network/core/events.ts +16 -1
  336. package/src/network/processor/gossipHandlers.ts +98 -81
  337. package/src/network/processor/gossipValidatorFn.ts +13 -3
  338. package/src/network/processor/index.ts +89 -10
  339. package/src/network/reqresp/handlers/executionPayloadEnvelopesByRoot.ts +1 -1
  340. package/src/node/nodejs.ts +35 -3
  341. package/src/node/options.ts +10 -1
  342. package/src/sync/range/batch.ts +25 -19
  343. package/src/sync/range/chain.ts +15 -8
  344. package/src/sync/range/range.ts +76 -30
  345. package/src/sync/unknownBlock.ts +62 -25
  346. package/src/sync/utils/downloadByRange.ts +123 -58
  347. package/src/util/asyncIterableToEvents.ts +44 -5
  348. package/src/util/execution.ts +16 -8
  349. package/src/util/metadata.ts +2 -1
@@ -1,11 +1,9 @@
1
1
  import { GENESIS_EPOCH } from "@lodestar/params";
2
2
  import { getAttestingIndices, getBeaconCommittees, getIndexedAttestation, } from "@lodestar/state-transition";
3
- import { LodestarError, MapDef, pruneSetToMax } from "@lodestar/utils";
3
+ import { LodestarError, MapDef } from "@lodestar/utils";
4
4
  /**
5
- * Same value to CheckpointBalancesCache, with the assumption that we don't have to use it for old epochs. In the worse case:
6
- * - when loading state bytes from disk, we need to compute shuffling for all epochs (~1s as of Sep 2023)
7
- * - don't have shuffling to verify attestations, need to do 1 epoch transition to add shuffling to this cache. This never happens
8
- * with default chain option of maxSkipSlots = 32
5
+ * Lookahead duties, gossip validation, and block production need epochs n-1, n, and n+1 for current epoch n.
6
+ * Keep the 4 highest epochs so that it works for epoch rotation.
9
7
  **/
10
8
  const MAX_EPOCHS = 4;
11
9
  /**
@@ -18,16 +16,20 @@ var CacheItemType;
18
16
  CacheItemType[CacheItemType["shuffling"] = 0] = "shuffling";
19
17
  CacheItemType[CacheItemType["promise"] = 1] = "promise";
20
18
  })(CacheItemType || (CacheItemType = {}));
19
+ export var ShufflingPromiseCancelReason;
20
+ (function (ShufflingPromiseCancelReason) {
21
+ ShufflingPromiseCancelReason["regenError"] = "regen_error";
22
+ ShufflingPromiseCancelReason["decisionRootMismatch"] = "decision_root_mismatch";
23
+ ShufflingPromiseCancelReason["pruned"] = "pruned";
24
+ })(ShufflingPromiseCancelReason || (ShufflingPromiseCancelReason = {}));
21
25
  /**
22
- * A shuffling cache to help:
23
- * - get committee quickly for attestation verification
24
- * - if a shuffling is not available (which does not happen with default chain option of maxSkipSlots = 32), track a promise to make sure we don't compute the same shuffling twice
25
- * - skip computing shuffling when loading state bytes from disk
26
+ * Cache recent epoch shufflings for lookahead duties, gossip validation, and block production.
27
+ * Pending promises deduplicate computation of missing shufflings.
26
28
  */
27
29
  export class ShufflingCache {
28
30
  metrics;
29
31
  logger;
30
- /** LRU cache implemented as a map, pruned every time we add an item */
32
+ /** Pruned to the `maxEpochs` highest epochs every time we add a shuffling */
31
33
  itemsByDecisionRootByEpoch = new MapDef(() => new Map());
32
34
  maxEpochs;
33
35
  constructor(metrics = null, logger = null, opts = {}, precalculatedShufflings) {
@@ -35,6 +37,7 @@ export class ShufflingCache {
35
37
  this.logger = logger;
36
38
  if (metrics) {
37
39
  metrics.shufflingCache.size.addCollect(() => metrics.shufflingCache.size.set(Array.from(this.itemsByDecisionRootByEpoch.values()).reduce((total, innerMap) => total + innerMap.size, 0)));
40
+ metrics.shufflingCache.epochs.addCollect(() => metrics.shufflingCache.epochs.set(this.itemsByDecisionRootByEpoch.size));
38
41
  }
39
42
  this.maxEpochs = opts.maxShufflingCacheEpochs ?? MAX_EPOCHS;
40
43
  precalculatedShufflings?.map(({ shuffling, decisionRoot }) => {
@@ -76,7 +79,7 @@ export class ShufflingCache {
76
79
  * Return null if we don't have a shuffling for this epoch and dependentRootHex.
77
80
  */
78
81
  async get(epoch, decisionRoot) {
79
- const cacheItem = this.itemsByDecisionRootByEpoch.getOrDefault(epoch).get(decisionRoot);
82
+ const cacheItem = this.itemsByDecisionRootByEpoch.get(epoch)?.get(decisionRoot);
80
83
  if (cacheItem === undefined) {
81
84
  this.metrics?.shufflingCache.miss.inc();
82
85
  return null;
@@ -89,12 +92,10 @@ export class ShufflingCache {
89
92
  return cacheItem.promise;
90
93
  }
91
94
  /**
92
- * Get a shuffling synchronously, return null if not present.
93
- * The only time we have a promise cache item is when we regen shuffling for attestation, which never happens
94
- * with default chain option.
95
+ * Get a shuffling synchronously, return null if not present or if it's still being computed.
95
96
  */
96
97
  getSync(epoch, decisionRoot) {
97
- const cacheItem = this.itemsByDecisionRootByEpoch.getOrDefault(epoch).get(decisionRoot);
98
+ const cacheItem = this.itemsByDecisionRootByEpoch.get(epoch)?.get(decisionRoot);
98
99
  if (cacheItem === undefined) {
99
100
  this.metrics?.shufflingCache.miss.inc();
100
101
  return null;
@@ -111,7 +112,7 @@ export class ShufflingCache {
111
112
  * `NativeBeaconStateView`.
112
113
  */
113
114
  has(epoch, decisionRoot) {
114
- const cacheItem = this.itemsByDecisionRootByEpoch.getOrDefault(epoch).get(decisionRoot);
115
+ const cacheItem = this.itemsByDecisionRootByEpoch.get(epoch)?.get(decisionRoot);
115
116
  return cacheItem !== undefined && isShufflingCacheItem(cacheItem);
116
117
  }
117
118
  /**
@@ -131,6 +132,23 @@ export class ShufflingCache {
131
132
  this.set(state.getNextShuffling(), state.nextDecisionRoot);
132
133
  }
133
134
  }
135
+ /**
136
+ * Resolve a pending promise with null so that waiters don't hang, then remove it.
137
+ */
138
+ cancelPromise(epoch, decisionRoot, reason) {
139
+ const itemsByDecisionRoot = this.itemsByDecisionRootByEpoch.get(epoch);
140
+ const cacheItem = itemsByDecisionRoot?.get(decisionRoot);
141
+ if (itemsByDecisionRoot === undefined || cacheItem === undefined || !isPromiseCacheItem(cacheItem)) {
142
+ return;
143
+ }
144
+ cacheItem.resolveFn(null);
145
+ itemsByDecisionRoot.delete(decisionRoot);
146
+ if (itemsByDecisionRoot.size === 0) {
147
+ this.itemsByDecisionRootByEpoch.delete(epoch);
148
+ }
149
+ this.metrics?.shufflingCache.cancelledPromises.inc({ reason });
150
+ this.logger?.debug("Cancelled shuffling promise", { epoch, decisionRoot, reason });
151
+ }
134
152
  getIndexedAttestation(epoch, decisionRoot, fork, attestation) {
135
153
  const shuffling = this.getShufflingOrThrow(epoch, decisionRoot);
136
154
  return getIndexedAttestation(shuffling, fork, attestation);
@@ -142,6 +160,10 @@ export class ShufflingCache {
142
160
  getBeaconCommittee(epoch, decisionRoot, slot, index) {
143
161
  return this.getBeaconCommittees(epoch, decisionRoot, slot, [index])[0];
144
162
  }
163
+ getBeaconCommitteeOrNull(epoch, decisionRoot, slot, index) {
164
+ const shuffling = this.getSync(epoch, decisionRoot);
165
+ return shuffling === null ? null : getBeaconCommittees(shuffling, slot, [index])[0];
166
+ }
145
167
  getBeaconCommittees(epoch, decisionRoot, slot, indices) {
146
168
  const shuffling = this.getShufflingOrThrow(epoch, decisionRoot);
147
169
  return getBeaconCommittees(shuffling, slot, indices);
@@ -177,8 +199,40 @@ export class ShufflingCache {
177
199
  }
178
200
  // set the shuffling
179
201
  shufflingAtEpoch.set(decisionRoot, { type: CacheItemType.shuffling, shuffling });
180
- // prune the cache
181
- pruneSetToMax(this.itemsByDecisionRootByEpoch, this.maxEpochs);
202
+ this.prune();
203
+ }
204
+ /**
205
+ * Keep the `maxEpochs` highest epochs, regardless of insertion order.
206
+ */
207
+ prune() {
208
+ const toDelete = this.itemsByDecisionRootByEpoch.size - this.maxEpochs;
209
+ if (toDelete <= 0) {
210
+ return;
211
+ }
212
+ const prunedEpochs = Array.from(this.itemsByDecisionRootByEpoch.keys())
213
+ .sort((a, b) => a - b)
214
+ .slice(0, toDelete);
215
+ let prunedShufflings = 0;
216
+ for (const epoch of prunedEpochs) {
217
+ for (const cacheItem of this.itemsByDecisionRootByEpoch.get(epoch)?.values() ?? []) {
218
+ if (isPromiseCacheItem(cacheItem)) {
219
+ cacheItem.resolveFn(null);
220
+ this.metrics?.shufflingCache.cancelledPromises.inc({ reason: ShufflingPromiseCancelReason.pruned });
221
+ }
222
+ else {
223
+ prunedShufflings++;
224
+ }
225
+ }
226
+ this.itemsByDecisionRootByEpoch.delete(epoch);
227
+ }
228
+ this.metrics?.shufflingCache.prunedShufflings.inc(prunedShufflings);
229
+ this.logger?.verbose("Pruned shuffling cache", {
230
+ prunedEpochs: prunedEpochs.join(","),
231
+ prunedShufflings,
232
+ cachedEpochs: Array.from(this.itemsByDecisionRootByEpoch.keys())
233
+ .sort((a, b) => a - b)
234
+ .join(","),
235
+ });
182
236
  }
183
237
  }
184
238
  function isShufflingCacheItem(item) {
@@ -1 +1 @@
1
- {"version":3,"file":"shufflingCache.js","sourceRoot":"","sources":["../../src/chain/shufflingCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shufflingCache.js","sourceRoot":"","sources":["../../src/chain/shufflingCache.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { AttesterSlashing } from "@lodestar/types";
1
+ import { AttesterSlashing, Domain } from "@lodestar/types";
2
2
  import { IBeaconChain } from "../index.js";
3
- export declare function validateApiAttesterSlashing(chain: IBeaconChain, attesterSlashing: AttesterSlashing): Promise<void>;
4
- export declare function validateGossipAttesterSlashing(chain: IBeaconChain, attesterSlashing: AttesterSlashing): Promise<void>;
5
- export declare function validateAttesterSlashing(chain: IBeaconChain, attesterSlashing: AttesterSlashing, prioritizeBls?: boolean): Promise<void>;
3
+ export declare function validateApiAttesterSlashing(chain: IBeaconChain, attesterSlashing: AttesterSlashing): Promise<[Domain, Domain]>;
4
+ export declare function validateGossipAttesterSlashing(chain: IBeaconChain, attesterSlashing: AttesterSlashing): Promise<[Domain, Domain]>;
5
+ export declare function validateAttesterSlashing(chain: IBeaconChain, attesterSlashing: AttesterSlashing, prioritizeBls?: boolean): Promise<[Domain, Domain]>;
6
6
  //# sourceMappingURL=attesterSlashing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attesterSlashing.d.ts","sourceRoot":"","sources":["../../../src/chain/validation/attesterSlashing.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAEzC,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,UAAQ,GACpB,OAAO,CAAC,IAAI,CAAC,CAuCf"}
1
+ {"version":3,"file":"attesterSlashing.d.ts","sourceRoot":"","sources":["../../../src/chain/validation/attesterSlashing.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,gBAAgB,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAGzC,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAG3B;AAED,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAE3B;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,UAAQ,GACpB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAyC3B"}
@@ -1,5 +1,6 @@
1
1
  import { assertValidAttesterSlashing, getAttesterSlashableIndices, getAttesterSlashingSignatureSets, isSlashableValidator, } from "@lodestar/state-transition";
2
2
  import { AttesterSlashingError, AttesterSlashingErrorCode, GossipAction } from "../errors/index.js";
3
+ import { getAttesterSlashingSignatureDomains } from "../opPools/utils.js";
3
4
  export async function validateApiAttesterSlashing(chain, attesterSlashing) {
4
5
  const prioritizeBls = true;
5
6
  return validateAttesterSlashing(chain, attesterSlashing, prioritizeBls);
@@ -38,10 +39,12 @@ export async function validateAttesterSlashing(chain, attesterSlashing, prioriti
38
39
  });
39
40
  }
40
41
  const signatureSets = getAttesterSlashingSignatureSets(chain.config, state.slot, attesterSlashing);
42
+ const verifiedDomains = getAttesterSlashingSignatureDomains(chain.config, state.slot, attesterSlashing);
41
43
  if (!(await chain.bls.verifySignatureSets(signatureSets, { batchable: true, priority: prioritizeBls }))) {
42
44
  throw new AttesterSlashingError(GossipAction.REJECT, {
43
45
  code: AttesterSlashingErrorCode.INVALID_SIGNATURE,
44
46
  });
45
47
  }
48
+ return verifiedDomains;
46
49
  }
47
50
  //# sourceMappingURL=attesterSlashing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attesterSlashing.js","sourceRoot":"","sources":["../../../src/chain/validation/attesterSlashing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAC,qBAAqB,EAAE,yBAAyB,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAGlG,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAmB,EACnB,gBAAkC;IAElC,MAAM,aAAa,GAAG,IAAI,CAAC;IAC3B,OAAO,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,KAAmB,EACnB,gBAAkC;IAElC,OAAO,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAmB,EACnB,gBAAkC,EAClC,aAAa,GAAG,KAAK;IAErB,qHAAqH;IACrH,uCAAuC;IACvC,iHAAiH;IACjH,+FAA+F;IAC/F,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,gBAAgB,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,cAAc;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IAEnC,mFAAmF;IACnF,IAAI,CAAC;QACH,mDAAmD;QACnD,2BAA2B,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACvG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,OAAO;YACvC,KAAK,EAAE,CAAU;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;IACjC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,OAAO;YACvC,KAAK,EAAE,KAAK,CAAC,8CAA8C,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAAG,gCAAgC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACnG,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAC,CAAC,CAAC,EAAE,CAAC;QACtG,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,iBAAiB;SAClD,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"attesterSlashing.js","sourceRoot":"","sources":["../../../src/chain/validation/attesterSlashing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAC,qBAAqB,EAAE,yBAAyB,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAElG,OAAO,EAAC,mCAAmC,EAAC,MAAM,qBAAqB,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAmB,EACnB,gBAAkC;IAElC,MAAM,aAAa,GAAG,IAAI,CAAC;IAC3B,OAAO,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,KAAmB,EACnB,gBAAkC;IAElC,OAAO,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAAmB,EACnB,gBAAkC,EAClC,aAAa,GAAG,KAAK;IAErB,qHAAqH;IACrH,uCAAuC;IACvC,iHAAiH;IACjH,+FAA+F;IAC/F,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,gBAAgB,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,cAAc;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IAEnC,mFAAmF;IACnF,IAAI,CAAC;QACH,mDAAmD;QACnD,2BAA2B,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACvG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,OAAO;YACvC,KAAK,EAAE,CAAU;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;IACjC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,OAAO;YACvC,KAAK,EAAE,KAAK,CAAC,8CAA8C,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAAG,gCAAgC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACnG,MAAM,eAAe,GAAG,mCAAmC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACxG,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAC,CAAC,CAAC,EAAE,CAAC;QACtG,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,iBAAiB;SAClD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -1,5 +1,5 @@
1
- import { phase0 } from "@lodestar/types";
1
+ import { Domain, phase0 } from "@lodestar/types";
2
2
  import { IBeaconChain } from "../index.js";
3
- export declare function validateApiProposerSlashing(chain: IBeaconChain, proposerSlashing: phase0.ProposerSlashing): Promise<void>;
4
- export declare function validateGossipProposerSlashing(chain: IBeaconChain, proposerSlashing: phase0.ProposerSlashing): Promise<void>;
3
+ export declare function validateApiProposerSlashing(chain: IBeaconChain, proposerSlashing: phase0.ProposerSlashing): Promise<Domain>;
4
+ export declare function validateGossipProposerSlashing(chain: IBeaconChain, proposerSlashing: phase0.ProposerSlashing): Promise<Domain>;
5
5
  //# sourceMappingURL=proposerSlashing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proposerSlashing.d.ts","sourceRoot":"","sources":["../../../src/chain/validation/proposerSlashing.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAEzC,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,GACxC,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,GACxC,OAAO,CAAC,IAAI,CAAC,CAEf"}
1
+ {"version":3,"file":"proposerSlashing.d.ts","sourceRoot":"","sources":["../../../src/chain/validation/proposerSlashing.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAC,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAGzC,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,GACxC,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,GACxC,OAAO,CAAC,MAAM,CAAC,CAEjB"}
@@ -1,5 +1,6 @@
1
1
  import { assertValidProposerSlashing, getProposerSlashingSignatureSets } from "@lodestar/state-transition";
2
2
  import { GossipAction, ProposerSlashingError, ProposerSlashingErrorCode } from "../errors/index.js";
3
+ import { getProposerSlashingSignatureDomain } from "../opPools/utils.js";
3
4
  export async function validateApiProposerSlashing(chain, proposerSlashing) {
4
5
  const prioritizeBls = true;
5
6
  return validateProposerSlashing(chain, proposerSlashing, prioritizeBls);
@@ -29,10 +30,12 @@ async function validateProposerSlashing(chain, proposerSlashing, prioritizeBls =
29
30
  });
30
31
  }
31
32
  const signatureSets = getProposerSlashingSignatureSets(chain.config, state.slot, proposerSlashing);
33
+ const verifiedDomain = getProposerSlashingSignatureDomain(chain.config, state.slot, proposerSlashing);
32
34
  if (!(await chain.bls.verifySignatureSets(signatureSets, { batchable: true, priority: prioritizeBls }))) {
33
35
  throw new ProposerSlashingError(GossipAction.REJECT, {
34
36
  code: ProposerSlashingErrorCode.INVALID_SIGNATURE,
35
37
  });
36
38
  }
39
+ return verifiedDomain;
37
40
  }
38
41
  //# sourceMappingURL=proposerSlashing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"proposerSlashing.js","sourceRoot":"","sources":["../../../src/chain/validation/proposerSlashing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,2BAA2B,EAAE,gCAAgC,EAAC,MAAM,4BAA4B,CAAC;AAEzG,OAAO,EAAC,YAAY,EAAE,qBAAqB,EAAE,yBAAyB,EAAC,MAAM,oBAAoB,CAAC;AAGlG,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAmB,EACnB,gBAAyC;IAEzC,MAAM,aAAa,GAAG,IAAI,CAAC;IAC3B,OAAO,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,KAAmB,EACnB,gBAAyC;IAEzC,OAAO,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,KAAmB,EACnB,gBAAyC,EACzC,aAAa,GAAG,KAAK;IAErB,2GAA2G;IAC3G,4DAA4D;IAC5D,IAAI,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/F,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,cAAc;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IAEnC,mFAAmF;IACnF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1F,mDAAmD;QACnD,2BAA2B,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,OAAO;YACvC,KAAK,EAAE,CAAU;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAAG,gCAAgC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACnG,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAC,CAAC,CAAC,EAAE,CAAC;QACtG,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,iBAAiB;SAClD,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"proposerSlashing.js","sourceRoot":"","sources":["../../../src/chain/validation/proposerSlashing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,2BAA2B,EAAE,gCAAgC,EAAC,MAAM,4BAA4B,CAAC;AAEzG,OAAO,EAAC,YAAY,EAAE,qBAAqB,EAAE,yBAAyB,EAAC,MAAM,oBAAoB,CAAC;AAElG,OAAO,EAAC,kCAAkC,EAAC,MAAM,qBAAqB,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAmB,EACnB,gBAAyC;IAEzC,MAAM,aAAa,GAAG,IAAI,CAAC;IAC3B,OAAO,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,KAAmB,EACnB,gBAAyC;IAEzC,OAAO,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,KAAmB,EACnB,gBAAyC,EACzC,aAAa,GAAG,KAAK;IAErB,2GAA2G;IAC3G,4DAA4D;IAC5D,IAAI,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/F,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,cAAc;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IAEnC,mFAAmF;IACnF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1F,mDAAmD;QACnD,2BAA2B,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,OAAO;YACvC,KAAK,EAAE,CAAU;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAAG,gCAAgC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACnG,MAAM,cAAc,GAAG,kCAAkC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACtG,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAC,CAAC,CAAC,EAAE,CAAC;QACtG,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;YACnD,IAAI,EAAE,yBAAyB,CAAC,iBAAiB;SAClD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -35,8 +35,12 @@ export type ValidatorMonitorOpts = {
35
35
  /** Log validator monitor events as info */
36
36
  validatorMonitorLogs?: boolean;
37
37
  };
38
+ export type NativeValidatorMonitor = {
39
+ registerLocalValidator(index: ValidatorIndex): void;
40
+ unregisterLocalValidator(index: ValidatorIndex): void;
41
+ };
38
42
  export declare const defaultValidatorMonitorOpts: ValidatorMonitorOpts;
39
- export declare function createValidatorMonitor(metricsRegister: RegistryMetricCreator | null, config: ChainForkConfig, genesisTime: number, logger: Logger, opts: ValidatorMonitorOpts): ValidatorMonitor;
43
+ export declare function createValidatorMonitor(metricsRegister: RegistryMetricCreator | null, config: ChainForkConfig, genesisTime: number, logger: Logger, opts: ValidatorMonitorOpts, nativeValidatorMonitor?: NativeValidatorMonitor | null): ValidatorMonitor;
40
44
  /**
41
45
  * Cache to prevent accessing the state tree to fetch block roots repeteadly.
42
46
  * In normal network conditions the same root is read multiple times, specially the target.
@@ -1 +1 @@
1
- {"version":3,"file":"validatorMonitor.d.ts","sourceRoot":"","sources":["../../src/chain/validatorMonitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validatorMonitor.d.ts","sourceRoot":"","sources":["../../src/chain/validatorMonitor.ts"],"names":[],"mappings":"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"}
@@ -70,7 +70,7 @@ function getEpochSummary(validator, epoch) {
70
70
  }
71
71
  return summary;
72
72
  }
73
- export function createValidatorMonitor(metricsRegister, config, genesisTime, logger, opts) {
73
+ export function createValidatorMonitor(metricsRegister, config, genesisTime, logger, opts, nativeValidatorMonitor = null) {
74
74
  const logLevel = opts.validatorMonitorLogs ? LogLevel.info : LogLevel.debug;
75
75
  const log = (message, context) => {
76
76
  logger[logLevel](message, context);
@@ -90,15 +90,20 @@ export function createValidatorMonitor(metricsRegister, config, genesisTime, log
90
90
  lastRegisteredTimeMs: 0,
91
91
  }));
92
92
  let lastRegisteredStatusEpoch = -1;
93
+ let lastAttestationSummaryEpoch = -1;
93
94
  // Track validator additions/removals per epoch for logging
94
95
  const addedValidatorsInEpoch = new Set();
95
96
  const removedValidatorsInEpoch = new Set();
96
- const validatorMonitorMetrics = metricsRegister ? createValidatorMonitorMetrics(metricsRegister) : null;
97
+ const shouldRegisterStateDerivedMetrics = nativeValidatorMonitor === null;
98
+ const validatorMonitorMetrics = metricsRegister
99
+ ? createValidatorMonitorMetrics(metricsRegister, shouldRegisterStateDerivedMetrics)
100
+ : null;
97
101
  const validatorMonitor = {
98
102
  registerLocalValidator(index) {
99
103
  const isNewValidator = !validators.has(index);
100
104
  validators.getOrDefault(index).lastRegisteredTimeMs = Date.now();
101
105
  if (isNewValidator) {
106
+ nativeValidatorMonitor?.registerLocalValidator(index);
102
107
  addedValidatorsInEpoch.add(index);
103
108
  }
104
109
  },
@@ -121,7 +126,7 @@ export function createValidatorMonitor(metricsRegister, config, genesisTime, log
121
126
  }
122
127
  // Track total balance instead of per-validator balance to reduce metric cardinality
123
128
  let totalBalance = 0;
124
- for (const [index, monitoredValidator] of validators.entries()) {
129
+ for (const index of validators.keys()) {
125
130
  // We subtract two from the state of the epoch that generated these summaries.
126
131
  //
127
132
  // - One to account for it being the previous epoch.
@@ -129,66 +134,30 @@ export function createValidatorMonitor(metricsRegister, config, genesisTime, log
129
134
  // statuses.
130
135
  const summary = statusToSummary(inclusionDelays[index], flags[index], isActiveCurrEpoch[index], isActiveInPrevEpoch[index]);
131
136
  if (summary.isPrevSourceAttester) {
132
- validatorMonitorMetrics?.prevEpochOnChainSourceAttesterHit.inc();
137
+ validatorMonitorMetrics?.prevEpochOnChainSourceAttesterHit?.inc();
133
138
  }
134
139
  else {
135
- validatorMonitorMetrics?.prevEpochOnChainSourceAttesterMiss.inc();
140
+ validatorMonitorMetrics?.prevEpochOnChainSourceAttesterMiss?.inc();
136
141
  }
137
142
  if (summary.isPrevHeadAttester) {
138
- validatorMonitorMetrics?.prevEpochOnChainHeadAttesterHit.inc();
143
+ validatorMonitorMetrics?.prevEpochOnChainHeadAttesterHit?.inc();
139
144
  }
140
145
  else {
141
- validatorMonitorMetrics?.prevEpochOnChainHeadAttesterMiss.inc();
146
+ validatorMonitorMetrics?.prevEpochOnChainHeadAttesterMiss?.inc();
142
147
  }
143
148
  if (summary.isPrevTargetAttester) {
144
- validatorMonitorMetrics?.prevEpochOnChainTargetAttesterHit.inc();
149
+ validatorMonitorMetrics?.prevEpochOnChainTargetAttesterHit?.inc();
145
150
  }
146
151
  else {
147
- validatorMonitorMetrics?.prevEpochOnChainTargetAttesterMiss.inc();
148
- }
149
- const prevEpochSummary = monitoredValidator.summaries.get(previousEpoch);
150
- const attestationCorrectHead = prevEpochSummary?.attestationCorrectHead;
151
- if (attestationCorrectHead !== null && attestationCorrectHead !== undefined) {
152
- if (attestationCorrectHead) {
153
- validatorMonitorMetrics?.prevOnChainAttesterCorrectHead.inc();
154
- }
155
- else {
156
- validatorMonitorMetrics?.prevOnChainAttesterIncorrectHead.inc();
157
- }
158
- }
159
- const attestationMinBlockInclusionDistance = prevEpochSummary?.attestationMinBlockInclusionDistance;
160
- const inclusionDistance = attestationMinBlockInclusionDistance != null && attestationMinBlockInclusionDistance > 0
161
- ? // altair, attestation is not missed
162
- attestationMinBlockInclusionDistance
163
- : summary.inclusionDistance
164
- ? // phase0, this is from the state transition
165
- summary.inclusionDistance
166
- : null;
167
- if (inclusionDistance !== null) {
168
- validatorMonitorMetrics?.prevEpochOnChainInclusionDistance.observe(inclusionDistance);
169
- validatorMonitorMetrics?.prevEpochOnChainAttesterHit.inc();
170
- }
171
- else {
172
- validatorMonitorMetrics?.prevEpochOnChainAttesterMiss.inc();
152
+ validatorMonitorMetrics?.prevEpochOnChainTargetAttesterMiss?.inc();
173
153
  }
174
154
  const balance = balances?.[index];
175
155
  if (balance !== undefined) {
176
156
  totalBalance += balance;
177
157
  }
178
- if (!summary.isPrevSourceAttester || !summary.isPrevTargetAttester || !summary.isPrevHeadAttester) {
179
- log("Failed attestation in previous epoch", {
180
- validator: index,
181
- prevEpoch: currentEpoch - 1,
182
- isPrevSourceAttester: summary.isPrevSourceAttester,
183
- isPrevHeadAttester: summary.isPrevHeadAttester,
184
- isPrevTargetAttester: summary.isPrevTargetAttester,
185
- // inclusionDistance is not available in summary since altair
186
- inclusionDistance,
187
- });
188
- }
189
158
  }
190
159
  if (balances !== undefined) {
191
- validatorMonitorMetrics?.prevEpochOnChainBalance.set(totalBalance);
160
+ validatorMonitorMetrics?.prevEpochOnChainBalance?.set(totalBalance);
192
161
  }
193
162
  },
194
163
  registerBeaconBlock(src, delaySec, block) {
@@ -436,6 +405,7 @@ export function createValidatorMonitor(metricsRegister, config, genesisTime, log
436
405
  // Prune validators not seen in a while
437
406
  for (const [index, validator] of validators.entries()) {
438
407
  if (Date.now() - validator.lastRegisteredTimeMs > retainRegisteredValidatorsMs) {
408
+ nativeValidatorMonitor?.unregisterLocalValidator(index);
439
409
  validators.delete(index);
440
410
  removedValidatorsInEpoch.add(index);
441
411
  }
@@ -464,6 +434,35 @@ export function createValidatorMonitor(metricsRegister, config, genesisTime, log
464
434
  if (validators.size === 0) {
465
435
  return;
466
436
  }
437
+ // On-chain attestation summary of prevEpoch. Reads only the epoch summaries filled by
438
+ // registerAttestationInBlock(), so it works with both TS and native state transition.
439
+ if (prevEpoch > lastAttestationSummaryEpoch) {
440
+ lastAttestationSummaryEpoch = prevEpoch;
441
+ for (const monitoredValidator of validators.values()) {
442
+ const prevEpochSummary = monitoredValidator.summaries.get(prevEpoch);
443
+ const attestationCorrectHead = prevEpochSummary?.attestationCorrectHead;
444
+ if (attestationCorrectHead !== null && attestationCorrectHead !== undefined) {
445
+ if (attestationCorrectHead) {
446
+ validatorMonitorMetrics?.prevOnChainAttesterCorrectHead.inc();
447
+ }
448
+ else {
449
+ validatorMonitorMetrics?.prevOnChainAttesterIncorrectHead.inc();
450
+ }
451
+ }
452
+ const attestationMinBlockInclusionDistance = prevEpochSummary?.attestationMinBlockInclusionDistance;
453
+ const inclusionDistance = attestationMinBlockInclusionDistance != null && attestationMinBlockInclusionDistance > 0
454
+ ? // altair, attestation is not missed
455
+ attestationMinBlockInclusionDistance
456
+ : null;
457
+ if (inclusionDistance !== null) {
458
+ validatorMonitorMetrics?.prevEpochOnChainInclusionDistance.observe(inclusionDistance);
459
+ validatorMonitorMetrics?.prevEpochOnChainAttesterHit.inc();
460
+ }
461
+ else {
462
+ validatorMonitorMetrics?.prevEpochOnChainAttesterMiss.inc();
463
+ }
464
+ }
465
+ }
467
466
  const rootCache = new RootHexCache(headState);
468
467
  if (isStatePostAltair(headState)) {
469
468
  const prevEpochStartSlot = computeStartSlotAtEpoch(prevEpoch);
@@ -479,6 +478,16 @@ export function createValidatorMonitor(metricsRegister, config, genesisTime, log
479
478
  epoch: prevEpoch,
480
479
  summary,
481
480
  });
481
+ if (!flags.timelySource || !flags.timelyTarget || !flags.timelyHead) {
482
+ log("Failed attestation in previous epoch", {
483
+ validator: index,
484
+ prevEpoch,
485
+ isPrevSourceAttester: flags.timelySource,
486
+ isPrevHeadAttester: flags.timelyHead,
487
+ isPrevTargetAttester: flags.timelyTarget,
488
+ inclusionDistance: validator.summaries.get(prevEpoch)?.attestationMinBlockInclusionDistance ?? null,
489
+ });
490
+ }
482
491
  }
483
492
  }
484
493
  if (headState.previousProposers !== null) {
@@ -813,7 +822,8 @@ export class RootHexCache {
813
822
  return root;
814
823
  }
815
824
  }
816
- function createValidatorMonitorMetrics(register) {
825
+ function createValidatorMonitorMetrics(register, registerStateDerivedMetrics = true) {
826
+ const stateDerivedRegister = registerStateDerivedMetrics ? register : null;
817
827
  return {
818
828
  validatorsConnected: register.gauge({
819
829
  name: "validator_monitor_validators",
@@ -829,7 +839,7 @@ function createValidatorMonitorMetrics(register) {
829
839
  help: "Count of validators monitored by this beacon node that are part of sync committee",
830
840
  }),
831
841
  // Validator Monitor Metrics (per-epoch summaries)
832
- prevEpochOnChainBalance: register.gauge({
842
+ prevEpochOnChainBalance: stateDerivedRegister?.gauge({
833
843
  name: "validator_monitor_prev_epoch_on_chain_balance",
834
844
  help: "Total balance of all monitored validators after an epoch",
835
845
  }),
@@ -841,19 +851,19 @@ function createValidatorMonitorMetrics(register) {
841
851
  name: "validator_monitor_prev_epoch_on_chain_attester_miss_total",
842
852
  help: "Incremented if validator's submitted attestation is not included in any blocks",
843
853
  }),
844
- prevEpochOnChainSourceAttesterHit: register.gauge({
854
+ prevEpochOnChainSourceAttesterHit: stateDerivedRegister?.gauge({
845
855
  name: "validator_monitor_prev_epoch_on_chain_source_attester_hit_total",
846
856
  help: "Incremented if the validator is flagged as a previous epoch source attester during per epoch processing",
847
857
  }),
848
- prevEpochOnChainSourceAttesterMiss: register.gauge({
858
+ prevEpochOnChainSourceAttesterMiss: stateDerivedRegister?.gauge({
849
859
  name: "validator_monitor_prev_epoch_on_chain_source_attester_miss_total",
850
860
  help: "Incremented if the validator is not flagged as a previous epoch source attester during per epoch processing",
851
861
  }),
852
- prevEpochOnChainHeadAttesterHit: register.gauge({
862
+ prevEpochOnChainHeadAttesterHit: stateDerivedRegister?.gauge({
853
863
  name: "validator_monitor_prev_epoch_on_chain_head_attester_hit_total",
854
864
  help: "Incremented if the validator is flagged as a previous epoch head attester during per epoch processing",
855
865
  }),
856
- prevEpochOnChainHeadAttesterMiss: register.gauge({
866
+ prevEpochOnChainHeadAttesterMiss: stateDerivedRegister?.gauge({
857
867
  name: "validator_monitor_prev_epoch_on_chain_head_attester_miss_total",
858
868
  help: "Incremented if the validator is not flagged as a previous epoch head attester during per epoch processing",
859
869
  }),
@@ -865,11 +875,11 @@ function createValidatorMonitorMetrics(register) {
865
875
  name: "validator_monitor_prev_epoch_on_chain_attester_incorrect_head_total",
866
876
  help: "Total count of times a validator votes incorrect head",
867
877
  }),
868
- prevEpochOnChainTargetAttesterHit: register.gauge({
878
+ prevEpochOnChainTargetAttesterHit: stateDerivedRegister?.gauge({
869
879
  name: "validator_monitor_prev_epoch_on_chain_target_attester_hit_total",
870
880
  help: "Incremented if the validator is flagged as a previous epoch target attester during per epoch processing",
871
881
  }),
872
- prevEpochOnChainTargetAttesterMiss: register.gauge({
882
+ prevEpochOnChainTargetAttesterMiss: stateDerivedRegister?.gauge({
873
883
  name: "validator_monitor_prev_epoch_on_chain_target_attester_miss_total",
874
884
  help: "Incremented if the validator is not flagged as a previous epoch target attester during per epoch processing",
875
885
  }),