Verifiable randomness as a primitive

The chain that contributes randomness — not just consumes it.

Most blockchains use randomness through oracles, commit-reveal schemes, or trusted committees. EntropyChain bakes verifiable, unbiasable entropy into the consensus layer itself. Every block contributes a public seed derived from its proof-of-work — usable directly by smart primitives like random NFT mints and on-chain lotteries.

CPU-mineable. Argon2id-based. Open and live on testnet.

LIVE BEACON testnet-1 · syncing
connecting to rpc.entropychain.io
Block height
latest tip
Difficulty
argon2id target
Total supply
ENTRO mined
Block time
~30s
target interval
⛏ MINE THE CHAIN

Mine on the network with any laptop.

EntropyChain is built for CPU mining. Argon2id makes GPUs and ASICs only marginally faster than commodity processors, so a regular machine at home contributes meaningfully to network security and randomness — not just heat.

Run the desktop miner, generate a wallet, and start earning real testnet ENTRO. Multi-account support, send/receive, and token creation all built in.

Block reward
50 ENTRO
Block time
~30s
Hardware
Any CPU
Windows 10 / 11
EntropyChain Miner
v0.2 testnet · ~95 MB
Download .exe
Windows SmartScreen will warn — click "More info" then "Run anyway." Source code on request.
01 / FOUNDATIONS

A consensus layer with three commitments.

Most chains pick one of these. EntropyChain insists on all three because none of them works as well in isolation: trustless randomness needs decentralized hashrate, decentralized hashrate needs CPU-friendly mining, and CPU-friendly mining needs a memory-hard hash.

Memory-hard PoW

Mining uses Argon2id, the PHC competition winner. ASIC and GPU acceleration give a much smaller advantage than against SHA-256 — the bottleneck becomes DRAM bandwidth, not silicon. A laptop can mine. That's the point.

Per-block entropy

Every block commits a seed e_i = H(prev_hash ‖ miner_nonce) covered by the proof-of-work. Anyone can verify the derivation from public block data alone. The chain itself is a public randomness beacon — no separate VDF, no oracle, no committee.

Native primitives

Transactions like nft_random_mint and lottery_draw consume the beacon directly. No smart contracts. No oracle integrations. The protocol enforces fair derivation; verification is a single hash recomputation.

02 / MECHANICS

How a single random NFT mint actually works.

The end-to-end path from block production to verifiable trait derivation on a minted NFT — every step is deterministic, every input is public.

  1. Miner produces a block

    Miner picks a 16-byte miner_nonce, computes e_i = sha256(prev_hash || miner_nonce), then searches for an Argon2id PoW solution. The seed is committed in the header.

  2. The chain accepts & persists the seed

    Peers verify the proof-of-work, which simultaneously verifies e_i was correctly derived. The seed becomes permanently queryable at /rpc/entropy/{height}.

  3. User submits a random-mint transaction

    User specifies collection, token_id, and a past entropy_height. The seed at that height is the source of randomness for trait derivation.

  4. Protocol derives traits deterministically

    For each trait j: trait_j = f_j(sha256(e_i || collection || token_id || tag_j)). Same inputs always produce the same traits. Anyone can recompute.

  5. NFT exists with verifiable provenance

    The NFT records its source block height. Future inspectors can verify nothing was cherry-picked: the source seed was committed before the mint transaction was even constructed.

consensus.py
trait_derivation
verify.js
1def derive_entropy_seed(prev_hash: bytes, miner_nonce: bytes) -> bytes:
2 # SHA-256 over the predecessor hash and miner-chosen nonce.
3 # Committed in the block header, covered by Argon2id PoW.
4 return hashlib.sha256(prev_hash + miner_nonce).digest()
5
6def verify_block(block: Block, prev_hash: bytes) -> bool:
7 # Re-derive the seed and confirm it matches what's committed.
8 expected = derive_entropy_seed(prev_hash, block.miner_nonce)
9 if block.entropy_seed != expected:
10 return False
11 # Then verify the Argon2id PoW over the canonical header.
12 return verify_pow(block.header_bytes(), block.difficulty)
1def derive_traits(seed: bytes, collection: str, token_id: str):
2 # Each trait derived from a different domain string.
3 def tag(name): return sha256(
4 seed + collection.encode() + token_id.encode() + name.encode()
5 ).digest()
6
7 return {
8 "rarity": int.from_bytes(tag("rarity")[:2], "big") % 256,
9 "power": int.from_bytes(tag("power")[:2], "big") % 256,
10 "element": ELEMENTS[tag("element")[0] % len(ELEMENTS)],
11 "is_legendary": tag("legendary")[0] < 8,
12 }
1// Anyone can verify an NFT's traits independently.
2async function verifyNFT(collectionId, tokenId) {
3 const nft = await fetch(`/rpc/nft/${collectionId}/${tokenId}`).then(r => r.json());
4
5 const source = await fetch(`/rpc/entropy/${nft.entropy_source_height}`).then(r => r.json());
6
7 // Re-derive the traits from the public seed.
8 const expected = deriveTraits(source.seed, collectionId, tokenId);
9
10 // They MUST match. The chain has nowhere to lie.
11 console.assert(deepEqual(nft.traits, expected));
12}
03 / NATIVE PRIMITIVES

Two transaction types that could not exist on most chains.

Both fully on-chain. No oracles. No committees. No off-chain computation. Each is a single transaction type the protocol enforces directly.

NFT

nft_random_mint

Mint an NFT whose traits are deterministically derived from a referenced block's entropy. The minter cannot pick traits. The chain cannot lie about traits. Every property is reproducible from public data.

Input
collection, token_id, entropy_height
Output
NFT with deterministically derived attributes
Trust
none — reproducible by any party
LOTTERY

lottery_draw

Create a lottery with a future draw_height. Tickets bought until that block. Winner deterministically selected from the seed at draw_height. Prize transferred natively, no escrow contract.

Input
lottery_id, prize, ticket_price, draw_height
Output
verifiable winner from a future block's entropy
Trust
none — protocol enforces selection

The testnet is live now. Try it in three minutes.

Free, public, no registration. Spin up a wallet in the browser, request testnet ENTRO from the faucet, mint a random NFT or run a lottery. Verify everything you do on the explorer.