Skip to content

Commit 31c149a

Browse files
perf: skip unchanged finalized block fetch and send
1 parent 8febe24 commit 31c149a

File tree

1 file changed

+37
-9
lines changed

1 file changed

+37
-9
lines changed

ethereum/src/consensus.rs

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -475,15 +475,43 @@ impl<S: ConsensusSpec, R: ConsensusRpc<S>> Inner<S, R> {
475475

476476
pub async fn send_blocks(&self) -> Result<()> {
477477
let slot = self.store.optimistic_header.beacon().slot;
478-
let payload = self.get_execution_payload(&Some(slot)).await?;
479-
let finalized_slot = self.store.finalized_header.beacon().slot;
480-
let finalized_payload = self.get_execution_payload(&Some(finalized_slot)).await?;
481-
482-
let block = payload_to_block(payload);
483-
let finalized_block = payload_to_block(finalized_payload);
484-
485-
self.block_send.send(block).await?;
486-
self.finalized_block_send.send(Some(finalized_block))?;
478+
let slot = Some(slot);
479+
480+
let latest_fin_hash = self
481+
.store
482+
.finalized_header
483+
.execution()
484+
.ok()
485+
.map(|h| *h.block_hash());
486+
let last_sent_fin_hash = self
487+
.finalized_block_send
488+
.borrow()
489+
.as_ref()
490+
.map(|b| b.header.hash);
491+
492+
let should_fetch_finalized = latest_fin_hash
493+
.zip(last_sent_fin_hash)
494+
.map_or(true, |(latest, sent)| latest != sent);
495+
496+
if should_fetch_finalized {
497+
let finalized_slot = self.store.finalized_header.beacon().slot;
498+
let finalized_slot = Some(finalized_slot);
499+
500+
let (payload, finalized_payload) = tokio::try_join!(
501+
self.get_execution_payload(&slot),
502+
self.get_execution_payload(&finalized_slot),
503+
)?;
504+
505+
let block = payload_to_block(payload);
506+
let finalized_block = payload_to_block(finalized_payload);
507+
508+
self.block_send.send(block).await?;
509+
self.finalized_block_send.send(Some(finalized_block))?;
510+
} else {
511+
let payload = self.get_execution_payload(&slot).await?;
512+
let block = payload_to_block(payload);
513+
self.block_send.send(block).await?;
514+
}
487515

488516
Ok(())
489517
}

0 commit comments

Comments
 (0)