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:
- Through the OddMaki protocol app UI — connect your wallet and use the guided flow
- 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
| 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 on-chain. | "" |
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, denominated in the collateral token (USDC, 6 decimals). Minimum 5 USDC. Split 50/50 protocol/venue. Immutable. | parseTokenAmount('5', 6) |
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 on-chain, let's deploy the frontend app →