Skip to main content

On 8 August a US court granted Bybit expedited discovery in its pursuit of the funds stolen in the $1.5 billion North Korean hack, letting the exchange demand account identities, balances and transaction histories from platforms with US operations. Read that back slowly. The money has been publicly visible the entire time, every hop legible to anyone with a block explorer and a free afternoon. What Bybit needed a judge for was not the trail. It was the names.

That is the cleanest statement of a limit this industry keeps forgetting it has. The chain is an exceptional record of what happened, and never a record of who did it. Addresses are not people, they are handles, and one person can hold ten thousand of them for the cost of the gas.

Which brings us to the eighth thing nobody asks about provable fairness. We have covered transaction ordering, liveness, the front end, recourse, player exposure and the settlement gap. This one is simpler than all of them and gets asked even less: a provably fair draw proves the draw was honest. It proves nothing about who else was in it.

TL;DR

  • A US court just gave Bybit discovery powers to name the humans behind addresses holding stolen funds, proving on-chain data shows flow but never identity.
  • Chainlink VRF proves a winner was selected uniformly from a ticket set. It says nothing about whether those tickets belong to independent players or to the house wearing fresh addresses.
  • Self-entry is pointless when the prize derives from tickets actually sold and every ticket is paid for on minting. It becomes lucrative the moment a platform advertises a fixed or guaranteed prize.
  • “Guaranteed prize pool” is a red flag, not a selling point: it is the structure that pays an operator to dilute the field with its own entries.
  • KYC does not fix this. It returns the problem to trusting an operator who can exempt itself from its own checks.
  • Satoshie cannot prove its entrants are distinct humans. Nobody can. Architecture can only make sybil entry unprofitable rather than undetectable.

What the proof actually covers

Here is the honest scope of a VRF-resolved raffle. The coordinator verifies a cryptographic proof on chain before the callback fires. The winning index is computed inside that callback, in verified code you can read, as keccak256 of the returned random word combined with a prior blockhash, modulo ticketsMinted. Tickets carry equal weight, and nobody, including the operator, can steer which index comes out.

All of that is true, and all of it concerns one operation: selecting a number from a range. The proof begins when the range exists and ends when an index is produced. It says nothing about how the range got populated.

Picture a lottery draw with a glass ballot box, cameras on every wall and an auditor reading out the serial number of the winning slip. Flawless. Now ask who put the slips in the box.

Where the money actually is

Run the numbers, because the intuition here is wrong in an interesting way.

Take a raffle where the prize is a percentage of the pool. Tickets cost 0.01 ETH, the house keeps 10%, the winner takes the rest. Fifty real players enter. If the operator funds fifty fresh addresses and buys fifty more tickets, it must pay real money in to do it, and its own stake inflates the pool it might win back. Work through the expectation and the real players’ return per ticket has not moved. Self-entry here is a hobby.

Now change one variable. The platform advertises a guaranteed prize of 0.5 ETH, paid regardless of how many tickets sell. Fifty real players enter, staking 0.5 ETH between them, each holding a one in fifty shot. The operator mints fifty tickets of its own. Every real player’s probability just halved, to one in a hundred, and their expected return halved with it. The prize did not grow, because it was never a function of the pool. The operator’s outlay, if minting is privileged or self-funded, is either zero or a round trip back to its own treasury.

The draw is still provably fair. The VRF proof still verifies. ticketsMinted still reads 100, exactly as promised. Every claim in the marketing copy survives intact, and the player has quietly lost half their expected value to an operation leaving no forensic trace, because a house ticket and a player ticket are the same object.

This is why “guaranteed prize pool” deserves more suspicion than it gets. It is sold as generosity, an operator absorbing risk for the player. Structurally, it is the one configuration that pays the operator to stuff the box.

Why identity is not the answer

The obvious response is to demand verified humans. One wallet, one person, KYC at the door.

That trades a problem you can reason about for one you cannot see. Verification runs on the operator’s servers against the operator’s database, so you are back to taking someone’s word for it, which is what the architecture exists to avoid. Worse, an operator that verifies every player can still exempt its own addresses, and you will never know, because the exemption lives in the same private system as the checks.

The Bybit ruling shows how expensive real identity is. A multibillion-dollar exchange, chasing a theft attributed to a state actor, with perfectly preserved transaction data, still needed a judge to get names out of intermediaries. Identity is a legal instrument, not a property of the chain, and any platform implying otherwise is describing a database. Sybil resistance is an open problem, and it will not be solved by a gaming platform’s onboarding flow.

What can actually be checked

If you cannot verify who the other entrants are, verify that it does not pay to fake them. That is a weaker guarantee, and unlike the stronger one it is achievable today.

Four things to look for, all readable before you enter. Is the prize derived from tickets actually sold, or fixed in advance? Does minting require payment into the contract in the same transaction, or is there a mint path that skips the till? Is ticketsMinted contract state rather than a number rendered on a page? And is there a privileged function that can create tickets or adjust the fee between rounds?

Satoshie’s answer to the last is that there is no admin key to hold. Tickets are equal weight, minting is paid, ticketsMinted is contract state, and stake escrow, VRF resolution and payout happen in one transaction in verified immutable code. Self-entry costs the house what it costs you, and buys it what it buys you.

Now the caveat, because this series does not get to skip them. Satoshie cannot prove the addresses in any given raffle belong to distinct human beings. That claim is not available to us or to anyone else. Every platform here is in the same position, and the ones that do not say so are not more sybil resistant, just quieter about it.

Three questions for any platform running a draw. Is the prize a function of what was actually staked, or a number decided before entries opened? Could the operator add tickets without paying the price you did? And if the answer is no, can you point at the code that makes it no?

Provable fairness is a very good answer to one question. The industry’s habit of letting it stand in for all the others is how you end up with a cryptographically flawless draw over a field of ghosts.

📷 Photo by Gabriel Mihalcea on Unsplash

Valentina Ní Críonna

Author Valentina Ní Críonna

More posts by Valentina Ní Críonna