When Robinhood Chain meets Bitcoin
NetNat
Capital
“Bitcoin picks the winners.”
winners every draw. Half the pot to one, the rest shared by ten.
Stake NET · Win NAT · Stake NAT
Last settled draw
Draw –
Block on mempool.space ↗
Settlement on RobinScan ↗
–
–
NAT
NAT
settled pot
committed Bitcoin block
Block hash
–
Seed = keccak256(hash ‖ vault ‖ draw number)
–
Attestations
–
Keeper reward
–
Tickets in play
–
Prizes
–
Rank
Winner
Share
NAT staked
Proof
1
–
–
–
–
2
–
–
–
–
3
–
–
–
–
4
–
–
–
–
5
–
–
–
–
6
–
–
–
–
7
–
–
–
–
8
–
–
–
–
9
–
–
–
–
10
–
–
–
–
11
–
–
–
–
Committed Bitcoin blocks, settled draws
All draws →
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
How to verify it yourself
“Bitcoin picks. Attestors relay. You verify.”
Five readings, no trust required
01 · The committed height
Read the committed height in the vault before the draw. It is fixed from the last attested height, before the block exists.
drawInfo(–) → –
02 · The Bitcoin hash
Take the block hash from mempool.space or your own node and compare it with the oracle. The hash is used as is, as bytes32.
getHash(–) → –
03 · The seed
seed = keccak256(abi.encodePacked(hash, vault, draw number)). Hash, then vault address, then number: the only source of randomness, and nobody can choose it.
drawSeed(–, hash) → –
04 · The tickets
For i from 0 to 10, ticket r = keccak256(abi.encodePacked(seed, i)) mod totalWeight. Eleven numbers, one per prize, over the ticket list frozen at the sweep.
totalWeight –
05 · The winners
drawTicketOwner(draw, r) returns the address holding ticket r. The same address can win several prizes. Compare with DrawSettled, and with winnersOf in v2.
full recipe → Verify