Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
d32471a
fix(tps-chart): smooth Transaction volume line
dak-agent[bot] Jun 8, 2026
4422195
fix(tps-chart): animate new data points instead of curving the line
dak-agent[bot] Jun 8, 2026
1883c35
feat(tps-chart): smooth streaming via sliding time-window X axis
Camillebzd Jun 9, 2026
0ec08b6
chore: update pnpm lockfile and allow sharp/unrs-resolver builds
Camillebzd Jun 9, 2026
e166c0e
chore: minimize lockfile diff vs main
dak-agent[bot] Jun 9, 2026
75e5e79
ci: unified frontend workflow (lint + typecheck + build)
kyscott18 Jun 9, 2026
9817300
ci: add rust job (fmt + clippy + build)
kyscott18 Jun 9, 2026
d34b779
ci: run rust job in rust:1.91-slim container for libclang/bindgen parity
kyscott18 Jun 9, 2026
75891c9
fix(backend): resolve auto-fixable clippy lints
kyscott18 Jun 9, 2026
7ba86b2
fix(backend): resolve non-auto-fixable clippy lints
kyscott18 Jun 9, 2026
de4daf8
fix(backend): remove redundant u64 casts in client (unnecessary_cast)
kyscott18 Jun 9, 2026
d0b4c2a
chore: unify pnpm into a single root workspace
kyscott18 Jun 9, 2026
af8a877
chore: drop ESLint in favor of Biome (#104)
kyscott18 Jun 11, 2026
3012056
Merge main into chore/root-pnpm-workspace
kyscott18 Jun 11, 2026
f623446
ci: unified frontend workflow (lint + typecheck + build)
kyscott18 Jun 9, 2026
474b5ed
ci: add rust job (fmt + clippy + build)
kyscott18 Jun 9, 2026
bf98b5d
ci: run rust job in rust:1.91-slim container for libclang/bindgen parity
kyscott18 Jun 9, 2026
322a0ee
fix(backend): resolve auto-fixable clippy lints
kyscott18 Jun 9, 2026
bc78834
fix(backend): resolve non-auto-fixable clippy lints
kyscott18 Jun 9, 2026
3d03c55
fix(backend): remove redundant u64 casts in client (unnecessary_cast)
kyscott18 Jun 9, 2026
cd31db3
Merge branch 'reopen/101-backend-clippy' into chore/root-pnpm-workspace
kyscott18 Jun 11, 2026
a070b1b
Revert "chore: drop ESLint in favor of Biome (#104)"
kyscott18 Jun 11, 2026
e827de0
fix(backend): resolve auto-fixable clippy lints
kyscott18 Jun 9, 2026
5dc6983
fix(backend): resolve non-auto-fixable clippy lints
kyscott18 Jun 9, 2026
336dfaf
fix(backend): remove redundant u64 casts in client (unnecessary_cast)
kyscott18 Jun 9, 2026
f5dbe65
Merge branch 'reopen/101-backend-clippy-main' into reopen/100-unified…
kyscott18 Jun 11, 2026
1a49122
Merge branch 'reopen/100-unified-workflow' into chore/root-pnpm-works…
kyscott18 Jun 11, 2026
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
69 changes: 69 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: CI

on:
pull_request:
push:
branches: [main]
workflow_dispatch:

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
with:
path: ~/.cache/biome
key: biome-${{ runner.os }}-${{ hashFiles('biome.json') }}
restore-keys: biome-${{ runner.os }}-
- uses: biomejs/setup-biome@v2
with:
version: 2.1.2
- run: biome ci --linter-enabled=true --formatter-enabled=true

typecheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 10
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- run: pnpm install --frozen-lockfile
- run: pnpm typecheck

build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 10
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- run: pnpm install --frozen-lockfile
- run: pnpm build

rust:
runs-on: ubuntu-latest
# Match the backend Dockerfile's build image so bindgen sees a libclang
# new enough for the upstream C23 (`constexpr`) headers from monad-bft.
container: rust:1.91-slim
steps:
- name: Install build dependencies
run: |
apt-get update
apt-get install -y git curl gcc g++ cmake pkg-config libssl-dev libclang-dev libzstd-dev libhugetlbfs-dev
- uses: actions/checkout@v4
- run: rustup component add rustfmt clippy
- uses: Swatinem/rust-cache@v2
- run: cargo fmt --all --check
- run: cargo clippy --all-targets --all-features -- -D warnings
- run: cargo build --all-targets
24 changes: 0 additions & 24 deletions .github/workflows/lint.yml

This file was deleted.

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) {
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
3 changes: 2 additions & 1 deletion frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint"
"lint": "eslint",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@number-flow/react": "0.5.10",
Expand Down
Loading
Loading