Skip to main content

System requirements

ResourceMinimumRecommended
CPU4 cores8+ cores
RAM8 GB16+ GB
Disk200 GB NVMe/SSD1+ TB NVMe
Network100 Mbps symmetric1 Gbps symmetric
Uplink data cap5 TB/monthUnmetered
Public IP or NAT traversalYes (iroh hole-punching handles most NATs)Static IP preferred
ClockNTP syncedNTP synced
QUIC performs best on kernels with GRO/GSO support — recent Linux (5.15+) is fine. macOS and Windows are supported but Linux is the expected production target.

Install

The binary is a single statically linked Rust artifact. Installation paths (to be finalized at release):
  • Pre-built binaries for Linux (x86_64, aarch64), macOS (Apple Silicon, Intel), Windows
  • cargo install from the published crate
  • Container image (Docker / OCI)
All modes run the same binary; a CLI flag or config value distinguishes node vs. client operation.

First-run checklist

  1. Generate an iroh key. decdn node init-keys creates a new ed25519 keypair and writes it to a platform keychain (macOS Keychain, Windows Credential Manager, or Gnome Keyring). Hardware wallets are also supported.
  2. Fund an Ethereum address. The address is used for staking, binding, and payment settlement. Fund with TOKEN (for stake) and a small ETH balance (for gas).
  3. Pick a region. Two-letter country code (DE, US, SG). This determines your regional gossip topic and which regional takedown entries bind you.
  4. Decide whether to run origin-backed. If yes, configure the backend and hash-to-object-key catalog (backend integration). If no, skip to step 5 with origin: null.
  5. Pick an initial rate. Within the governance-set bounds for the payment token. Rate is per MB, in the smallest unit of the token.
  6. Register on-chain. decdn node register executes the atomic registerNode transaction — binds your NodeId to your Ethereum address, proves ed25519 ownership, and records your initial multiaddrs (staking & registration).
  7. Start the node. decdn node run --config /etc/decdn/config.toml.
  8. Verify health. Hit http://127.0.0.1:9090/health and look for "ready". If it reports "degraded" or "not_ready", check the operational metrics (observability).

Minimal config

[identity]
iroh_key_path = "/var/lib/decdn/iroh.key"
eth_key_path  = "/var/lib/decdn/eth.key"

[node]
region            = "DE"
public_multiaddr  = "/ip4/203.0.113.10/udp/4442/quic-v1"
advertise_rate   = "1000000"  # smallest-unit-of-USDC per MB
max_blob_size    = "10GB"

[cache]
size_gb          = 500
path             = "/var/lib/decdn/cache"
eviction         = "lru"
pull_through     = true

[origin]
# omit this block if pure-cache
backend          = "s3"
bucket           = "decdn-provider-origin"
credentials_path = "/etc/decdn/s3-credentials"
catalog_uri      = "postgres://..."

[chain]
rpc_url          = "https://arb1.arbitrum.io/rpc"
staking_registry = "0x..."
payment_channel  = "0x..."

[observability]
metrics_port     = 9090
health_port      = 9090
log_format       = "json"

Next steps