01 / 09 All mechanics

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.

  1. A new round opens and a short timer starts. In the example art the timer is about 30 seconds.
  2. You pick anywhere from 1 to 30 squares you think might win, and you put some SOL behind your picks.
  3. Your choices are sealed in a locked box. Nobody, not even the people running it, can peek at where anyone placed.
  4. When the timer ends, one square is revealed as the winner.
  5. If one of your squares is the winning one, you win. Everyone who picked a losing square loses the SOL they put in.
  6. The losing SOL is gathered into a pot, and all the winners share it.
  7. 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.

  1. A round opens for deposits for a fixed window (the example shows roughly 30 seconds).
  2. 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.
  3. A small deploy fee is taken off the top, so your net stake is slightly less than what you sent.
  4. Your tile pattern is encrypted before it ever reaches the chain, so it stays private permanently, not just until the round ends.
  5. After the window closes, a random number is revealed and one winning square is selected from the 30.
  6. All the net SOL from losing squares forms the pot.
  7. That pot is split among the winners in proportion to how much each of them staked on the winning square.
  8. 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.

  1. You call deploy_round with totalAmount (gross lamports, caller-chosen per round) plus an encrypted tile mask: maskEncryptionKey (X25519), maskNonce, and maskCiphertext, a 64-byte ciphertext encoding your 30-tile placement. The plaintext mask is never published, so placements are hidden forever.
  2. Deploy fees (deploy_total_fee_bps) are skimmed; your Miner.total_amount records the net stake.
  3. 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.
  4. Settlement reveals round.rand, and winning_square = rand % 30 selects the winning tile (displayed tile = square + 1).
  5. The net pot (round.total_deployed) is paid pro-rata to each winner’s net stake on the winning tile, using total_on_winning_tile as the denominator.
  6. 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.