OddMaki
Quick Start

Create a Venue

Create your venue onchain from the OddMaki App — a guided wizard for your fee structure, oracle settings, and access control configuration.

What is a Venue?

A venue is your onchain 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

We recommend creating your venue through the OddMaki App — a guided wizard that walks through every parameter, validates inputs, and surfaces the resulting venueId in the same flow. Same onchain call, less friction.

PathWhen to use
OddMaki App (recommended)First-time setup, ad-hoc venue creation, anyone who wants a UI
SDKScripted deploys, CI/CD pipelines, programmatic control
Direct contract callFoundry / viem against the Diamond when you need raw control

Using the OddMaki App

  1. Go to app.oddmaki.com and connect your wallet.
  2. Open the network switcher and pick Base Sepolia (testing) or Base mainnet (production).
  3. Open the Venues tab and click Create venue.
  4. Step through the wizard:
    • Identity — venue name and metadata (free-form, can be empty)
    • Fees — venue fee (1–200 bps), creator fee (carved from the venue fee), market creation fee (defaults to 0 for free creation), fee recipient
    • Oracle — UMA reward and minimum bond defaults (only used by UMA-resolved markets)
    • Access — leave both gates open (0x0) for a permissionless venue, or wire up an access-control contract
  5. Confirm the transaction. The app extracts the venueId from the VenueCreated event and drops you on the new venue's dashboard.

Create venue entry point on the Venues page

Step 1 — venue identity (name and metadata)

Step 2 — fees and market creation fee

Step 3 — UMA oracle defaults

Step 4 — trading and creation access gates

Success — new venue dashboard with the venueId

Note: there is no minimum market creation fee. Set it to 0 for free creation — most operators do. If you choose 0, gate creation through the creationAccessControl field to keep spam out.

Using the SDK

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

const client = createOddMakiClient({
  walletClient,            // from wagmi useWalletClient()
  chain: baseSepolia,      // or `base` for mainnet
  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: 100,                                 // 1.00%
  creatorFeeBps: 50,                                // 0.50% (carved from venue fee)
  defaultTickSize: parseEther('0.01'),              // 1% tick (1e16)
  marketCreationFee: 0n,                            // 0 = free creation (recommended)
  umaRewardAmount: parseTokenAmount('5', 6),        // 5 USDC reward (UMA-resolved markets)
  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 onchain.""
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, in collateral token units (USDC, 6 decimals). No minimum0n is the recommended default. Split 50/50 protocol/venue. Mutable via updateMarketCreationFee.0n
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 onchain, let's deploy the frontend app →