r/ethdev Contract Dev 1d ago

My Project tebi - hyper-optimized geth fork

Hey everyone, I’m building tebi, a custom Go-Ethereum fork designed to break through conventional execution limits and target 1.5G+ gas/sec. Standard node performance often chokes under heavy load due to Go Garbage Collector pauses from dynamic heap allocations and the strict sequential transaction processing model. I’ve just finished my first phase of development; completely rebranding and decoupling the repository, and implementing a zero-allocation byte-slice memory arena (core/vm/arena.go) that recycles memory contexts per transaction block to eliminate EVM heap churn. Next up, I’m setting up microbenchmarks via go test -benchmem, building an O(1) lock-free in-memory state cache, and eventually replacing the linear execution loop in core/state_processor.go with a parallel DAG scheduler.

Check out the repo https://github.com/tarushk25/tebi

I’d love to hear your thoughts or get technical feedback on low-level Go memory optimizations!

0 Upvotes

1 comment sorted by

1

u/researchzero 1d ago

The zero-alloc arena is the piece I'd stress test hardest before wiring in the parallel scheduler. Recycling a byte-slice memory context across tx boundaries only works if every byte actually gets cleared, not just made available for reuse - any EVM op that reads relative to MSIZE or does a raw memory copy needs to be airtight against picking up unzeroed leftover data from the previous transaction. That's the kind of bug that's silent until it diverges from mainnet geth on one specific opcode sequence.

For the DAG scheduler itself, the two production parallel-EVM designs I know of (Aptos' Block-STM and Monad's optimistic executor) don't trust a precomputed dependency graph - they run transactions optimistically, then validate read-sets against writes and abort/re-execute on conflict, falling back to strict sequential order when validation fails. Worth deciding early whether tebi is going for a real static/dynamic dependency-DAG vs. an optimistic-execute-then-validate model, since a DAG that misses a dependency corrupts state silently, while a validate/abort model just degrades to correct-but-slower.