OddMaki
Venues

Venue Admin

Administrative operations for venue operators — pause trading, update configuration, and manage your venue from the OddMaki App.

The venue operator (the address that called createVenue) has exclusive administrative control over the venue. This role is immutable — there is no function to transfer venue ownership.

Where to administer a venue

Drive everything from the OddMaki App. Open your venue's dashboard and use the Settings, Access, Markets, Earnings, and Integration tabs. Venue-level admin is not in the Venue Starter — that's your branded trading frontend, not the operator console.

For automation, every flow below also has an SDK equivalent.

TabWhat it does
SettingsFees, oracle params, status (pause/unpause), info
AccessTrading and creation gates, whitelist management
MarketsList markets, create new ones, per-market admin (pause, tags, metadata)
EarningsFee revenue, recipient address, withdraw flows
IntegrationVenue ID, env-var snippets to wire up the Venue Starter, subgraph IDs

Venue dashboard with the Settings, Access, Markets, Earnings, and Integration tabs

Pausing and Unpausing

Pause a venue to halt all trading and market creation. Existing orders remain on the book but cannot be matched or filled.

OddMaki App: Settings → Status and toggle the switch.

Settings → Status with the pause toggle

SDK:

// Pause
const tx = await client.venue.setPaused(1n, true);

// Unpause
const tx = await client.venue.setPaused(1n, false);

Pausing is scoped to individual venues — there is no global protocol pause. Use this for emergency situations or maintenance.

Pause vs. Suspend

Two distinct controls exist:

  • Pause (venue operator) — self-service on/off switch, the operator can pause and unpause at will
  • Suspend (protocol owner) — a protocol-level lock on a venue; only the protocol owner can un-suspend

Suspend is reserved for protocol emergencies and is not something a venue operator controls.

Updating Venue Configuration

Fees

Update trading fee tiers at any time. Changes take effect immediately for all subsequent trades.

OddMaki App: Settings → Fees — enter the new venue fee (bps) and creator fee (bps), then Save.

Settings → Fees in the OddMaki App

SDK:

const tx = await client.venue.updateFees({
  venueId: 1n,
  venueFeeBps: 150,    // 1.50%
  creatorFeeBps: 50,   // 0.50% (carved from venue fee)
});

Constraints:

  • venueFeeBps must be between 1 and 200
  • creatorFeeBps must be ≤ venueFeeBps

Market Creation Fee

The market creation fee defaults to 0 and is updatable any time (it used to be set at creation and immutable; that's no longer the case).

OddMaki App: Settings → Fees → Market creation fee.

SDK:

import { parseUnits } from 'viem';

await client.venue.updateMarketCreationFee({
  venueId: 1n,
  newFee: parseUnits('10', 6), // 10 USDC, or 0n for free creation
});

Venue Details and Access Control

Update the venue name, metadata, access control gates, and fee recipient.

OddMaki App:

  • Settings → Info — name and metadata URI (the app uploads the description to IPFS and writes the resulting URI as the venue metadata field).
  • Access — view the current trading and creation gates, swap them, deploy new gates, or manage a whitelist inline.
  • Earnings → Fee recipient — change the address that receives fees and the venue share of market creation fees.

Settings → Info — venue name and metadata

Access tab — trading and creation gates

Earnings tab — revenue and fee recipient

SDK:

const hash = await client.venue.updateVenue({
  venueId: 1n,
  name: 'Updated Venue Name',
  metadata: '{"category": "sports"}',
  tradingAccessControl: tradingAccessControl,   // address or 0x0 for open
  creationAccessControl: creationAccessControl, // address or 0x0 for open
  feeRecipient: feeRecipient,                   // cannot be zero address
});

Oracle Parameters

Update the UMA reward and minimum bond for future markets.

OddMaki App: Settings → Oracle — enter the new reward and min bond (in USDC), then Save.

Settings → Oracle in the OddMaki App

SDK:

const hash = await client.venue.updateOracleParams({
  venueId: 1n,
  umaRewardAmount: parseUnits('10', 6),   // 10 USDC
  umaMinBond: parseUnits('5', 6),          // 5 USDC
});

Pause Individual Markets

You can also pause and unpause individual markets on your venue.

OddMaki App: open the market from the Markets tab → market settings → Pause / Resume.

SDK:

await client.market.pauseMarket(marketId);
await client.market.unpauseMarket(marketId);

Market Tags and Metadata

Tags and metadata URIs for markets and groups are event-only (not stored onchain, indexed by the subgraph). Only the market creator or venue operator can update them.

Venue Starter: on a market page, the creator or venue operator can edit tags and the market image from the per-market settings sheet — the starter uploads the image to IPFS and writes the resulting URI as the market's metadata.

SDK:

await client.market.updateMarketTags({ marketId: 1n, tags: ['sports'] });
await client.market.updateMarketMetadata({ marketId: 1n, metadataURI: 'ipfs://…' });
await client.market.updateMarketGroupTags({ marketGroupId: 1n, tags: ['elections'] });
await client.market.updateMarketGroupMetadata({ marketGroupId: 1n, metadataURI: 'ipfs://…' });

Editing market tags from the OddMaki App is on the roadmap but not yet shipped — use the Venue Starter or the SDK in the meantime.

What Can't Be Changed

ParameterUpdatable
Operator (owner)No
defaultTickSizeNo
marketCreationFeeYes (updateMarketCreationFee — was previously immutable)

Reading Venue Data

Read the complete venue configuration onchain:

const venue = await client.venue.getVenue(venueId);

Returns the full VenueData struct including fees, oracle params, access control addresses, and active status. The OddMaki App's Settings tab surfaces all of this for you.

What's Next