zeekay
|
c50b2dbf64
|
feat: modular EVM backend switching — gevm, revm, cevm
Three swappable EVM backends via build tags:
gevm (default) — Go EVM from luxfi/geth (always available)
revm (-tags revm) — Rust EVM via FFI (2x faster, native Block-STM)
cevm (-tags cevm) — C++ EVM via CGo (3x faster, GPU kernels)
Architecture:
parallel.TransactionExecutor interface — per-tx backend dispatch
parallel.EVMBackend enum — gevm | revm | cevm | auto
parallel.RegisterTransactionExecutor() — init()-time registration
parallel.SetBackend(AutoEVM) — runtime selection (cevm > revm > gevm)
parallel.AvailableBackends() — query what's linked
Block-level: parallel.BlockExecutor (unchanged, already wired)
GPU: parallel.GPUAccelerator (unchanged, Metal ecrecover working)
Backend stubs in backend_revm.go and backend_cevm.go — build-tagged,
register on init(). FFI/CGo bridges TBD in luxfi/revm and luxfi/cevm.
StateDB is the bridge — all backends read/write through the same Go
StateDB interface, ensuring consensus compatibility regardless of
which interpreter runs the bytecode.
|
2026-04-07 00:19:15 -07:00 |
|