OddMaki
Protocol

Contract Addresses

Deployed OddMaki contract addresses on Base Sepolia testnet, plus subgraph endpoints and verification guidance.

The OddMaki protocol is a single EIP-2535 Diamond deployment — one address fronts every facet. External dependencies (Gnosis CTF, USDC, Pyth) are separate on-chain contracts.

Base Sepolia Testnet (Chain ID: 84532)

The current public deployment is on Base Sepolia. Addresses are checksummed by the SDK at runtime.

ContractAddress
OddMaki Diamond0x188563069e0ae7247f0e2f0fce0382f0ed28d31a
Gnosis Conditional Tokens0x7364747372Ac4a175B5326f5B2C9CB1C271d32e8
USDC (test)0xb7e73d2848dd908a90a50ba679719eb9375c3fdf

The SDK defaults to Base Sepolia when no chain is specified:

import { createOddMakiClient } from '@oddmaki/sdk';

const client = createOddMakiClient({
  walletClient,
  publicClient,
  // chain defaults to baseSepolia
});

Base Mainnet (Chain ID: 8453)

Mainnet deployment is in progress. This page will list the canonical addresses once live. Until then, use Base Sepolia for integration work.

Subgraph Endpoints

The protocol's subgraph indexes every event — markets, orders, fills, resolutions, tags, and metadata URIs:

NetworkEndpoint
Base Sepoliahttps://api.studio.thegraph.com/query/1716020/oddmaki/version/latest

The SDK's public module wraps this endpoint so you rarely need to query it directly:

const markets = await client.public.listMarkets({ venueId: 1n });
const topOfBook = await client.public.getTopOfBook(marketId);
const fills = await client.public.listFills({ marketId });

External Protocol Dependencies

The Diamond interacts with these external contracts; their addresses are set at deploy time and readable via ProtocolFacet:

ContractHow It's Used
Gnosis CTFERC-1155 outcome tokens — split, merge, redeem
UMA Optimistic Oracle V3Discretionary market resolution
Pyth NetworkPrice feeds for auto-resolving price markets

Read the current wiring at any time:

const pyth = await client.priceMarket.getPythContract();
// ProtocolFacet also exposes getUmaOracle(), getConditionalTokens(), etc.

Verifying the Diamond

All facets are deployed as separate verified contracts. To inspect:

  1. Open the Diamond address on BaseScan.
  2. Use the Diamond loupe to list all facets:
const facets = await publicClient.readContract({
  address: diamondAddress,
  abi: DiamondLoupeFacetABI,
  functionName: 'facets',
});

Each entry returns (facetAddress, selectors[]). Click through to each facet address on BaseScan to view verified source.

What's Next