Fast code is often boring code. Fewer copies. Fewer temporary objects. Less data kept alive after the transaction has moved on.
We spent this release on that kind of work across the transaction path. Narwhal message decoding now aliases serialized buffers where ownership allows it. QUIC sends write the frame header and payload directly. Vertex and certificate hashing avoid general-purpose buffers on normal paths. Executor history reuses transaction hashes and retains less transaction data.
The same pass reached product modules. Agent state queries do less conversion and allocate fewer response objects. MPP challenge formatting avoids repeated work. Full mempool lanes can reject a low-priority transaction without scanning every heap leaf.
Why small allocations matter here
One allocation does not hurt a validator. Millions of short-lived allocations do. They increase garbage collection frequency, hold backing arrays longer than expected, and turn traffic bursts into CPU and memory spikes.
The safest changes keep the same wire bytes and ownership rules. Zero-copy decoding is only used while the serialized buffer remains valid. Callers that need independent mutable data still have explicit copy variants.
This was not one giant rewrite. It was a set of reviewed changes across Narwhal workers, extension encoding, transaction execution, agent queries, and MPP.
The next job was to prove whether the lower-level work changed full validator behavior. That required better evidence, not another microbenchmark.
Source record
- Narwhal worker allocationspull request / 2026-07-09
- Extension encoding allocationspull request / 2026-07-09
- MPP payment challenge pathpull request / 2026-07-09
- Agent state queriespull request / 2026-07-09
- Full-lane admissionpull request / 2026-07-09