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.
| Path | When to use |
|---|---|
| OddMaki App (recommended) | First-time setup, ad-hoc venue creation, anyone who wants a UI |
| SDK | Scripted deploys, CI/CD pipelines, programmatic control |
| Direct contract call | Foundry / viem against the Diamond when you need raw control |
Using the OddMaki App
- Go to app.oddmaki.com and connect your wallet.
- Open the network switcher and pick Base Sepolia (testing) or Base mainnet (production).
- Open the Venues tab and click Create venue.
- 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
- Confirm the transaction. The app extracts the
venueIdfrom theVenueCreatedevent and drops you on the new venue's dashboard.






Note: there is no minimum market creation fee. Set it to
0for free creation — most operators do. If you choose0, 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
| Parameter | Type | Description | Recommended Default |
|---|---|---|---|
name | string | Display name for your venue | Your brand name |
metadata | string | Free-form metadata (JSON string or IPFS URI). Not interpreted onchain. | "" |
tradingAccessControl | address | Contract that gates who can place orders. 0x0 = open | 0x0 |
creationAccessControl | address | Contract that gates who can create markets. 0x0 = open | 0x0 |
feeRecipient | address | Where venue fees and venue's share of market creation fees are sent. Cannot be zero. | Your wallet |
venueFeeBps | uint256 | Venue's share of each fill, in basis points (1 bp = 0.01%). Range: 1–200. | 100 (1%) |
creatorFeeBps | uint256 | Fee paid to market creators, carved from venueFeeBps. Range: 0 – venueFeeBps. | 50 (0.5%) |
defaultTickSize | uint256 | Minimum price increment, scaled to 1e18. Use 1e16 (1%) or 1e15 (0.1%). | parseEther('0.01') |
marketCreationFee | uint256 | Upfront fee charged on each createMarket, in collateral token units (USDC, 6 decimals). No minimum — 0n is the recommended default. Split 50/50 protocol/venue. Mutable via updateMarketCreationFee. | 0n |
umaRewardAmount | uint256 | Venue-default UMA reward (USDC, 6 decimals) for correct assertions on UMA-resolved markets. | parseTokenAmount('5', 6) |
umaMinBond | uint256 | Venue 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 →