Skip to content

Releases: quantachain/quanta

Quantachain Testnet Alpha V2.0.0

01 Jun 18:16

Choose a tag to compare

QuantaChain Testnet — V2 Alpha (v2.0.0)

Post-quantum secure blockchain using Falcon-512 signatures and Asynchronous Byzantine Fault Tolerance (AlephBFT).

v2.0.0 — TESTNET RESET (2026-06-06)
All nodes must wipe their databases (rm -rf ./quanta_testnet_data) and sync from the new genesis block.
New genesis hash: ae37fe2f40a7e7dbe6d2d1337f260d57185ef5fb169008e2600f245809fd1fbf

This is a pre-release testnet build. Do not use real funds. APIs and chain parameters may change between alpha releases.


What Changed in v2.0.0

  • Block timing fixed — Blocks were slowing from 6 s to 1–2 h due to a timestamp drift bug in create_block_template. Block timestamps now can never exceed wall-clock time.
  • Validator 5 replaced — Lost wallet 0x822dd149... replaced with 0x591277eb458e3185bef4fcf18c1c7136fb8bbad6.
  • Faucet wallets rotated — All 10 genesis faucet wallets replaced with new HD wallet accounts.
  • Genesis reset — Timestamp bumped to 2026-06-06, generating a new genesis hash that forces a clean chain wipe.

🚨 V2 Hard Fork Details 🚨

  • Consensus Engine: Migrated from SHA3-256 Proof of Work to AlephBFT (Asynchronous Byzantine Fault Tolerance).
  • Network Isolation: Updated network magic bytes to Q2T4 to prevent old nodes from connecting to the new consensus network.
  • Block Time: Exact 6-second deterministic slots (previously ~30s random).
  • Mining Removed: All start_mining commands and the quanta-miner binary have been removed.
  • AI Agent Support: Added headless QUANTA_WALLET_PASSWORD environment variable support for automated AI escrow workflows.
  • HD Wallets: The CLI wallet has been completely rewritten to support deterministic hierarchical generation natively.
  • Persistent Crash Recovery: AlephBFT DAG state is now persisted to disk (alephbft_backup.dat), allowing seamless recovery and network rejoin after node restarts.

Genesis Block

Parameter Value
Network Testnet (QUA7)
Timestamp 1780704001 (2026-06-06 00:00:01 UTC)
Testnet Genesis Hash ae37fe2f40a7e7dbe6d2d1337f260d57185ef5fb169008e2600f245809fd1fbf
Faucet 0 (API sender) 0xec4f49553e31f22b27a83036a044aff7d697f524
Block Time Exactly 6 seconds
TPS Limit ~250 - 300 TPS (assuming 2MB block limit)

🔄 Clean Start Guide (Wipe Data & Resync from Genesis)

You MUST perform a clean start to join the V2 Testnet!
The V2 BFT consensus engine uses a different block structure and state machine. It will crash if it reads old V1 PoW blocks.

Bare Metal / VPS (no Docker)

pkill -f "quanta start"    # stop the old node
rm -rf ./quanta_testnet_data  # WIPE THE OLD POW CHAIN DATA!
cargo build --release      # compile the new V2 binary
./target/release/quanta start -c quanta.toml

Validator Setup (Docker)

⚠️ ATTENTION: This is currently a strictly permissioned testnet designed only for testing. Only the validators explicitly hardcoded in the Genesis set can run a node and produce blocks.
Once the network matures, we will implement full DPoS, allowing anyone to stake and participate in consensus. Until then, if you would like early access to participate, please email: contact@quantachain.org

If you have been selected as a validator, follow these exact instructions to spin up your validator node and connect to the core network using Docker:

1. Create a Wallet and Get Your Key
You must generate a raw wallet and provide the public key to the core team to be whitelisted in the Genesis block.

docker run --rm -it xd637/quanta-node:latest quanta-wallet new-raw --file /tmp/validator.qua

2. Directory Setup
Create the directory where your blockchain data will live. We recommend adding _v2 to avoid mixing it with any old testnet data:

mkdir -p ~/quanta_data_v2

3. Place Your Wallet File
Move your validator wallet file (e.g., validator.qua or whatever you named it) directly into the ~/quanta_data_v2 directory you just created.

Your folder should look exactly like this:

~/quanta_data_v2/
└── validator.qua

(Note: You do NOT need the genesis.json or quanta.toml files! The latest network configuration is securely baked directly into the V2 Docker image.)

4. Pull the Latest Image & Start the Node
Run the following Docker commands to pull the latest V2 build, launch your node, connect to the Bootstrap node, and begin proposing blocks.

Important

Before running the second command below, you MUST change two things:

  1. Change "YOUR_PASSWORD_HERE" to your actual wallet password.
  2. Change validator.qua at the very end of the command to match the exact name of your wallet file.
docker pull xd637/quanta-node:latest

docker run -d \
  --name quanta-validator \
  --restart always \
  --network host \
  -v ~/quanta_data_v2:/home/quanta/quanta_data \
  -e QUANTA_WALLET_PASSWORD="YOUR_PASSWORD_HERE" \
  xd637/quanta-node:latest \
  quanta start --validator-wallet /home/quanta/quanta_data/validator.qua --bootstrap 79.137.78.1:8333

Wallet Management

# New HD Wallet (Recommended)
quanta-wallet new --file my_wallet.json

# New Raw Wallet
quanta-wallet new-raw --file my_raw.qua

# AI Headless Mode (Set env var to skip password prompts)
export QUANTA_WALLET_PASSWORD="your_password"
quanta-wallet info --file my_wallet.json

Ports

Port Service
3000 REST API
8333 P2P Network
7782 RPC
9090 Prometheus Metrics

License

QUANTACHAIN operates under an Open-Core Dual License model:

Component License
Core Protocol GNU AGPLv3
Native Templates & APIs QuantaLabs Commercial License

For commercial licensing: contact@quantachain.org

Quantachain Testnet Alpha V.0.7.6

27 May 16:09

Choose a tag to compare

QuantaChain Testnet — Alpha v0.7.6

Post-quantum secure blockchain using Falcon-512 signatures and SHA3-256 Proof of Work.

v0.7.6 — Consensus-critical: permanent state root validator fix + block 140,000 checkpoint.
All nodes MUST upgrade. Nodes stuck at any block height with repeated "Invalid state root"
errors (including 95,001 and 137,990) will resume syncing after restart. No data wipe needed.

This is a pre-release testnet build. Do not use real funds. APIs and chain parameters may change between alpha releases.


Genesis Block

Parameter Value
Network Testnet (QUA7)
Timestamp 1775001600 (2026-04-01 00:00:00 UTC)
Testnet Genesis Hash 00000012d3a2cbb7eb9579330ccdaa4f83ca9e6e016bfe6d2c8a38539cf3733b
Mainnet Genesis Hash 1cdbccdff3db462378f4acbe4553b49040ffcdebf74b5c77e685ba05ccfa8cb0
Difficulty 8,304,130 (Testnet) / 16,777,216 (Mainnet)
Block Time 30 seconds

Testnet Faucet Wallets (Genesis Premine)

Each address below received 1,000,000 QUA at genesis. Faucet account 0 is the active sender used by the faucet API.

Index Address Role
0 0x1683be267318d2ddd8cee8df4a4548dcffb1e088 Faucet Sender (active)
1 0xd528c18ce7a8844e4a4dcd841975b20ae599b020 Faucet Reserve
2 0xfd6e36bfa2b2798d08592802206c943d5513adfb Faucet Reserve
3 0xed15573ad312d41aaef74cff56a8ef28122ec2db Faucet Reserve
4 0xaffd6d4f74c5651110efcf1b9736f7a5cf2ccdbb Faucet Reserve
5 0xbf5ee055f399323fdd0cefe3d4aa923678d46107 Faucet Reserve
6 0x1dc9637b183093d723ea8d1fb18083b06490facb Faucet Reserve
7 0xa2270f30ca1aad922510375508bf68cd95509f29 Faucet Reserve
8 0xe15a689775685ae324559ea9a492fc650354ca0b Faucet Reserve
9 0x005dcff212d27b55e7a74bf745e1349ab44ca25d Faucet Reserve

Treasury

Parameter Value
Treasury Address ms69216b1d10425689704d5ae3b2a4aa17049f59b1
Multisig Scheme 3-of-5 Falcon-512
Block Reward to Treasury 5% per block
Fee to Treasury 20% of transaction fees

Tokenomics

Parameter Value
Year 1 Block Reward 100 QUA
Annual Reward Reduction 15% per year
Minimum Reward Floor 5 QUA (reached ~year 20)
Mining Reward Lock 50% locked for 6 months
Fee Burn 70% of all transaction fees
Fee to Treasury 20% of all transaction fees
Fee to Miner 10% of all transaction fees
Max Block Transactions 1,200
Max Block Size 2 MB
Min Transaction Fee 0.0001 QUA

Quick Start with Docker

Running a Node

⚠️ Your wallet file is never affected by node updates or data wipes.
Mining rewards are on-chain — your balance is safe as long as your address exists.
Never delete your wallet file. Only ever wipe the data directory.


Upgrade to v0.7.6 — no data wipe needed

Use this for every normal update. Your chain data stays intact and the node
resumes from where it left off.

docker pull xd637/quanta-node:latest
docker stop quanta-node && docker rm quanta-node
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  -v ~/quanta_logs:/home/quanta/logs \
  xd637/quanta-node:latest

docker logs quanta-node --tail 50 -f

Fresh Start — wipe data and resync from genesis

Use this only if support advises it, or if you are stuck on an old version
with a wire-format incompatibility (v0.7.0 was the last reset).
Not needed for v0.7.6 — the node recovers without a wipe.

# 1. Stop and remove the container
docker stop quanta-node
docker rm quanta-node

# 2. Delete the chain data
rm -rf ~/quanta_data && mkdir -p ~/quanta_data
rm -rf ~/quanta_logs && mkdir -p ~/quanta_logs

# 3. Pull latest image and start fresh
docker pull xd637/quanta-node:latest
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  -v ~/quanta_logs:/home/quanta/logs \
  xd637/quanta-node:latest

# 4. Watch sync progress
docker logs quanta-node --tail 50 -f

How long does resync take?

Chain Height Good VPS (4+ cores) Weak VPS / slow link
0 → 50,000 ~3–6 min ~10–15 min
0 → 140,000+ ~8–18 min ~20–35 min

The bottleneck is Falcon-512 signature verification (parallelised via Rayon).
State replay is fast — 1,000-block snapshots mean only a short delta is replayed.

# Watch sync in real time
docker logs quanta-node -f | grep -i "accepted\|height\|sync"

Or check live at scan.quantachain.org


First-time VPS setup

# Install Docker
sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu && newgrp docker

# Open required ports
sudo ufw allow 8333/tcp
sudo ufw allow 7782/tcp
sudo ufw allow 3000/tcp
sudo ufw allow ssh
sudo ufw --force enable

Then run the Upgrade command above.


Manual Build from Source

git clone https://github.com/quantachain/quanta
cd quanta
git checkout v0.7.6-alpha
cargo build --release

./target/release/quanta start -c quanta.toml

Wallet Management

# Native
./target/release/quanta new-wallet --file wallet.qua

# Docker
docker exec -it quanta-node quanta new_wallet --file wallet.qua

# HD Wallet (recommended — 24-word recovery phrase)
docker exec -it quanta-node quanta new_hd_wallet --file hd_wallet.json

Mining

# Native
./target/release/quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Docker (background)
docker exec -d quanta-node quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Stop
docker exec -it quanta-node quanta stop_mining --rpc-port 7782

Node Status

docker exec -it quanta-node quanta status --rpc-port 7782
docker exec -it quanta-node quanta print_height --rpc-port 7782
docker exec -it quanta-node quanta mining_status --rpc-port 7782

Ports

Port Service
3000 REST API
8333 P2P Network
7782 RPC
9090 Prometheus Metrics

What Changed in Alpha v0.7.6

No testnet reset. No data wipe. All nodes must upgrade.

Nodes stuck at varying block heights with "Invalid state root" errors (95,001, 137,990,
or anywhere else) will sync through cleanly after upgrading and restarting.

Fix — Permanent state root validator fix (root cause)

validate_block_consensus was applying transactions in two separate passes:

  1. All user transactions (debit / credit / nonce)
  2. System transactions (coinbase, treasury credit)

But create_block_template (the miner) processes them in a single ordered pass:
[coinbase → treasury → user_txs]

When a miner sent a user transaction in the same block they mined, the intermediate
spendable balances diverged between the two paths. The validator's re-computed state root
did not match the miner's embedded state root, causing:

WARN Invalid state root at block N: computed=<X>, block=<Y>
WARN Failed to add block: Invalid block

The error appeared at different heights on different nodes because it only triggered when
a block happened to contain a user tx from the miner's own address.

Fix: the validator now replays all transactions in the same canonical block order as the
miner (single pass, system txs first). A separate check_state clone handles
balance/nonce validation independently, so security checks are unchanged.

Added — Checkpoint at block 140,000

Height Hash
140,000 00000061c3b23d81f0b26e89ccebeb7cbf1192823035d8ca4d1f59bc0dc67005

Verified live from scan.quantachain.org on 2026-05-27. Acts as a recovery anchor:
any node stuck below 140,000 will have the state root check bypassed at that exact block
and resume syncing with the corrected validator from block 140,001 onward.


What Changed in Alpha v0.7.5

No testnet reset. No wire format change. All nodes must upgrade.

Nodes stuck at block 91,096 with repeated "Invalid state root" errors will be fixed
by this release. The 90,000 checkpoint means syncing nodes can pass this height cleanly.

Fix — State root mismatch at block 91,096 (root cause)

create_block_template (miner) and validate_block_consensus (receiver) both computed
the state root hash from a cloned account state without first calling
unlock_mature_coinbase(index). At block 91,096 — exactly 100 blocks (COINBASE_MATURITY)
after the bootstrap node's heavy mining burst around block 90,996 — locked coinbase
entries matured. The two sides hashed structurally different account states:

WARN Invalid state root at block 91096:
  computed=c372afa7b...  block=5de69d916...

Fix: both paths now call unlock_mature_coinbase(block.index) before applying
transactions and computing the state root hash. This is the same step that
add_block_to_main_chain already performed when committing — now all three code paths
are consistent.

Fix — Invalid nonce after every reorg ("expected 5, got 1")

The pending_nonces DashMap tracked the highest mempool nonce per sender. After any
reorg, transactions from the abandoned fork were discarded — but pending_nonces still
held those stale nonces. The next canonical-chain block (nonce=1 from a clean state)
was rejected with "expected 5, got 1".

Fix: all three reorg paths (reorg_to_block, add_block_to_main_chain_reorg,
add_block_to_main_chain) now clear or sweep pending_nonces after every chain switch.

Fix — All mined blocks stale (abort-on-new-b...

Read more

Quantachain Testnet Alpha V.0.7.5

08 May 07:50

Choose a tag to compare

QuantaChain Testnet — Alpha v0.7.5

Post-quantum secure blockchain using Falcon-512 signatures and SHA3-256 Proof of Work.

v0.7.5 — Consensus-critical: state root fix + stale mining fix + 90k checkpoint.
All nodes MUST upgrade. Nodes stuck at block 91,096 ("Invalid state root") and all
nodes experiencing stale mined blocks or nonce errors after reorg are fixed.
No testnet reset. No data wipe required.

This is a pre-release testnet build. Do not use real funds. APIs and chain parameters may change between alpha releases.


Genesis Block

Parameter Value
Network Testnet (QUA7)
Timestamp 1775001600 (2026-04-01 00:00:00 UTC)
Testnet Genesis Hash 00000012d3a2cbb7eb9579330ccdaa4f83ca9e6e016bfe6d2c8a38539cf3733b
Mainnet Genesis Hash 1cdbccdff3db462378f4acbe4553b49040ffcdebf74b5c77e685ba05ccfa8cb0
Difficulty 8,304,130 (Testnet) / 16,777,216 (Mainnet)
Block Time 30 seconds

Testnet Faucet Wallets (Genesis Premine)

Each address below received 1,000,000 QUA at genesis. Faucet account 0 is the active sender used by the faucet API.

Index Address Role
0 0x1683be267318d2ddd8cee8df4a4548dcffb1e088 Faucet Sender (active)
1 0xd528c18ce7a8844e4a4dcd841975b20ae599b020 Faucet Reserve
2 0xfd6e36bfa2b2798d08592802206c943d5513adfb Faucet Reserve
3 0xed15573ad312d41aaef74cff56a8ef28122ec2db Faucet Reserve
4 0xaffd6d4f74c5651110efcf1b9736f7a5cf2ccdbb Faucet Reserve
5 0xbf5ee055f399323fdd0cefe3d4aa923678d46107 Faucet Reserve
6 0x1dc9637b183093d723ea8d1fb18083b06490facb Faucet Reserve
7 0xa2270f30ca1aad922510375508bf68cd95509f29 Faucet Reserve
8 0xe15a689775685ae324559ea9a492fc650354ca0b Faucet Reserve
9 0x005dcff212d27b55e7a74bf745e1349ab44ca25d Faucet Reserve

Treasury

Parameter Value
Treasury Address ms69216b1d10425689704d5ae3b2a4aa17049f59b1
Multisig Scheme 3-of-5 Falcon-512
Block Reward to Treasury 5% per block
Fee to Treasury 20% of transaction fees

Tokenomics

Parameter Value
Year 1 Block Reward 100 QUA
Annual Reward Reduction 15% per year
Minimum Reward Floor 5 QUA (reached ~year 20)
Mining Reward Lock 50% locked for 6 months
Fee Burn 70% of all transaction fees
Fee to Treasury 20% of all transaction fees
Fee to Miner 10% of all transaction fees
Max Block Transactions 1,200
Max Block Size 2 MB
Min Transaction Fee 0.0001 QUA

Quick Start with Docker

Option 1: Docker Desktop (Graphical Interface)

  1. Open Docker Desktop and find xd637/quanta-node:v0.7.1-alpha (or :latest) in your Images.
  2. Click Run.
  3. Under Optional settings, configure:
    • Container name: quanta-node
    • Ports: Map 3000, 7782, 8333, 9090 to themselves.
    • Volumes:
      • Add host path quanta-data to container path /home/quanta/quanta_data
      • Add host path quanta-logs to container path /home/quanta/logs
  4. Click Run.

Option 2: Docker CLI

docker pull xd637/quanta-node:v0.7.5-alpha

docker run -d \
  --name quanta-node \
  -p 3000:3000 -p 8333:8333 -p 7782:7782 -p 9090:9090 \
  -v quanta-data:/home/quanta/quanta_data \
  -v quanta-logs:/home/quanta/logs \
  xd637/quanta-node:v0.7.4-alpha

Option 3: Docker Compose (Recommended)

Upgrading from v0.7.0 — no data wipe needed:

docker compose -f docker-compose.single.yml pull
docker compose -f docker-compose.single.yml up -d

Server Setup (Ubuntu / VPS)

1. Update system and install Docker:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu && newgrp docker

2. Open necessary ports:

sudo ufw allow 8333/tcp
sudo ufw allow 7782/tcp
sudo ufw allow 3000/tcp
sudo ufw allow ssh
sudo ufw --force enable

3. Upgrade to v0.7.5 (no data wipe required):

docker pull xd637/quanta-node:latest
docker stop quanta-node && docker rm quanta-node
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

4. Check logs:

docker logs quanta-node --tail 30 -f

🔄 Clean Start Guide (Wipe Data & Resync from Genesis)

When should I do a clean start?

  • Node stuck at same block height for > 30 minutes
  • Logs show repeated "Invalid block" or "Reorg failed" errors
  • Running a version older than v0.7.0 (wire format changed)
  • Support advises it

⚠️ Will I lose my mining rewards?
Your wallet file is separate from the node database. Mining rewards live on-chain —
your balance is safe as long as your address exists on the canonical chain.
Wipe only the data directory, never your wallet file.


Docker — named volume (most common)

# 1. Stop and remove the container
docker stop quanta-node
docker rm quanta-node

# 2. Delete the chain data volume
docker volume rm quanta-data

# 3. Pull latest image and start fresh
docker pull xd637/quanta-node:latest
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v quanta-data:/home/quanta/quanta_data \
  -v quanta-logs:/home/quanta/logs \
  xd637/quanta-node:latest

# 4. Watch sync progress
docker logs quanta-node --tail 50 -f

Docker — host path mount (~/quanta_data)

docker stop quanta-node && docker rm quanta-node
rm -rf ~/quanta_data && mkdir -p ~/quanta_data

docker pull xd637/quanta-node:latest
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

docker logs quanta-node --tail 50 -f

Bare Metal (no Docker)

pkill -f "quanta start"    # stop the node
rm -rf ./quanta_data       # wipe chain data (adjust path if changed in quanta.toml)
./target/release/quanta start -c quanta.toml

Windows — Docker Desktop

  1. Docker Desktop → Volumes → delete quanta-data
  2. Open a terminal:
docker stop quanta-node && docker rm quanta-node
docker pull xd637/quanta-node:latest
docker run -d --name quanta-node ^
  -p 3000:3000 -p 8333:8333 -p 7782:7782 -p 9090:9090 ^
  -v quanta-data:/home/quanta/quanta_data ^
  xd637/quanta-node:latest

How long does resync take?

Times depend on VPS CPU core count (Rayon uses all cores for Falcon-512 verification)
and network speed to the bootstrap node.

Chain Height Good VPS (4+ cores) Weak VPS / slow link
0 → 50,000 ~3–6 min ~10–15 min
0 → 91,000+ ~5–15 min ~15–25 min

The main bottleneck is Falcon-512 signature verification — each block's signatures are
verified in parallel via Rayon, and the LRU cache skips re-verification of seen sigs.
State replay is fast due to 1,000-block snapshots (only the delta is replayed, not from genesis).

# Watch sync in real time
docker logs quanta-node -f | grep -i "accepted\|height\|sync"

Or check live at scan.quantachain.org


Manual Build from Source

git clone https://github.com/quantachain/quanta
cd quanta
git checkout v0.7.5-alpha
cargo build --release

./target/release/quanta start -c quanta.toml

Wallet Management

# Native
./target/release/quanta new-wallet --file wallet.qua

# Docker
docker exec -it quanta-node quanta new_wallet --file wallet.qua

# HD Wallet (recommended — 24-word recovery phrase)
docker exec -it quanta-node quanta new_hd_wallet --file hd_wallet.json

Mining

# Native
./target/release/quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Docker (background)
docker exec -d quanta-node quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Stop
docker exec -it quanta-node quanta stop_mining --rpc-port 7782

Node Status

docker exec -it quanta-node quanta status --rpc-port 7782
docker exec -it quanta-node quanta print_height --rpc-port 7782
docker exec -it quanta-node quanta mining_status --rpc-port 7782

Ports

Port Service
3000 REST API
8333 P2P Network
7782 RPC
9090 Prometheus Metrics

What Changed in Alpha v0.7.5

No testnet reset. No wire format change. All nodes must upgrade.

Nodes stuck at block 91,096 with repeated "Invalid state root" errors will be fixed
by this release. The 90,000 checkpoint means syncing nodes can pass this height cleanly.

Fix — State root mismatch at block 91,096 (root cause)

create_block_template (miner) and validate_block_consensus (receiver) both computed
the state root hash from a cloned account state without first calling
unlock_mature_coinbase(index). At block 91,096 — exactly 100 blocks (COINBASE_MATURITY)
after the bootstrap node's heavy mining burst around block 90,996 — locked coinbase
entries matured. The two sides hashed structurally different account states:

WARN Invalid state root at block 91096:
  computed=c372afa7b...  block=5de69d916...

Fix: both paths now call unlock_mature_coinbase(block.index) before applying
transactions and computing the state root hash. This is the same step that
add_block_to_main_chain already performed when committing — now all three code paths
are consistent.

Fix — Invalid nonce after every reorg ("expected 5, got 1")

The pending_nonces DashMap tracked the highest mempool nonce per sender. After a...

Read more

Quantachain Testnet Alpha V.0.7.4

06 May 06:29

Choose a tag to compare

QuantaChain Testnet — Alpha v0.7.4

Post-quantum secure blockchain using Falcon-512 signatures and SHA3-256 Proof of Work.

v0.7.4 — Sync stability patch. No testnet reset required.
All nodes SHOULD upgrade. v0.7.2 nodes may get stuck during reorg at high block heights
due to a timeout-inducing O(n) Sled scan and incorrect LWMA bounds check during replay.
Existing quanta_data/ directories are fully compatible — drop-in upgrade.

This is a pre-release testnet build. Do not use real funds. APIs and chain parameters may change between alpha releases.


Genesis Block

Parameter Value
Network Testnet (QUA7)
Timestamp 1775001600 (2026-04-01 00:00:00 UTC)
Testnet Genesis Hash 00000012d3a2cbb7eb9579330ccdaa4f83ca9e6e016bfe6d2c8a38539cf3733b
Mainnet Genesis Hash 1cdbccdff3db462378f4acbe4553b49040ffcdebf74b5c77e685ba05ccfa8cb0
Difficulty 8,304,130 (Testnet) / 16,777,216 (Mainnet)
Block Time 30 seconds

Testnet Faucet Wallets (Genesis Premine)

Each address below received 1,000,000 QUA at genesis. Faucet account 0 is the active sender used by the faucet API.

Index Address Role
0 0x1683be267318d2ddd8cee8df4a4548dcffb1e088 Faucet Sender (active)
1 0xd528c18ce7a8844e4a4dcd841975b20ae599b020 Faucet Reserve
2 0xfd6e36bfa2b2798d08592802206c943d5513adfb Faucet Reserve
3 0xed15573ad312d41aaef74cff56a8ef28122ec2db Faucet Reserve
4 0xaffd6d4f74c5651110efcf1b9736f7a5cf2ccdbb Faucet Reserve
5 0xbf5ee055f399323fdd0cefe3d4aa923678d46107 Faucet Reserve
6 0x1dc9637b183093d723ea8d1fb18083b06490facb Faucet Reserve
7 0xa2270f30ca1aad922510375508bf68cd95509f29 Faucet Reserve
8 0xe15a689775685ae324559ea9a492fc650354ca0b Faucet Reserve
9 0x005dcff212d27b55e7a74bf745e1349ab44ca25d Faucet Reserve

Treasury

Parameter Value
Treasury Address ms69216b1d10425689704d5ae3b2a4aa17049f59b1
Multisig Scheme 3-of-5 Falcon-512
Block Reward to Treasury 5% per block
Fee to Treasury 20% of transaction fees

Tokenomics

Parameter Value
Year 1 Block Reward 100 QUA
Annual Reward Reduction 15% per year
Minimum Reward Floor 5 QUA (reached ~year 20)
Mining Reward Lock 50% locked for 6 months
Fee Burn 70% of all transaction fees
Fee to Treasury 20% of all transaction fees
Fee to Miner 10% of all transaction fees
Max Block Transactions 1,200
Max Block Size 2 MB
Min Transaction Fee 0.0001 QUA

Quick Start with Docker

Option 1: Docker Desktop (Graphical Interface)

  1. Open Docker Desktop and find xd637/quanta-node:v0.7.1-alpha (or :latest) in your Images.
  2. Click Run.
  3. Under Optional settings, configure:
    • Container name: quanta-node
    • Ports: Map 3000, 7782, 8333, 9090 to themselves.
    • Volumes:
      • Add host path quanta-data to container path /home/quanta/quanta_data
      • Add host path quanta-logs to container path /home/quanta/logs
  4. Click Run.

Option 2: Docker CLI

docker pull xd637/quanta-node:v0.7.4-alpha

docker run -d \
  --name quanta-node \
  -p 3000:3000 -p 8333:8333 -p 7782:7782 -p 9090:9090 \
  -v quanta-data:/home/quanta/quanta_data \
  -v quanta-logs:/home/quanta/logs \
  xd637/quanta-node:v0.7.4-alpha

Option 3: Docker Compose (Recommended)

Upgrading from v0.7.0 — no data wipe needed:

docker compose -f docker-compose.single.yml pull
docker compose -f docker-compose.single.yml up -d

Server Setup (Ubuntu / VPS)

1. Update system and install Docker:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu && newgrp docker

2. Open necessary ports:

sudo ufw allow 8333/tcp
sudo ufw allow 7782/tcp
sudo ufw allow 3000/tcp
sudo ufw allow ssh
sudo ufw --force enable

3. Upgrade to v0.7.4 (no data wipe required):

docker pull xd637/quanta-node:latest
docker stop quanta-node && docker rm quanta-node
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

4. Check logs:

docker logs quanta-node --tail 30 -f

🔄 Clean Start Guide (Wipe Data & Resync from Genesis)

When should I do a clean start?

  • Node stuck at same block height for > 30 minutes
  • Logs show repeated "Invalid block" or "Reorg failed" errors
  • Running a version older than v0.7.0 (wire format changed)
  • Support advises it

⚠️ Will I lose my mining rewards?
Your wallet file is separate from the node database. Mining rewards live on-chain —
your balance is safe as long as your address exists on the canonical chain.
Wipe only the data directory, never your wallet file.


Docker — named volume (most common)

# 1. Stop and remove the container
docker stop quanta-node
docker rm quanta-node

# 2. Delete the chain data volume
docker volume rm quanta-data

# 3. Pull latest image and start fresh
docker pull xd637/quanta-node:latest
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v quanta-data:/home/quanta/quanta_data \
  -v quanta-logs:/home/quanta/logs \
  xd637/quanta-node:latest

# 4. Watch sync progress
docker logs quanta-node --tail 50 -f

Docker — host path mount (~/quanta_data)

docker stop quanta-node && docker rm quanta-node
rm -rf ~/quanta_data && mkdir -p ~/quanta_data

docker pull xd637/quanta-node:latest
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

docker logs quanta-node --tail 50 -f

Bare Metal (no Docker)

pkill -f "quanta start"    # stop the node
rm -rf ./quanta_data       # wipe chain data (adjust path if changed in quanta.toml)
./target/release/quanta start -c quanta.toml

Windows — Docker Desktop

  1. Docker Desktop → Volumes → delete quanta-data
  2. Open a terminal:
docker stop quanta-node && docker rm quanta-node
docker pull xd637/quanta-node:latest
docker run -d --name quanta-node ^
  -p 3000:3000 -p 8333:8333 -p 7782:7782 -p 9090:9090 ^
  -v quanta-data:/home/quanta/quanta_data ^
  xd637/quanta-node:latest

How long does resync take?

Chain Height Approx. Time
0 → 50,000 ~15–25 min
0 → 85,000+ ~25–40 min
# Watch sync in real time
docker logs quanta-node -f | grep -i "accepted\|height\|sync"

Or check live at scan.quantachain.org


Manual Build from Source

git clone https://github.com/quantachain/quanta
cd quanta
git checkout v0.7.4-alpha
cargo build --release

./target/release/quanta start -c quanta.toml

Wallet Management

# Native
./target/release/quanta new-wallet --file wallet.qua

# Docker
docker exec -it quanta-node quanta new_wallet --file wallet.qua

# HD Wallet (recommended — 24-word recovery phrase)
docker exec -it quanta-node quanta new_hd_wallet --file hd_wallet.json

Mining

# Native
./target/release/quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Docker (background)
docker exec -d quanta-node quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Stop
docker exec -it quanta-node quanta stop_mining --rpc-port 7782

Node Status

docker exec -it quanta-node quanta status --rpc-port 7782
docker exec -it quanta-node quanta print_height --rpc-port 7782
docker exec -it quanta-node quanta mining_status --rpc-port 7782

Ports

Port Service
3000 REST API
8333 P2P Network
7782 RPC
9090 Prometheus Metrics

What Changed in Alpha v0.7.4

No testnet reset. No wire format change. Sync stability patch — all nodes should upgrade.

Fix — O(n) Sled scan on every reorg (deep_reorg)

When performing even a tiny 2–5 block reorg, deep_reorg was recalculating base_work
by reading every block from 0 to rollback_to out of Sled. At height 85k this was
85,000 sequential reads while holding the blockchain write lock, taking 30–60 seconds.
During this time the syncing peer would time out, drop the connection, and the sync loop
logged "Reorg failed: Invalid block" then retried — hitting the same scan again.

Fix: replaced with cumulative_work_at(rollback_to) which is O(1) — it reads the
in-memory cumulative_work value that is updated incrementally after every block.

Fix — Wrong LWMA bounds check during reorg replay

validate_block_consensus_reorg() called calculate_next_difficulty() to obtain an
LWMA estimate, then rejected any peer block whose difficulty was outside ±50% of that
estimate. During a deep reorg the chain is partially rebuilt — the LWMA window is
incomplete (wrong timestamps, missing blocks) — so the estimate was meaningless and
valid peer blocks were rejected as "outside LWMA bounds".

Fix: removed the LWMA bounds check from the reorg validation path. The has_valid_hash()
PoW check already proves real work was done. MIN_DIFFICULTY still guards against trivial
blocks.

Fix — Snapshot fallback replayed wrong block range (rebuild_account_state_up_to)

When a 1000-block snapshot was missing (new nodes have none), the code fell back to
genesis-only state (10 faucet accounts) then set replay_start = snapshot_height + 1,
skipping all blocks ...

Read more

Quantachain Testnet Alpha V.0.7.3

06 May 04:05

Choose a tag to compare

QuantaChain Testnet — Alpha v0.7.3

Post-quantum secure blockchain using Falcon-512 signatures and SHA3-256 Proof of Work.

v0.7.3 — Sync stability patch. No testnet reset required.
All nodes SHOULD upgrade. v0.7.2 nodes may get stuck during reorg at high block heights
due to a timeout-inducing O(n) Sled scan and incorrect LWMA bounds check during replay.
Existing quanta_data/ directories are fully compatible — drop-in upgrade.

This is a pre-release testnet build. Do not use real funds. APIs and chain parameters may change between alpha releases.


Genesis Block

Parameter Value
Network Testnet (QUA7)
Timestamp 1775001600 (2026-04-01 00:00:00 UTC)
Testnet Genesis Hash 00000012d3a2cbb7eb9579330ccdaa4f83ca9e6e016bfe6d2c8a38539cf3733b
Mainnet Genesis Hash 1cdbccdff3db462378f4acbe4553b49040ffcdebf74b5c77e685ba05ccfa8cb0
Difficulty 8,304,130 (Testnet) / 16,777,216 (Mainnet)
Block Time 30 seconds

Testnet Faucet Wallets (Genesis Premine)

Each address below received 1,000,000 QUA at genesis. Faucet account 0 is the active sender used by the faucet API.

Index Address Role
0 0x1683be267318d2ddd8cee8df4a4548dcffb1e088 Faucet Sender (active)
1 0xd528c18ce7a8844e4a4dcd841975b20ae599b020 Faucet Reserve
2 0xfd6e36bfa2b2798d08592802206c943d5513adfb Faucet Reserve
3 0xed15573ad312d41aaef74cff56a8ef28122ec2db Faucet Reserve
4 0xaffd6d4f74c5651110efcf1b9736f7a5cf2ccdbb Faucet Reserve
5 0xbf5ee055f399323fdd0cefe3d4aa923678d46107 Faucet Reserve
6 0x1dc9637b183093d723ea8d1fb18083b06490facb Faucet Reserve
7 0xa2270f30ca1aad922510375508bf68cd95509f29 Faucet Reserve
8 0xe15a689775685ae324559ea9a492fc650354ca0b Faucet Reserve
9 0x005dcff212d27b55e7a74bf745e1349ab44ca25d Faucet Reserve

Treasury

Parameter Value
Treasury Address ms69216b1d10425689704d5ae3b2a4aa17049f59b1
Multisig Scheme 3-of-5 Falcon-512
Block Reward to Treasury 5% per block
Fee to Treasury 20% of transaction fees

Tokenomics

Parameter Value
Year 1 Block Reward 100 QUA
Annual Reward Reduction 15% per year
Minimum Reward Floor 5 QUA (reached ~year 20)
Mining Reward Lock 50% locked for 6 months
Fee Burn 70% of all transaction fees
Fee to Treasury 20% of all transaction fees
Fee to Miner 10% of all transaction fees
Max Block Transactions 1,200
Max Block Size 2 MB
Min Transaction Fee 0.0001 QUA

Quick Start with Docker

Option 1: Docker Desktop (Graphical Interface)

  1. Open Docker Desktop and find xd637/quanta-node:v0.7.1-alpha (or :latest) in your Images.
  2. Click Run.
  3. Under Optional settings, configure:
    • Container name: quanta-node
    • Ports: Map 3000, 7782, 8333, 9090 to themselves.
    • Volumes:
      • Add host path quanta-data to container path /home/quanta/quanta_data
      • Add host path quanta-logs to container path /home/quanta/logs
  4. Click Run.

Option 2: Docker CLI

docker pull xd637/quanta-node:v0.7.3-alpha

docker run -d \
  --name quanta-node \
  -p 3000:3000 -p 8333:8333 -p 7782:7782 -p 9090:9090 \
  -v quanta-data:/home/quanta/quanta_data \
  -v quanta-logs:/home/quanta/logs \
  xd637/quanta-node:v0.7.3-alpha

Option 3: Docker Compose (Recommended)

Upgrading from v0.7.0 — no data wipe needed:

docker compose -f docker-compose.single.yml pull
docker compose -f docker-compose.single.yml up -d

Server Setup (Ubuntu / VPS)

1. Update system and install Docker:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu && newgrp docker

2. Open necessary ports:

sudo ufw allow 8333/tcp
sudo ufw allow 7782/tcp
sudo ufw allow 3000/tcp
sudo ufw allow ssh
sudo ufw --force enable

3. Upgrade to v0.7.3 (no data wipe required):

docker pull xd637/quanta-node:latest
docker stop quanta-node && docker rm quanta-node
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

4. Check logs:

docker logs quanta-node --tail 30 -f

Manual Build from Source

git clone https://github.com/quantachain/quanta
cd quanta
git checkout v0.7.3-alpha
cargo build --release

./target/release/quanta start -c quanta.toml

Wallet Management

# Native
./target/release/quanta new-wallet --file wallet.qua

# Docker
docker exec -it quanta-node quanta new_wallet --file wallet.qua

# HD Wallet (recommended — 24-word recovery phrase)
docker exec -it quanta-node quanta new_hd_wallet --file hd_wallet.json

Mining

# Native
./target/release/quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Docker (background)
docker exec -d quanta-node quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Stop
docker exec -it quanta-node quanta stop_mining --rpc-port 7782

Node Status

docker exec -it quanta-node quanta status --rpc-port 7782
docker exec -it quanta-node quanta print_height --rpc-port 7782
docker exec -it quanta-node quanta mining_status --rpc-port 7782

Ports

Port Service
3000 REST API
8333 P2P Network
7782 RPC
9090 Prometheus Metrics

What Changed in Alpha v0.7.3

No testnet reset. No wire format change. Sync stability patch — all nodes should upgrade.

Fix — O(n) Sled scan on every reorg (deep_reorg)

When performing even a tiny 2–5 block reorg, deep_reorg was recalculating base_work
by reading every block from 0 to rollback_to out of Sled. At height 85k this was
85,000 sequential reads while holding the blockchain write lock, taking 30–60 seconds.
During this time the syncing peer would time out, drop the connection, and the sync loop
logged "Reorg failed: Invalid block" then retried — hitting the same scan again.

Fix: replaced with cumulative_work_at(rollback_to) which is O(1) — it reads the
in-memory cumulative_work value that is updated incrementally after every block.

Fix — Wrong LWMA bounds check during reorg replay

validate_block_consensus_reorg() called calculate_next_difficulty() to obtain an
LWMA estimate, then rejected any peer block whose difficulty was outside ±50% of that
estimate. During a deep reorg the chain is partially rebuilt — the LWMA window is
incomplete (wrong timestamps, missing blocks) — so the estimate was meaningless and
valid peer blocks were rejected as "outside LWMA bounds".

Fix: removed the LWMA bounds check from the reorg validation path. The has_valid_hash()
PoW check already proves real work was done. MIN_DIFFICULTY still guards against trivial
blocks.

Fix — Snapshot fallback replayed wrong block range (rebuild_account_state_up_to)

When a 1000-block snapshot was missing (new nodes have none), the code fell back to
genesis-only state (10 faucet accounts) then set replay_start = snapshot_height + 1,
skipping all blocks 1…snapshot_height. The rebuilt state had genesis balances only, so
every subsequent reorg block failed with "Insufficient balance / wrong nonce → Invalid block".

Fix: when no snapshot is loaded, replay_start is always set to 1.

Added — Checkpoint at block 85,000

Verified live from scan.quantachain.org on 2026-05-06. This anchors the
STATE_ROOT_SORT_FIX_HEIGHT boundary and prevents deep reorgs into pre-sort-fix territory.

Height Hash
85,000 0000007305d4ceeaf72a4f3c58001295a335d588e16a05f037d21dfb21ac06ca

What Changed in Alpha v0.7.2

No testnet reset. No wire format change. Consensus-critical patch — all nodes must upgrade.

Fix — State root determinism (calculate_state_root)

The locked_balances field on each account is a Vec<LockedBalance>. When a block
contains a TimeLockTransfer credit to the miner's own address alongside a coinbase
credit, two LockedBalance entries are pushed to that address's vec — but in different
orders depending on which code path runs:

  • Mining path (create_block_template): coinbase tx processed first → coinbase lock
    pushed first, TimeLock lock pushed second.
  • Validation path (validate_block_consensus): user txs applied first → TimeLock
    lock pushed first, coinbase lock pushed second.

Both vecs contain the same two entries, but SHA3-256 is order-sensitive — the resulting
state root hashes differed between the mining node and every syncing peer, causing:

[ERROR] Invalid state root at block N: expected <mining_hash>, got <validation_hash>

This manifested sporadically (only when a miner received a TimeLockTransfer to their
own wallet in the same block they mined) and was the root cause of the "nodes fail at
varying heights" sync bug reported across the testnet.

Fix: calculate_state_root now sorts locked_balances by (unlock_height, amount)
before iterating. The sort is stable, deterministic on all platforms, and
order-independent — both code paths now produce an identical SHA3-256 digest.

Guard — STATE_ROOT_SORT_FIX_HEIGHT = 85_000

Blocks below height 85,000 skip state root validation — they are already secured by
hardcoded checkpoints and were committed under the old (buggy) ordering rule. Applying
the new sort rule retroactively would fail for any historical block that happened to
have the mismatch, turning a sync fix into a sync break.

From height 85,0...

Read more

Quantachain Testnet Alpha V.0.7.2

05 May 17:14

Choose a tag to compare

QuantaChain Testnet — Alpha v0.7.2

Post-quantum secure blockchain using Falcon-512 signatures and SHA3-256 Proof of Work.

v0.7.2 — CONSENSUS-CRITICAL patch. No testnet reset required.
All nodes MUST upgrade. v0.7.1 nodes will diverge from upgraded nodes on any block
containing a TimeLock credit to the miner's address at height > 85,000.
Existing quanta_data/ directories are fully compatible — drop-in upgrade.

This is a pre-release testnet build. Do not use real funds. APIs and chain parameters may change between alpha releases.


Genesis Block

Parameter Value
Network Testnet (QUA7)
Timestamp 1775001600 (2026-04-01 00:00:00 UTC)
Testnet Genesis Hash 00000012d3a2cbb7eb9579330ccdaa4f83ca9e6e016bfe6d2c8a38539cf3733b
Mainnet Genesis Hash 1cdbccdff3db462378f4acbe4553b49040ffcdebf74b5c77e685ba05ccfa8cb0
Difficulty 8,304,130 (Testnet) / 16,777,216 (Mainnet)
Block Time 30 seconds

Testnet Faucet Wallets (Genesis Premine)

Each address below received 1,000,000 QUA at genesis. Faucet account 0 is the active sender used by the faucet API.

Index Address Role
0 0x1683be267318d2ddd8cee8df4a4548dcffb1e088 Faucet Sender (active)
1 0xd528c18ce7a8844e4a4dcd841975b20ae599b020 Faucet Reserve
2 0xfd6e36bfa2b2798d08592802206c943d5513adfb Faucet Reserve
3 0xed15573ad312d41aaef74cff56a8ef28122ec2db Faucet Reserve
4 0xaffd6d4f74c5651110efcf1b9736f7a5cf2ccdbb Faucet Reserve
5 0xbf5ee055f399323fdd0cefe3d4aa923678d46107 Faucet Reserve
6 0x1dc9637b183093d723ea8d1fb18083b06490facb Faucet Reserve
7 0xa2270f30ca1aad922510375508bf68cd95509f29 Faucet Reserve
8 0xe15a689775685ae324559ea9a492fc650354ca0b Faucet Reserve
9 0x005dcff212d27b55e7a74bf745e1349ab44ca25d Faucet Reserve

Treasury

Parameter Value
Treasury Address ms69216b1d10425689704d5ae3b2a4aa17049f59b1
Multisig Scheme 3-of-5 Falcon-512
Block Reward to Treasury 5% per block
Fee to Treasury 20% of transaction fees

Tokenomics

Parameter Value
Year 1 Block Reward 100 QUA
Annual Reward Reduction 15% per year
Minimum Reward Floor 5 QUA (reached ~year 20)
Mining Reward Lock 50% locked for 6 months
Fee Burn 70% of all transaction fees
Fee to Treasury 20% of all transaction fees
Fee to Miner 10% of all transaction fees
Max Block Transactions 1,200
Max Block Size 2 MB
Min Transaction Fee 0.0001 QUA

Quick Start with Docker

Option 1: Docker Desktop (Graphical Interface)

  1. Open Docker Desktop and find xd637/quanta-node:v0.7.1-alpha (or :latest) in your Images.
  2. Click Run.
  3. Under Optional settings, configure:
    • Container name: quanta-node
    • Ports: Map 3000, 7782, 8333, 9090 to themselves.
    • Volumes:
      • Add host path quanta-data to container path /home/quanta/quanta_data
      • Add host path quanta-logs to container path /home/quanta/logs
  4. Click Run.

Option 2: Docker CLI

docker pull xd637/quanta-node:v0.7.2-alpha

docker run -d \
  --name quanta-node \
  -p 3000:3000 -p 8333:8333 -p 7782:7782 -p 9090:9090 \
  -v quanta-data:/home/quanta/quanta_data \
  -v quanta-logs:/home/quanta/logs \
  xd637/quanta-node:v0.7.2-alpha

Option 3: Docker Compose (Recommended)

Upgrading from v0.7.0 — no data wipe needed:

docker compose -f docker-compose.single.yml pull
docker compose -f docker-compose.single.yml up -d

Server Setup (Ubuntu / VPS)

1. Update system and install Docker:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu && newgrp docker

2. Open necessary ports:

sudo ufw allow 8333/tcp
sudo ufw allow 7782/tcp
sudo ufw allow 3000/tcp
sudo ufw allow ssh
sudo ufw --force enable

3. Upgrade to v0.7.2 (no data wipe required):

docker pull xd637/quanta-node:latest
docker stop quanta-node && docker rm quanta-node
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

4. Check logs:

docker logs quanta-node --tail 30 -f

Manual Build from Source

git clone https://github.com/quantachain/quanta
cd quanta
git checkout v0.7.2-alpha
cargo build --release

./target/release/quanta start -c quanta.toml

Wallet Management

# Native
./target/release/quanta new-wallet --file wallet.qua

# Docker
docker exec -it quanta-node quanta new_wallet --file wallet.qua

# HD Wallet (recommended — 24-word recovery phrase)
docker exec -it quanta-node quanta new_hd_wallet --file hd_wallet.json

Mining

# Native
./target/release/quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Docker (background)
docker exec -d quanta-node quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Stop
docker exec -it quanta-node quanta stop_mining --rpc-port 7782

Node Status

docker exec -it quanta-node quanta status --rpc-port 7782
docker exec -it quanta-node quanta print_height --rpc-port 7782
docker exec -it quanta-node quanta mining_status --rpc-port 7782

Ports

Port Service
3000 REST API
8333 P2P Network
7782 RPC
9090 Prometheus Metrics

What Changed in Alpha v0.7.2

No testnet reset. No wire format change. Consensus-critical patch — all nodes must upgrade.

Fix — State root determinism (calculate_state_root)

The locked_balances field on each account is a Vec<LockedBalance>. When a block
contains a TimeLockTransfer credit to the miner's own address alongside a coinbase
credit, two LockedBalance entries are pushed to that address's vec — but in different
orders depending on which code path runs:

  • Mining path (create_block_template): coinbase tx processed first → coinbase lock
    pushed first, TimeLock lock pushed second.
  • Validation path (validate_block_consensus): user txs applied first → TimeLock
    lock pushed first, coinbase lock pushed second.

Both vecs contain the same two entries, but SHA3-256 is order-sensitive — the resulting
state root hashes differed between the mining node and every syncing peer, causing:

[ERROR] Invalid state root at block N: expected <mining_hash>, got <validation_hash>

This manifested sporadically (only when a miner received a TimeLockTransfer to their
own wallet in the same block they mined) and was the root cause of the "nodes fail at
varying heights" sync bug reported across the testnet.

Fix: calculate_state_root now sorts locked_balances by (unlock_height, amount)
before iterating. The sort is stable, deterministic on all platforms, and
order-independent — both code paths now produce an identical SHA3-256 digest.

Guard — STATE_ROOT_SORT_FIX_HEIGHT = 85_000

Blocks below height 85,000 skip state root validation — they are already secured by
hardcoded checkpoints and were committed under the old (buggy) ordering rule. Applying
the new sort rule retroactively would fail for any historical block that happened to
have the mismatch, turning a sync fix into a sync break.

From height 85,000 onward, the new deterministic state root is enforced on all nodes.

New Checkpoints (through block 80,000)

Three testnet checkpoints verified live from scan.quantachain.org on 2026-05-05:

Height Hash
60,000 0000010ce22920660ba1e42423ea46e76dc7582963d6f9f220e3930031bd9bc9
70,000 000001fcb0637b06601b4f111b22070e856c8cabf2eaa545c41b938b4478d186
80,000 0000002d80e66bce37596616a9c9c3c1988da6e65811ad132926162c7e000a0e

These protect the chain from deep reorgs below 80k even on nodes that have not yet
reached that height.


What Changed in Alpha v0.7.1

No testnet reset. No wire format change. Drop-in upgrade.

Fix — deep_reorg used wrong validator on peer blocks

add_block_to_main_chain_reorg() was calling validate_block_consensus() — the strict
validator that requires the incoming block's difficulty to exactly match the local LWMA.
During a deep reorg, peer blocks were mined against their LWMA which can differ slightly
from ours (the two chains diverged at a prior block with a different timestamp).

Fix: reorg path now calls validate_block_consensus_reorg(), the 50%-bounds permissive
validator that was already written for this purpose but wasn't being used.

Fix — deep_reorg corrupted cumulative_work counter

After rolling back the chain, the in-memory cumulative_work was still at the old tip's
value. Each new block applied by add_block_to_main_chain_reorg added to this stale
total, producing a cumulative_work value roughly double the correct amount. This caused
the node to always believe it had more work than all peers and skip future syncs.

Fix: deep_reorg now recomputes the correct base work from storage before replaying
new blocks, and resets both the in-memory counter and the sled key to this value.

Fix — single-block tip swap (reorg_to_block) never updated cumulative_work

The 1-deep reorg path correctly swapped the block and rebuilt account state, but never
adjusted the cumulative_work counter. The counter was left at the old tip's value.

Fix: subtracts the old tip's difficulty and adds the incoming tip's difficulty after commit.

Fix — add_block_to_main_chain_reorg had dangling orphan code (compile error)

A previous e...

Read more

Quantachain Testnet Alpha V.0.7.1

10 Apr 06:16

Choose a tag to compare

QuantaChain Testnet — Alpha v0.7.1

Post-quantum secure blockchain using Falcon-512 signatures and SHA3-256 Proof of Work.

v0.7.1 — No testnet reset required.
Drop-in upgrade from v0.7.0. All node operators can upgrade by pulling the new image and restarting.
Existing quanta_data/ directories are fully compatible.

This is a pre-release testnet build. Do not use real funds. APIs and chain parameters may change between alpha releases.


Genesis Block

Parameter Value
Network Testnet (QUA7)
Timestamp 1775001600 (2026-04-01 00:00:00 UTC)
Testnet Genesis Hash 00000012d3a2cbb7eb9579330ccdaa4f83ca9e6e016bfe6d2c8a38539cf3733b
Mainnet Genesis Hash 1cdbccdff3db462378f4acbe4553b49040ffcdebf74b5c77e685ba05ccfa8cb0
Difficulty 8,304,130 (Testnet) / 16,777,216 (Mainnet)
Block Time 30 seconds

Testnet Faucet Wallets (Genesis Premine)

Each address below received 1,000,000 QUA at genesis. Faucet account 0 is the active sender used by the faucet API.

Index Address Role
0 0x1683be267318d2ddd8cee8df4a4548dcffb1e088 Faucet Sender (active)
1 0xd528c18ce7a8844e4a4dcd841975b20ae599b020 Faucet Reserve
2 0xfd6e36bfa2b2798d08592802206c943d5513adfb Faucet Reserve
3 0xed15573ad312d41aaef74cff56a8ef28122ec2db Faucet Reserve
4 0xaffd6d4f74c5651110efcf1b9736f7a5cf2ccdbb Faucet Reserve
5 0xbf5ee055f399323fdd0cefe3d4aa923678d46107 Faucet Reserve
6 0x1dc9637b183093d723ea8d1fb18083b06490facb Faucet Reserve
7 0xa2270f30ca1aad922510375508bf68cd95509f29 Faucet Reserve
8 0xe15a689775685ae324559ea9a492fc650354ca0b Faucet Reserve
9 0x005dcff212d27b55e7a74bf745e1349ab44ca25d Faucet Reserve

Treasury

Parameter Value
Treasury Address ms69216b1d10425689704d5ae3b2a4aa17049f59b1
Multisig Scheme 3-of-5 Falcon-512
Block Reward to Treasury 5% per block
Fee to Treasury 20% of transaction fees

Tokenomics

Parameter Value
Year 1 Block Reward 100 QUA
Annual Reward Reduction 15% per year
Minimum Reward Floor 5 QUA (reached ~year 20)
Mining Reward Lock 50% locked for 6 months
Fee Burn 70% of all transaction fees
Fee to Treasury 20% of all transaction fees
Fee to Miner 10% of all transaction fees
Max Block Transactions 1,200
Max Block Size 2 MB
Min Transaction Fee 0.0001 QUA

Quick Start with Docker

Option 1: Docker Desktop (Graphical Interface)

  1. Open Docker Desktop and find xd637/quanta-node:v0.7.1-alpha (or :latest) in your Images.
  2. Click Run.
  3. Under Optional settings, configure:
    • Container name: quanta-node
    • Ports: Map 3000, 7782, 8333, 9090 to themselves.
    • Volumes:
      • Add host path quanta-data to container path /home/quanta/quanta_data
      • Add host path quanta-logs to container path /home/quanta/logs
  4. Click Run.

Option 2: Docker CLI

docker pull xd637/quanta-node:v0.7.1-alpha

docker run -d \
  --name quanta-node \
  -p 3000:3000 -p 8333:8333 -p 7782:7782 -p 9090:9090 \
  -v quanta-data:/home/quanta/quanta_data \
  -v quanta-logs:/home/quanta/logs \
  xd637/quanta-node:v0.7.1-alpha

Option 3: Docker Compose (Recommended)

Upgrading from v0.7.0 — no data wipe needed:

docker compose -f docker-compose.single.yml pull
docker compose -f docker-compose.single.yml up -d

Server Setup (Ubuntu / VPS)

1. Update system and install Docker:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu && newgrp docker

2. Open necessary ports:

sudo ufw allow 8333/tcp
sudo ufw allow 7782/tcp
sudo ufw allow 3000/tcp
sudo ufw allow ssh
sudo ufw --force enable

3. Upgrade to v0.7.1 (no data wipe required):

docker pull xd637/quanta-node:latest
docker stop quanta-node && docker rm quanta-node
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

4. Check logs:

docker logs quanta-node --tail 30 -f

Manual Build from Source

git clone https://github.com/quantachain/quanta
cd quanta
git checkout v0.7.1-alpha
cargo build --release

./target/release/quanta start -c quanta.toml

Wallet Management

# Native
./target/release/quanta new-wallet --file wallet.qua

# Docker
docker exec -it quanta-node quanta new_wallet --file wallet.qua

# HD Wallet (recommended — 24-word recovery phrase)
docker exec -it quanta-node quanta new_hd_wallet --file hd_wallet.json

Mining

# Native
./target/release/quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Docker (background)
docker exec -d quanta-node quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Stop
docker exec -it quanta-node quanta stop_mining --rpc-port 7782

Node Status

docker exec -it quanta-node quanta status --rpc-port 7782
docker exec -it quanta-node quanta print_height --rpc-port 7782
docker exec -it quanta-node quanta mining_status --rpc-port 7782

Ports

Port Service
3000 REST API
8333 P2P Network
7782 RPC
9090 Prometheus Metrics

What Changed in Alpha v0.7.1

No testnet reset. No wire format change. Drop-in upgrade.

Fix — deep_reorg used wrong validator on peer blocks

add_block_to_main_chain_reorg() was calling validate_block_consensus() — the strict
validator that requires the incoming block's difficulty to exactly match the local LWMA.
During a deep reorg, peer blocks were mined against their LWMA which can differ slightly
from ours (the two chains diverged at a prior block with a different timestamp).

Fix: reorg path now calls validate_block_consensus_reorg(), the 50%-bounds permissive
validator that was already written for this purpose but wasn't being used.

Fix — deep_reorg corrupted cumulative_work counter

After rolling back the chain, the in-memory cumulative_work was still at the old tip's
value. Each new block applied by add_block_to_main_chain_reorg added to this stale
total, producing a cumulative_work value roughly double the correct amount. This caused
the node to always believe it had more work than all peers and skip future syncs.

Fix: deep_reorg now recomputes the correct base work from storage before replaying
new blocks, and resets both the in-memory counter and the sled key to this value.

Fix — single-block tip swap (reorg_to_block) never updated cumulative_work

The 1-deep reorg path correctly swapped the block and rebuilt account state, but never
adjusted the cumulative_work counter. The counter was left at the old tip's value.

Fix: subtracts the old tip's difficulty and adds the incoming tip's difficulty after commit.

Fix — add_block_to_main_chain_reorg had dangling orphan code (compile error)

A previous edit left a if !tx.is_coinbase() { ... } block without its enclosing
for tx in &block.transactions loop. This was a compile-time error in practice.

Fix: restored the complete nonce-clearing loop matching add_block_to_main_chain.

Fix — linear sync treated as reorg (request_start <= bc_height< bc_height)

When the sync engine requested the next batch of blocks starting exactly at the current
chain height, request_start == bc_height evaluated true for the reorg branch and
triggered a deep_reorg call. This caused O(n²) behaviour during normal linear sync —
every downloaded block triggered a full chain rollback and account-state rebuild.

Fix: condition changed to strictly-less-than so only blocks below the current tip
are treated as a reorg.

Improvement — Storage: no per-block fsync

save_block and save_account_state no longer call db.flush() after every write.
Sled's write-ahead log guarantees crash safety without a per-block fsync. A single
flush_storage() call is issued at the end of each sync batch and after mining a block.
At 18,000 blocks × ~5 ms/fsync this removes ~90 seconds of wasted IO during IBD.

Improvement — O(1) cumulative work lookup

cumulative_work is now stored as a sled key and kept in an in-memory Arc<Mutex<u128>>.
cumulative_work_at(tip) returns the stored value in O(1) for the current tip.
Previously every call scanned all blocks from genesis (O(height) disk reads while
holding the blockchain read lock — the primary cause of seed-node connection timeouts).

Improvement — Account state snapshots every 1000 blocks

add_block_to_main_chain now saves a full account state snapshot at every 1000-block
boundary. rebuild_account_state_up_to() loads the nearest snapshot and replays only
the delta — previously it always replayed from genesis, O(height) on every reorg.


What Changed in Alpha v0.7.0

UPGRADE NOTICE — v0.7.0 required a testnet reset.
The cumulative_work handshake field changed the binary wire format.
v0.6.0 and v0.7.0 nodes are not mutually compatible.

Major Architecture — Headers-First Sync (Bitcoin IBD style)

Two new wire messages — GetHeaders and Headers — allow a syncing node to download
light headers (index, hash, previous_hash, difficulty, cumulative_work) before requesting
full blocks. The sync engine validates headers first, finds the fork point, then requests
only the missing full blocks in ordered batches.

Cumulative work-based peer selection

The handshake now exchanges cumulative_work alongside `heigh...

Read more

Quantachain Testnet Alpha V.0.7.0

06 Apr 06:55

Choose a tag to compare

QuantaChain Testnet — Alpha v0.7.0

Post-quantum secure blockchain using Falcon-512 signatures and SHA3-256 Proof of Work.

UPGRADE NOTICE — v0.7.0 (TESTNET RESET REQUIRED)
This release includes a major sync architecture change (BID) and security hardening.
The new cumulative-work peer selection and headers-first sync protocol are incompatible
with the previous v0.6.0 chain state.
All node operators MUST delete their quanta_data/ directories before starting v0.7.0.

This is a pre-release testnet build. Do not use real funds. APIs and chain parameters may change between alpha releases.


Genesis Block

Parameter Value
Network Testnet (QUA7)
Timestamp 1775001600 (2026-04-01 00:00:00 UTC)
Testnet Genesis Hash 00000012d3a2cbb7eb9579330ccdaa4f83ca9e6e016bfe6d2c8a38539cf3733b
Mainnet Genesis Hash 1cdbccdff3db462378f4acbe4553b49040ffcdebf74b5c77e685ba05ccfa8cb0
Difficulty 8,304,130 (Testnet) / 16,777,216 (Mainnet)
Block Time 30 seconds

Testnet Faucet Wallets (Genesis Premine)

Each address below received 1,000,000 QUA at genesis. Faucet account 0 is the active sender used by the faucet API.

Index Address Role
0 0x1683be267318d2ddd8cee8df4a4548dcffb1e088 Faucet Sender (active)
1 0xd528c18ce7a8844e4a4dcd841975b20ae599b020 Faucet Reserve
2 0xfd6e36bfa2b2798d08592802206c943d5513adfb Faucet Reserve
3 0xed15573ad312d41aaef74cff56a8ef28122ec2db Faucet Reserve
4 0xaffd6d4f74c5651110efcf1b9736f7a5cf2ccdbb Faucet Reserve
5 0xbf5ee055f399323fdd0cefe3d4aa923678d46107 Faucet Reserve
6 0x1dc9637b183093d723ea8d1fb18083b06490facb Faucet Reserve
7 0xa2270f30ca1aad922510375508bf68cd95509f29 Faucet Reserve
8 0xe15a689775685ae324559ea9a492fc650354ca0b Faucet Reserve
9 0x005dcff212d27b55e7a74bf745e1349ab44ca25d Faucet Reserve

Treasury

Parameter Value
Treasury Address ms69216b1d10425689704d5ae3b2a4aa17049f59b1
Multisig Scheme 3-of-5 Falcon-512
Block Reward to Treasury 5% per block
Fee to Treasury 20% of transaction fees

Tokenomics

Parameter Value
Year 1 Block Reward 100 QUA
Annual Reward Reduction 15% per year
Minimum Reward Floor 5 QUA (reached ~year 20)
Mining Reward Lock 50% locked for 6 months
Fee Burn 70% of all transaction fees
Fee to Treasury 20% of all transaction fees
Fee to Miner 10% of all transaction fees
Max Block Transactions 1,200
Max Block Size 2 MB
Min Transaction Fee 0.0001 QUA

Quick Start with Docker

Option 1: Docker Desktop (Graphical Interface)

  1. Open Docker Desktop and find xd637/quanta-node:v0.7.0-alpha (or :latest) in your Images.
  2. Click Run.
  3. Under Optional settings, configure:
    • Container name: quanta-node
    • Ports: Map 3000, 7782, 8333, 9090 to themselves.
    • Volumes:
      • Add host path quanta-data to container path /home/quanta/quanta_data
      • Add host path quanta-logs to container path /home/quanta/logs
  4. Click Run.

Option 2: Docker CLI

docker pull xd637/quanta-node:v0.7.0-alpha

docker run -d \
  --name quanta-node \
  -p 3000:3000 -p 8333:8333 -p 7782:7782 -p 9090:9090 \
  -v quanta-data:/home/quanta/quanta_data \
  -v quanta-logs:/home/quanta/logs \
  xd637/quanta-node:v0.7.0-alpha

Option 3: Docker Compose (Recommended)

REQUIRED: Delete old chain data first (testnet reset)

docker compose down -v
sudo rm -rf ~/quanta_data/*

Then start:

docker compose -f docker-compose.single.yml up -d

Server Setup (Ubuntu / VPS)

1. Update system and install Docker:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu && newgrp docker

2. Open necessary ports:

sudo ufw allow 8333/tcp
sudo ufw allow 7782/tcp
sudo ufw allow 3000/tcp
sudo ufw allow ssh
sudo ufw --force enable

3. Clean start (REQUIRED for v0.7.0 upgrade):

docker stop quanta-node && docker rm quanta-node

# Delete old blockchain data
sudo rm -rf ~/quanta_data/*

docker pull xd637/quanta-node:latest
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

4. Check logs:

docker logs quanta-node --tail 30 -f

Manual Build from Source

git clone https://github.com/quantachain/quanta
cd quanta
git checkout v0.7.0-alpha
cargo build --release

./target/release/quanta start -c quanta.toml

Wallet Management

# Native
./target/release/quanta new-wallet --file wallet.qua

# Docker
docker exec -it quanta-node quanta new_wallet --file wallet.qua

# HD Wallet (recommended — 24-word recovery phrase)
docker exec -it quanta-node quanta new_hd_wallet --file hd_wallet.json

Mining

# Native
./target/release/quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Docker (background)
docker exec -d quanta-node quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

# Stop
docker exec -it quanta-node quanta stop_mining --rpc-port 7782

Node Status

docker exec -it quanta-node quanta status --rpc-port 7782
docker exec -it quanta-node quanta print_height --rpc-port 7782
docker exec -it quanta-node quanta mining_status --rpc-port 7782

Ports

Port Service
3000 REST API
8333 P2P Network
7782 RPC
9090 Prometheus Metrics

What Changed in Alpha v0.7.0

Major Architecture — BID (Bitcoin-style Block and Header Download)

The sync engine has been rebuilt around the same two-phase headers-first architecture
that Bitcoin Core uses for Initial Block Download. This was the primary cause of
all previous sync stalls, fork loops, and orphan accumulation on the testnet.

The old problem:
Every incoming block triggered a full validation cycle immediately regardless of
ordering. On a fresh sync or after a reorg, blocks arrived out of sequence, were
stored as orphans, and the chain never advanced. The stall counter fired, triggering
another deep reorg, which could fail and leave the node stuck.

What changed:

1. GetHeaders / Headers messages (new P2P protocol messages)

Two new wire messages — GetHeaders and Headers — allow a node to download just
the block headers (index, hash, previous_hash, difficulty, cumulative_work) before
requesting any full blocks. A header batch is 500 entries max and is a fraction of
the size of full blocks (which are up to 2 MB each in PQC due to Falcon-512
signatures).

2. Cumulative work-based peer selection

The handshake now exchanges cumulative_work (sum of all block difficulties on the
chain) alongside height. When selecting which peer to sync from, the node picks
the peer with the highest cumulative work — not the highest block height. This
matches Bitcoin's fork selection rule and prevents a malicious peer from getting a
node to follow a low-difficulty long chain.

3. Headers buffer in the sync engine

A dedicated header_buffer collects incoming headers from GetHeaders responses.
The sync loop uses these buffered headers to build a download plan — which height
ranges are missing — then issues targeted GetBlocks requests for only those
ranges. This eliminates the scatter-gather pattern that caused blocks to arrive
out of order and be rejected as orphans.

4. Atomic deep reorg with rollback

Before this release, a deep reorg that failed partway through (e.g., because the
incoming chain contained a bad block at block 50 of 100) would leave the node at
an inconsistent intermediate height. The node now:

  • Saves a snapshot of the current chain's blocks before rolling back
  • Applies the new chain blocks one by one
  • If any block fails, rolls back the chain pointer and restores the original chain
    from the snapshot before returning an error

The node is never left at a partial reorg state.

5. Height messages carry cumulative work

P2PMessage::Height now carries cumulative_work alongside height. Nodes
update both fields on peers during sync, enabling accurate best-peer selection
throughout a long sync rather than only at handshake time.

This release requires a testnet reset because the cumulative_work field in
the handshake and Height messages changes the binary wire format. Existing
v0.6.0 nodes will fail the handshake with v0.7.0 nodes.


Security Fix — Cross-Chain Replay Protection

Added network_id: u32 to the Transaction struct. The field is included in
get_signing_bytes() and hash(), meaning every Falcon-512 signature is
cryptographically bound to a specific network.

Network network_id
Testnet (QUA7) 0
Mainnet 1

A transaction signed on Testnet produces an invalid signature on Mainnet and
vice versa. The field uses #[serde(default)] so existing on-chain transactions
deserialize to network_id = 0 without a genesis change.


Security Fix — State Root Empty-String Bypass Closed

The previous state root check accepted any block with state_root = "" as valid,
even when the computed state root did not match. A miner could fabricate account
balances by omitting the state_root field entirely.

Fix: if a block provides a non-empty state_root, it must match the computed value.
Blocks that genuinely omit state_root (pre-feature legacy blocks) continue to pass.


Security Fix — Reorg Path Was N...

Read more

Quantachain Testnet Alpha V.0.6.0

01 Apr 05:26

Choose a tag to compare

QuantaChain Testnet — Alpha v0.6.0

Post-quantum secure blockchain using Falcon-512 signatures and SHA3-256 Proof of Work.

⚠️ UPGRADE NOTICE — v0.6.0 (TESTNET V3 RESET)
This release fixes critical transaction nonce mismatches and deep reorg synchronization issues.
Because the consensus rules for mempool assembly were rewritten, this release requires a hard chain reset.
Prior node operators MUST delete their quanta_data/ directories to successfully sync the new V3 Genesis block.

This is a pre-release testnet build. Do not use real funds. APIs and chain parameters may change between alpha releases.


Genesis Block

Parameter Value
Network Testnet
Timestamp 1775001600 (2026-04-01 00:00:00 UTC)
Testnet Genesis Hash 00000012d3a2cbb7eb9579330ccdaa4f83ca9e6e016bfe6d2c8a38539cf3733b
Mainnet Genesis Hash 1cdbccdff3db462378f4acbe4553b49040ffcdebf74b5c77e685ba05ccfa8cb0
Difficulty 8,304,130 (Testnet) / 16,777,216 (Mainnet)
Block Time 30 seconds

Testnet Faucet Wallets (Genesis Premine)

Each address below received 1,000,000 QUA at genesis. Faucet account 0 is the active sender used by the faucet API.

Index Address Role
0 0x1683be267318d2ddd8cee8df4a4548dcffb1e088 Faucet Sender (active)
1 0xd528c18ce7a8844e4a4dcd841975b20ae599b020 Faucet Reserve
2 0xfd6e36bfa2b2798d08592802206c943d5513adfb Faucet Reserve
3 0xed15573ad312d41aaef74cff56a8ef28122ec2db Faucet Reserve
4 0xaffd6d4f74c5651110efcf1b9736f7a5cf2ccdbb Faucet Reserve
5 0xbf5ee055f399323fdd0cefe3d4aa923678d46107 Faucet Reserve
6 0x1dc9637b183093d723ea8d1fb18083b06490facb Faucet Reserve
7 0xa2270f30ca1aad922510375508bf68cd95509f29 Faucet Reserve
8 0xe15a689775685ae324559ea9a492fc650354ca0b Faucet Reserve
9 0x005dcff212d27b55e7a74bf745e1349ab44ca25d Faucet Reserve

Treasury

Parameter Value
Treasury Address ms69216b1d10425689704d5ae3b2a4aa17049f59b1
Multisig Scheme 3-of-5 Falcon-512
Block Reward to Treasury 5% per block
Fee to Treasury 20% of transaction fees

Tokenomics

Parameter Value
Year 1 Block Reward 100 QUA
Annual Reward Reduction 15% per year
Minimum Reward Floor 5 QUA (reached ~year 20)
Mining Reward Lock 50% locked for 6 months
Fee Burn 70% of all transaction fees
Fee to Treasury 20% of all transaction fees
Fee to Miner 10% of all transaction fees
Max Block Transactions 1,200
Max Block Size 2 MB
Min Transaction Fee 0.0001 QUA

Quick Start with Docker

Option 1: Docker Desktop (Graphical Interface)

  1. Open Docker Desktop and find xd637/quanta-node:v0.6.0-alpha (or :latest) in your Images.
  2. Click Run.
  3. Under Optional settings, configure:
    • Container name: quanta-node
    • Ports: Map 3000, 7782, 8333, 9090 to themselves.
    • Volumes:
      • Add host path quanta-data to container path /home/quanta/quanta_data
      • Add host path quanta-logs to container path /home/quanta/logs
  4. Click Run.

Option 2: Docker CLI

# Pull the image
docker pull xd637/quanta-node:v0.6.0-alpha

# Run directly (Ensure data persistence!)
docker run -d \
  --name quanta-node \
  -p 3000:3000 -p 8333:8333 -p 7782:7782 -p 9090:9090 \
  -v quanta-data:/home/quanta/quanta_data \
  -v quanta-logs:/home/quanta/logs \
  xd637/quanta-node:v0.6.0-alpha

Option 3: Docker Compose (Recommended)

If updating from an older version, delete your old named volume first:

docker compose down -v

Then start the node:

docker compose -f docker-compose.single.yml up -d

Server Setup (Ubuntu / VPS)

The following instructions guide you through setting up a persistent, always-on Quanta node on a fresh Ubuntu server.

1. Update system and install Docker:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu && newgrp docker

2. Open necessary ports (using UFW):

sudo ufw allow 8333/tcp
sudo ufw allow 7782/tcp
sudo ufw allow 3000/tcp
sudo ufw allow ssh    # Prevents getting locked out
sudo ufw --force enable

3. Set up directory and start the node (using Host Networking for API Security):

mkdir -p ~/quanta_data
sudo chmod 777 ~/quanta_data

docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

(Need public Web Wallet access? See TESTNET_RPC_SETUP.md for NGINX & SSL setup)

4. Check logs:

docker logs quanta-node --tail 30 -f

5. Update / Clean Restart (REQUIRED FOR v0.3.0):

Due to the Testnet V2 reset, you MUST delete your old blockchain data before restarting:

docker stop quanta-node && docker rm quanta-node

# ⚠️ CRITICAL: Delete old blockchain data
sudo rm -rf ~/quanta_data/*

docker pull xd637/quanta-node:latest
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

Manual Build from Source

git clone https://github.com/quantachain/quanta
cd quanta
git checkout v0.6.0-alpha
cargo build --release

# Run node
./target/release/quanta start -c quanta.toml

Wallet Management

Create a new wallet natively:

./target/release/quanta new-wallet --file wallet.qua

Create a raw encrypted wallet using Docker:

docker exec -it quanta-node quanta new_wallet --file wallet.qua

Create a new HD Wallet (Recommended! Gives JSON + 24-word recovery phrase):

docker exec -it quanta-node quanta new_hd_wallet --file hd_wallet.json

Mining (Proof of Work)

Start CPU miner natively:

./target/release/quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

Start CPU miner using Docker (Background):

docker exec -d quanta-node quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

Check Mining Logs in Docker:

docker logs quanta-node --tail 30 -f

Stop Mining using Docker:

docker exec -it quanta-node quanta stop_mining --rpc-port 7782

Node Status & Blockchain Info

Print Current Blockchain Height:

docker exec -it quanta-node quanta print_height --rpc-port 7782

View Full Node Status (Peers, Height, Mempool):

docker exec -it quanta-node quanta status --rpc-port 7782

View Dynamic Mining Status (Difficulty, Blocks Mined, Rewards):

docker exec -it quanta-node quanta mining_status --rpc-port 7782

Ports

Port Service
3000 REST API
8333 P2P Network
7782 RPC
9090 Prometheus Metrics

What Changed in Alpha v0.6.0

🐛 Critical Bug Fix — Block Template Nonce Sequence (Network Stall Fix)

Root Cause: The mempool block assembler sorted transactions strictly by descending fee. If a user sent two transactions, the miner could include them out of nonce-order. The sequentially-validating consensus engine would immediately reject the miner's block with InvalidNonce, causing network-wide stalls.
Fix: Block templates now use a simulated State buffer. Transactions are assembled with absolute sequential nonce guarantees, permanently preventing self-orphaning blocks.

🐛 Critical Bug Fix — Permanent Nonce Desync on Reorg

Root Cause: The
eorg_to_block handler correctly rolled back and reapplied balances for 1-block reorgs, but failed to call increment_nonce() for transactions in the new block. A user whose transaction landed in a reorg block became permanently frozen with an on-chain nonce of 0.
Fix: Added the missing increment_nonce() call into the reorg block application loop.


🐛 Critical Fix — Faucet Balance = 0 After Sync

Root cause: The genesis premine transactions (10 × 1,000,000 QUA) were created in-memory in Blockchain::new() and credited to the account state — but they were never stored inside the genesis block struct itself. When a deep_reorg triggered rebuild_account_state_up_to(), it iterated over genesis.transactions (always empty on disk) and applied no premine. All faucet wallets showed 0 QUA after any reorg.

Fix: rebuild_account_state_up_to() now directly credits the hardcoded faucet list with maturity=0 before replaying blocks 1–N, exactly mirroring what Blockchain::new() does.

Self-heal on startup: Blockchain::new() now detects the corrupted state (Faucet 0 balance = 0 on a non-empty chain) and automatically replays all blocks to restore correct balances. No data wipe needed to upgrade from v0.5.0.

🐛 Critical Fix — Sync Stuck at Block 1 (MIN_DIFFICULTY Too High)

Root cause: MIN_DIFFICULTY was set to 8,343,908 but the live testnet's earliest blocks (heights 1–45) were mined at the genesis difficulty of 6,972,889. Every incoming block at those heights was rejected with difficulty 6972889 < minimum 8343908, making a fresh sync impossible — the node could never advance past genesis.

Fix: MIN_DIFFICULTY lowered to 6_972_889 (the actual testnet genesis difficulty).

🐛 Fix — Reorg LWMA Bounds Rejected Early Chain Blocks

The permissive reorg validator computed LWMA bounds against the current chain tip. For a node at genesis (height 0), this produced an estimate of ~MIN_DIFFICULTY, and the 50% lo bound rejected all early blocks. The bounds check is now **skipped for blocks below `LWMA_WINDO...

Read more

Quantachain Testnet V.0.5.0

29 Mar 13:20

Choose a tag to compare

QuantaChain Testnet — Alpha v0.5.0

Post-quantum secure blockchain using Falcon-512 signatures and SHA3-256 Proof of Work.

⚠️ UPGRADE NOTICE — v0.5.0
This release fixes critical sync and balance bugs. No chain reset required.
Just pull the new image and restart — the node self-heals corrupted account state automatically on startup.
Nodes on v0.4.0 that are stuck in a fork loop will recover automatically after upgrading.

This is a pre-release testnet build. Do not use real funds. APIs and chain parameters may change between alpha releases.


Genesis Block

Parameter Value
Network Testnet
Timestamp 1774483200 (2026-03-26 00:00:00 UTC)
Testnet Genesis Hash 0000000379f963c94f47e9d949a288c9f68caa9d2399a3efa9ed844bf6bf52e2
Mainnet Genesis Hash 1cdbccdff3db462378f4acbe4553b49040ffcdebf74b5c77e685ba05ccfa8cb0
Difficulty 6,972,889 (Testnet) / 16,777,216 (Mainnet)
Block Time 30 seconds

Testnet Faucet Wallets (Genesis Premine)

Each address below received 1,000,000 QUA at genesis. Faucet account 0 is the active sender used by the faucet API.

Index Address Role
0 0x1683be267318d2ddd8cee8df4a4548dcffb1e088 Faucet Sender (active)
1 0xd528c18ce7a8844e4a4dcd841975b20ae599b020 Faucet Reserve
2 0xfd6e36bfa2b2798d08592802206c943d5513adfb Faucet Reserve
3 0xed15573ad312d41aaef74cff56a8ef28122ec2db Faucet Reserve
4 0xaffd6d4f74c5651110efcf1b9736f7a5cf2ccdbb Faucet Reserve
5 0xbf5ee055f399323fdd0cefe3d4aa923678d46107 Faucet Reserve
6 0x1dc9637b183093d723ea8d1fb18083b06490facb Faucet Reserve
7 0xa2270f30ca1aad922510375508bf68cd95509f29 Faucet Reserve
8 0xe15a689775685ae324559ea9a492fc650354ca0b Faucet Reserve
9 0x005dcff212d27b55e7a74bf745e1349ab44ca25d Faucet Reserve

Treasury

Parameter Value
Treasury Address ms69216b1d10425689704d5ae3b2a4aa17049f59b1
Multisig Scheme 3-of-5 Falcon-512
Block Reward to Treasury 5% per block
Fee to Treasury 20% of transaction fees

Tokenomics

Parameter Value
Year 1 Block Reward 100 QUA
Annual Reward Reduction 15% per year
Minimum Reward Floor 5 QUA (reached ~year 20)
Mining Reward Lock 50% locked for 6 months
Fee Burn 70% of all transaction fees
Fee to Treasury 20% of all transaction fees
Fee to Miner 10% of all transaction fees
Max Block Transactions 1,200
Max Block Size 2 MB
Min Transaction Fee 0.0001 QUA

Quick Start with Docker

Option 1: Docker Desktop (Graphical Interface)

  1. Open Docker Desktop and find xd637/quanta-node:v0.5.0-alpha (or :latest) in your Images.
  2. Click Run.
  3. Under Optional settings, configure:
    • Container name: quanta-node
    • Ports: Map 3000, 7782, 8333, 9090 to themselves.
    • Volumes:
      • Add host path quanta-data to container path /home/quanta/quanta_data
      • Add host path quanta-logs to container path /home/quanta/logs
  4. Click Run.

Option 2: Docker CLI

# Pull the image
docker pull xd637/quanta-node:v0.5.0-alpha

# Run directly (Ensure data persistence!)
docker run -d \
  --name quanta-node \
  -p 3000:3000 -p 8333:8333 -p 7782:7782 -p 9090:9090 \
  -v quanta-data:/home/quanta/quanta_data \
  -v quanta-logs:/home/quanta/logs \
  xd637/quanta-node:v0.5.0-alpha

Option 3: Docker Compose (Recommended)

If updating from an older version, delete your old named volume first:

docker compose down -v

Then start the node:

docker compose -f docker-compose.single.yml up -d

Server Setup (Ubuntu / VPS)

The following instructions guide you through setting up a persistent, always-on Quanta node on a fresh Ubuntu server.

1. Update system and install Docker:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu && newgrp docker

2. Open necessary ports (using UFW):

sudo ufw allow 8333/tcp
sudo ufw allow 7782/tcp
sudo ufw allow 3000/tcp
sudo ufw allow ssh    # Prevents getting locked out
sudo ufw --force enable

3. Set up directory and start the node (using Host Networking for API Security):

mkdir -p ~/quanta_data
sudo chmod 777 ~/quanta_data

docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

(Need public Web Wallet access? See TESTNET_RPC_SETUP.md for NGINX & SSL setup)

4. Check logs:

docker logs quanta-node --tail 30 -f

5. Update / Clean Restart (REQUIRED FOR v0.3.0):

Due to the Testnet V2 reset, you MUST delete your old blockchain data before restarting:

docker stop quanta-node && docker rm quanta-node

# ⚠️ CRITICAL: Delete old blockchain data
sudo rm -rf ~/quanta_data/*

docker pull xd637/quanta-node:latest
docker run -d \
  --name quanta-node \
  --restart always \
  --network host \
  -v ~/quanta_data:/home/quanta/quanta_data \
  xd637/quanta-node:latest

Manual Build from Source

git clone https://github.com/quantachain/quanta
cd quanta
git checkout v0.5.0-alpha
cargo build --release

# Run node
./target/release/quanta start -c quanta.toml

Wallet Management

Create a new wallet natively:

./target/release/quanta new-wallet --file wallet.qua

Create a raw encrypted wallet using Docker:

docker exec -it quanta-node quanta new_wallet --file wallet.qua

Create a new HD Wallet (Recommended! Gives JSON + 24-word recovery phrase):

docker exec -it quanta-node quanta new_hd_wallet --file hd_wallet.json

Mining (Proof of Work)

Start CPU miner natively:

./target/release/quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

Start CPU miner using Docker (Background):

docker exec -d quanta-node quanta start_mining YOUR_WALLET_ADDRESS --rpc-port 7782

Check Mining Logs in Docker:

docker logs quanta-node --tail 30 -f

Stop Mining using Docker:

docker exec -it quanta-node quanta stop_mining --rpc-port 7782

Node Status & Blockchain Info

Print Current Blockchain Height:

docker exec -it quanta-node quanta print_height --rpc-port 7782

View Full Node Status (Peers, Height, Mempool):

docker exec -it quanta-node quanta status --rpc-port 7782

View Dynamic Mining Status (Difficulty, Blocks Mined, Rewards):

docker exec -it quanta-node quanta mining_status --rpc-port 7782

Ports

Port Service
3000 REST API
8333 P2P Network
7782 RPC
9090 Prometheus Metrics

What Changed in Alpha v0.5.0

🐛 Critical Fix — Faucet Balance = 0 After Sync

Root cause: The genesis premine transactions (10 × 1,000,000 QUA) were created in-memory in Blockchain::new() and credited to the account state — but they were never stored inside the genesis block struct itself. When a deep_reorg triggered rebuild_account_state_up_to(), it iterated over genesis.transactions (always empty on disk) and applied no premine. All faucet wallets showed 0 QUA after any reorg.

Fix: rebuild_account_state_up_to() now directly credits the hardcoded faucet list with maturity=0 before replaying blocks 1–N, exactly mirroring what Blockchain::new() does.

Self-heal on startup: Blockchain::new() now detects the corrupted state (Faucet 0 balance = 0 on a non-empty chain) and automatically replays all blocks to restore correct balances. No data wipe needed to upgrade from v0.4.0.

🐛 Critical Fix — Sync Stuck at Block 1 (MIN_DIFFICULTY Too High)

Root cause: MIN_DIFFICULTY was set to 8,343,908 but the live testnet's earliest blocks (heights 1–45) were mined at the genesis difficulty of 6,972,889. Every incoming block at those heights was rejected with difficulty 6972889 < minimum 8343908, making a fresh sync impossible — the node could never advance past genesis.

Fix: MIN_DIFFICULTY lowered to 6_972_889 (the actual testnet genesis difficulty).

🐛 Fix — Reorg LWMA Bounds Rejected Early Chain Blocks

The permissive reorg validator computed LWMA bounds against the current chain tip. For a node at genesis (height 0), this produced an estimate of ~MIN_DIFFICULTY, and the 50% lo bound rejected all early blocks. The bounds check is now skipped for blocks below LWMA_WINDOW (45) — LWMA is not meaningful without a full window.

🐛 Fix — State Root Rejected All Historical Blocks

The state_root commitment field was added to the codebase after the live testnet had already mined hundreds of blocks. Nodes enforcing the check on those older blocks rejected them as invalid. State root is now only enforced on recent blocks (within 1,000 of the current tip).

🔧 Faster Fork Recovery

Reduced MAX_FORK_STALLS from 2 to 1 — the node now initiates a deep reorg after a single batch of stuck blocks instead of waiting for two consecutive stalls.


What Changed in Alpha v0.4.0

🔧 LWMA Difficulty Algorithm (Consensus Change — Hard Fork)

Replaced the Bitcoin-style 2016-block interval difficulty adjustment with LWMA (Linearly Weighted Moving Average), a per-block algorithm used by Grin, Zcash, and Monero forks.

Why: The 2016-block window was dangerous on a small testnet:

  • A high-hashrate miner joining temporarily could mine all 2016 blocks fast, spike difficulty 4×, then leave — causing the net...
Read more