From 343ad03cf5721754ea801fcd39afb204ee59da24 Mon Sep 17 00:00:00 2001 From: Jose Storopoli Date: Fri, 22 May 2026 12:18:28 -0300 Subject: [PATCH 1/2] feat(ol): log bridge deposit and withdrawal milestones --- crates/ol/stf/src/account_processing.rs | 14 ++++++++++++-- crates/ol/stf/src/manifest_processing.rs | 22 +++++++++++++++++----- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/crates/ol/stf/src/account_processing.rs b/crates/ol/stf/src/account_processing.rs index 4bde15187d..5e63c76740 100644 --- a/crates/ol/stf/src/account_processing.rs +++ b/crates/ol/stf/src/account_processing.rs @@ -148,12 +148,22 @@ fn handle_bridge_gateway_message( } // 4. If it is, then we can emit a OL log with the amount and destination. + let selected_operator = withdrawal_data.selected_operator(); + let dest = withdrawal_data.into_dest_desc(); + let dest_desc_len = dest.len(); let log_data = SimpleWithdrawalIntentLogData { amt: withdrawal_amt.into(), - selected_operator: withdrawal_data.selected_operator(), - dest: withdrawal_data.into_dest_desc(), + selected_operator, + dest, }; context.emit_typed_log(BRIDGE_GATEWAY_ACCT_SERIAL, &log_data)?; + info!( + %sender, + amount_sat = amt_raw, + selected_operator, + dest_desc_len, + "emitted bridge withdrawal intent log", + ); coin.safely_consume_unchecked(); Ok(()) diff --git a/crates/ol/stf/src/manifest_processing.rs b/crates/ol/stf/src/manifest_processing.rs index b86446aad8..8baa99fbf6 100644 --- a/crates/ol/stf/src/manifest_processing.rs +++ b/crates/ol/stf/src/manifest_processing.rs @@ -144,7 +144,7 @@ fn process_asm_log( ); return Ok(()); }; - process_deposit_log(state, &deposit, context)?; + process_deposit_log(state, real_height, &deposit, context)?; } CHECKPOINT_TIP_UPDATE_LOG_TYPE => { @@ -186,6 +186,7 @@ fn process_asm_log( fn process_deposit_log( state: &mut S, + real_height: L1Height, deposit: &DepositLog, context: &BasicExecContext<'_>, ) -> ExecResult<()> { @@ -195,7 +196,11 @@ fn process_deposit_log( let Ok(descriptor) = DepositDescriptor::decode_from_slice(&deposit.destination) else { // Malformed destination descriptor, sweep to limbo. let coin = Coin::new_unchecked(amt_btc); - warn!(amount = %deposit.amount, "limboing deposit with malformed destination descriptor"); + warn!( + l1_height = real_height, + amount_sat = deposit.amount, + "limboing deposit with malformed destination descriptor", + ); handle_misplaced_funds(state, coin)?; return Ok(()); }; @@ -207,7 +212,12 @@ fn process_deposit_log( let Some(dest_id) = state.find_account_id_by_serial(acct_serial)? else { // Account serial not found, sweep to limbo. let coin = Coin::new_unchecked(amt_btc); - warn!(?acct_serial, amount = %deposit.amount, "limboing deposit for unknown account serial"); + warn!( + l1_height = real_height, + ?acct_serial, + amount_sat = deposit.amount, + "limboing deposit for unknown account serial", + ); handle_misplaced_funds(state, coin)?; return Ok(()); }; @@ -221,10 +231,12 @@ fn process_deposit_log( let msg_payload = MsgPayload::from_bytes(deposit.amount.into(), deposit_data) .expect("deposit message payload bytes must fit within SSZ max length"); - debug!( + info!( + l1_height = real_height, %dest_id, %acct_serial, - amount = deposit.amount, + ?subject_id, + amount_sat = deposit.amount, "crediting deposit to account", ); From 3c8694f7dd50e4de2ada32df109fac6615d06d60 Mon Sep 17 00:00:00 2001 From: Jose Storopoli Date: Fri, 22 May 2026 12:18:38 -0300 Subject: [PATCH 2/2] feat(ee): log bridge payload milestones --- bin/alpen-client/src/payload_builder.rs | 32 ++++++++++++++++++- crates/alpen-ee/block-assembly/src/package.rs | 21 +++++++++--- crates/alpen-ee/block-assembly/src/payload.rs | 12 ++++++- 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/bin/alpen-client/src/payload_builder.rs b/bin/alpen-client/src/payload_builder.rs index cea432acab..39246691c3 100644 --- a/bin/alpen-client/src/payload_builder.rs +++ b/bin/alpen-client/src/payload_builder.rs @@ -15,7 +15,7 @@ use alpen_reth_node::{ use eyre::{eyre, Context}; use reth_node_builder::{ConsensusEngineHandle, PayloadBuilderAttributes}; use reth_payload_builder::PayloadBuilderHandle; -use tracing::{debug, warn}; +use tracing::{debug, info, warn}; #[derive(Debug)] pub(crate) struct AlpenRethPayloadEngine { @@ -76,6 +76,15 @@ impl PayloadBuilderEngine for AlpenRethPayloadEngine { }) }) .collect::, _>>()?; + for (deposit_index, withdrawal) in withdrawals.iter().enumerate() { + info!( + %parent, + deposit_index, + address = %withdrawal.address, + amount_gwei = withdrawal.amount, + "prepared deposit mint for payload attributes", + ); + } let payload_attrs = AlpenPayloadAttributes::new_from_eth(PayloadAttributes { timestamp: build_attrs.timestamp(), // IMPORTANT: post cancun payload build will fail without @@ -102,6 +111,16 @@ impl PayloadBuilderEngine for AlpenRethPayloadEngine { .await { Ok(Ok(payload_id)) => { + if deposit_count > 0 { + info!( + %parent, + timestamp, + deposit_count, + ?payload_id, + elapsed_ms = build_started.elapsed().as_millis(), + "payload builder accepted deposit mint job", + ); + } debug!( %parent, timestamp, @@ -143,6 +162,17 @@ impl PayloadBuilderEngine for AlpenRethPayloadEngine { .await { Some(Ok(payload)) => { + if deposit_count > 0 { + info!( + %parent, + timestamp, + deposit_count, + ?payload_id, + resolve_elapsed_ms = resolve_started.elapsed().as_millis(), + total_elapsed_ms = build_started.elapsed().as_millis(), + "payload builder resolved deposit mint payload", + ); + } debug!( %parent, timestamp, diff --git a/crates/alpen-ee/block-assembly/src/package.rs b/crates/alpen-ee/block-assembly/src/package.rs index 53ed5fe781..fe64913196 100644 --- a/crates/alpen-ee/block-assembly/src/package.rs +++ b/crates/alpen-ee/block-assembly/src/package.rs @@ -11,7 +11,7 @@ use strata_msg_fmt::{Msg as MsgTrait, OwnedMsg}; use strata_ol_bridge_types::OperatorSelection; use strata_ol_msg_types::{WithdrawalMsgData, DEFAULT_OPERATOR_FEE, WITHDRAWAL_MSG_TYPE_ID}; use strata_snark_acct_runtime::InputMessage; -use tracing::warn; +use tracing::{info, warn}; /// Builds [`ExecInputs`] from parsed input messages. /// @@ -26,10 +26,13 @@ pub(crate) fn build_block_inputs( let value = msg.meta().value(); match msg.message() { Some(DecodedEeMessageData::Deposit(deposit_msg_data)) => { - inputs.add_subject_deposit(SubjectDepositData::new( - *deposit_msg_data.dest_subject(), - value, - )); + let dest_subject = *deposit_msg_data.dest_subject(); + info!( + ?dest_subject, + amount_sat = value.to_sat(), + "accepted deposit message as EE input", + ); + inputs.add_subject_deposit(SubjectDepositData::new(dest_subject, value)); } Some(DecodedEeMessageData::SubjTransfer(_)) => { // no need to warn on this @@ -63,6 +66,14 @@ pub(crate) fn build_block_outputs( ); continue; }; + info!( + withdrawal_txid = ?withdrawal_intent.withdrawal_txid, + amount_sat = withdrawal_intent.amt, + selected_operator = withdrawal_intent.selected_operator.raw(), + dest_desc_len = withdrawal_intent.destination.to_bytes().len(), + %bridge_gateway_account_id, + "created withdrawal output message for bridge gateway", + ); outputs.add_message(OutputMessage::new(bridge_gateway_account_id, msg_payload)); } outputs diff --git a/crates/alpen-ee/block-assembly/src/payload.rs b/crates/alpen-ee/block-assembly/src/payload.rs index cdeca70c7d..8b109e7a26 100644 --- a/crates/alpen-ee/block-assembly/src/payload.rs +++ b/crates/alpen-ee/block-assembly/src/payload.rs @@ -5,7 +5,7 @@ use alpen_ee_common::{DepositInfo, EnginePayload, PayloadBuildAttributes, Payloa use alpen_reth_evm::subject_to_address_unchecked; use strata_acct_types::Hash; use strata_ee_acct_types::{EeAccountState, PendingInputEntry, UpdateExtraData}; -use tracing::debug; +use tracing::{debug, info}; /// Extracts deposits from pending inputs, limited by `max_deposits`. /// @@ -43,6 +43,16 @@ pub(crate) async fn build_exec_payload( // dont handle forced inclusions currently let processed_fincls = 0; + for (deposit_index, deposit) in deposits.iter().enumerate() { + info!( + %parent, + deposit_index, + address = %deposit.address(), + amount_sat = deposit.amount().to_sat(), + "selected deposit for EE payload", + ); + } + debug!(%parent, timestamp = %timestamp_sec, deposits = %processed_inputs, "starting payload build"); let payload = payload_builder .build_payload(PayloadBuildAttributes::new(parent, timestamp_sec, deposits))