Skip to content

Releases: quantachain/quanta

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

Quantachain Testnet V.0.4.0

29 Mar 05:22

Choose a tag to compare

QuantaChain Testnet — Alpha v0.4.0 (Testnet V2)

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

⚠️ CRITICAL: TESTNET RESET ⚠️
This release changes the difficulty adjustment algorithm — a consensus-breaking change (hard fork). All nodes MUST delete their quanta_data/ folder and restart. Running old and new nodes together will cause a chain split.

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.4.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.4.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.4.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.4.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.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 network to stall for hours waiting for the next adjustment window.
  • With 30-second block times, 2016 blocks = ~16.8 hours of stuck difficulty. LWMA reduces this to ~22.5 minutes.

How LWMA works:

  • Adjusts difficulty on every block using the last 45 blocks (~22.5 min window)
  • Each solve-time is weighted linearly — newest block gets weight 45, oldest gets weight 1
  • Individual solve times are clamped to [1s … 180s] to prevent timestamp manipulation
  • Per-block bounds: difficulty can move at most −25% / +100% per block
  • All integer math — no f64, no platform-dependent rounding (consensus safe)
Parameter Old (v0.3.0) New (v0.4.0)
Algorithm Bitcoin-style interval LWMA (Zawy 2017)
Adjustment frequency Every 2016 blocks Every block
Window 2016 blocks (~16.8 hrs) 45 blocks (~22.5 min)
Recovery time after hashrate change Up to 16.8 hours ~22.5 minutes
Per-step cap 4× up / 0.25× down 2× up / 0.75× down

🔧 Deep Chain Reorg (Fork Recovery)

Added deep_reorg() — a multi-block reorganisation engine that allows the node to escape a private fork and switch to the network's canonical chain.

Why: Nodes that mined a block the network rejected could get permanently stuck: every sync batch returned blocks storing as orphans but never connecting, so height never advanced. The stall counter never fired because add_network_block() returns Ok(()) even for orphaned blocks.

How it works:

  1. Sync engine detects 2 consecutive batches where blocks arrived but chain height didn't move → fork detected
  2. Walks back up to 200 blocks comparing local hashes vs incoming previous_hash to find the common ancestor
  3. Rolls back the chain-height pointer to the fork point
  4. Rebuilds account state from genesis up to the fork point
  5. Replays the canonical chain blocks sequentially from there
  6. Safety: never rolls back past a checkpoint, never touches genesis, validates PoW on all incoming blocks before committing

What Changed in Alpha v0.3.0 (Testnet V2)

  • Testnet V2 Genesis Reset: Restarted the testnet with a realistic genesis difficulty (6,972,889) to properly enforce ~30s block times.
  • Difficulty Adjustment Fix: Removed the broken ±15% bounding cap on difficulty adjustments. The algorithm is now mathematically equivalent to Bitcoin's formula with a 4...
Read more

Quantachain Testnet Alpha

28 Mar 05:03

Choose a tag to compare

QuantaChain Testnet — Alpha v0.3.0 (Testnet V2)

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

⚠️ CRITICAL: TESTNET RESET ⚠️
This release includes a new genesis block. If you are running an older alpha node, you MUST delete your quanta_data/ folder before starting this update. The old chain is incompatible.

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 1774828800 (2026-04-01 00:00:00 UTC)
Testnet Genesis Hash 0000001a2cbe8311e347945a5d0c35563b3b17b7423f6cc471b9c623ef10b77f
Mainnet Genesis Hash 1cdbccdff3db462378f4acbe4553b49040ffcdebf74b5c77e685ba05ccfa8cb0
Difficulty 8,343,908 (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.3.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.3.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.3.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:

sudo iptables -I INPUT -p tcp --dport 8333 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 7782 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 3000 -j ACCEPT
sudo apt install -y iptables-persistent
sudo netfilter-persistent save

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.3.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.3.0 (Testnet V2)

  • Testnet V2 Genesis Reset: Restarted the testnet with a realistic genesis difficulty (8,343,908) to properly enforce ~30s block times.
  • Difficulty Adjustment Fix: Removed the broken ±15% bounding cap on difficulty adjustments. The algorithm is now mathematically equivalent to Bitcoin's formula with a 4x clamp, resolving the issue where difficulty failed to adjust correctly.
  • Weighted Peer Reputation: Replaced the flat 3-strike system with a Bitcoin-style DoSMan weighted scoring system (0-100). Serious consensus violations (e.g., invalid blocks) result in immediate bans (Score: +50), while minor issues like invalid txs (Score: +10) or message floods (Score: +20) accumulate gradually.
  • Wallet & Mining CLI Improvements:
    • quanta new_wallet now clearly prints your generated address to the terminal.
    • quanta mining_status no longer silently truncates your public address, and clearly states if mining is idle instead of looking stuck.
    • Mining will no longer start unnecessarily if your node is out of sync.
  • Block Explorer API: Added full support for paginated address history (/api/address/:address/txs), address lookup (/api/address/:address), $O(1)$ transaction lookup by hash (/api/tx/:hash), and latest block feeds (/api/blocks/latest).
  • Network Routing Fixes: Nodes no longer request duplicate blocks during broadcasts, fixing the persistent sync stall bug ("stuck at 272").

What Changed in Alpha v0.2.0

  • Mnemonic-based faucet wallet system (10 reserve wallets, BIP-39 derived)
  • Genesis timestamp updated to 2026-03-21
  • Security audit 2 applied: nonce atomicity, coinbase validation, MTP timestamp rule, per-sender mempool cap, state root enforcement
  • Block size increased to 2 MB to accommodate Falcon-512 transaction sizes
  • License changed from MIT to Apache 2.0

Security Notice

This release has undergone internal audit only. It has NOT been formally verified by a third-party security firm. Do not use for real financial transactions.

Falcon-512 and Kyber-1024 implementations are based on NIST PQC Round 3 finalists.


License

Apache 2.0 — see LICENSE

"Quanta" and "QuantaChain" are trademarks. Forks may not use these names without permission.