OddMaki
Quick Start

Create a Venue

Register your venue on-chain by calling createVenue() with your fee structure, oracle settings, and access control configuration.

What is a Venue?

A venue is your on-chain identity on the OddMaki protocol. It stores your fee configuration, oracle settings, access control rules, and fee recipient. Every market created on your venue, every trade executed, and every fee collected is tied to your venue ID.

How to Create a Venue

You can create a venue in two ways:

  1. Through the OddMaki protocol app UI — connect your wallet and use the guided flow
  2. Via the SDK — programmatically call createVenue() for full control

Using the SDK

import { createOddMakiClient, parseTokenAmount } from '@oddmaki-protocol/sdk';
import { base } from 'viem/chains';
import { http, parseEther, zeroAddress } from 'viem';

const client = createOddMakiClient({
  walletClient,       // from wagmi useWalletClient()
  chain: base,
  transport: http(),
});

const hash = await client.venue.createVenue({
  name: 'My Prediction Market',
  metadata: '',                                     // free-form JSON or IPFS URI
  tradingAccessControl: zeroAddress,                // open to all
  creationAccessControl: zeroAddress,               // open to all
  feeRecipient: '0xYourAddress',
  venueFeeBps: 100n,                                // 1.00%
  creatorFeeBps: 50n,                               //  0.50% (carved from venue fee)
  defaultTickSize: parseEther('0.01'),              // 1% tick (1e16)
  marketCreationFee: parseTokenAmount('5', 6),      // 5 USDC (50/50 protocol/venue)
  umaRewardAmount: parseTokenAmount('5', 6),        // 5 USDC reward
  umaMinBond: parseTokenAmount('10', 6),            // 10 USDC bond floor
});

The transaction emits a VenueCreated event with your venueId. Extract it from the receipt logs.

Parameters Explained

ParameterTypeDescriptionRecommended Default
namestringDisplay name for your venueYour brand name
metadatastringFree-form metadata (JSON string or IPFS URI). Not interpreted on-chain.""
tradingAccessControladdressContract that gates who can place orders. 0x0 = open0x0
creationAccessControladdressContract that gates who can create markets. 0x0 = open0x0
feeRecipientaddressWhere venue fees and venue's share of market creation fees are sent. Cannot be zero.Your wallet
venueFeeBpsuint256Venue's share of each fill, in basis points (1 bp = 0.01%). Range: 1–200.100 (1%)
creatorFeeBpsuint256Fee paid to market creators, carved from venueFeeBps. Range: 0 – venueFeeBps.50 (0.5%)
defaultTickSizeuint256Minimum price increment, scaled to 1e18. Use 1e16 (1%) or 1e15 (0.1%).parseEther('0.01')
marketCreationFeeuint256Upfront fee charged on each createMarket, denominated in the collateral token (USDC, 6 decimals). Minimum 5 USDC. Split 50/50 protocol/venue. Immutable.parseTokenAmount('5', 6)
umaRewardAmountuint256Venue-default UMA reward (USDC, 6 decimals) for correct assertions on UMA-resolved markets.parseTokenAmount('5', 6)
umaMinBonduint256Venue minimum UMA bond (USDC, 6 decimals). Effective bond is max(this, UMA.minimumBond).parseTokenAmount('10', 6)

Price markets resolve via Pyth and don't use the UMA parameters. See Price Markets.

What You Get Back

A venue ID (uint256) — your unique identity on the protocol. You'll need this ID to configure your frontend (NEXT_PUBLIC_VENUE_ID) and for all venue operations.

The venue is immediately active. Markets can be created and trades can happen as soon as the transaction confirms.

Next Step

Now that your venue exists on-chain, let's deploy the frontend app →