This post features work completed by @alchemydc.
For this year’s “Hackmas,” I developed zeeder, a modern, Rust-based DNS seeder for the Zcash network.
What I Worked On
I built a high-performance DNS seeder designed to replace legacy C++ and Go implementations that have become difficult to maintain. The core of the project is its integration with our team’s zebra-network crate, allowing us to “dogfood” our own networking stack for peer discovery and management.
Why It’s Useful
Legacy seeders are often siloed from our primary development efforts. By moving to a Rust-based architecture that consumes zebra-network, the seeder automatically benefits from any incremental improvements or protocol updates we make to the underlying crate. It also introduces modern features like:
- Rate Limiting: Per-IP rate limiting via the governor crate to prevent zeeder from being used to perpetrate UDP amplification attacks.
- Observability: Full Prometheus metrics integration for tracking eligible peer counts and query volume.
- Performance: An address cache behind a read-write lock that’s updated every five seconds, eliminating lock contention during high query loads. (thanks @arya!)
Current Status
The project is currently in Beta and is considered ready for production testing.
Discoveries and Conclusions
A key technical takeaway was the effectiveness of using tokio::sync::watch channels for the address cache. This design allows the DNS server to serve filtered, pre-shuffled peer lists with near-zero latency, even while the crawler task is busy updating the internal address book. Additionally, using zebra-network ensured immediate protocol compliance without having to recreate complex Zcash-specific handshaking logic.
Community Feedback
We are looking for feedback from the community on deployment and performance. Specifically:
- Results from running the seeder in different geographical regions.
- Feedback on the current rate-limiting defaults (10 queries/second per IP).
- Any issues encountered when integrating the seeder into existing Zcash infrastructure.
- Please report any bugs found as Github issues.
What’s Next
Our next priorities for the seeder will be:
- Health Check: the seeder should expose a health check to better integrate with cloud native deployments.
- Helm Chart: to make it easy to deploy into Kubernetes environments.
- Advanced Filtering: Refining the “eligible peer” criteria to include more granular health checks.