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.

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
});

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