chaincodec-batch
High-throughput batch decode engine for ChainCodec — parallel processing with Rayon.
chaincodec-batch turns a Vec<RawEvent> into decoded results as fast as your hardware allows. It chunks the input, fans out across a Rayon thread pool, and collects results with per-item error isolation — one malformed log never drops the whole batch.
Features
- Rayon parallel processing — saturate all CPU cores for historical backfills
- Chunked execution — configurable chunk size caps per-chunk memory
- Three error modes —
Skip(analytics),Collect(audit),Throw(strict pipelines) - Progress callbacks — report decode progress to a UI or logging system
- Chain-agnostic — register any
ChainDecoderimplementation (EVM, Solana, Cosmos) - Zero unsafe code — pure safe Rust
Installation
[]
= "0.1"
= "0.1"
= "0.1"
= "0.1"
Quick start
use Arc;
use ;
use ErrorMode;
use EvmDecoder;
use MemoryRegistry;
Error modes
use ErrorMode;
// Skip bad logs silently — best for analytics / data pipelines
let req = new.error_mode;
// Collect errors alongside successful results — inspect failures after the run
let req = new.error_mode;
let result = engine.decode?;
for in &result.errors
// Abort on first failure — best for critical financial data
let req = new.error_mode;
Progress reporting
use ;
use Arc;
let counter = new;
let counter_clone = clone;
let req = new
.on_progress;
Register multiple chains
let mut engine = new;
engine.add_decoder;
engine.add_decoder;
engine.add_decoder;
engine.add_decoder;
// BatchRequest::chain matches the slug used in add_decoder
let req_eth = new;
let req_arb = new;
Performance
Benchmarks on Apple M3 Pro, ERC-20 Transfer events:
| Mode | Events/sec |
|---|---|
| Single-thread | ~1M |
| Rayon 8-thread | ~6M |
| Rayon 12-thread | ~8M |
Throughput scales with core count and schema complexity. Simple events (ERC-20 Transfer) decode faster than complex events (Uniswap V3 Swap with tuples).
Ecosystem
| Crate | Purpose |
|---|---|
| chaincodec-core | Traits, types, primitives |
| chaincodec-evm | EVM ABI event & call decoder |
| chaincodec-registry | CSDL schema registry |
| chaincodec-batch | Rayon parallel batch decode (this crate) |
| chaincodec-stream | Live WebSocket event streaming |
License
MIT — see LICENSE