Rounds
How a single mining round works, from picking tiles to sharing the pot.
Beginner
Think of a round like a quick guessing game played on a board of 30 squares.
- A new round opens and a short timer starts. In the example art the timer is about 30 seconds.
- You pick anywhere from 1 to 30 squares you think might win, and you put some SOL behind your picks.
- Your choices are sealed in a locked box. Nobody, not even the people running it, can peek at where anyone placed.
- When the timer ends, one square is revealed as the winner.
- If one of your squares is the winning one, you win. Everyone who picked a losing square loses the SOL they put in.
- The losing SOL is gathered into a pot, and all the winners share it.
- On top of that, winners also get a slice of brand-new ZINC tokens that the round creates.
So you are really just guessing which square gets revealed, with your stake riding on the answer.
Intermediate
Here is how a round actually works once you look at the numbers.
- A round opens for deposits for a fixed window (the example shows roughly 30 seconds).
- You “deploy” SOL onto a hidden pattern covering 1 to 30 of the board’s squares. The amount you stake is your choice each round.
- A small deploy fee is taken off the top, so your net stake is slightly less than what you sent.
- Your tile pattern is encrypted before it ever reaches the chain, so it stays private permanently, not just until the round ends.
- After the window closes, a random number is revealed and one winning square is selected from the 30.
- All the net SOL from losing squares forms the pot.
- That pot is split among the winners in proportion to how much each of them staked on the winning square.
- Winners also receive freshly minted ZINC, sized by how much SOL the whole round deployed.
Advanced
On-chain, a round is driven by the deploy_round instruction and a sequential Round account.
- You call
deploy_roundwithtotalAmount(gross lamports, caller-chosen per round) plus an encrypted tile mask:maskEncryptionKey(X25519),maskNonce, andmaskCiphertext, a 64-byte ciphertext encoding your 30-tile placement. The plaintext mask is never published, so placements are hidden forever. - Deploy fees (
deploy_total_fee_bps) are skimmed; yourMiner.total_amountrecords the net stake. - Deposits close at
close_after_slot. Only after that slot is randomness fixed, so no one can react to the entropy while the round is open. - Settlement reveals
round.rand, andwinning_square = rand % 30selects the winning tile (displayed tile = square + 1). - The net pot (
round.total_deployed) is paid pro-rata to each winner’s net stake on the winning tile, usingtotal_on_winning_tileas the denominator. - Winners also share newly minted ZINC from the emission curve.
Because the mask is encrypted and rand is only sampled after close_after_slot, neither miners nor operators can game the outcome. Every value is publicly verifiable on-chain.