Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions crates/flashblocks/builder/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ where

let _enter = span.enter();

debug!(target: "payload_builder", "building new payload");
debug!(target: "flashblocks::payload_builder", "building new payload");

// 1. Prepare the db
let (bundle, receipts, transactions, gas_used, fees) = if let Some(payload) = &best_payload
Expand Down Expand Up @@ -295,7 +295,7 @@ where
})
.collect::<Result<Vec<_>, _>>()?;

trace!(target: "payload_builder", "using best payload");
trace!(target: "flashblocks::payload_builder", "using best payload");

(
execution_result.bundle.clone(),
Expand Down Expand Up @@ -371,7 +371,7 @@ where
execution_info.total_fees += U256::from(miner_fee) * U256::from(gas_used);
}
Err(e) => {
error!(target: "payload_builder", %e, "spend nullifiers transaction failed")
error!(target: "flashblocks::payload_builder", %e, "spend nullifiers transaction failed")
}
}
}
Expand All @@ -396,7 +396,7 @@ where
)?
.is_none()
{
warn!(target: "payload_builder", "payload build cancelled");
warn!(target: "flashblocks::payload_builder", "payload build cancelled");
if let Some(best_payload) = best_payload {
// we can return the previous best payload since we didn't include any new txs
return Ok(BuildOutcomeKind::Freeze(best_payload));
Expand Down
2 changes: 1 addition & 1 deletion crates/flashblocks/payload/src/generator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ where
if let Some(flashblock) = block {
if *flashblock.payload_id() == attributes.payload_id().0 {
// If we have a pre-confirmed state, we can use it to build the payload
debug!(target: "payload_builder", payload_id = %attributes.payload_id(), "Using pre-confirmed state for payload");
debug!(target: "flashblocks::payload_builder", payload_id = %attributes.payload_id(), "Using pre-confirmed state for payload");

let block: RecoveredBlock<Block<OpTxEnvelope>> =
flashblock.clone().try_into().map_err(|_| {
Expand Down
38 changes: 20 additions & 18 deletions crates/flashblocks/payload/src/job.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ where
/// This method creates a new build job using the current `best_payload` as the base,
/// allowing each successive build to improve upon the previous one.
pub(crate) fn spawn_build_job(&mut self) {
trace!(target: "payload_builder", id = %self.config.payload_id(), "spawn new payload build task");
trace!(target: "flashblocks::payload_builder", id = %self.config.payload_id(), "spawn new payload build task");
let (tx, rx) = oneshot::channel();
let cancel = CancelOnDrop::default();
let _cancel = cancel.clone();
Expand Down Expand Up @@ -150,14 +150,14 @@ where
.map_or(0, |p| p.block().body().transactions().count());

let flashblock = Flashblock::new(payload, self.config.clone(), self.block_index, offset);
trace!(target: "payload_builder", id=%self.config.payload_id(), "creating authorized flashblock");
trace!(target: "flashblocks::payload_builder", id=%self.config.payload_id(), "creating authorized flashblock");

let authorized_payload = self.authorization_for(flashblock.into_flashblock())?;

self.flashblocks_state
.publish_built_payload(authorized_payload, payload.to_owned())
.inspect_err(|err| {
error!(target: "payload_builder", id=%self.config.payload_id(), %err, "failed to publish new payload");
error!(target: "flashblocks::payload_builder", id=%self.config.payload_id(), %err, "failed to publish new payload");
})
}

Expand Down Expand Up @@ -223,12 +223,13 @@ where
/// The polling continues until either the deadline is reached or an error occurs, returning
/// [`Poll::Pending`] for ongoing work or [`Poll::Ready`] when complete.
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
let _span = span!(target: "payload_builder", tracing::Level::TRACE, "poll").entered();
let _span =
span!(target: "flashblocks::payload_builder", tracing::Level::TRACE, "poll").entered();
let _enter = _span.enter();
let this = self.get_mut();
// check if the deadline is reached
if this.deadline.as_mut().poll(cx).is_ready() {
trace!(target: "payload_builder", "payload building deadline reached");
trace!(target: "flashblocks::payload_builder", "payload building deadline reached");
return Poll::Ready(Ok(()));
}

Expand Down Expand Up @@ -264,7 +265,7 @@ where
this.best_payload = PayloadState::Best(payload.clone());
this.cached_reads = Some(cached_reads);

trace!(target: "payload_builder", current_value = %payload.fees(), "building new best payload");
trace!(target: "flashblocks::payload_builder", current_value = %payload.fees(), "building new best payload");

let block = payload.block();
let payload_bytes: usize = block
Expand All @@ -284,30 +285,30 @@ where
// publish the new payload to the p2p network
if let Err(err) = this.publish_payload(&payload, &prev.payload().cloned()) {
this.metrics.inc_p2p_publishing_errors();
error!(target: "payload_builder", %err, "failed to publish new payload to p2p network");
error!(target: "flashblocks::payload_builder", %err, "failed to publish new payload to p2p network");
} else {
trace!(target: "payload_builder", id=%this.config.payload_id(), "published new best payload to p2p network");
trace!(target: "flashblocks::payload_builder", id=%this.config.payload_id(), "published new best payload to p2p network");
}

// increment the pre-confirmation index
this.block_index += 1;
this.spawn_build_job();
}
BuildOutcome::Freeze(payload) => {
trace!(target: "payload_builder", "payload frozen, no further building will occur");
trace!(target: "flashblocks::payload_builder", "payload frozen, no further building will occur");
this.best_payload = PayloadState::Frozen(payload);
}
BuildOutcome::Aborted { fees, cached_reads } => {
this.cached_reads = Some(cached_reads);
trace!(target: "payload_builder", worse_fees = %fees, "skipped payload build of worse block");
trace!(target: "flashblocks::payload_builder", worse_fees = %fees, "skipped payload build of worse block");
}
BuildOutcome::Cancelled => {
unreachable!("the cancel signal never fired")
}
},
Poll::Ready(Err(error)) => {
// job failed, but we simply try again next interval
debug!(target: "payload_builder", %error, "payload build attempt failed");
debug!(target: "flashblocks::payload_builder", %error, "payload build attempt failed");
match &error {
PayloadBuilderError::EvmExecutionError(_) => {
this.metrics.inc_evm_execution_errors();
Expand Down Expand Up @@ -364,10 +365,10 @@ where

fn best_payload(&self) -> Result<Self::BuiltPayload, PayloadBuilderError> {
if let Some(payload) = self.best_payload.payload() {
trace!(target: "payload_builder", id=%self.config.payload_id(), value = %payload.fees(), "returning best payload");
trace!(target: "flashblocks::payload_builder", id=%self.config.payload_id(), value = %payload.fees(), "returning best payload");
Ok(payload.clone())
} else {
info!(target: "payload_builder", id=%self.config.payload_id(), "no best payload available, building empty payload");
info!(target: "flashblocks::payload_builder", id=%self.config.payload_id(), "no best payload available, building empty payload");
// No payload has been built yet, but we need to return something that the CL then
// can deliver, so we need to return an empty payload.
//
Expand Down Expand Up @@ -397,7 +398,7 @@ where
let mut empty_payload = None;

if best_payload.is_none() {
debug!(target: "payload_builder", id=%self.config.payload_id(), "no best payload yet to resolve, building empty payload");
debug!(target: "flashblocks::payload_builder", id=%self.config.payload_id(), "no best payload yet to resolve, building empty payload");

let args = BuildArguments {
cached_reads: self.cached_reads.take().unwrap_or_default(),
Expand All @@ -408,13 +409,14 @@ where

match self.builder.on_missing_payload(args) {
MissingPayloadBehaviour::AwaitInProgress => {
debug!(target: "payload_builder", id=%self.config.payload_id(), "awaiting in progress payload build job");
debug!(target: "flashblocks::payload_builder", id=%self.config.payload_id(), "awaiting in progress payload build job");
}
MissingPayloadBehaviour::RaceEmptyPayload => {
debug!(target: "payload_builder", id=%self.config.payload_id(), "racing empty payload");
debug!(target: "flashblocks::payload_builder", id=%self.config.payload_id(), "racing empty payload");

// if no payload has been built yet
// self.metrics.inc_requested_empty_payload();
self.metrics.inc_requested_empty_payload();

// no payload built yet, so we need to return an empty payload
let (tx, rx) = oneshot::channel();
let config = self.config.clone();
Expand All @@ -427,7 +429,7 @@ where
empty_payload = Some(rx);
}
MissingPayloadBehaviour::RacePayload(job) => {
debug!(target: "payload_builder", id=%self.config.payload_id(), "racing fallback payload");
debug!(target: "flashblocks::payload_builder", id=%self.config.payload_id(), "racing fallback payload");
// race the in progress job with this job
let (tx, rx) = oneshot::channel();
self.executor.spawn_blocking(Box::pin(async move {
Expand Down
6 changes: 3 additions & 3 deletions crates/flashblocks/rpc/src/engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,8 @@ use reth_chainspec::EthereumHardforks;
use reth_optimism_rpc::{OpEngineApi, OpEngineApiServer};
use reth_provider::{BlockReader, HeaderProvider, StateProviderFactory};
use reth_transaction_pool::TransactionPool;
use tracing::info;
use tracing::trace;

/// TODO: Extend Engine API with Authorized FCU Methods
#[derive(Debug, Clone)]
pub struct OpEngineApiExt<Provider, EngineT: EngineTypes, Pool, Validator, ChainSpec> {
/// The inner [`OpEngineApi`] instance that this extension wraps.
Expand Down Expand Up @@ -223,7 +222,8 @@ where
payload_attributes: Option<EngineT::PayloadAttributes>,
authorization: Option<Authorization>,
) -> RpcResult<ForkchoiceUpdated> {
info!(
trace!(
target: "flashblocks::rpc::engine",
?fork_choice_state,
"Received flashblocks_fork_choice_updated_v3"
);
Expand Down