Quick Start
Quick Start
Get an UltraDAG node running in under 5 minutes. This guide covers building from source, running a single node, spinning up a local testnet, and making your first RPC calls.
Download Pre-Built Binary
The fastest way to get started. Pre-built binaries are available for Linux and macOS.
Linux (x86_64)
curl -L https://github.com/UltraDAGcom/core/releases/download/latest/ultradag-node-linux-x86_64.tar.gz | tar xz
chmod +x ultradag-node-linux-x86_64
./ultradag-node-linux-x86_64 --port 9333
macOS (Apple Silicon)
curl -L https://github.com/UltraDAGcom/core/releases/download/latest/ultradag-node-macos-arm64.tar.gz | tar xz
chmod +x ultradag-node-macos-arm64
./ultradag-node-macos-arm64 --port 9333
macOS (Intel)
curl -L https://github.com/UltraDAGcom/core/releases/download/latest/ultradag-node-macos-x86_64.tar.gz | tar xz
chmod +x ultradag-node-macos-x86_64
./ultradag-node-macos-x86_64 --port 9333
To validate (produce blocks and earn UDAG):
./ultradag-node-linux-x86_64 --port 9333 --validate
Prerequisites (for building from source)
You need a working Rust toolchain (1.75+):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup update stable
Verify your installation:
rustc --version # 1.75.0 or newer
cargo --version
Build from Source
Clone the repository and build the node binary:
git clone https://github.com/UltraDAGcom/core.git ultradag
cd ultradag
cargo build --release -p ultradag-node
The binary is at target/release/ultradag-node (< 2 MB). You can copy it anywhere:
cp target/release/ultradag-node /usr/local/bin/
Run a Single Node
Start a standalone validator node:
cargo run --release -p ultradag-node -- --port 9333 --validate
This will:
- Generate a fresh Ed25519 keypair
- Start the P2P listener on port
9333 - Start the RPC server on port
10333(P2P port + 1000) - Begin producing DAG vertices as a solo validator
You should see output like:
[INFO] UltraDAG node starting on port 9333
[INFO] RPC server listening on 0.0.0.0:10333
[INFO] Validator mode enabled
[INFO] Generated keypair: address=a1b2c3...
[INFO] Round 1: produced vertex abc123...
[INFO] Round 1: finalized 1 vertices
Run a Local Testnet
For a more realistic setup, run a 4-node local testnet:
#!/bin/bash
# run-local-testnet.sh
# Start 4 validator nodes
cargo run --release -p ultradag-node -- --port 9333 --validate --validators 4 --testnet &
cargo run --release -p ultradag-node -- --port 9334 --validate --validators 4 --seed 127.0.0.1:9333 --testnet &
cargo run --release -p ultradag-node -- --port 9335 --validate --validators 4 --seed 127.0.0.1:9333 --testnet &
cargo run --release -p ultradag-node -- --port 9336 --validate --validators 4 --seed 127.0.0.1:9333 --testnet &
echo "Testnet running. RPC ports: 10333, 10334, 10335, 10336"
echo "Press Ctrl+C to stop all nodes"
wait
Make it executable and run:
chmod +x run-local-testnet.sh
./run-local-testnet.sh
--seed flag specifies peer addresses (host:port) for the node to connect to on startup. The first node starts without --seed and subsequent nodes connect to it.Connect to the Public Testnet
To join the live 5-node testnet on Fly.io:
cargo run --release -p ultradag-node -- \
--port 9333 \
--testnet
The node will automatically discover and connect to bootstrap nodes. Omit --validate to run as an observer (no staking required).
Basic RPC Calls
With a node running (RPC on port 10333 by default), try these commands:
Check Node Status
curl http://localhost:10333/status
{
"dag_round": 42,
"last_finalized_round": 40,
"peers": 3,
"total_supply": 1050042000000000
}
Generate a Keypair
curl http://localhost:10333/keygen
{
"address": "e7f8a9b0c1d2...",
"secret_key": "9f8e7d6c5b4a..."
}
/keygen endpoint returns private keys in plaintext. This is a testnet convenience — on mainnet, generate keys client-side using an SDK.Get Testnet UDAG from Faucet
curl -X POST http://localhost:10333/faucet -H "Content-Type: application/json" -d '{"address":"e7f8a9b0c1d2...","amount":10000000000}'
{
"tx_hash": "abc123...",
"amount": 10000000000,
"message": "Sent 100 UDAG to e7f8a9b0c1d2..."
}
Check Balance
curl http://localhost:10333/balance/e7f8a9b0c1d2...
{
"address": "e7f8a9b0c1d2...",
"balance": 100000000000,
"nonce": 0,
"staked": 0,
"delegated": 0
}
Send a Transaction
curl -X POST http://localhost:10333/tx \
-H "Content-Type: application/json" \
-d '{
"secret_key": "9f8e7d6c5b4a...",
"to": "1a2b3c4d5e6f...",
"amount": 50000000000,
"fee": 10000
}'
{
"tx_hash": "def456...",
"status": "accepted"
}
/tx endpoint accepts secret_key for testnet convenience. For mainnet, sign transactions client-side and submit via /tx/submit. See Transaction Format.Run the Test Suite
Verify everything works:
cargo test --workspace
This runs all 836 tests across the crates, including consensus simulation, state engine invariants, and P2P protocol tests.
Next Steps
| Goal | Guide |
|---|---|
| Deploy with Docker | Docker Guide |
| Become a validator | Run a Validator |
| Integrate via API | RPC Endpoints |
| Use an SDK | SDKs |
| Understand the consensus | DAG-BFT Consensus |