Skip to content

Commit ef40392

Browse files
committed
relay: include refunds in StatusSummary and EVM scan trace log
StatusSummary gains refunds_pending / refunds_completed / refunds_failed. The EVM scan loop already drives the refund completion check; extend its periodic trace! summary to report the refund counters so operators can see refund flow in the bridge logs and dashboards.
1 parent cfbeda7 commit ef40392

2 files changed

Lines changed: 42 additions & 4 deletions

File tree

linera-bridge/src/monitor/evm.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,13 @@ pub async fn evm_scan_loop<E: linera_core::environment::Environment + 'static>(
4646

4747
let summary = monitor.read().await.status_summary();
4848
tracing::trace!(
49-
pending = summary.deposits_pending,
50-
completed = summary.deposits_completed,
49+
deposits_pending = summary.deposits_pending,
50+
deposits_completed = summary.deposits_completed,
51+
refunds_pending = summary.refunds_pending,
52+
refunds_completed = summary.refunds_completed,
53+
refunds_failed = summary.refunds_failed,
5154
last_block = summary.last_scanned_evm_block,
52-
"EVM deposit scan complete"
55+
"EVM scan complete"
5356
);
5457

5558
tokio::time::sleep(scan_interval).await;

linera-bridge/src/monitor/mod.rs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,13 @@ impl MonitorState {
672672
deposits_completed: self.deposits.values().filter(|d| d.forwarded).count(),
673673
burns_pending: self.burns.values().filter(|b| !b.forwarded).count(),
674674
burns_forwarded: self.burns.values().filter(|b| b.forwarded).count(),
675+
refunds_pending: self
676+
.refunds
677+
.values()
678+
.filter(|r| !r.forwarded && !r.failed)
679+
.count(),
680+
refunds_completed: self.refunds.values().filter(|r| r.forwarded).count(),
681+
refunds_failed: self.refunds.values().filter(|r| r.failed).count(),
675682
last_scanned_evm_block: self.last_scanned_evm_block,
676683
last_scanned_linera_height: self.last_scanned_linera_height,
677684
}
@@ -684,6 +691,9 @@ pub struct StatusSummary {
684691
pub deposits_completed: usize,
685692
pub burns_pending: usize,
686693
pub burns_forwarded: usize,
694+
pub refunds_pending: usize,
695+
pub refunds_completed: usize,
696+
pub refunds_failed: usize,
687697
pub last_scanned_evm_block: u64,
688698
pub last_scanned_linera_height: BlockHeight,
689699
}
@@ -740,7 +750,11 @@ fn retry_eligible(retry_count: u32, last_retry_at: Option<Instant>, max_retries:
740750
#[cfg(test)]
741751
mod tests {
742752
use alloy::primitives::{Address, B256, U256};
743-
use linera_base::data_types::BlockHeight;
753+
use linera_base::{
754+
crypto::CryptoHash,
755+
data_types::{Amount, BlockHeight},
756+
identifiers::{AccountOwner, ChainId},
757+
};
744758

745759
use super::*;
746760

@@ -859,11 +873,32 @@ mod tests {
859873
})
860874
.await;
861875

876+
let refund_key = RefundKey {
877+
source_chain_id: 1,
878+
block_hash: B256::ZERO,
879+
tx_index: 0,
880+
log_index: 1,
881+
};
882+
state
883+
.track_refund(PendingRefund {
884+
key: refund_key.clone(),
885+
evm_tx_hash: B256::ZERO,
886+
source: Account {
887+
chain_id: ChainId(CryptoHash::from([0u8; 32])),
888+
owner: AccountOwner::CHAIN,
889+
},
890+
amount: Amount::ZERO,
891+
})
892+
.await;
893+
862894
let summary = state.status_summary();
863895
assert_eq!(summary.deposits_pending, 1);
864896
assert_eq!(summary.deposits_completed, 0);
865897
assert_eq!(summary.burns_pending, 1);
866898
assert_eq!(summary.burns_forwarded, 0);
899+
assert_eq!(summary.refunds_pending, 1);
900+
assert_eq!(summary.refunds_completed, 0);
901+
assert_eq!(summary.refunds_failed, 0);
867902
assert_eq!(summary.last_scanned_evm_block, 100);
868903
}
869904

0 commit comments

Comments
 (0)