Fee Structure
Understand OddMaki's four-layer taker-only fee model — venue fee, creator fee, protocol fee, and match operator fee.
Every trade on OddMaki splits fees four ways. Two layers you configure, one is set by the protocol owner, and one is fixed. All fees are charged to takers only.
Taker-Only Fees
OddMaki charges takers only. The resting maker pays nothing — all fees come out of the crossing order. This applies to every settlement path:
- Normal Fill — the crossing side (buyer or seller) pays
- Mint-to-Fill — both crossing buyers pay, carved from the surplus collateral
- Merge-to-Fill — both crossing sellers pay, carved from the shortfall
This means market makers providing liquidity earn the spread without paying fees, and takers see a single aggregated fee stack on every fill.
Fee Layers
| Layer | Rate | Who Sets It | Who Receives It |
|---|---|---|---|
| Protocol fee | 0–200 bps (configurable) | Protocol owner | Protocol treasury |
| Venue fee | 1–200 bps | Venue operator | Venue fee recipient |
| Creator fee | 0 – venue fee | Venue operator | Market creator |
| Operator fee | 10 bps (0.10%) | Fixed | msg.sender of matchOrders |
The creator fee is a sub-split of the venue fee, not additive. A taker's total fee is protocolFeeBps + venueFeeBps + operatorFeeBps. With a 50 bps protocol fee and a 100 bps venue fee, the taker pays 160 bps (1.60%) on the fill.
Setting Your Venue Fee
You set venueFeeBps and creatorFeeBps at venue creation. Both can be updated at any time — changes take effect on all subsequent trades.
const hash = await client.venue.updateFees({
venueId: 1n,
venueFeeBps: 150, // 1.50%
creatorFeeBps: 50, // 0.50% (carved from venue fee)
});Constraints:
venueFeeBpsmust be between 1 and 200creatorFeeBpsmust be ≤venueFeeBps
Fee tiers are snapshotted per market at creation time. Updating venue fees only affects markets created after the update — existing markets keep their original fee schedule.
Creator Fee
The creator fee incentivizes quality market creation. Anyone who creates a popular market earns a share of every trade on that market. The fee is carved out of the venue fee — it does not increase the total fee paid by takers.
If your venue fee is 100 bps and your creator fee is 25 bps, you receive 75 bps and the market creator receives 25 bps per fill.
Protocol Fee
Set by the protocol owner between 0 and 200 bps. Goes to the protocol treasury. Venue operators cannot change this. Any rounding remainder from fee calculation is added to the protocol's share.
Query the current value:
const bps = await client.venue.getProtocolFeeBps();Match Operator Fee
Fixed at 10 bps (0.10%). Paid to msg.sender — whoever submits the matchOrders transaction. This incentivizes independent keepers to run matching bots; anyone can earn it by running one.
Fee Calculation Example
A venue with venueFeeBps = 100 and creatorFeeBps = 25, protocol fee at 50 bps. A taker fills a $50 USDC BUY against a resting ask:
| Component | BPS | Amount |
|---|---|---|
| Protocol | 50 | 0.25 USDC |
| Creator | 25 | 0.125 USDC |
| Venue (net) | 75 | 0.375 USDC |
| Operator | 10 | 0.05 USDC |
| Taker pays | 160 | 0.80 USDC |
The maker (the resting seller) receives the full ask price × quantity with no fee deduction.
Market Creation Fee
A separate upfront fee charged when a market is created. Split 50/50 between the protocol treasury and the venue. Set at venue creation and immutable afterward.
| Constraint | Value |
|---|---|
| Minimum | 5 USDC |
| Maximum | None |
| Split | 50% protocol, 50% venue |
| Updatable after creation | No |
What's Next
- Collecting Fees → — check balances and withdraw
- Access Control → — gate who can trade on your venue