Bonds and fees
OMY's economic model follows the standard optimistic-oracle design, adapted to TON's jetton mechanics. There are bonds (refundable, security collateral) and fees (non-refundable, protocol revenue).
Bonds
A bond is collateral the asserter (or disputer) puts at risk to back their claim. Always refundable if you're right; lost if you're wrong.
| Action | Required collateral | If you win | If you lose |
|---|---|---|---|
| Propose | bondAmount + protocolFee | bond returned + (fee already burned) | bond split: 50% to disputer, 50% to treasury |
| Dispute | bondAmount (no fee) | bond returned + 50% of proposer's bond | bond split: 50% to proposer, 50% to treasury |
Bond sizing
For the dogfooded Market consumer, bondAmount is sized to 2% of total value-at-risk at resolution time, with safety guards:
bondAmount = clamp(
state.totalCollateral * 2% / 10000,
oracleBond_floor, // minimum bond configured per-market
MAX_BOND_CAP // 10 000 USDT — keeps the bond postable on huge markets
)
The reasoning: bond > profit-from-lying. At 2% of TVL, a proposer lying on a market with $100k TVL would forfeit $2k — strictly more than they could profitably steer through a wrong settlement. Cap at $10k keeps the bond physically affordable; security beyond that escalates to the resolver, not the bond.
Fees (Phase A)
All Phase-A fees route to a multisig treasury controlled by the founder. In Phase B (post-$OMY launch), a governance switch flips the treasury target to a RewardsDistributor contract that streams 50% of fees to staked $OMY holders.
| Stream | Amount | Where charged | Routed to |
|---|---|---|---|
| Final fee | 2 USDT (non-refundable) | Skimmed from the propose() jetton transfer | Treasury |
| Dispute treasury cut | 50% of loser's bond | Resolver's Resolve payout path | Treasury (other 50% → winner) |
| AMM swap fee | 0.5% of input | Market.tolk BUY_YES/BUY_NO | Treasury (LP-split deferred to Phase B) |
| Resolution skim | 1% silent of totalCollateral | Market.tolk on OracleResult | Treasury (every winning share pays 0.99 instead of 1.00) |
| Market creation fee | 0 USDT | — | — (anti-spam handled by the oracle bond on resolve) |
Phase A realistic revenue
At a conservative year-1 baseline ($500k AMM volume, 100 assertions, 10 disputes with avg $5k bond, $300k settled):
- Final fees: ~$200
- Dispute treasury cuts: ~$25 000
- AMM swap fee → treasury: ~$1 000
- Resolution skim: ~$3 000
Total ~$29k/year. Covers basic opex + founder time. At moderate traction ($5M / $3M settled): ~$290k/year. At strong traction ($30M / $20M settled): ~$1.5M/year.
Why fees can be governance-switched but bonds cannot
Bonds are part of an assertion's immutable Config — snapshotted at spawn time. Once an assertion is live, its bond requirements cannot change. This is essential for predictable settlement: a long-running market knows exactly what economic security backs its resolution.
Fees and treasury target ARE in the Config snapshot too — same immutability per assertion — but OracleFactory has a governance-only UpdateMonetization opcode that updates the FACTORY's monetization. Future assertions spawned from that factory inherit the new values; already-live assertions stay on their original snapshot. This is the Phase B switch: owner flips treasuryAddress from multisig → RewardsDistributor, and every assertion spawned afterward routes 50% of its fees to staked $OMY holders.
Source
- Fee constants:
tolk/contracts/market-storage.tolk(SWAP_FEE_BPS = 50,RESOLUTION_FEE_BPS = 100,MAX_PROTOCOL_FEE = ton("3")) - Bond sizing:
tolk/contracts/Market.tolkRequestResolutionhandler - Phase B switch:
OracleFactory.UpdateMonetization(opcode0x0a09)