How it works

Bet on your skills: two players put up the same stake, play one friendly battle, and the winner takes the pot. Everything below is what happens between those three things.

  1. 01
    Connect a wallet

    MetaMask or Phantom, through Privy. Nothing is signed at this point — the address is only how the pot knows where to go.

  2. 02
    Prove the Clash Royale account is yours

    Open Clash Royale → Settings → API token, and paste it next to your player tag. Supercell checks the pair, which is what stops anyone from queueing under someone else's account.

  3. 03
    Pick a stake

    Stakes are set in dollars — $5, $25, $100, $500 — and converted to ETH at the live rate when you queue, so both players put up the same amount.

  4. 04
    Get matched

    You join the queue for that stake and are paired with the next player queueing at the same amount — no trophy brackets, the stake is the only filter. Your place is held for 15 minutes, and leaving the queue costs nothing.

  5. 05
    Play the friendly battle

    Send your opponent a friendly battle in game. Hood Royale never touches the match itself — it only watches for the result.

  6. 06
    Get paid

    Both battle logs are read from the Clash Royale API until the game between the two tags shows up. The winner takes the pot minus a 5% fee; a draw refunds both sides.

The fee

5% of the pot. On a $25 duel both players stake the same amount, the pot is two stakes, and the winner walks away with 95% of it. Draws refund both stakes in full, and so does a queue that never finds an opponent.

API

The site runs on the same routes anyone can call. No key is needed for reads.

POST/api/duel{ tag, token, stakeUsd, stakeEth, address }

Verifies the player's API token, then joins the queue for that stake or matches an opponent already waiting. Returns a ticket.

GET/api/duel?ticket=…

Polls a ticket: waiting, matched, settled or expired. Settling reads both battle logs and names the winner.

DELETE/api/duel?ticket=…

Leaves the queue. Nothing is staked while waiting, so this is always free.

GET/api/player?tag=…

Player profile and the last 8 battles — this is the history shown under the duel panel.

GET/api/leaderboard?limit=50

Wallets ranked by net ETH won across settled duels.

GET/api/eth-price

ETH/USD used for the stake conversion. Coinbase first, then Binance, then Coingecko, cached 5 minutes.

The escrow

Stakes sit in HoodRoyaleEscrow, a contract that only ever pays a duel’s own two players and the treasury. The first player calls open() with their stake, the second matches it exactly with join(), and the pot is locked until the result is known.

Be clear about the trust model: a settler address reports the winner, because a Clash Royale battle log cannot be proven on-chain. What the contract does guarantee is that the settler can never take the money — the fee is capped at 10% in code, and if nobody settles within two hours either player can call refund() and pull both stakes back out. Nobody has to ask permission to get their money back.

What is not live yet

The contract is written and tested but not deployed, so no stake is held on-chain today. Until a Supercell API key is attached to the deployment, player lookups also run in demo mode and return placeholder accounts.

Back to the arena