How it works

A lottery on LitVM where every ticket is a collectible NFT — win or lose, the NFT is yours forever.

01The game

Pick an image, mint it as an NFT, and you're in the round. Each mint is one ticket. When the round ends, three winning tickets are drawn and the prize pool is paid out. Your NFT stays in your wallet permanently, whether you win or not.

Mint your ticketUpload an image, choose your country, and mint. The image is pinned to IPFS and lives on-chain as your NFT.
The round runsEvery mint adds to the prize pool. A countdown shows the time left. When it hits zero, no more tickets for that round.
The drawThree winning tickets are selected using public randomness from drand (see Fairness below).
ClaimWinners claim their prize directly from the contract, whenever they want. Prizes never expire.

02Prize pool

Every payment goes 100% into the round's pool. At draw time it splits:

1st50%
2nd25%
3rd15%
10%
1st place · 50% 2nd place · 25% 3rd place · 15% Treasury · 10%

Payouts use a pull-payment pattern: the contract records what it owes and each winner withdraws it themselves. Nobody's claim can block anyone else's, and a new round starts immediately after the draw — no waiting for winners to collect.

03Mint price

The mint price targets $3 USD, converted to zkLTC using an on-chain LTC/USD price feed, with a ±5% tolerance band and hard circuit-breakers so a broken feed can never produce an absurd price.

On testnet the price is fixed at 0.1 zkLTC per mint. zkLTC is the test gas token — get it free from the faucet.

04Fairness & randomness

Winning tickets are selected with randomness from drand, a public randomness beacon operated by the League of Entropy — independent organizations that jointly produce a new random value every few seconds. Nobody, including us, can predict or steer it.

An operator delivers the drand value to the contract to resolve each draw. The value used is emitted on-chain, so anyone can compare it against the public drand record at api.drand.sh. A dishonest operator couldn't fake a result quietly — the mismatch would be publicly visible. The operator can at most delay a draw, and the contract has a recovery path: if a draw isn't resolved within the timeout, it can be re-requested and stale responses are rejected.

Testnet trust model, stated plainly: during testnet the operator is run by the team and drand values are verifiable after the fact rather than proven on-chain. For mainnet the plan is on-chain verification of drand's BLS signatures, removing the need to trust the operator at all.

05Your NFT

The NFT is a standard ERC-721 on LitVM. The image is stored on IPFS, the token in your wallet. It's independent of the lottery result: tickets from past rounds remain as collectibles, showing their round and country of origin.

06FAQ

What do I need to play?

A wallet (e.g. MetaMask) connected to LitVM LiteForge Testnet, and some zkLTC from the faucet. The app adds the network for you when you connect.

When are winners drawn?

When the round's countdown ends. Anyone can trigger the draw once the round is over; the operator then resolves it with drand randomness — typically within minutes.

How long do I have to claim a prize?

Forever. Prizes are recorded per round and place, and remain claimable indefinitely. New rounds start regardless of unclaimed prizes.

Is this real money?

No. This is a testnet deployment: zkLTC has no monetary value and comes free from a faucet. It's a place to test the game, find bugs, and have fun before any mainnet decision.

Can the team change the rules mid-round?

The prize split, target price, and tolerance band are constants compiled into the contract — no function can change them. Admin functions are limited to safety operations (like recovering a stuck draw) and are visible on-chain like everything else.

07Contract

FieldValue
NetworkLitVM LiteForge Testnet
Chain ID4441 (0x1159)
Gas tokenzkLTC
StandardERC-721
Round duration7 days
ContractPending deployment
Explorerliteforge-explorer.caldera.xyz