Quick Start
This is the fastest path from “binary built” to “node syncing mainnet”. Five commands.
If you have not built the binary yet, do Installation first.
1. Pick a database path
Choose a directory on a fast SSD with at least 200 GB free. The chain plus ledger snapshots will grow there.
$ export YG_DB=/var/lib/yggdrasil/db
$ mkdir -p "$YG_DB"
2. Validate the configuration
$ yggdrasil-node validate-config --network mainnet --database-path "$YG_DB"
Expected output: a report with zero errors. Warnings about “storage not initialized” or “no peer snapshot” are normal for a fresh node.
If validate-config reports a HashMismatch for any genesis file, stop. The vendored config under node/configuration/mainnet/ is corrupt or out of date. Reclone the repository.
3. Start the node
$ yggdrasil-node run --network mainnet --database-path "$YG_DB" --metrics-port 12798
Interpret the output:
Net.Bootstraptraces show the initial peer dial.ChainDB.AddBlockEventtraces fire as blocks are validated and persisted.Node.Recovery.Checkpointtraces fire periodically as the ledger snapshot is checkpointed.
The first sync from genesis to current tip takes:
- Mainnet: 24–60 hours depending on hardware. The Byron era replays in minutes; Shelley+ takes most of the time.
- Preprod: 2–6 hours.
- Preview: 30 min – 2 hours.
4. Watch progress
In a second terminal:
$ yggdrasil-node status --database-path "$YG_DB"
This prints the on-disk sync position, block count, checkpoint state, and ledger counts (UTxO entries, registered pools, DReps).
Or, if you enabled --metrics-port:
$ curl -s http://127.0.0.1:12798/metrics | grep -E "^yggdrasil_(blocks_synced|current_slot|current_block_number)"
yggdrasil_blocks_synced 412987
yggdrasil_current_slot 117425831
yggdrasil_current_block_number 11293441
The current mainnet tip slot is published at pooltool.io or explorer.cardano.org. When yggdrasil_current_slot reaches that value, your node is fully caught up.
5. Submit a transaction (optional)
Once synced, you can use the node as a transaction submission endpoint. With cardano-cli from upstream:
$ cardano-cli transaction submit \
--tx-file my-signed-tx.txsigned \
--socket-path "$YG_DB/node.sock"
Or from Yggdrasil’s own CLI (Unix only):
$ yggdrasil-node submit-tx --tx-hex 84a300...01ff --network mainnet
Stop the node cleanly
Ctrl-C (SIGINT) or kill -TERM <pid> triggers graceful shutdown:
- Inbound accept loop stops accepting new connections.
- In-flight inbound sessions get up to 5 seconds to complete.
- Outbound peers receive
ControlMessage::Terminate. - The connection manager drains warm and hot peers via
release_outbound_connection. - The current ledger checkpoint is flushed to disk.
After clean shutdown, restarting from the same --database-path resumes from the checkpoint — only the volatile suffix is replayed (typically the last K=2160 blocks).
What just happened
Your node:
- Loaded the mainnet genesis files from
node/configuration/mainnet/. - Verified each genesis file hash matches the value pinned in the config.
- Connected to the bootstrap peers listed in
topology.json. - Negotiated the NtN handshake (versions 13/14) with each peer.
- Started ChainSync, BlockFetch, KeepAlive, TxSubmission2, and PeerSharing mini-protocols on the multiplexer.
- Pulled chain history from genesis, verified every block, applied the ledger transition, and persisted to disk.
- Started accepting inbound connections (default-disabled unless you set
inbound_listen_addr). - Started the peer governor, refreshing peer state every governor tick.
Where to go next
- For a real production deployment, continue to Configuration to tune peer counts, log destinations, and storage paths for your environment.
- To run the node under systemd, see Running a Node.
- For Prometheus scraping and dashboard setup, see Monitoring.
- To produce blocks as a stake pool, see Block Production.