OddMaki
Operations

Venue Admin

Administrative operations for venue operators — pause trading, update configuration, and manage your venue.

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.

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.

// 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:

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

Venue Details and Access Control

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

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:

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:

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 on-chain, indexed by the subgraph). Only the market creator or venue operator can update them:

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://…' });

What Can't Be Changed

Some parameters are permanently set at venue creation:

ParameterUpdatable
Operator (owner)No
defaultTickSizeNo
marketCreationFeeNo

Reading Venue Data

Read the complete venue configuration on-chain:

const venueData = await publicClient.readContract({
  address: diamondAddress,
  abi: VenueFacetABI,
  functionName: 'getVenue',
  args: [venueId],
});

Returns the full VenueData struct including fees, oracle params, access control addresses, and active status.

What's Next