DecentralChain Node
A Scala full node, forked from Dcc 1.6.x, carrying the RIDE smart contract language and a REST API that stays compatible with the Dcc API. One process does all of it: transaction validation, block production and storage, peer communication, and extensions.
You do not need to produce blocks to run one. A node that only validates and serves the API is useful on its own, and it is what you want behind an application that should not depend on someone else's endpoint.
Leased Proof of Stake decides who produces the next block by generating balance. Holders can lease their balance to a producer without giving up custody: the lease adds to that producer's generating balance, the coins never move, and the holder can cancel it. That is the leased part.
The thresholds are in GeneratingBalanceProvider, and there are two of them:
SmallerMinimalGeneratingBalance feature is activated on the network. Until then the 10,000 figure is the one that binds.Fees split under Next Generation: 40% to the block that includes the transaction and 60% to the producer of the following block. The node does carry an unused reward implementation of 6 DCC per block over 100,000-block terms, which is not running.
| Requirement | Minimum | Recommended |
|---|---|---|
| Docker Engine | 25.x | Latest stable |
| RAM | 4 GB | 8 GB |
| CPU | 2 cores | 4+ cores |
| Disk (mainnet, SSD) | 200 GB | 500 GB |
| Network | 100 Mbit/s | 1 Gbit/s |
| Inbound ports | 6868/tcp | 6868/tcp + 6869/tcp |
Initial sync takes hours to days depending on disk and network. A fast SSD is the difference between the two.
Docker is the supported path. Keep the seed and password in an env file with chmod 600 that is never committed, and pass it with --env-file rather than putting secrets in your shell history.
docker run -d \--name dcc-node \--restart unless-stopped \-p 6868:6868 \-p 6869:6869 \-v dcc-data:/var/lib/dcc \-e DCC_NETWORK=mainnet \-e DCC_HEAP_SIZE=4g \-e DCC_WALLET_SEED="$DCC_WALLET_SEED" \-e DCC_WALLET_PASSWORD="$DCC_WALLET_PASSWORD" \ghcr.io/decentral-america/node-scala:mainnet-latest
On bare metal you need a Java 25 JDK, Eclipse Temurin recommended, and the fat JAR built from the repository:
java -Xmx4g \-Djava.net.preferIPv4Stack=true \-jar node/target/dcc-all-<version>.jar \node/decentralchain-mainnet.conf
Each network runs its own P2P port and ships its own known peers. The REST API listens on 6869 and, on mainnet, binds to 127.0.0.1 by default. Leave it that way unless you intend to publish it, and put a reverse proxy in front if you do.
| Network | P2P port | Known peers |
|---|---|---|
| mainnet | 6868 | 168.119.116.189 · 135.181.87.72 · 35.158.218.156 · 52.48.34.89 |
| testnet | 6863 | 159.69.126.149 · 94.130.105.239 · 159.69.126.153 · 94.130.172.201 |
| stagenet | 6862 | 88.99.185.128 · 95.216.205.3 · 49.12.15.166 · 88.198.179.16 |
Mainnet and testnet want at least 5 connections, stagenet 3. The defaults live in node/src/main/resources/network-defaults.conf.
# Status: expect stateHeight == blockchainHeight, updatedTimestamp recentcurl -s http://localhost:6869/node/status | python3 -m json.tool# Your height against a known peercurl -s http://localhost:6869/blocks/heightcurl -s http://168.119.116.189:6869/blocks/height
More than 100 blocks behind a peer means it is still syncing, which is normal on a first start. If height stops moving after sync completes, restart and search the logs for Fork or InvalidBlock.
RUNBOOK.md in the node repository: starting, health, sync, wallet management, log handling, upgrades and graceful shutdown.docker/README.md for a complete Docker Compose setup.node/src/main/resources/network-defaults.conf for per-network ports, peers and consensus parameters.infra/LEASING-CUSTODY-DESIGN.md for how generator stake is held through leasing, and its threat model.Next
node-scala on GitHub
The node source, the runbook, the Docker images and the network configs.
Next
Node, in the manual
What a node is, what it stores, and how it talks to the rest of the network.