From 80eefda72c99985187dfa08806166dcfd89ed834 Mon Sep 17 00:00:00 2001 From: julio4 <30329843+julio4@users.noreply.github.com> Date: Tue, 20 Jan 2026 10:02:23 +0900 Subject: [PATCH] feat(logs): flashblock target and events with payload_id --- .../rollup-boost/src/flashblocks/service.rs | 29 ++++++++++++++----- crates/rollup-boost/src/server.rs | 18 ++++++++++-- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/crates/rollup-boost/src/flashblocks/service.rs b/crates/rollup-boost/src/flashblocks/service.rs index 831fa28b..08dadb33 100644 --- a/crates/rollup-boost/src/flashblocks/service.rs +++ b/crates/rollup-boost/src/flashblocks/service.rs @@ -58,7 +58,7 @@ impl FlashblockBuilder { } pub fn extend(&mut self, payload: OpFlashblockPayload) -> Result<(), FlashblocksError> { - tracing::debug!(message = "Extending payload", payload_id = %payload.payload_id, index = payload.index, has_base=payload.base.is_some()); + tracing::debug!(target: "flashblocks", message = "Extending payload", payload_id = %payload.payload_id, index = payload.index, has_base=payload.base.is_some()); // Validate the index is contiguous if payload.index != self.flashblocks.len() as u64 { @@ -232,7 +232,7 @@ impl FlashblocksService { } pub async fn set_current_payload_id(&self, payload_id: PayloadId) { - tracing::debug!(message = "Setting current payload ID", payload_id = %payload_id); + tracing::debug!(target: "flashblocks", message = "Setting current payload ID", payload_id = %payload_id); *self.current_payload_id.write().await = Some(payload_id); // Current state won't be useful anymore because chain progressed *self.best_payload.write().await = FlashblockBuilder::new(); @@ -243,7 +243,9 @@ impl FlashblocksService { FlashblocksEngineMessage::OpFlashblockPayload(payload) => { self.metrics.messages_processed.increment(1); - tracing::debug!( + info!( + target: "flashblocks", + event = "flashblock_received", message = "Received flashblock payload", payload_id = %payload.payload_id, index = payload.index @@ -256,6 +258,7 @@ impl FlashblocksService { if payload_id != payload.payload_id { self.metrics.current_payload_id_mismatch.increment(1); error!( + target: "flashblocks", message = "Payload ID mismatch", payload_id = %payload.payload_id, local_payload_id = %payload_id, @@ -267,6 +270,7 @@ impl FlashblocksService { None => { // We haven't served FCU with attributes yet, just ignore flashblocks debug!( + target: "flashblocks", message = "Received flashblocks, but no FCU with attributes was sent", payload_id = %payload.payload_id, index = payload.index, @@ -278,6 +282,7 @@ impl FlashblocksService { if let Err(e) = self.best_payload.write().await.extend(payload.clone()) { self.metrics.extend_payload_errors.increment(1); error!( + target: "flashblocks", message = "Failed to extend payload", error = %e, payload_id = %payload.payload_id, @@ -287,6 +292,7 @@ impl FlashblocksService { // Broadcast the valid message if let Err(e) = self.ws_pub.publish(&payload) { error!( + target: "flashblocks", message = "Failed to broadcast payload", error = %e, payload_id = %payload.payload_id, @@ -328,16 +334,17 @@ impl EngineApiExt for FlashblocksService { let current_payload = *self.current_payload_id.read().await; if current_payload != Some(payload_id) { tracing::error!( + target: "flashblocks", message = "Payload id returned by builder differs from calculated. Using builder payload id", builder_payload_id = %payload_id, calculated_payload_id = %current_payload.unwrap_or_default(), ); self.set_current_payload_id(payload_id).await; } else { - tracing::debug!(message = "Forkchoice updated", payload_id = %payload_id); + tracing::debug!(target: "flashblocks", message = "Forkchoice updated", payload_id = %payload_id); } } else { - tracing::debug!(message = "Forkchoice updated with no payload ID"); + tracing::debug!(target: "flashblocks", message = "Forkchoice updated with no payload ID"); } Ok(resp) } @@ -355,12 +362,18 @@ impl EngineApiExt for FlashblocksService { match self.get_best_payload(version, payload_id).await { Ok(payload) => { - info!(message = "Returning fb payload"); + info!( + target: "flashblocks", + event = "payload_returned", + message = "Returning fb payload", + %payload_id, + ); // This will finalise block building in builder. let client = self.client.clone(); tokio::spawn(async move { if let Err(e) = client.get_payload(payload_id, version).await { error!( + target: "flashblocks", message = "Failed to send finalising getPayload to builder", error = %e, ); @@ -369,8 +382,8 @@ impl EngineApiExt for FlashblocksService { Ok(payload) } Err(e) => { - error!(message = "Error getting fb best payload, falling back on client", error = %e); - info!(message = "Falling back to get_payload on client", payload_id = %payload_id); + error!(target: "flashblocks", message = "Error getting fb best payload, falling back on client", error = %e); + info!(target: "flashblocks", message = "Falling back to get_payload on client", payload_id = %payload_id); let result = self.client.get_payload(payload_id, version).await?; Ok(result) } diff --git a/crates/rollup-boost/src/server.rs b/crates/rollup-boost/src/server.rs index ae7c7a56..a0c2e397 100644 --- a/crates/rollup-boost/src/server.rs +++ b/crates/rollup-boost/src/server.rs @@ -240,6 +240,8 @@ impl RollupBoostServer { let execution_payload = ExecutionPayload::from(payload.clone()); info!( + target: "server", + event = "payload_returned", message = "returning block", "hash" = %execution_payload.block_hash(), "number" = %execution_payload.block_number(), @@ -377,6 +379,8 @@ impl RollupBoostServer { // While not ideal to rely on log parsing, it provides a reliable way to verify behavior. // Happy to consider an alternative approach later on. info!( + target: "server", + event = "payload_returned", message = "returning block", "hash" = %block_hash, "number" = %block_number, @@ -648,7 +652,12 @@ impl EngineApiServer for RollupBoostServer { &self, payload_id: PayloadId, ) -> RpcResult { - info!("received get_payload_v3"); + info!( + target: "server", + event = "get_payload_received", + message = "received get_payload_v3", + %payload_id, + ); match self.get_payload(payload_id, PayloadVersion::V3).await? { OpExecutionPayloadEnvelope::V3(v3) => Ok(v3), @@ -698,7 +707,12 @@ impl EngineApiServer for RollupBoostServer { &self, payload_id: PayloadId, ) -> RpcResult { - info!("received get_payload_v4"); + info!( + target: "server", + event = "get_payload_received", + message = "received get_payload_v4", + %payload_id, + ); match self.get_payload(payload_id, PayloadVersion::V4).await? { OpExecutionPayloadEnvelope::V4(v4) => Ok(v4),