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, hard-to-bias entropy into the consensus layer itself. Every block contributes a public beacon derived from its proof-of-work hash — 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-4 · 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, token creation, your NFTs and lottery entries all built in.

Block reward
50 ENTRO
Block time
~30s
Hardware
Any CPU
Windows 10 / 11
EntropyChain Miner
v0.5.0 testnet-4 · ~12 MB
Download .exe
Windows SmartScreen will warn — click "More info" then "Run anyway." Source code on request.
Antivirus heads-up. The miner is not code-signed yet, and some antivirus tools (McAfee, for example) flag or quarantine new unsigned programs, and CPU miners in particular. If that happens, restore it from quarantine or add an exception. Mining only starts when you press Start. Download it only from entropychain.io and check that the file's SHA-256 matches: 1530ce0b2d50a7fdb577a5c3a3e843fd80b44081631affb338421f38b418630b Check in PowerShell: Get-FileHash EntropyChainMiner.exe
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 publishes a beacon r_i = H("entropy" ‖ block_hash). The block hash covers the proof of work, so no one knows a beacon until its block is solved, and anyone can recompute it from public data. The chain itself is a randomness beacon — no 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 solves a block

    The miner assembles a block and searches for an Argon2id proof-of-work solution. Until a valid nonce is found, the block's hash does not exist, not even for the miner.

  2. The block hash becomes the beacon

    Every node computes r_i = sha256d("entropy" || block_hash). Because the hash covers the PoW nonce, nobody could know r_i in advance. It is queryable at /rpc/entropy/{height}.

  3. User submits a random-mint transaction

    The user names a collection, token_id and recipient, but no source of randomness. If the mint lands in block H, its traits come from the beacon of block H + 1, which does not exist yet.

  4. Protocol derives the traits

    Once block H + 1 is mined: h = sha256(r_{H+1} || collection || token_id). Rarity, power, element, colour and legendary status are read from bytes of h. Anyone can recompute them.

  5. NFT exists with verifiable provenance

    The NFT records the block whose beacon revealed it. Anyone can verify nothing was cherry-picked: the beacon did not exist when the mint was signed.

consensus.py
trait_derivation
verify.js
1def beacon(block_hash: bytes) -> bytes:
2 # Double SHA-256 of a domain tag and the block hash.
3 # The hash covers the Argon2id PoW nonce: unknowable in advance.
4 return sha256d(b"entropy" + block_hash)
5
6def verify_block(block: Block) -> bool:
7 # Verify the Argon2id PoW over the canonical header + nonce.
8 pow_hash = argon2id(block.header_bytes() + block.nonce)
9 if not meets_difficulty(pow_hash, block.difficulty):
10 return False
11 # No separate beacon check: it is a function of the hash.
12 return True
1def derive_traits(beacon: bytes, collection: str, token_id: str):
2 # One hash of the reveal block's beacon and the token's ids.
3 h = sha256(beacon + collection.encode() + token_id.encode())
4
5 return {
6 "rarity": h[0],
7 "power": h[1],
8 "element": ELEMENTS[h[2] % 5],
9 "color_seed": h[3:6].hex(),
10 "is_legendary": h[6] < 8,
11 }
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 reveal block's public beacon.
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 revealed by the beacon of the block after the mint. No one, the minter included, can know or pick the traits in advance. Every property is reproducible from public data.

Input
collection, token_id, recipient
Output
NFT whose traits the next block reveals
Trust
none — reproducible by any party
LOTTERY

lottery_draw

Create a lottery with a future draw_height, optionally a window of up to 16 blocks. Tickets are bought until that block; the winner comes from the window's block beacons. Prize paid natively, no escrow contract.

Input
lottery_id, prize, ticket_price, draw_height, draw_blocks
Output
verifiable winner from future blocks' beacons
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.