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
Deposited
– sNET
Current cap – sNET · – depositors · vault on RobinScan ↗
Next draw
–
committed block –
oracle: – · last attestation at block –
Settled draws
–
– winners paid, prizes staked in NATStaking
The cycle

Stake NET. Win NAT. Stake NAT.

1Deposit
You deposit wsNET; your principal never moves. Withdraw at any time.
2Staking rewards
At each sweep, the vault sells what staking produced – never the principal. NetNet tax on the sale.
3Conversion
USDG buys NAT in slices spread over the epoch, bounded by the depth of the pool and a maximum slippage.
4Bitcoin block
The pot is drawn by the hash of a Bitcoin block committed in advance, before it exists. Bitcoin picks. Attestors relay. You verify.
5Prizes
winners on the pot after the keeper reward and the fee: half to one, the rest shared by ten. Tickets pro rata to principal, plus a presence bonus.
6NATStaking
Prizes arrive staked by default. NATStaking receives a share of the fee.
No NetNat token. Nothing is issued. Immutable contracts.
Last settled draw
Draw –
–
–
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
–
–
–
–
–
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.
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.
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.
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.
05 · The winners
drawTicketOwner(draw, r) returns the address holding ticket r. The same address can win several prizes. Compare with DrawSettled.
full recipe → Verify