1616 ../ el/ el_manager,
1717 ../ spec/ [helpers, forks],
1818 ../ consensus_object_pools/ [
19- blob_quarantine, block_clearance, block_quarantine, blockchain_dag ,
20- attestation_pool, light_client_pool ,
21- sync_committee_msg_pool, validator_change_pool],
19+ attestation_pool, blob_quarantine, block_clearance ,
20+ block_quarantine, blockchain_dag, envelope_quarantine ,
21+ light_client_pool, sync_committee_msg_pool, validator_change_pool],
2222 ../ validators/ validator_pool,
2323 ../ beacon_clock,
2424 " ." / [gossip_validation, block_processor, batch_validation],
@@ -45,6 +45,10 @@ declareCounter beacon_blocks_received,
4545 " Number of valid blocks processed by this node"
4646declareCounter beacon_blocks_dropped,
4747 " Number of invalid blocks dropped by this node" , labels = [" reason" ]
48+ declareCounter execution_payload_envelopes_received,
49+ " Number of valid execution payload envelope processed by this node"
50+ declareCounter execution_payload_envelopes_dropped,
51+ " Number of invalid execution payload envelope dropped by this node" , labels = [" reason" ]
4852declareCounter blob_sidecars_received,
4953 " Number of valid blobs processed by this node"
5054declareCounter blob_sidecars_dropped,
@@ -93,6 +97,9 @@ declareHistogram beacon_aggregate_delay,
9397declareHistogram beacon_block_delay,
9498 " Time(s) between slot start and beacon block reception" , buckets = delayBuckets
9599
100+ declareHistogram execution_payload_envelope_delay,
101+ " Time(s) between slot start and execution payload envelope reception" , buckets = delayBuckets
102+
96103declareHistogram blob_sidecar_delay,
97104 " Time(s) between slot start and blob sidecar reception" , buckets = delayBuckets
98105
157164
158165 dataColumnQuarantine* : ref ColumnQuarantine
159166
167+ envelopeQuarantine* : ref EnvelopeQuarantine
168+
160169 # Application-provided current time provider (to facilitate testing)
161170 getCurrentBeaconTime* : GetBeaconTimeFn
162171
@@ -291,6 +300,37 @@ proc processSignedBeaconBlock*(
291300
292301 ok ()
293302
303+ proc processExecutionPayloadEnvelope * (
304+ self: var Eth2Processor , src: MsgSource ,
305+ signedEnvelope: SignedExecutionPayloadEnvelope ): ValidationRes =
306+ let
307+ wallTime = self.getCurrentBeaconTime ()
308+ (afterGenesis, wallSlot) = wallTime.toSlot (self.dag.timeParams)
309+
310+ logScope:
311+ blockRoot = shortLog (signedEnvelope.message.beacon_block_root)
312+ envelope = shortLog (signedEnvelope.message)
313+ wallSlot
314+
315+ if not afterGenesis:
316+ notice " Execution payload envelope before genesis"
317+ return errIgnore (" Execution payload envelope before genesis" )
318+
319+ let delay = wallTime -
320+ signedEnvelope.message.slot.start_beacon_time (self.dag.timeParams)
321+
322+ self.dag.validateExecutionPayload (
323+ self.quarantine, self.envelopeQuarantine, signedEnvelope).isOkOr:
324+ execution_payload_envelopes_dropped.inc (1 , [$ error[0 ]])
325+ return err (error)
326+
327+ debugGloasComment (" process execution payload" )
328+
329+ execution_payload_envelopes_received.inc ()
330+ execution_payload_envelope_delay.observe (delay.toFloatSeconds ())
331+
332+ ok ()
333+
294334proc processBlobSidecar * (
295335 self: var Eth2Processor , src: MsgSource ,
296336 blobSidecar: deneb.BlobSidecar , subnet_id: BlobId ): ValidationRes =
0 commit comments