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.8.1 aligned
CONTEXT.headerswith the reference node's nine preceding headers and allowed missing-parent requests to resume after the unknown-parent request budget had been exhausted. - v0.8.0 removed deferred script evaluation, introduced derived memory-budget and split-cache settings, moved Debian configuration into
/etc/ergo-node/conf.d/, and fixed external-miner candidates, at-tip candidate serving, and mempool admission. UTXO mode now refuses to start below a 3 GiB memory ceiling unless the operator explicitly overrides the floor. - v0.7.11 fixed a reorg header-index overwrite and fast-sync cold-start gap, and added offline state compaction. Operators whose
v0.7.5–v0.7.10index is already clobbered still need a resync. - v0.7.10 stopped unbounded
state.redbgrowth; it does not reclaim existing unreachable rows. v0.7.9, v0.7.8, and v0.7.7 fixed P2P frame sizing and several restart/at-tip proof-digest failures. - v0.7.6 fixed an AVL-tree persistence bug that could omit rebalanced internal nodes and later cause resolver-miss panics at the chain tip. The release notes require operators upgrading from an earlier version to delete the node's local
state.redband resync because existing state may already be incomplete. - v0.7.5 added the missing proof-digest consensus check after block application, fixed genesis/proof-generation ordering needed for canonical proofs, and decoupled validation sweeps from download progress. The release notes say SANTA isolated a live testnet divergence; this reinforces the node's experimental status.
- 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.
The independent arkadianet/ergo v0.5.3 release added configurable mining extension fields and digest-mode ADProofs scheduling, while fixing storage-rent candidate construction, mempool orphan eviction, sync bounds, snapshot authentication, and several consensus-parity issues. It remains pre-1.0 alpha software; verify results against the Scala reference node.
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. - SANTA's August AuthDS review retired three AVL operations that are unreachable from current ErgoScript/node paths. On the remaining reachable corpus, its JVM and
ergotsrunners agreed on all 37 verifier fixtures; this is scoped conformance evidence, not a general production-readiness claim. - The independent
arkadianet/ergonode now separates Scala-compatible API documentation at/swaggerfrom its native Rust API family at/swagger/native. - 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.