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.
| Contract | Address |
|---|---|
| OddMaki Diamond | 0x188563069e0ae7247f0e2f0fce0382f0ed28d31a |
| Gnosis Conditional Tokens | 0x7364747372Ac4a175B5326f5B2C9CB1C271d32e8 |
| 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:
| Network | Endpoint |
|---|---|
| Base Sepolia | https://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:
| Contract | How It's Used |
|---|---|
| Gnosis CTF | ERC-1155 outcome tokens — split, merge, redeem |
| UMA Optimistic Oracle V3 | Discretionary market resolution |
| Pyth Network | Price 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:
- Open the Diamond address on BaseScan.
- 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
- Architecture → — the 21-facet layout in detail
- SDK Reference → — how the SDK wraps these addresses