OddMaki
Venues

Collecting Fees

How fees accumulate onchain and how to withdraw your venue revenue.

Fees are collected automatically on every trade fill. As a venue operator, your share is transferred directly to your feeRecipient address during each matchOrders call — there is no separate withdrawal step.

How Fees Accrue

Every time matchOrders executes a fill, fees are calculated and distributed immediately to four recipients:

RecipientFeeHow It's Paid
Protocol treasury20 bps (fixed)Direct transfer during fill
Venue fee recipient1–200 bps (minus creator share)Direct transfer during fill
Market creator0–venue fee bpsDirect transfer during fill
Match operator10 bps (fixed)Direct transfer to msg.sender

Fees are paid in the market's collateral token (USDC). There is no accrual or pending balance — each fee share is transferred onchain as part of the fill transaction.

Checking Fee Revenue

Query cumulative fees for your venue via the subgraph:

{
  venue(id: "1") {
    totalFees
    totalVolume
  }
}

Or get daily fee snapshots:

{
  venueDailySnapshots(
    where: { venue_: { venueId: "1" } }
    orderBy: timestamp
    orderDirection: desc
    first: 30
  ) {
    dailyFees
    dailyVolume
    cumulativeFees
    timestamp
  }
}

For per-fill fee breakdowns:

{
  feeEvents(
    where: { market_: { marketId: "42" } }
    orderBy: timestamp
    orderDirection: desc
  ) {
    protocolFee
    venueFee
    creatorFee
    operatorFee
    totalFees
    timestamp
  }
}

Fee Recipient Management

The feeRecipient address receives both:

  • Your venue's share of trading fees (on every fill)
  • 50% of market creation fees (when markets are created)

OddMaki App (recommended): open your venue → Earnings to view fee revenue, the current recipient, and a guided Change recipient flow.

Earnings tab — revenue, recipient, and Change recipient flow

SDK:

const hash = await client.venue.updateVenue({
  venueId: 1n,
  name: 'My Venue',
  metadata: '',
  tradingAccessControl,            // keep existing
  creationAccessControl,           // keep existing
  feeRecipient: newFeeRecipient,   // new address
});

The feeRecipient cannot be the zero address. Changes take effect immediately for all subsequent fills.

Market Creation Fees

Market creation fees are collected separately when createMarket is called. The fee is split 50/50 between the protocol treasury and your venue's feeRecipient. The fee is updatable any time — set it from the OddMaki App's Settings → Fees → Market creation fee or via client.venue.updateMarketCreationFee.

ConstraintValue
Minimum0 (no minimum — free creation is the recommended default)
Split50% protocol, 50% venue
UpdatableYes — see Venue Admin → Market Creation Fee

What's Next