dugite-node Reference

dugite-node is the main Dugite node binary. The two subcommands used in day-to-day operation are run (start the node) and mithril-import (import a Mithril snapshot for fast initial sync), documented below.

The binary also ships several operator/debug subcommands not covered in detail here: db info (database size and block count), dump-snapshot (replay the chain and dump ledger state at epoch boundaries, for cross-validation), verify-ledger-snapshot (byte-exact comparison of two ledger snapshots), and snapshot-convert (convert a ledger snapshot between the in-memory and LSM UTxO backends without a chain replay). Run dugite-node <subcommand> --help for their flags.

run

Start the Dugite node:

dugite-node run [OPTIONS]

Options

FlagDefaultDescription
--configconfig/mainnet/config.jsonPath to the node configuration file
--topologyconfig/mainnet/topology.jsonPath to the topology file
--database-pathdbPath to the database directory
--socket-pathnode.sockUnix domain socket path for N2C (local client) connections
--port3001TCP port for N2N (node-to-node) connections
--host-addr0.0.0.0Host address to bind to
--metrics-portPrometheus metrics port. If omitted, the config file's MetricsPort is used; if neither is set, defaults to 12798
--no-metricsfalseDisable the Prometheus metrics server entirely. Equivalent to --metrics-port 0
--require-metricsfalseMake a metrics bind failure a fatal startup error (default: node continues if the port can't be bound)
--rpc-hostUTxO RPC (gRPC) server bind address. Overrides Rpc.ListenAddr from the config file. Defaults to 127.0.0.1 when the server is enabled
--rpc-portUTxO RPC (gRPC) server port. Overrides Rpc.Port; setting this implies enabling the RPC server. Defaults to 50051 when set via config
--no-rpcfalseDisable the UTxO RPC (gRPC) server entirely, overriding --rpc-host/--rpc-port/Rpc.Enabled
--compat-metricsfalseAlso emit cardano_node_metrics_* compatibility aliases alongside the native dugite_* metrics, for reuse of existing cardano-node Grafana dashboards
--liveness-threshold-secs600Liveness threshold (seconds) for the /live HTTP endpoint; 0 disables it (always 200)
--consensus-modeConsensus mode override: praos or genesis (Ouroboros Genesis with GSM). When omitted, read from the config file's ConsensusMode field (default PraosMode)
--validate-all-blocksfalseForce full Phase-2 Plutus validation on all blocks, even during initial sync (normally only blocks at tip are fully validated)
--skip-eagerly-validated-header-cryptofalseSkip apply-time header re-validation for headers that already passed eager per-peer validation. Off by default; see the flag's doc comment before enabling in production
--dijkstra-genesisPath to the Dijkstra-era genesis JSON file, overriding the config file's DijkstraGenesisFile (parsed but not yet applied to runtime protocol parameters)
--shelley-kes-keyPath to the KES signing key (enables block production)
--shelley-vrf-keyPath to the VRF signing key (enables block production)
--shelley-operational-certificatePath to the operational certificate (enables block production)
--shelley-cold-keyPath to the cold signing key file, used for pool ID derivation
--log-outputstdoutLog output target: stdout, file, or journald. Can be specified multiple times.
--log-formattextLog format: text (human-readable) or json (structured).
--log-levelinfoLog level (trace, debug, info, warn, error). Overridden by RUST_LOG.
--log-dirlogsDirectory for log files (used with --log-output file)
--log-file-rotationdailyLog file rotation strategy: daily, hourly, or never
--log-no-colorfalseDisable ANSI colors in stdout output
--log-retention-days7Number of days to retain log files
--stdout-overflowdropChannel-full policy for the non-blocking stdout writer: drop (keep going, count dropped lines) or block (lossless, but re-introduces blocking on the hot path)
--mempool-max-tx16384Maximum number of transactions in the mempool
--mempool-max-bytes536870912Maximum mempool size in bytes (default 512 MB)
--snapshot-max-retained2Maximum number of ledger snapshots to retain on disk
--snapshot-bulk-min-blocks50000Minimum blocks between bulk-sync snapshots
--snapshot-bulk-min-secs360Minimum seconds between bulk-sync snapshots
--storage-profilehigh-memoryStorage profile: ultra-memory (32GB), high-memory (16GB), low-memory (8GB), or minimal (4GB)
--immutable-index-typeOverride block index type: in-memory or mmap
--utxo-backendOverride UTxO backend: in-memory or lsm
--utxo-memtable-size-mbOverride LSM memtable size in MB
--utxo-block-cache-size-mbOverride LSM block cache size in MB
--utxo-bloom-filter-bitsOverride LSM bloom filter bits per key

Relay Node (default)

Run as a relay node with no block production keys:

dugite-node run \
  --config config/preview/config.json \
  --topology config/preview/topology.json \
  --database-path ./db-preview \
  --socket-path ./node.sock \
  --host-addr 0.0.0.0 \
  --port 3001

Block Producer

Run as a block producer by providing all three key/certificate paths:

dugite-node run \
  --config config/preview/config.json \
  --topology config/preview/topology.json \
  --database-path ./db-preview \
  --socket-path ./node.sock \
  --host-addr 0.0.0.0 \
  --port 3001 \
  --shelley-kes-key ./keys/kes.skey \
  --shelley-vrf-key ./keys/vrf.skey \
  --shelley-operational-certificate ./keys/opcert.cert

When all three block producer flags are provided, the node enters block production mode. The cold signing key is not needed at runtime — the cold verification key is extracted from the operational certificate, matching cardano-node behavior.

If any of the three flags is missing, the node runs in relay-only mode.

Environment Variables

VariableDefaultDescription
DUGITE_PIPELINE_DEPTH300ChainSync pipeline depth (number of blocks requested ahead)
RUST_LOGinfoLog level filter (e.g., debug, info, warn, dugite_node=debug). Overrides --log-level.

See Logging for details on output targets, file rotation, and per-crate filtering.

Configuration File

The --config file follows the same JSON format as cardano-node. Key fields:

{
  "Protocol": "Cardano",
  "RequiresNetworkMagic": "RequiresMagic",
  "ByronGenesisFile": "byron-genesis.json",
  "ShelleyGenesisFile": "shelley-genesis.json",
  "AlonzoGenesisFile": "alonzo-genesis.json",
  "ConwayGenesisFile": "conway-genesis.json"
}

Genesis file paths are resolved relative to the directory containing the config file.

Metrics

When --metrics-port is non-zero, Prometheus metrics are served at http://localhost:<port>/metrics. See Monitoring for the full list of available metrics.

mithril-import

Import a Mithril snapshot for fast initial sync. This downloads and verifies a certified snapshot from a Mithril aggregator, then imports all blocks into the local database.

dugite-node mithril-import [OPTIONS]

Options

FlagDefaultDescription
--network-magic764824073Network magic value
--database-pathdbPath to the database directory
--temp-dirTemporary directory for download and extraction (uses system temp if omitted)
--mithril-genesis-vkeyOverride the Mithril genesis verification key (JSON hex-encoded Ed25519 verification key string), for private networks
--skip-certificate-verificationfalseSkip Mithril STM certificate chain verification (UNSAFE — testing only)
--allow-stale-pparamsfalseContinue the import even if the ancillary archive can't be downloaded, falling back to genesis-default protocol parameters at the imported tip. Not recommended for production
--include-ancillary / --no-include-ancillarytrueDownload and import the Mithril ancillary archive (Haskell ledger state at the immutable tip), dropping bootstrap time from multi-hour to ~15 minutes. --no-include-ancillary restores the pre-ancillary behavior of deriving ledger state entirely from chunk-by-chunk block replay — see Mithril Ancillary
--log-outputstdoutLog output target: stdout, file, or journald. Can be specified multiple times.
--log-formattextLog format: text (human-readable) or json (structured).
--log-levelinfoLog level (trace, debug, info, warn, error). Overridden by RUST_LOG.
--log-dirlogsDirectory for log files (used with --log-output file)
--log-file-rotationdailyLog file rotation strategy: daily, hourly, or never
--log-no-colorfalseDisable ANSI colors in stdout output
--log-retention-days7Number of days to retain log files
--stdout-overflowdropChannel-full policy for the non-blocking stdout writer: drop or block

Network Magic Values

NetworkMagic
Mainnet764824073
Preview2
Preprod1

Example: Preview Testnet

dugite-node mithril-import \
  --network-magic 2 \
  --database-path ./db-preview

# Then start the node to sync from the snapshot to tip
dugite-node run \
  --config config/preview/config.json \
  --topology config/preview/topology.json \
  --database-path ./db-preview \
  --socket-path ./node.sock

The import process:

  1. Downloads the latest snapshot from the Mithril aggregator
  2. Verifies the snapshot digest (SHA256)
  3. Extracts and parses immutable chunk files
  4. Imports blocks into ChainDB with CRC32 verification
  5. Supports resume — skips blocks already in the database

On preview testnet, importing ~4M blocks takes approximately 2 minutes.