Ergo Rust Node#
Overview#
Ergo Rust Node is an experimental Rust implementation of an Ergo node. It is not the reference client; use the Scala Ergo reference client for production unless a release explicitly says otherwise.
Current State#
The project has moved beyond early header-sync testing into API compatibility, indexer, pruning, and validation-harness work. It remains experimental, but recent releases show active alignment with the JVM node API surface.
Related Rust-node references include Luivatra/ergo-rust-node, an earlier experimental implementation, arkadianet/ergo, an independent Rust full-node implementation targeting strict consensus parity with the Scala reference, and ergo-rust-sync-dashboard, a small Tkinter sync display for mwaddip/ergo-node-rust.
SANTA is a related cross-implementation conformance suite for Ergo consensus behavior. It keeps shared test vectors and runner contracts so independent implementations can compare wire, evaluation, transaction, block, and chain behavior against canonical expected outputs. Related runners include Blitzen for sigma-rust, Vixen for the arkadianet/ergo Rust node, and Donner for block-tier validation in mwaddip/ergo-node-rust.
Recent release highlights:
- v0.7.4 fixed a mining-serve state-root mismatch at tip by building a fresh prover from storage rather than sharing mutable prover tree state.
- v0.7.3 improved mining-serve JVM compatibility, fixed candidate height handling, rebased the sigma-rust pin, and added further JVM-compatibility fixes around type checking, sized-ErgoTree handling, constant type-code rejection, and block-cost units.
- v0.7.2 focused on JVM-exactness in chain validation: header vote-field checks, fork-vote gating, soft-fork vote lifecycle behavior, validation-settings parsing/serialization, rollback error handling, and sigma-rust pin updates.
- v0.7.1 and v0.7.0 continued the same validation/conformance release line.
- v0.6.9 added consensus-behavior fixes from sigma-rust for mixed-width numeric arithmetic and rejection of flat N-ary tuples during deserialization.
- v0.6.8 tightened JIT cost accounting for empty and packed collections and added an indexer health endpoint at
/api/v1/health. - v0.6.7 addressed validation-harness gridlock by moving heavy API work to blocking threads, adding single-flight block-transaction fetching in the indexer, and relaxing bogus peer-address handling so normal NAT gossip is filtered without banning the gossiper.
- v0.6.6 aligned several REST responses with the JVM node, including
/peers/connected,/mining/rewardAddress, and error response shapes. It also fixed an indexer reorg-detection blind spot that could surface as duplicate transaction IDs during mid-sync reorgs. - v0.6.4 added
blocks_to_keeppruning for non-header block sections, plus validation-oriented endpoints for canonical block fragments and indexed box bytes. - Earlier
v0.6.2andv0.4.xtesting focused on at-tip recovery and storage behavior, includingapply_stateretry / missing-UTXO-key recovery after unclean stops, seed-list fixes for Ubuntu package installs, and reduced at-tip memory use. - v0.3.1 unblocked mainnet sync stalls around a voting-epoch boundary and a sigma-rust v6 parse-time type check. v0.3.0 reduced observed peak RSS during mainnet sync from about
14.95 GBto about9.5 GB. - v0.1.0 was the first public release after early P2P, sync, NiPoPoW, and mining-endpoint work. Treat these early releases as historical implementation milestones, not stable-node recommendations.
Current development areas include mining endpoint support, NiPoPoW bootstrapping, RequestModifiers serving, mempool/API work, peer penalties, indexer behavior, API parity, and validation against JVM behavior.
Implementation notes#
- Mainnet validation work exposed sigma-rust edge cases around context-extension ordering, v6 opcode parsing, JIT costing, lazy constant resolution, and pre-JIT compatibility paths.
- SANTA and independent
ergotsvalidation both exposed a sigma-rust under-charging divergence in May 2026. That kind of cross-runner failure is useful evidence for conformance work, but the Scala node remains the consensus authority. - The peer-penalty system was designed to integrate with
fail2ban, but repeated or malformed request behavior still needed tuning during April testing. - Memory work focused on reducing database cache pressure after the node reaches tip. The
v0.4.0release reopened the runtime AVL state database with a smaller redb cache once chain sync completed. - NiPoPoW work included bootstrapping and proof-serving gaps. One noted difference was that the sigma-rust
NipopowProofstructure lacked acontinuousfield present in the JVM node. - Use the Rust node for testing, differential validation, and implementation research unless release notes explicitly mark a version as production-ready. SANTA runner results are useful evidence for implementation parity, but they do not by themselves turn an experimental node into a production reference client.