A minimal ABCI app to drive an Ethereum execution layer (Reth) from CometBFT.
This repository is intentionally tiny and compile-friendly without Reth;
enable the with-reth feature to wire real execution once you pin matching
Reth crate versions.
reth-abci/
├─ Cargo.toml # workspace
└─ crates/abci-node/
├─ Cargo.toml # features + deps
└─ src/
├─ main.rs # boots ABCI server (tcp://127.0.0.1:26658)
├─ app.rs # ABCI methods
├─ exec.rs # RethCtx + block execution (feature-gated)
└─ wire.rs # tx decoding, apphash util (feature-gated)
This mode compiles everywhere so you can test CometBFT plumbing first.
cargo build -p abci-node
cargo run -p abci-nodeThen point CometBFT at it:
# ~/.cometbft/config/config.toml
proxy_app = "tcp://127.0.0.1:26658"
create_empty_blocks = false
timeout_propose = "1s"
timeout_precommit = "1s"Run CometBFT:
cometbft init
cometbft start- Check your Reth version:
reth --version
- Edit
crates/abci-node/Cargo.tomlto pin allreth*crates to the same minor. - Build with feature:
cargo run -p abci-node --features with-reth
- Fill TODOs in:
RethCtx::open()– open MDBX, load ChainSpec, init txpoolvalidate_tx_basic()– sig/nonce/balance checkspropose_block()– policy + pre-sim (optional)apply_tx()– execute viareth-evm, update overlay/receiptscommit()– flush overlay, compute realstateRoot&receiptsRoot
- ✅ ABCI plumbing with stubbed execution
- ☐ Real EVM execution via Reth
- ☐ EIP-1559 basefee at
end_block - ☐ Deterministic AppHash = keccak(stateRoot || receiptsRoot)
- ☐ Minimal eth JSON-RPC facade (balance, block, receipt)
MIT