Skip to content
Open
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
4 changes: 2 additions & 2 deletions backend/src/bin/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
},
SerializableExecEvent::TxnEvmOutput { txn_index, .. } => {
if let Some((txn_hash, txn_start_ns)) = client_state.txs_start_ns.remove(&txn_index) {
let txn_duration = std::time::Duration::from_nanos((event.timestamp_ns - txn_start_ns) as u64);
let txn_duration = std::time::Duration::from_nanos(event.timestamp_ns - txn_start_ns);
client_state.block_txns_total_duration += txn_duration;

log_event!("TxnEvmOutput", txn_index = txn_index, txn_hash = txn_hash, duration = txn_duration);
Expand All @@ -120,7 +120,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
},
SerializableExecEvent::BlockPerfEvmExit => {
log_event!("BlockPerfEvmExit");
let block_duration = std::time::Duration::from_nanos((event.timestamp_ns - client_state.block_start_ns) as u64);
let block_duration = std::time::Duration::from_nanos(event.timestamp_ns - client_state.block_start_ns);
let parallel_execution_savings = client_state.block_txns_total_duration.checked_sub(block_duration);
let savings_pct = if parallel_execution_savings.is_none() { // This only happens with really small/empty blocks
error!("Parallel execution savings is negative: txs={:?} block={:?} height={}", client_state.block_txns_total_duration, block_duration, client_state.current_block_number);
Expand Down
4 changes: 2 additions & 2 deletions backend/src/lib/event_filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ pub struct ArrayPrefixFilter<T: PartialEq> {

impl<T: PartialEq> ArrayPrefixFilter<T> {
/// Checks if input array starts with filter values (prefix match)
pub fn matches(&self, value: &Vec<T>) -> bool {
pub fn matches(&self, value: &[T]) -> bool {
self.values.is_empty() || value.starts_with(&self.values)
}

Expand Down Expand Up @@ -192,7 +192,7 @@ impl EventFilter {
return true;
}

if self.includes_native_transfers() && is_native_transfer(&event) {
if self.includes_native_transfers() && is_native_transfer(event) {
return true;
}

Expand Down
6 changes: 3 additions & 3 deletions backend/src/lib/event_listener.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ impl EventName {
}
}

pub fn from_str(s: &str) -> Option<Self> {
pub fn from_name(s: &str) -> Option<Self> {
match s {
"RECORD_ERROR" => Some(EventName::RecordError),
"BLOCK_START" => Some(EventName::BlockStart),
Expand Down Expand Up @@ -157,7 +157,7 @@ fn event_to_data(event: &EventDescriptor<ExecEventDecoder>) -> Option<EventData>
} = event.info();

// Convert event_type to EventName enum for type safety
let event_name = EventName::from_str(EXEC_EVENT_NAMES[event_type as usize])?;
let event_name = EventName::from_name(EXEC_EVENT_NAMES[event_type as usize])?;

// Get block number if present
let block_number = if flow_info.block_seqno != 0 {
Expand Down Expand Up @@ -284,7 +284,7 @@ pub fn run_event_listener(
last_event_timestamp_ns = Some(event.info().record_epoch_nanos);
event_count += 1;

if event_count % 100 == 0 {
if event_count.is_multiple_of(100) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 is_multiple_of requires Rust ≥ 1.87.0

<uN>::is_multiple_of was stabilized in Rust 1.87.0 (May 2025). The CI container pins rust:1.91-slim so the build will pass, but Cargo.toml has no rust-version field. Any contributor running cargo build or cargo clippy locally with a stable toolchain older than 1.87 will hit a compile error with no obvious hint about the minimum required version. Adding rust-version = "1.87" to Cargo.toml lets cargo surface a clear diagnostic instead of a confusing "method not found" error.

Prompt To Fix With AI
This is a comment left during a code review.
Path: backend/src/lib/event_listener.rs
Line: 287

Comment:
**`is_multiple_of` requires Rust ≥ 1.87.0**

`<uN>::is_multiple_of` was stabilized in Rust 1.87.0 (May 2025). The CI container pins `rust:1.91-slim` so the build will pass, but `Cargo.toml` has no `rust-version` field. Any contributor running `cargo build` or `cargo clippy` locally with a stable toolchain older than 1.87 will hit a compile error with no obvious hint about the minimum required version. Adding `rust-version = "1.87"` to `Cargo.toml` lets `cargo` surface a clear diagnostic instead of a confusing "method not found" error.

How can I resolve this? If you propose a fix, please make it concise.

debug!("Processed {} events", event_count);
}

Expand Down
2 changes: 1 addition & 1 deletion backend/src/lib/serializable_event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ impl From<&EventData> for SerializableEventData {
txn_hash: data.txn_hash.map(B256::from),
payload: SerializableExecEvent::from(&data.payload),
seqno: data.seqno,
timestamp_ns: data.timestamp_ns.clone(),
timestamp_ns: data.timestamp_ns,
}
}
}
14 changes: 5 additions & 9 deletions backend/src/lib/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ pub struct TopAccessesData {

#[derive(Debug, Clone)]
pub enum EventDataOrMetrics {
Event(EventData),
Event(Box<EventData>),
TopAccesses(TopAccessesData),
TPS(usize)
}
Expand Down Expand Up @@ -80,7 +80,7 @@ impl TPSTracker {
self.block_2_txs = self.block_3_txs;
self.block_3_txs = self.current_tx_count;
self.current_tx_count = 0;
return self.block_1_txs + self.block_2_txs + (self.block_3_txs / 2);
self.block_1_txs + self.block_2_txs + (self.block_3_txs / 2)
}
}

Expand All @@ -95,7 +95,7 @@ fn process_event(
) {
match event {
EventDataOrMetrics::Event(event_data) => {
let serializable = SerializableEventData::from(&event_data);
let serializable = SerializableEventData::from(&*event_data);
if filter.matches_event(&serializable) {
events_buf.push(serializable);
}
Expand Down Expand Up @@ -289,13 +289,9 @@ async fn run_event_forwarder_task(
}

// Send accesses update on BlockEnd events (after all access events are processed)
let send_accesses_update = if let EventName::BlockEnd = event_data.event_name {
true
} else {
false
};
let send_accesses_update = matches!(event_data.event_name, EventName::BlockEnd);

let _ = event_broadcast_sender.send(EventDataOrMetrics::Event(event_data));
let _ = event_broadcast_sender.send(EventDataOrMetrics::Event(Box::new(event_data)));

if send_accesses_update {
let top_accesses_data = TopAccessesData {
Expand Down
Loading