A two-minute guide
How Hearth works
Save together, win a prize paid out of yield, and never lose your deposit. The money is invisible. The fairness is not.
Shield, then deposit
Turn a plain test token into its confidential twin, then put part of it into the pool for that token. Shielding is public and depositing is not, which is exactly why they are two buttons: doing both in one click publishes the size of your deposit to anyone reading the chain.
Your odds are your average balance
Not your balance at the moment of the draw, your balance across the whole period. Deposit five minutes before the period ends and you get one twelfth of the odds of having held the same amount all period. That is what stops somebody flashing a big balance in just before each draw and taking the prize.
The draw closes, and a seed is drawn
Prize sizes are fixed first, before any random number exists. Then the seed is generated as a ciphertext inside Zama's coprocessor, so nobody sees it when it is drawn and there is no second roll. When the period is over the seed is published with a signature the contract checks on chain.
Everyone's result is already decided
From the moment the seed is verified, the thresholds are public numbers anyone can recompute and the weights can no longer change. Evaluation just writes down what is already true, walking the saver list from a point the seed picked. Nobody chooses who is evaluated or in what order.
You look, and only you
Press Reveal and sign a message. That signature proves to Zama's relayer that you control the address, and it hands back the plaintext of values the contract granted you: your principal, your winnings, your weight and your credit for each draw. It costs no gas and writes nothing.
Take it out whenever
Withdrawals pay from winnings first, then principal, in one confidential transfer clamped on chain to what you hold. A claim is the same call with the same shape as any other withdrawal, so there is no transaction type that names the winners.
Encrypted, readable only by you
your own values- Your principal
- Your unclaimed winnings
- Your time-weighted balance in every draw
- What each draw paid you, so whether you won
Public, so the pool can be trusted
anyone can check- The seed of each draw, and its signature
- The bracket the draw ran against
- Each tier's prize size and liquidity
- How many prizes a tier paid, one draw later
- Which addresses deposited, and when
Named honestly: what leaks
- Shielding and unshielding are public. Turning a public token into a confidential one is by definition a public act. If somebody can pin your balance, usually by watching a public shield followed by a deposit of the same size, then your result in every draw from then on is public arithmetic, because the thresholds are public by design.
- Below three savers the bracket is nearly personal. With one saver it is that saver's weight to within a factor of two. The app says so on the page when it happens.
- Each tier publishes how many prizes it paid, one draw later, never to whom. That is the same step that returns unwon money to the public pot, which is what lets the jackpot accumulate where you can watch it. It slowly narrows a balance that never moves.
- The token is Zama's, and it is upgradeable. Its owner can appoint observers able to decrypt every amount that moves through the token, retroactively. Hearth's own ledger is not readable by them, and the app shows a banner if an observer is ever appointed.
You can watch a whole draw happen and still not say who won. That is the point, and it is the one thing only fully homomorphic encryption makes possible.