Immutable on Ethereum

Settle Any Bet. Trustlessly.

Two parties. One resolver. No oracle. Lock your stakes in an immutable contract. A mutually trusted resolver picks the winner. From $1 bar bets to $1 billion public challenges. Custom odds. ETH or any ERC-20 token.

Bets Created
Volume Resolved
2%
Winner Fee
Custom Odds
0
Oracles
🔒
Zero Owner
🧊
Fully Immutable
🎯
Human Resolver
⚖️
Custom Odds
🛡️
No Proxy / No Pause
Bet Deploy pending — update config.js after deployment
No oracle.· No Chainlink.· No admin keys.· No custody.· No rug.· No owner.· No upgrade.· Human resolver.· Custom odds.· Any amount.· 30-day timeout.· Immutable betting on Ethereum, running forever.· No oracle.· No admin keys.· No governance.· No oracle.· No proxy.· No pause.· No upgrade.· No liquidation.· No blacklist.· No custodian.· No emergency shutdown.· Immutable smart contracts on Ethereum, running forever.·

Human Resolver

No Chainlink. No oracle network. A mutually trusted human — a friend, a lawyer, a public figure — determines the winner. The resolver can only pick a winner or declare a draw. They cannot steal funds.

Custom Odds

1:1, 3:1, 10:1, 100:1 — any odds. Party A locks 1 ETH, Party B locks 3 ETH. Winner takes all minus 2%. The contract doesn't care about odds — it just holds both stakes and sends them all to whoever the resolver picks.

30-Day Safety Net

If the resolver goes MIA, both parties reclaim their own stakes after 30 days. Worst case is always "get your money back." No permanent fund lock. No trapped capital. Just game theory.

How It Works
Trustless betting in three roles. No bookie. No oracle.

For Bettors

  1. Create a bet: deposit your stake, set the terms, choose a resolver, set counterparty stake (for custom odds)
  2. Share the bet link with your counterparty. They match by depositing their stake.
  3. Wait for the event to happen (sports game, price target, personal challenge, anything)
  4. Resolver picks the winner. Winner gets the entire pot minus 2% fee. Atomic settlement.

For Resolvers

  1. Both parties agree on you as the resolver before locking funds
  2. The event happens. You verify the outcome.
  3. Call resolve() — pick Party A, Party B, or Draw
  4. You cannot steal funds. You can only direct them to one of the two parties. Your role is honorary — you settle, you don't hold.
Frequently Asked Questions
Chainlink adds complexity, cost, and a dependency on an external system. If Chainlink goes down, the contract breaks. Our human resolver model is how bets have worked for thousands of years — you pick someone both parties trust. The resolver has no incentive to cheat because they can't profit. They can only send funds to one of the two parties.
If the resolver doesn't call resolve() within 30 days after the deadline, both parties can reclaim their own stakes. No fee charged. Worst case is always "get your money back," never "money stuck forever."
No. The resolver can only call resolve(winner) which sends funds to Party A, Party B, or splits on Draw. There is no function that sends funds to the resolver's address. They settle the bet but never touch the money.
Party A sets their own stake AND what Party B must deposit. If A stakes 1 ETH and requires B to stake 3 ETH (3:1 odds), the total pot is 4 ETH. Winner takes all minus 2% fee. Any odds are supported.
2% of the total pot (both stakes combined) at resolution, deducted from the winner's payout. On draws, 1% from each party's returned stake. No fee on cancellation of unmatched bets or expired reclaims.
Yes. The contract doesn't know or care what the bet is about. Sports, crypto prices, personal challenges, elections, weather — anything with an outcome. The terms are stored as a hash for reference, but the contract only cares about the resolver's decision.
Any EIP-6963 compatible Ethereum wallet — MetaMask, Rabby, Coinbase Wallet, Rainbow, Frame, and others.
Nobody. No owner, no admin keys, no pause, no upgrade proxy, no oracle dependency. Deployed ownerless by design. Runs autonomously forever.
Bet
Create, match, and resolve trustless bets. 2% fee on resolution. No oracle.
Connect wallet to interact
Open Bets
🎯

Click "Load Recent" to browse bets or look up by ID.

Whitepaper
Technical specification of the Onchain Bet protocol.

1. Overview

Onchain Bet is a fully immutable, decentralized smart contract protocol for trustless peer-to-peer betting on Ethereum. Two parties lock stakes on opposing sides of any claim. A mutually agreed human resolver determines the winner. No Chainlink VRF, no oracle network, no external dependencies.

2. Why Human Resolvers

Chainlink and oracle networks add complexity, cost, and dependency. If the oracle goes down, the contract breaks. Human resolvers handle ANY event — sports, prices, personal challenges, elections, "will CZ prove his divorce." A trusted friend, lawyer, or public figure can resolve what no oracle can.

3. Bet Flow

Creating

Party A deposits stake, sets counterparty requirements (stake amount, address or open), resolver, deadline, and terms hash. The bet is Open and waiting for a match.

Matching

Party B sees the bet, reviews terms and resolver, deposits their required stake. Bet goes to Matched status. Both sides locked.

Resolving

After the deadline, resolver calls resolve(). Picks Party A, Party B, or Draw. Winner gets total pot minus 2%. Draw returns stakes minus 1% each.

Expired (Resolver MIA)

30 days after deadline without resolution, both parties can reclaim their own stakes. No fee. Safety net.

4. Custom Odds

Party A stakes: 1 ETH Party B stakes: 3 ETH Total pot: 4 ETH Winner receives: 3.92 ETH (minus 2%) Implied odds: 3:1 against Party A Works for any ratio: 1:1, 2:1, 5:1, 10:1, 100:1

5. Fee Structure

Resolution (win): 2% of total pot (deducted from winner) Resolution (draw): 1% from each party Cancel (unmatched): No fee Expired reclaim: No fee Fee Recipient: Immutable, set at deployment

6. Security Model

ReentrancyGuard. SafeERC20. CEI pattern. Per-party claim flags for expired reclaims. No selfdestruct. No delegatecall. Resolver cannot steal — can only direct funds to PartyA, PartyB, or Draw. Resolution enforced to be after deadline only.

7. Immutability Guarantees

Owner: None Admin functions: None Proxy/Upgrade: None Pause mechanism: None Oracle: None (human resolver) Fee rate: 2% win / 1% draw, hardcoded Fee recipient: Set at deployment, immutable Resolver timeout: 30 days, hardcoded

8. Contract Address

Onchain Bet: Deploy pending Chain: Ethereum Mainnet (Chain ID: 1)

— Otoshi

Deployed on Ethereum. Immutable forever. The contract that Cobie didn't need to be.