@somnia-chain/markets-sdk


@somnia-chain/markets-sdk / index / SomniaMarketsClient

Interface: SomniaMarketsClient

Defined in: packages/sdk/src/somniaMarketsClient.ts:133

An SDK client — the single handle for all protocol I/O.

This is the raw engine tier, reached through the exchange (new SomniaMarkets(config)exchange.client). Each exchange's engine is fully isolated: its own config, live store, and (lazily opened) chain WebSocket, so several can coexist in one process without sharing state.

The read surface has three tiers — pick by freshness need:

  1. Live store (getLive*, synchronous): zero round-trips, updates the moment an event lands on-chain. Requires a watch (watchMarket / watchMarkets) covering the market you read.
  2. Chain (getBinaryOrderBook, getMarketOnchain, …): one eth_call round-trip, current to head. Works without any watch.
  3. Indexer (listMarkets, getPortfolio, …): history and aggregates; lags the chain slightly. Works without any watch or the socket.

Properties

config

readonly config: ClientConfig

Defined in: packages/sdk/src/somniaMarketsClient.ts:135

The config this client was built with.


lend

readonly lend: SomniaLendClient

Defined in: packages/sdk/src/somniaMarketsClient.ts:179

The SomniaLend namespace — reads (lend.listReserves(), lend.getAccount()) and the lend.createLender() write factory for the third-party Aave v3 money market on Somnia (mainnet + testnet). Lazily bound to config.addresses.lend (set SOMNIA_MAINNET_LEND / SOMNIA_TESTNET_LEND from the root entry); its methods throw a clear error when those addresses are unset. The root entry also publishes its types, deployment constants, ray-math helpers and ABIs; this namespace is the only way to call it, so a lend read always rides the client's own chain transport.

Methods

getViemClient()

getViemClient(): object

Defined in: packages/sdk/src/somniaMarketsClient.ts:166

This client's underlying viem client, undecorated — viem's own behaviour, over the socket this client already has.

When to use

Use to reach a contract or RPC method the SDK does not model: your own contracts, or plain calls like getBalance / getCode / waitForTransactionReceipt. Reads through it keep VIEM's error contract, so e instanceof ContractFunctionRevertedError and the rest of your existing viem error handling still work.

Building your own client instead would open a second WebSocket; this one shares the SDK's.

Gotchas

Reads through this client do NOT get the SDK's decoded protocol errors — a revert arrives as viem's error, not a ContractRevertError with an errorName. That is the point of the accessor, but it means you should prefer the SDK's own methods for protocol contracts, where the decoding is the value. The two clients are deliberately different: everything reachable from this interface uses the decoded one.

Calling this opens the WebSocket if it is not already open, and throws NotConfiguredError on a client built without wsRpcUrl.

Returns

object

The undecorated viem PublicClient for this client's chain.


watchMarket()

watchMarket(pool): Promise<WatchHandle>

Defined in: packages/sdk/src/somniaMarketsClient.ts:205

Watch one market: hydrate a consistent snapshot of it (market row, recent fills, its full resting order book) and stream its events — order-book activity plus, for a binary market, its lifecycle/status events. While the watch is active, every getLive* read for this pool is current to the last block at zero round-trip cost.

Watches are ref-counted: watching the same pool twice shares one subscription and one snapshot; each handle's stop() releases one reference, and the scope is torn down (subscription dropped, heavy rows purged) shortly after the last release — a brief linger absorbs quick re-watches (navigation, React remounts) without re-snapshotting.

Resolves once the seam is sealed (snapshot + backfill + buffered replay) — i.e. once reads are live. Rejects (and releases the reference) if hydration fails; the socket dropping later is healed automatically by reconnect + chain backfill.

The React data hooks call this automatically while mounted.

Parameters

pool

string

Returns

Promise<WatchHandle>


watchMarkets()

watchMarkets(opts?): Promise<WatchHandle>

Defined in: packages/sdk/src/somniaMarketsClient.ts:217

Watch every market the indexer currently knows — the whole-protocol tail for list views and multi-market bots. Prefer watchMarket scoped to what you actually trade or render: this variant's cost grows with the protocol (snapshot size, subscription filter width, event volume).

Parameters

opts?
discover?

boolean

Also watch the MarketCreator factory so markets created AFTER this call join the watch live, in their creation block (requires config.addresses.marketCreator). Off by default.

Returns

Promise<WatchHandle>


watchUser()

watchUser(user): Promise<WatchHandle>

Defined in: packages/sdk/src/somniaMarketsClient.ts:228

Hydrate one account's order/fill history (one indexer fetch) so getLiveUserFills / getLiveUserOrders have depth predating your watches. This does not subscribe to anything by itself: live events are attributed to every account automatically, but only within markets covered by an active watchMarket / watchMarkets — an account's activity in unwatched markets stays at snapshot state. Ref-counted like market watches; supports multiple accounts at once.

Parameters

user

string

Returns

Promise<WatchHandle>


getWatchStatus()

getWatchStatus(pool): WatchStatus

Defined in: packages/sdk/src/somniaMarketsClient.ts:236

Per-market watch state: "unwatched" (no active watch — getLive* reads return empty for this pool, which is how you distinguish "empty book" from "not watching"), "hydrating" (watch registered; snapshot, seam backfill, or reconnect in progress), or "live".

Parameters

pool

string

Returns

WatchStatus


stopLive()

stopLive(): void

Defined in: packages/sdk/src/somniaMarketsClient.ts:242

Tear down every watch, subscription, and timer (tests, shutdown). The store keeps its last state; getLive* reads keep answering (stale).

Returns

void


subscribeLive()

subscribeLive(listener): () => void

Defined in: packages/sdk/src/somniaMarketsClient.ts:252

Fire listener after every batch of store changes — the "something changed, re-read" signal (the React hooks subscribe to exactly this). Re-read with any getLive* method; their results are memoized per store version, so re-reading without a change returns the same reference.

Parameters

listener

() => void

Returns

An unsubscribe function.

() => void


getLiveStatus()

getLiveStatus(): TailStatus

Defined in: packages/sdk/src/somniaMarketsClient.ts:260

The tail's global health: mode ("init" until the first watch hydrates, then "tailing"), the last seam block, the last locally-materialized block, the chain head, socket state, and the active watch count. For one market's state, use getWatchStatus.

Returns

TailStatus


isTailing()

isTailing(): boolean

Defined in: packages/sdk/src/somniaMarketsClient.ts:263

True once at least one watch is live (mode === "tailing").

Returns

boolean


getLiveMarkets()

getLiveMarkets(): Market[]

Defined in: packages/sdk/src/somniaMarketsClient.ts:271

Every market the store knows (spot + binary, as the discriminated Market union) — markets hydrated by any watch, past or present (market rows are kept as metadata after a watch is released). Synchronous, memoized.

Returns

Market[]


getLiveMarketByPool()

getLiveMarketByPool(pool): Market | null

Defined in: packages/sdk/src/somniaMarketsClient.ts:274

One market by its pool address (either kind), or null if unknown.

Parameters

pool

string

Returns

Market | null


getLiveMarketByAddress()

getLiveMarketByAddress(marketAddress): BinaryMarket | null

Defined in: packages/sdk/src/somniaMarketsClient.ts:280

One binary market by its BinaryMarket contract address, or null. (Spot markets have no market contract — they are identified by pool.)

Parameters

marketAddress

string

Returns

BinaryMarket | null


getLiveFills()

getLiveFills(pool, opts?): LiveFill[]

Defined in: packages/sdk/src/somniaMarketsClient.ts:288

The most recent fills on one pool, newest first — the live trade tape. Maker/taker owner + side are back-joined from the order map where known.

Parameters

pool

string

opts?
limit?

number

Max rows (default 40; the store retains ~400 per pool).

Returns

LiveFill[]


getLiveFundingUpdates()

getLiveFundingUpdates(pool, opts?): LiveFundingUpdate[]

Defined in: packages/sdk/src/somniaMarketsClient.ts:304

Funding settlements the live tail has seen for a perp pool, OLDEST FIRST.

The tail's counterpart to listFundingRateHistory: splice these onto a one-shot query to extend a funding chart past the snapshot block, instead of only seeing the latest value on the market row. Deduped on (block, logIndex), so a reorg replay overwrites rather than appending a phantom point.

Carries less than an indexed row, deliberately: intervalsAccrued needs n from the parameter-epoch series and the covered span needs the settlement anchor, neither of which the tail has. Both arrive with the indexed row a moment later.

Parameters

pool

string

opts?
limit?

number

Max rows (default 500).

Returns

LiveFundingUpdate[]


getLiveUserFills()

getLiveUserFills(pool, user, opts?): LiveFill[]

Defined in: packages/sdk/src/somniaMarketsClient.ts:312

Fills user participated in (as maker or taker), newest first.

Parameters

pool

string | null

Restrict to one pool, or null for all pools.

user

string

opts?
limit?

number

Max rows (default 50).

Returns

LiveFill[]


getLiveUserOrders()

getLiveUserOrders(pool, user, opts?): LiveOrder[]

Defined in: packages/sdk/src/somniaMarketsClient.ts:322

user's orders on one pool, newest first — every lifecycle state (open, filled, cancelled, expired), so filter by status === "Open" for a working-orders view. Includes history hydrated by watchUser plus everything witnessed live on watched markets.

Parameters

pool

string

user

string

opts?
limit?

number

Max rows (default 100).

Returns

LiveOrder[]


getLiveBinaryOrderBook()

getLiveBinaryOrderBook(pool, opts?): BinaryOrderBook

Defined in: packages/sdk/src/somniaMarketsClient.ts:332

The locally-materialized resting book of a binary pool, 4-sided (yesBids/yesAsks plus the NO sides derived as 1 − yesPrice) — the zero-round-trip mirror of getBinaryOrderBook, current to the last block. Synchronous; safe to call every render (memoized per store version).

Parameters

pool

string

opts?
depth?

number

Price levels per side (default 10).

Returns

BinaryOrderBook


getLiveBinaryOrderBookByMarket()

getLiveBinaryOrderBookByMarket(marketId, opts?): BinaryOrderBook

Defined in: packages/sdk/src/somniaMarketsClient.ts:347

The locally-materialized resting book of a binary market, resolved by its marketId rather than its pool address. Because a BinaryPool is RECYCLED across markets (one pool serves successive markets, never concurrently), a page keyed on a marketId must never render the pool's NEXT market's orders once its own market has ended. This read resolves the market's current pool and, if marketId is no longer the pool's current binding (stale/ended), returns an EMPTY book — so a stale page renders nothing rather than the successor market's liquidity. Prefer this over getLiveBinaryOrderBook when you hold a marketId (not a live pool).

Parameters

marketId

string

opts?
depth?

number

Price levels per side (default 10).

Returns

BinaryOrderBook


getLiveSpotOrderBook()

getLiveSpotOrderBook(pool, opts?): SpotOrderBook

Defined in: packages/sdk/src/somniaMarketsClient.ts:355

The locally-materialized resting book of a spot pool (bids/asks, best price first) — the zero-round-trip mirror of getSpotOrderBook.

Parameters

pool

string

opts?
depth?

number

Price levels per side (default 12).

Returns

SpotOrderBook


quoteBinaryOrder()

quoteBinaryOrder(params): BinaryOrderQuote

Defined in: packages/sdk/src/somniaMarketsClient.ts:375

Preview a MARKET order against the live binary book — "you'll pay ~$X, average Y, slippage Z". Pure over the live store (synchronous); key it by pool (a live pool) or marketId (recycle-safe — a stale market quotes against an empty book). Crossing side: BUY_YES/BUY_NO consume the asks, SELL_YES/SELL_NO the bids; NO prices are the YES book inverted (oneCollateral − yesPrice). cost is raw collateral paid (buy) / received (sell); avgPrice the volume-weighted fill price; wouldRest the unfilled remainder that would rest as a maker order.

Parameters

params
pool?

string

marketId?

string

side

BinarySide

quantity

bigint

Order size in raw outcome-token units.

depth?

number

Book levels to walk per side (default 10).

Returns

BinaryOrderQuote


getBinaryBookParams()

getBinaryBookParams(pool): Promise<BinaryBookParams>

Defined in: packages/sdk/src/somniaMarketsClient.ts:390

A BinaryPool's on-chain order-book grid (tickSize/lotSize/minQuantity) — the increments the pool validates every order against. One eth_call, cached per pool for the client's lifetime (the grid is admin-retunable but never changes per-order). quoteBinaryStake and quoteBinarySell read it through this cache.

Parameters

pool

string

Returns

Promise<BinaryBookParams>


quoteBinaryStake()

quoteBinaryStake(params): Promise<BinaryStakeQuote | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:414

Size a stake-denominated market BUY against the live binary book — "bet $50 on Up" → the shares, protective limit, and escrow the order will actually use. The inverse of quoteBinaryOrder: that prices a quantity; this sizes a quantity from a collateral budget, walking the asks cheapest-first while the escrow at the worst level touched stays within the stake. The protective limit is padded with a slippage cushion (so the IOC still crosses a moving book), tick-aligned, and the quantity re-fit and lot-aligned so the escrow never exceeds the stake.

Live store + one cached chain read (getBinaryBookParams); needs an active watch for the book. The result feeds straight into trader.placeOrder({ pool, side, price: yesPrice, quantity, orderType: ORDER_TYPE.MARKET }). Resolves null when nothing is fillable (empty book, or a stake too small to buy a single lot).

Parameters

params
pool?

string

marketId?

string

side

BinaryBuySide

"BUY_YES" (Up) or "BUY_NO" (Down).

stake

bigint

Collateral budget in raw units — the max loss.

depth?

number

Book levels to sweep (default 10).

slippageBps?

bigint

Protective-limit cushion in bps (default 300 = 3%).

slippageMinTicks?

bigint

Minimum cushion in ticks (default 10).

Returns

Promise<BinaryStakeQuote | null>


quoteBinarySell()

quoteBinarySell(params): Promise<BinarySellQuote | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:439

Build a market SELL that unwinds an outcome position by crossing the resting bids, with a tick-aligned slippage cushion below the best bid — the sell-side sibling of quoteBinaryStake (see it for the family's mental model and tiering). Resolves null when there's no bid to cross or nothing to sell — disable the Sell control rather than sending a doomed order. The quote's fillableQuantity/estProceeds report what the crossable bids can actually absorb — warn on a partial unwind before submitting.

Parameters

params
pool?

string

marketId?

string

side

BinarySellSide

"SELL_YES" (Up position) or "SELL_NO" (Down position).

quantity

bigint

Outcome tokens to sell, raw units (lot-aligned down).

depth?

number

Book levels to resolve (default 10).

slippageBps?

bigint

Protective-floor cushion in bps (default 300 = 3%).

slippageMinTicks?

bigint

Minimum cushion in ticks (default 10).

Returns

Promise<BinarySellQuote | null>


getMarketStats24h()

getMarketStats24h(target): Promise<MarketStats24h>

Defined in: packages/sdk/src/somniaMarketsClient.ts:455

A market's trailing-24h stats (volume, trades, price change, high/low/open), summed from 1h OHLCV candle buckets — cheaper than scanning fills. Key it by pool or marketId. Prices are raw quote units; volume is raw collateral. One indexer round-trip.

Parameters

target
pool?

string

marketId?

string

Returns

Promise<MarketStats24h>


getBinaryPositionPnL()

getBinaryPositionPnL(account, marketId): Promise<BinaryPositionPnL>

Defined in: packages/sdk/src/somniaMarketsClient.ts:468

An account's position + cost basis + PnL in one binary market, RAW units. Reconstructs cost basis (weighted-average) from the account's order-book fills on the market folded with complete-set mints/merges, marks the CURRENT balances to the book-clamped last price (see markYesPrice; the settlement payout once resolved), and realizes sells against the running average. Best-effort over indexed fills; see BinaryPositionPnL for the accounting assumptions. One fan-out of indexer reads plus one top-of-book eth_call (skipped, falling back to lastPrice alone, when no chain client is configured).

Parameters

account

string

marketId

string

Returns

Promise<BinaryPositionPnL>


getOpenPositionsWithPnL()

getOpenPositionsWithPnL(account): Promise<OpenPositionPnL[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:481

PnL for ALL of an account's open binary positions in one call — the batched, positions-list companion to getBinaryPositionPnL. Each entry is a OpenPositionPnL: the position's market joined with its reliable avg-cost PnL (costBasis / avgCost / markValue / unrealizedPnl / realizedPnl, marked to the book-clamped price), computed identically to getBinaryPositionPnL per market. Prefer this over deriving PnL from book stats. Fetched in a bounded number of indexer round-trips (fills + router actions + top-of-book batched across every open market), not a per-position loop. Empty array when the account holds nothing.

Parameters

account

string

Returns

Promise<OpenPositionPnL[]>


getClaimable()

getClaimable(account): Promise<ClaimablePosition[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:491

An account's redeemable positions across all SETTLED (resolved/voided) binary markets, each shaped to feed straight into trader.redeemMany({ entries }). Winners get amount × (1 − settlementFee); both sides of a voided market get amount / 2; loser-side and still-trading positions are omitted. One portfolio read plus one fee read per winning market.

Parameters

account

string

Returns

Promise<ClaimablePosition[]>


watchPrice()

watchPrice(asset): Promise<PriceWatchHandle>

Defined in: packages/sdk/src/somniaMarketsClient.ts:509

Watch one asset's price (e.g. "BTC", "ETH"): hydrate a snapshot (feed metadata + current price + recent ticks) to get roughly up to speed, then stream live over a Hasura WebSocket subscription. While active, every getLivePrice/getLivePriceTicks read for this asset is current to the last pushed tick at zero round-trip cost.

Ref-counted like watchMarket: watching the same asset twice shares one subscription and one snapshot; each handle's stop() releases one reference, and a brief linger absorbs quick re-watches. Requires config.priceFeed to be set; rejects (and releases) otherwise.

Parameters

asset

string

Returns

Promise<PriceWatchHandle>


watchPrices()

watchPrices(assets): Promise<PriceWatchHandle>

Defined in: packages/sdk/src/somniaMarketsClient.ts:516

Watch a batch of assets at once (e.g. ["BTC", "ETH"]). Returns a single handle whose stop() releases all of them; each asset is independently ref-counted, so this composes with per-asset watchPrice calls.

Parameters

assets

string[]

Returns

Promise<PriceWatchHandle>


getPriceStatus()

getPriceStatus(asset): PriceFeedStatus

Defined in: packages/sdk/src/somniaMarketsClient.ts:519

Per-asset price-watch state: "unwatched", "hydrating", or "live".

Parameters

asset

string

Returns

PriceFeedStatus


subscribePrices()

subscribePrices(listener): () => void

Defined in: packages/sdk/src/somniaMarketsClient.ts:529

Fire listener after every batch of price-store changes (React hooks subscribe to exactly this). Re-read with getLivePrice/getLivePriceTicks; results are memoized per store version. Independent of subscribeLive (prices are a separate store/service).

Parameters

listener

() => void

Returns

An unsubscribe function.

() => void


getLivePrice()

getLivePrice(asset): LivePrice | null

Defined in: packages/sdk/src/somniaMarketsClient.ts:535

The current price of a watched asset (from the live store), or null if unwatched / not yet hydrated. Synchronous, memoized.

Parameters

asset

string

Returns

LivePrice | null


getLivePrices()

getLivePrices(assets): (LivePrice | null)[]

Defined in: packages/sdk/src/somniaMarketsClient.ts:541

Current prices for a batch of watched assets, aligned to assets (each entry null if that asset is unwatched / not yet hydrated). Synchronous.

Parameters

assets

string[]

Returns

(LivePrice | null)[]


getLivePriceTicks()

getLivePriceTicks(asset, opts?): PricePoint[]

Defined in: packages/sdk/src/somniaMarketsClient.ts:547

The recent tick tape of a watched asset, newest first. Synchronous, memoized.

Parameters

asset

string

opts?
limit?

number

Max ticks (default 100; the store retains ~1000).

Returns

PricePoint[]


getLivePriceFeedInfo()

getLivePriceFeedInfo(asset): PriceFeedInfo | null

Defined in: packages/sdk/src/somniaMarketsClient.ts:553

Feed metadata + current price for a watched asset (from the live store), or null if unwatched. For a one-shot read without a watch use fetchPriceFeedInfo.

Parameters

asset

string

Returns

PriceFeedInfo | null


fetchPriceFeedInfo()

fetchPriceFeedInfo(asset): Promise<PriceFeedInfo>

Defined in: packages/sdk/src/somniaMarketsClient.ts:556

One-shot feed metadata + current price (one HTTP round-trip; no watch needed).

Parameters

asset

string

Returns

Promise<PriceFeedInfo>


fetchPrice()

fetchPrice(asset): Promise<LivePrice | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:562

One-shot current price (one HTTP round-trip), or null if the feed has no observations yet.

Parameters

asset

string

Returns

Promise<LivePrice | null>


fetchPrices()

fetchPrices(assets?): Promise<LivePrice[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:569

One-shot current prices for a batch of assets, or ALL tracked assets when assets is omitted — the multi-asset "price wall" in one request. Assets with no observations yet are omitted from the result.

Parameters

assets?

string[]

Returns

Promise<LivePrice[]>


listPriceFeeds()

listPriceFeeds(): Promise<PriceFeedInfo[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:575

One-shot feed catalog — metadata + current price for every tracked asset (discovery). One HTTP round-trip; no watch needed.

Returns

Promise<PriceFeedInfo[]>


fetchPriceHistory()

fetchPriceHistory(asset, opts?): Promise<PricePoint[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:581

Historic ticks for one asset, newest first — window with from/to (unix seconds, chain time), page with limit (default 500).

Parameters

asset

string

opts?
limit?

number

from?

number

to?

number

Returns

Promise<PricePoint[]>


fetchPriceCandles()

fetchPriceCandles(asset, resolution, opts?): Promise<PriceCandle[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:590

OHLC candles for one asset + resolution ("M1"/"H1"/"D1"), oldest first (chart-ready). Window with from/to (unix seconds); page with limit.

Parameters

asset

string

resolution

PriceCandleResolution

opts?
limit?

number

from?

number

to?

number

Returns

Promise<PriceCandle[]>


listMarkets()

listMarkets(opts?): Promise<Market[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:608

List markets, newest first, as the discriminated Market = SpotMarket | BinaryMarket union.

Parameters

opts?
marketType?

MarketType

Filter to "SPOT" or "BINARY"; omit for both.

limit?

number

Max rows (default 50).

offset?

number

Row offset for pagination (default 0).

Returns

Promise<Market[]>


listRegistryMarkets()

listRegistryMarkets(): Promise<Market[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:616

Registry sweep for the unified tier: every non-binary market plus the binary series that are still live (not finalized), paged until exhausted. Finalized series accumulate without bound; resolve those by pool via the raw-tier lookups instead.

Returns

Promise<Market[]>


countMarkets()

countMarkets(opts?): Promise<number>

Defined in: packages/sdk/src/somniaMarketsClient.ts:622

Server-side COUNT of markets (optionally one type) for pagination totals. Needs the privileged _aggregate role (server-only), like countBinaryMarkets.

Parameters

opts?
marketType?

MarketType

Returns

Promise<number>


getMarket()

getMarket(id): Promise<Market | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:628

One market by primary key (bytes32 marketId for binary, pool address for spot), or null if the indexer doesn't have it.

Parameters

id

string

Returns

Promise<Market | null>


listBinaryMarkets()

listBinaryMarkets(opts?): Promise<BinaryMarket[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:631

listMarkets pre-narrowed to binary markets.

Parameters

opts?

BinaryMarketFilter & object

Returns

Promise<BinaryMarket[]>


listLiveBinaryMarkets()

listLiveBinaryMarkets(filter?): Promise<BinaryMarket[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:639

Currently-live binary markets (expiry > now), soonest-to-expire first. Call with no argument for all live markets, or pass a LiveBinaryMarketsFilter to narrow by operatorId / venueId / asset / intervalSec / status (e.g. { venueId: "0x4d41494e" }).

Parameters

filter?

LiveBinaryMarketsFilter

Returns

Promise<BinaryMarket[]>


listBinaryVenueIds()

listBinaryVenueIds(): Promise<object[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:646

Distinct (operatorId, venueId) pairs across binary markets — the cheap server-side source for operator/venue filter options (so a UI never fetches every market just to enumerate origins). Excludes null attribution.

Returns

Promise<object[]>


listBinaryAssets()

listBinaryAssets(): Promise<string[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:659

Distinct asset symbols across binary markets — the cheap server-side source for an asset filter's options.

Returns

Promise<string[]>


countBinaryMarkets()

countBinaryMarkets(opts): Promise<number>

Defined in: packages/sdk/src/somniaMarketsClient.ts:665

Server-side COUNT of binary markets matching a filter, split by lifecycle phase — a total without fetching rows (Hasura _aggregate).

Parameters

opts

BinaryMarketFilter & object

Returns

Promise<number>


listPastBinaryMarkets()

listPastBinaryMarkets(opts?): Promise<BinaryMarket[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:673

Past binary markets (expiry ≤ now), most-recently-expired first, paginated with limit + offset.

Parameters

opts?

PastBinaryMarketsOptions

Returns

Promise<BinaryMarket[]>


getBinaryMarket()

getBinaryMarket(id): Promise<BinaryMarket | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:679

One binary market by bytes32 marketId, or null (also null if the id resolves to a spot market).

Parameters

id

string

Returns

Promise<BinaryMarket | null>


getBinaryMarketByAddress()

getBinaryMarketByAddress(marketAddress): Promise<BinaryMarket | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:685

One binary market by its on-chain BinaryMarket ADDRESS (the Market PK is the bytes32 marketId, so an address-keyed caller must resolve through this). Newest first for recycled/rebound addresses; null if not yet indexed.

Parameters

marketAddress

string

Returns

Promise<BinaryMarket | null>


getMarketFees()

getMarketFees(id): Promise<MarketFees | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:690

Fee config frozen into the market's pool at creation (origin venue attribution + rates in bpsTimes1k), or null without attribution.

Parameters

id

string

Returns

Promise<MarketFees | null>


listSpotMarkets()

listSpotMarkets(opts?): Promise<SpotMarket[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:696

listMarkets pre-narrowed to spot markets. Pass a SpotMarketFilter (+ limit) to narrow by base/quote symbol.

Parameters

opts?

SpotMarketFilter & object

Returns

Promise<SpotMarket[]>


getSpotMarket()

getSpotMarket(id): Promise<SpotMarket | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:699

One spot market by pool address, or null (also null if not spot).

Parameters

id

string

Returns

Promise<SpotMarket | null>


getMarketStatusHistory()

getMarketStatusHistory(marketId): Promise<MarketStatusUpdate[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:705

A market's status-transition history (Trading→Locked→Settling→Resolved…), oldest-first — the resolution/lock timeline for a market page.

Parameters

marketId

string

Returns

Promise<MarketStatusUpdate[]>


listPerpMarkets()

listPerpMarkets(opts?): Promise<PerpMarket[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:711

listMarkets pre-narrowed to perp markets. Pass a PerpMarketFilter (+ limit) to narrow by base/quote symbol.

Parameters

opts?

PerpMarketFilter & object

Returns

Promise<PerpMarket[]>


getPerpMarket()

getPerpMarket(id): Promise<PerpMarket | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:717

One perp market by pool address, or null (also null if the id resolves to another market kind).

Parameters

id

string

Returns

Promise<PerpMarket | null>


getCandles()

getCandles(poolAddress, intervalSeconds, opts?): Promise<Candle[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:727

OHLCV candles for one pool + interval, oldest first (chart-ready).

Parameters

poolAddress

string

intervalSeconds

number

Bucket size — one of the indexer's rollup intervals.

opts?
limit?

number

Max buckets (default 500).

from?

number

Only buckets at/after this unix-seconds timestamp.

to?

number

Only buckets at/before this unix-seconds timestamp.

Returns

Promise<Candle[]>


getFills()

getFills(pool, opts?): Promise<FillRow[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:737

Recent fills for one pool (either kind), newest first — the one-shot cousin of getLiveFills for when the tail isn't running.

Parameters

pool

string

opts?

FillsOptions

Returns

Promise<FillRow[]>


getUserFills()

getUserFills(account, opts?): Promise<FillRow[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:744

Fills a user participated in (maker OR taker), newest first — the one-shot indexer counterpart to getLiveUserFills. Optionally scope to one pool and/or a since/until window.

Parameters

account

string

opts?

FillsOptions & object

Returns

Promise<FillRow[]>


getOpenOrders()

getOpenOrders(owner, opts?): Promise<OpenOrder[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:753

owner's currently-OPEN orders, newest first. Pass OrdersOptions (minus status — always "Open" here) to scope by pool/side and page. NOTE: this lags the chain — for a trading loop prefer getLiveUserOrders (or track the orderIds your own placeOrder calls return). For non-open history use getOrders.

Parameters

owner

string

opts?

Omit<OrdersOptions, "status">

Returns

Promise<OpenOrder[]>


getOrders()

getOrders(owner, opts?): Promise<OrderRow[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:761

owner's orders across ALL statuses (Open/Filled/Cancelled/Expired/Closed), newest first — the order-history counterpart to getOpenOrders. Each row carries its lifecycle status + fill progress. Filter by status/side/pool and page via OrdersOptions.

Parameters

owner

string

opts?

OrdersOptions

Returns

Promise<OrderRow[]>


listSweepableOrders()

listSweepableOrders(opts?): Promise<SweepableOrder[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:782

Orders past expiry that are STILL RESTING, across the whole book — the work-list for a permissionless expired-order sweep. Not scoped to an account.

Works on every market kind; scope with pool and/or marketType. Each row carries exactly what the sweep verbs need: orderId for trader.cancelExpiredOrders, and isBid + price for trader.sweepExpiredAtLevel.

This is not status: "Expired". That status is written when the chain emits OrderExpired — i.e. once an order has ALREADY been removed. The sweepable set is the opposite: status = "Open" and expireTimestampNs < now, orders the book still holds because nobody has cleaned them up. They are NOT matched against — the matcher skips an expired maker — but each costs a warm SLOAD per traversal and holds a priority-index slot.

Longest-overdue first. GTC excludes itself because this SDK writes it as now + 50 years, not via any contract sentinel.

Parameters

opts?
pool?

string

marketType?

MarketType

owner?

string

asOfSec?

number | bigint

limit?

number

offset?

number

Returns

Promise<SweepableOrder[]>


getOutcomeBalances()

getOutcomeBalances(account, marketAddress): Promise<OutcomeBalances>

Defined in: packages/sdk/src/somniaMarketsClient.ts:796

Indexed YES/NO outcome-token balances of account in one binary market ("0" when unseen). Display-grade: to gate a write, read the tokens' on-chain balances via getErc20Balance instead.

Parameters

account

string

marketAddress

string

Returns

Promise<OutcomeBalances>


getPortfolio()

getPortfolio(account, opts?): Promise<Portfolio>

Defined in: packages/sdk/src/somniaMarketsClient.ts:803

A wallet's whole binary portfolio in one round-trip: non-zero outcome positions, open orders, and recent trades (each with market context). Pass PortfolioOptions to page orders/trades or window trades.

Parameters

account

string

opts?

PortfolioOptions

Returns

Promise<Portfolio>


getSpotPortfolio()

getSpotPortfolio(account, opts?): Promise<SpotPortfolio>

Defined in: packages/sdk/src/somniaMarketsClient.ts:810

A wallet's spot activity: open orders, pending stop orders, and recent trades. Token holdings are NOT here — spot balances are plain ERC-20 / native balances; read them on-chain. Pass PortfolioOptions to page.

Parameters

account

string

opts?

PortfolioOptions

Returns

Promise<SpotPortfolio>


getSpotStopOrders()

getSpotStopOrders(account, opts?): Promise<SpotStopOrder[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:817

A wallet's spot stop orders — PENDING by default (list + cancel via trader.cancelStopOrder). Pass status to see triggered/failed/cancelled history, pool to scope to one market, limit to page.

Parameters

account

string

opts?
pool?

string

status?

StopOrderStatus

limit?

number

Returns

Promise<SpotStopOrder[]>


getPerpPortfolio()

getPerpPortfolio(account, opts?): Promise<PerpPortfolio>

Defined in: packages/sdk/src/somniaMarketsClient.ts:828

A wallet's perp activity as indexed: open perp orders + recent perp trades. Positions/collateral live in the MarginBank — read them on-chain with getPerpPosition / getMarginAccount. Pass PortfolioOptions to page.

Parameters

account

string

opts?

PortfolioOptions

Returns

Promise<PerpPortfolio>


listPerpStopOrders()

listPerpStopOrders(opts?): Promise<PerpStopOrder[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:848

Perp take-profit / stop-loss orders, newest first — the read that makes TP/SL usable at all.

The PerpStopOrderRegistry keeps pending orders in private storage behind no enumeration getter, so there is no chain read that answers "what stops do I have". Creation and triggering both work; without this a trader cannot see, price or cancel what they created, which is why the feature shipped gated.

Every scope comes from the same call: { account } for a trader's working stops (default status PENDING), { pool } with no account for a market's whole pending book, and status for history. account is optional deliberately — a market-wide view of what will fire is a legitimate monitoring read.

Read dropReason before calling a TRIGGER_FAILED order a failure: a reduce-only drop means the stop was overtaken by events, which is ordinary; only PlacementFailed is a rejection.

Parameters

opts?
account?

string

pool?

string

status?

StopOrderStatus[]

limit?

number

offset?

number

Returns

Promise<PerpStopOrder[]>


getUnclaimedPerpStopSomi()

getUnclaimedPerpStopSomi(ref): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:862

SOMI a perp stop registry owes account, in wei, claimable with trader.claimPerpStopSomi. Credited when a cancel's direct refund fails (a contract owner with no payable receiver) OR when the registry is wound down, which credits every owner — including EOAs.

Parameters

ref
registry

`0x${string}`

account

`0x${string}`

Returns

Promise<bigint>


listPerpOrderHistory()

listPerpOrderHistory(account, opts?): Promise<PerpOrderHistoryRow[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:880

An account's FINISHED perp orders, most-recently-ended first — the history tab behind getPerpPortfolio's open-orders list.

getPerpPortfolio hard-filters status = "Open", so before this there was no way to see a filled, cancelled or expired perp order at all.

Excludes working orders by default (status != "Open"); pass status to narrow to particular outcomes. Ordered by when each order ENDED, not when it was placed — a long-resting order that just filled belongs at the top of a history view, not buried at its placement date.

Note Closed is terminal, not transitional: an IOC that partially filled without resting stays Closed forever, so treating it as "still working" would show a finished order as live.

Parameters

account

string

opts?
pool?

string

status?

TerminalOrderStatus[]

orderBy?

"placed" | "ended"

limit?

number

offset?

number

Returns

Promise<PerpOrderHistoryRow[]>


getSyncStatus()

getSyncStatus(chainId): Promise<IndexerSyncStatus | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:895

The indexer's own sync state (latest processed block vs chain height) for chainId, or null if it has no row for that chain.

Parameters

chainId

number

Returns

Promise<IndexerSyncStatus | null>


getMarketByPool()

getMarketByPool(pool): Promise<Market | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:901

Resolve a market by its pool address (one query; no live watch), or null. Binary markets are keyed by bytes32 marketId, so this is the by-pool lookup.

Parameters

pool

string

Returns

Promise<Market | null>


countOrders()

countOrders(owner, opts?): Promise<number>

Defined in: packages/sdk/src/somniaMarketsClient.ts:908

Server-side COUNT of owner's orders matching an OrdersOptions filter — the total for an order-history page. Privileged _aggregate role (server-only), with a bounded row-count fallback on the public role.

Parameters

owner

string

opts?

OrdersOptions

Returns

Promise<number>


countUserFills()

countUserFills(account, opts?): Promise<number>

Defined in: packages/sdk/src/somniaMarketsClient.ts:914

Server-side COUNT of the fills account participated in (maker OR taker), optionally scoped by pool + a since/until window — a history-page total.

Parameters

account

string

opts?

FillsOptions & object

Returns

Promise<number>


getRouterActions()

getRouterActions(account, opts?): Promise<RouterActionRecord[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:920

An account's RouterMinter action history (redeem / mint / merge), newest first — optionally scoped to one market and/or kind, paginated.

Parameters

account

string

opts?
market?

string

kind?

RouterActionKind

limit?

number

offset?

number

Returns

Promise<RouterActionRecord[]>


getMarketResolution()

getMarketResolution(marketId): Promise<{ events: MarketResolutionEvent[]; reference: MarketReferenceLink | null; closingAnswer: OracleAnswer | null; openingAnswer: OracleAnswer | null; oracleAnswer: OracleAnswer | null; }>

Defined in: packages/sdk/src/somniaMarketsClient.ts:933

Everything the indexer knows about how a market resolves: lifecycle events, the oracle reference link, and the posted oracle answers. closingAnswer is the market's own resolution answer (the CLOSING price for a reference-mode up/down market); openingAnswer is the reference-question answer (the OPENING price it resolves against, null for fixed-strike markets). Any piece may be absent. oracleAnswer is a deprecated alias of closingAnswer.

Parameters

marketId

string

Returns

Promise<{ events: MarketResolutionEvent[]; reference: MarketReferenceLink | null; closingAnswer: OracleAnswer | null; openingAnswer: OracleAnswer | null; oracleAnswer: OracleAnswer | null; }>


getOpeningPrices()

getOpeningPrices(marketIds): Promise<Record<string, string | null>>

Defined in: packages/sdk/src/somniaMarketsClient.ts:963

Batch opening (reference-question) prices for many markets in one pair of round-trips — for list views. Map of lowercased marketId → raw oracle numericValue (null when no reference answer yet). Format with the market's oracle price scale.

Parameters

marketIds

string[]

Returns

Promise<Record<string, string | null>>


getBookTops()

getBookTops(marketIds): Promise<Record<string, BookTop>>

Defined in: packages/sdk/src/somniaMarketsClient.ts:971

Batch top of book (best resting bid/ask + mid, YES terms, raw quote units) for many binary markets in one round-trip — for list views that want a book-derived implied probability without an N+1 per-pool fan-out. Map of lowercased marketId → BookTop; empty-book markets are absent.

Parameters

marketIds

string[]

Returns

Promise<Record<string, BookTop>>


listProtocolFees()

listProtocolFees(opts?): Promise<ProtocolFeeRecord[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:978

Realized protocol-fee records, newest first — filter by recipient / market / pool / payer, paginate. The per-fill stream behind getMarketFees's running total.

Parameters

opts?
recipient?

string

market?

string

pool?

string

payer?

string

limit?

number

offset?

number

Returns

Promise<ProtocolFeeRecord[]>


listBuilderFees()

listBuilderFees(opts?): Promise<BuilderFeeRecord[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:986

Realized builder/routing-fee records, newest first — filter by builder / market / payer, paginate.

Parameters

opts?
builder?

string

market?

string

payer?

string

limit?

number

offset?

number

Returns

Promise<BuilderFeeRecord[]>


listSettlementFees()

listSettlementFees(opts?): Promise<SettlementFeeRecord[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:994

Realized settlement-fee records, newest first — filter by market / recipient, paginate.

Parameters

opts?
market?

string

recipient?

string

limit?

number

offset?

number

Returns

Promise<SettlementFeeRecord[]>


listBuilderApprovals()

listBuilderApprovals(opts?): Promise<BuilderApproval[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1001

Builder-approval directory, newest-updated first — filter by user and/or builder, paginate. The directory complement to the on-chain point read getBuilderApproval.

Parameters

opts?
user?

string

builder?

string

limit?

number

offset?

number

Returns

Promise<BuilderApproval[]>


getVaultPayoutFallbacks()

getVaultPayoutFallbacks(owner, opts?): Promise<VaultPayoutFallback[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1008

An owner's vault-credit fallback history (append-only), newest first — optionally scoped to one token, paginated. The live claimable balance is the chain read getVaultBalance.

Parameters

owner

string

opts?
token?

string

limit?

number

offset?

number

Returns

Promise<VaultPayoutFallback[]>


getFundingPayments()

getFundingPayments(account, opts?): Promise<FundingPayment[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1014

An account's funding-payment history, newest first — optionally scoped to one pool, paginated.

Parameters

account

string

opts?
pool?

string

limit?

number

offset?

number

Returns

Promise<FundingPayment[]>


getMarginEvents()

getMarginEvents(account, opts?): Promise<MarginEvent[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1020

An account's margin-account movement history (deposits/withdraws/locks), newest first — paginated.

Parameters

account

string

opts?
limit?

number

offset?

number

Returns

Promise<MarginEvent[]>


getLiquidations()

getLiquidations(opts?): Promise<LiquidationEvent[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1023

Liquidation events, newest first — filter by account and/or pool, paginate.

Parameters

opts?
account?

string

pool?

string

limit?

number

offset?

number

Returns

Promise<LiquidationEvent[]>


listFundingRateHistory()

listFundingRateHistory(pool, opts?): Promise<FundingRateUpdate[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1036

A perp pool's funding-rate history, newest first by default.

from/to are unix SECONDS and are what a chart should use — the settlement cadence is 300s on testnet (288 rows per pool per day), so paging by offset to reach a date is both slow and fragile. Normalize each row with its OWN fundingWindowSec.

Pass order: "asc" to make from a forward CURSOR. Under the default "desc" a page always comes off the newest end, so from = last.timestamp + 1 re-reads the tail instead of advancing.

Parameters

pool

string

opts?
limit?

number

offset?

number

from?

number | bigint

to?

number | bigint

order?

"asc" | "desc"

Returns

Promise<FundingRateUpdate[]>


listFundingRateCandles()

listFundingRateCandles(pool, intervalSeconds, opts?): Promise<FundingRateCandle[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1058

A perp pool's funding-rate ROLLUPS at one resolution (3600 | 14400 | 86400), newest first — for ranges the raw series is too dense for.

Buckets can be ABSENT where no settlement's span reached them: zero-fill those grid slots as { avgFundingRate8h: 0, coverage: 0 } and never carry the previous rate forward. Past buckets also get REVISED when a catch-up settlement reaches backwards.

Pages NEWEST-first against a default limit of 500, so a month of hourly buckets (720) silently returns its newest 500 — treat rows.length === limit as truncated.

Parameters

pool

string

intervalSeconds

number

opts?
limit?

number

offset?

number

from?

number | bigint

to?

number | bigint

Returns

Promise<FundingRateCandle[]>


listPerpFees()

listPerpFees(opts?): Promise<PerpFeeRecord[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1072

Realized perp fees / rebates / builder credits, newest first — the perps fee rail off MarginBank, distinct from the binary/spot listBuilderFees.

insurancePortion is a component OF amount, not an addition to it: a fee total is SUM(amount), an insurance inflow is SUM(insurancePortion), and adding the two double-counts. amount is unsigned — isRebate carries the direction.

Parameters

opts?
account?

string

pool?

string

builder?

string

kind?

string

limit?

number

offset?

number

Returns

Promise<PerpFeeRecord[]>


getFundingRateHistory()

getFundingRateHistory(pool, opts?): Promise<FundingRateUpdate[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1077

Parameters

pool

string

opts?
limit?

number

offset?

number

from?

number | bigint

to?

number | bigint

Returns

Promise<FundingRateUpdate[]>

Deprecated

Renamed to listFundingRateHistory; forwards verbatim.


getOpenInterestHistory()

getOpenInterestHistory(pool, opts?): Promise<OpenInterestSnapshot[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1083

A perp pool's open-interest history, newest first — paginated.

Parameters

pool

string

opts?
limit?

number

offset?

number

Returns

Promise<OpenInterestSnapshot[]>


listPerpPositions()

listPerpPositions(account, opts?): Promise<IndexedPerpPosition[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1098

An account's perp positions across every pool, newest-updated first — ONE round-trip, replacing a chain read per market.

A snapshot as of each row's updatedAtBlock, NOT marked to market: unrealized PnL, liquidation price and margin health all still need a chain read. entryFundingIndex is not selected — the deployed Hasura schema does not carry it yet — so anything funding-sensitive belongs on getPerpPosition.

Size-0 (fully closed) rows are excluded unless includeFlat — upserted rows are never deleted, so closed positions linger forever. An empty array means the indexer has no rows, not that the account is flat.

Parameters

account

string

opts?
pool?

string

includeFlat?

boolean

limit?

number

offset?

number

Returns

Promise<IndexedPerpPosition[]>


getBinaryOrderBook()

getBinaryOrderBook(pool, opts?): Promise<BinaryOrderBook>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1117

Read a binary pool's resting book from the contract (getBookLevels, both sides in one pipelined round-trip), 4-sided like the live variant. Use when the tail isn't running or as a checksum; in a render/quote path prefer getLiveBinaryOrderBook.

Parameters

pool

`0x${string}`

opts?
depth?

number

Price levels per side (default 10).

decimals?

number

Price scale decimals for the NO-side inversion (default 6).

Returns

Promise<BinaryOrderBook>


getSpotOrderBook()

getSpotOrderBook(pool, opts?): Promise<SpotOrderBook>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1124

Read a spot OR perp pool's resting book from the contract (both ride the shared OrderBook base). Live variant: getLiveSpotOrderBook.

Parameters

pool

`0x${string}`

opts?
depth?

number

Levels per side (default 12).

Returns

Promise<SpotOrderBook>


getOrderOnchain()

getOrderOnchain(pool, orderId): Promise<OnchainOrder | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1133

One order's state at chain head, by (pool, orderId) — ids are unique per pool. Reads your own writes: answers from the block a placement landed in, while the indexed getOrders may still lag. null when the pool has no ACTIVE order for that id (never assigned, filled, cancelled, or reduced into a new id) — the indexer is the surface that keeps history.

Parameters

pool

`0x${string}`

orderId

bigint

Returns

Promise<OnchainOrder | null>


getOwnOpenOrdersOnchain()

getOwnOpenOrdersOnchain(pool, owner): Promise<bigint[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1141

An owner's open order ids at chain head. Any address may be asked about — the pool's view reads msg.sender and this impersonates via the eth_call sender, so no signer is involved. Indexed counterpart, with human units and history: getOpenOrders.

Parameters

pool

`0x${string}`

owner

`0x${string}`

Returns

Promise<bigint[]>


getAllOpenOrdersOnchain()

getAllOpenOrdersOnchain(pool, opts): Promise<{ orders: OnchainOrder[]; hasMore: boolean; nextCursor: bigint; }>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1153

One page of every open order on one side, at chain head — the per-order detail the aggregated book reads (getBinaryOrderBook, getSpotOrderBook) collapse into levels. The pool accepts this view only from the zero address, so a configured signer is never forwarded. Loop while hasMore, feeding nextCursor back as cursor; pin a block if pages must be mutually consistent.

Parameters

pool

`0x${string}`

opts
isBid

boolean

maxCount?

number

Orders per page (default 100).

cursor?

bigint

Returns

Promise<{ orders: OnchainOrder[]; hasMore: boolean; nextCursor: bigint; }>


getPerpState()

getPerpState(pool): Promise<PerpStateOnchain>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1163

A perp pool's live mark/index price, funding rate + cumulative index, and open interest in one pipelined fan-out — fresher than the indexed row (which only updates on funding settlements).

Parameters

pool

`0x${string}`

Returns

Promise<PerpStateOnchain>


getPerpPosition()

getPerpPosition(ref): Promise<PerpPosition>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1169

An account's position in one perp pool, from the MarginBank (signed size: positive = long). ref.marginBank comes off the PerpMarket row.

Parameters

ref

PerpPositionRef

Returns

Promise<PerpPosition>


getMarginAccount()

getMarginAccount(marginBank, account): Promise<MarginAccount>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1176

An account's cross-margin state (free/locked collateral, equity, withdrawable, active pools) from the MarginBank — now including the account health (imReq/mmReq/cmReq) and marginStatus.

Parameters

marginBank

`0x${string}`

account

`0x${string}`

Returns

Promise<MarginAccount>


getAccountHealth()

getAccountHealth(marginBank, account): Promise<AccountHealth>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1182

An account's cross-margin health alone (equity vs IM/MM/CM + the derived status) — a lighter read than getMarginAccount when only health matters.

Parameters

marginBank

`0x${string}`

account

`0x${string}`

Returns

Promise<AccountHealth>


getLiquidationPrice()

getLiquidationPrice(ref): Promise<bigint | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1194

Estimated liquidation price for an account's position in one perp pool (raw quote units per whole base), or null when flat. Solves equity == mmReq with BOTH sides moving against the mark — see perpLiquidationPrice — over the cross-margin equity/mmReq, so it is the price at which this pool's move alone trips maintenance. Throws on a stale mark anywhere in the account.

This is where liquidation triggers. For the contract's own figure of where a position's equity is exhausted, see getBankruptcyPrice.

Parameters

ref

PerpPositionRef

Returns

Promise<bigint | null>


getPerpLeverage()

getPerpLeverage(ref): Promise<PerpLeverage>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1209

An account's realized leverage at one position and across the whole cross-margin account, plus every ceiling that bounds it — the market's IMF-implied max, the account's own cap, the protocol limit, and the credit-voucher confinement. Ratios are bps of 1x.

Derived, not read: the MarginBank exposes only leverage caps, never a measurement of a position.

The ceilings are returned as stored and do not compose by taking a minimum — see PerpLeverage.voucherLeverageCapX. For whether a specific order passes, use previewPerpOrderMargin.

Parameters

ref

PerpPositionRef

Returns

Promise<PerpLeverage>


getPerpPositionAnalytics()

getPerpPositionAnalytics(ref): Promise<PerpPositionAnalytics>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1225

One position, marked — unrealized PnL, accrued funding, notional, the three margin requirements it contributes, and its return on margin. Two reads, pinned to one block.

The split getAccountHealth cannot give you: that returns one equity figure for the whole account, with every market's PnL and funding already summed and netted, so a two-position trader cannot see which one carries the loss and cannot see funding at all.

accruedFunding is owed — positive means the account pays. Returns { priceable: false } on a stale mark rather than throwing, because in a positions table one dead feed must degrade one row, not the page.

Parameters

ref

PerpPositionRef

Returns

Promise<PerpPositionAnalytics>


listPerpPositionAnalytics()

listPerpPositionAnalytics(p): Promise<PerpPositionAnalytics[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1238

Every position the account holds, each marked — the positions-table read.

1 + 2n reads for n active markets, all pinned to ONE block, which is the point of having it rather than looping the single read: unpinned, the rows come from different heights and their equityContributions do not re-sum to any equity the account ever had.

Scoped to the bank's own activePerpPools, so a closed position does not linger the way it does on the indexed rows.

Parameters

p
marginBank

`0x${string}`

account

`0x${string}`

Returns

Promise<PerpPositionAnalytics[]>


getMaxPerpOrderSize()

getMaxPerpOrderSize(p): Promise<PerpMaxOrderSize>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1259

The largest order this account can place at price — what a Max button should call. The inverse of previewPerpOrderMargin, and the protocol has no such view.

Does not re-derive the sizing rule: it binary-searches the forward one, so the two cannot disagree. A hand-rolled equity / (price × imf) drops the adverse mark-to-entry term, which is the usual reason a "max" order is rejected.

maxQuantity is aligned down to the pool's lot grid. Check placeable — a size below the pool's minQuantity is a revert, not a small order. limitedBy says which gate bound it. Market-wide maxOpenInterest and book depth are deliberately not modelled.

Pass autoPull when the transaction sender will be the order owner. That is the pool's whole gate for topping the account up from its wallet (T70), and with it on, an account with an empty bank and a funded, approved wallet goes from a max of 0n to whatever the wallet funds. Leave it off for placeOrderFor, an operator grant or the stop registry, where no pull happens.

Parameters

p
pool

`0x${string}`

marginBank

`0x${string}`

account

`0x${string}`

isBid

boolean

price

bigint

autoPull?

boolean

builderFeeBpsTimes1k?

bigint

Returns

Promise<PerpMaxOrderSize>


previewPerpClosePnl()

previewPerpClosePnl(p): Promise<PerpClosePreview>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1282

What closing a position — all of it or part — would actually realise. Backs a close modal.

Two things it gets right that a hand-derived figure usually does not, both silent: the close is aligned down to the lot grid first, so a "close all" on a position that is not a lot multiple leaves a remainder open; and funding settles on the whole position rather than the closed share, because settleTrade settles before it touches the position.

netProceeds is the number to show — realizedPnl − fundingSettled − fee. fundingSettled is positive when the account pays.

Parameters

p
pool

`0x${string}`

marginBank

`0x${string}`

account

`0x${string}`

quantity?

bigint

price?

bigint

asMaker?

boolean

Returns

Promise<PerpClosePreview>


previewPerpLiquidationPrice()

previewPerpLiquidationPrice(p): Promise<PerpLiquidationPreview>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1301

Where a proposed order would leave the liquidation price if it filled in full at its limit price, alongside where it sits now — the projection an order form needs, which getLiquidationPrice cannot give for an order not yet placed.

Ports all four of MarginBank.settleTrade's cases (open / increase / reduce / flip) and charges the fill's fee, so a reduce and an add move the answer in opposite directions. Whether the order is ACCEPTED is previewPerpOrderMargin's question, not this one.

Parameters

p
pool

`0x${string}`

marginBank

`0x${string}`

account

`0x${string}`

isBid

boolean

quantity

bigint

price

bigint

asMaker?

boolean

Returns

Promise<PerpLiquidationPreview>


getPerpSideHolders()

getPerpSideHolders(ref, opts?): Promise<PerpSideHolders>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1331

Every account holding an open position on one side of one perp market, from the MarginBank's own per-(pool, side) holder array — the read that lets a liquidation keeper find its watch set from head state alone, no off-chain indexer.

Chain tier. Pages through the bank's bounded slice view (many holders per round-trip, never one call per holder), with every page pinned to ONE block — opts.blockNumber, or the head sampled once — so a holder entering or leaving mid-walk can neither be missed nor double-counted. The result carries asOfBlock; feed it into getBankruptcyPrice's opts.blockNumber (and the other side's call) to keep a sweep on one consistent snapshot — the other position/health reads answer at head only.

The indexed counterpart, listPerpPositions, answers the inverse question (one account's positions across pools) and lags head.

Parameters

ref

PerpSideHoldersRef

opts?

GetPerpSideHoldersOptions

Returns

Promise<PerpSideHolders>


getBankruptcyPrice()

getBankruptcyPrice(ref, opts?): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1352

The MarginBank's OWN bankruptcy price for an account's position in one perp pool (raw quote units per whole base) — the contract-computed price at which the position's allocated equity is exhausted. What a liquidation keeper prices a bankrupt position against.

A different quantity from getLiquidationPrice, not a better version of it: that is the SDK's client-side estimate of where liquidation triggers (use it for UI/monitoring); this is the contract's figure for where there is nothing left (use it for anything that settles or bids).

Reverts rather than returning a sentinel — a ContractRevertError with errorName: "NoOpenPosition" when the account is flat in that pool (branch on errorName, never message text).

Parameters

ref

PerpPositionRef

opts?

GetBankruptcyPriceOptions

Returns

Promise<bigint>


getPerpSystemConfig()

getPerpSystemConfig(marginBank): Promise<PerpSystemConfig>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1367

How the perps stack is wired — the address book for every other contract in the plane (collateral token, pool factory, liquidation engine, insurance fund, fee recipient), plus the protocol-wide leverage ceiling and a fullyWired flag.

Read this first: the addresses here are what the other protocol-state reads should be pointed at, so nothing is hardcoded per chain, and they are the bank's own view — the addresses it will actually call.

liquidationEngine is the PROXY. An implementation address answers reads with unset defaults (zero bidders, zero penalty), which looks like a configured-but-idle engine rather than the wrong address.

Parameters

marginBank

`0x${string}`

Returns

Promise<PerpSystemConfig>


getInsuranceFundState()

getInsuranceFundState(fund): Promise<InsuranceFundState>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1373

The InsuranceFund's per-tier balances and the total bad debt it can absorb. Point it at insuranceFund from getPerpSystemConfig.

Parameters

fund

`0x${string}`

Returns

Promise<InsuranceFundState>


getLiquidationEngineConfig()

getLiquidationEngineConfig(engine): Promise<LiquidationEngineConfig>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1384

The LiquidationEngine's configured bounds — penalty, spread range, per-block volume cap, registered backstop bidders. Not its history, which is indexed as LiquidationEvent.

bidderCount === 0n is an operational signal: with no registered bidders the takeover stage has nobody to take a position over, so the waterfall reaches ADL sooner than the configuration implies.

Parameters

engine

`0x${string}`

Returns

Promise<LiquidationEngineConfig>


tryGetPerpAccountEquity()

tryGetPerpAccountEquity(marginBank, account): Promise<bigint | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1393

An account's equity, or null when it could not be computed.

getAccountHealth propagates an oracle failure, which is exactly when a health sweep most needs an answer. Null means "not computable right now" — an unpriceable market in the account's set — never "zero equity".

Parameters

marginBank

`0x${string}`

account

`0x${string}`

Returns

Promise<bigint | null>


getPerpCollateralBasis()

getPerpCollateralBasis(marginBank, account): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1402

Collateral BACKING an account: max(0, unlocked + locked), raw units.

Deliberately unlike equity — one storage pair, no market walk, no oracle, and it cannot revert. A solvency floor that survives a dead price feed; use equity when you need mark-to-market truth.

Parameters

marginBank

`0x${string}`

account

`0x${string}`

Returns

Promise<bigint>


listPerpPoolStatuses()

listPerpPoolStatuses(p): Promise<PerpPoolStatus[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1425

Every perp market the factory has deployed, in deployment order, with the two independent gates that decide whether it is tradeable: restricted (close-only) and registered (activated on the MarginBank).

Do not build a market list from the factory's raw pool list — that is the deployment history and includes markets wound down to close-only, so listing it unfiltered presents dead markets as tradeable.

Chain-sourced, which makes it complete and available when the indexer is not: the indexer's perp set comes from a curated manifest, so a market deployed after that manifest was written is invisible there and present here.

You do not pass a MarginBank. It is a per-network singleton in practice, but each pool names its own and that is the bank its settlement path uses — so it is read per pool and returned on every row, ready for the getMarginAccount / getPerpPosition reads that follow.

Feature-detects the factory's one-call status view and falls back to a per-pool fan-out on a factory that predates it, returning the same shape either way.

Parameters

p
factory

`0x${string}`

Returns

Promise<PerpPoolStatus[]>


listTradeablePerpPools()

listTradeablePerpPools(p): Promise<`0x${string}`[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1428

Just the tradeable perp pools, filtered from listPerpPoolStatuses.

Parameters

p
factory

`0x${string}`

Returns

Promise<`0x${string}`[]>


isPerpPoolRegistered()

isPerpPoolRegistered(p): Promise<boolean>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1439

Whether the MarginBank has one perp pool registered — the activation gate on its own. Coming from the factory only proves a pool is authentic; registration is what makes it usable.

Not interchangeable with getPoolTier, which is itself gated on registration and so returns 0 for an uncovered-but-registered market and an unregistered one alike.

Parameters

p
marginBank

`0x${string}`

pool

`0x${string}`

Returns

Promise<boolean>


previewPerpOrderMargin()

previewPerpOrderMargin(p): Promise<PerpOrderMarginPreview>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1483

What a perp order will lock and whether the pool will accept it, computed BEFORE sending — the read behind an order form's "margin required" row and submit gate.

Ports PerpPool._computeLockAmount plus the MarginBank gate it feeds, so the number shown is the number actually reserved.

Why not a contract pre-check. quoteMeetsIMForOrder looks right and is not: it runs with the order's base margin treated as already reserved, because on the real path the lock has run first. Called cold it counts the order's margin nowhere and returns true for almost any size. meetsIMForFill does charge base margin but models neither the lock nor its adverse mark-to-entry reserve — the term that rejects a naively-sized "max" order.

Reports two gates separately, because they fail for different reasons and imply different fixes: hasCollateralForLock (the lock can be taken at all) vs meetsInitialMargin (what remains still covers the requirement) — "deposit more" vs "close something".

Every read is pinned to one block; a preview is a statement about that block, so re-quote near send time for anything close to the edge.

Pass autoPull when the transaction sender will be the order owner — the pool's whole gate for topping the account up from its wallet (T70). With it on, both gates describe the post-pull balance and topUpRequired is the wallet spend to show beside the margin figure. Off, they describe the in-bank balance alone, which is what an operator- or registry-routed placement actually faces.

Parameters

p
pool

`0x${string}`

marginBank

`0x${string}`

account

`0x${string}`

isBid

boolean

quantity

bigint

price

bigint

autoPull?

boolean

builderFeeBpsTimes1k?

bigint

Returns

Promise<PerpOrderMarginPreview>


meetsPerpImForFill()

meetsPerpImForFill(p): Promise<boolean>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1502

The MarginBank's initial-margin probe for an order not yet locked — the closest single contract call to a pre-trade gate. Charges the increasing leg's base margin against free equity, but does not model the lock's adverse mark-to-entry reserve; previewPerpOrderMargin is the accurate gate.

additionalSize is the INCREASING quantity, not necessarily the whole order.

Parameters

p
marginBank

`0x${string}`

account

`0x${string}`

pool

`0x${string}`

additionalSize

bigint

price

bigint

Returns

Promise<boolean>


quoteMeetsPerpImForOrder()

quoteMeetsPerpImForOrder(p): Promise<boolean>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1519

The MarginBank's placement-time initial-margin check, verbatim.

Not a pre-trade gate, despite the name — it treats the order's base margin as already reserved, so called cold it answers true for almost any size. Correct only for a caller that has already taken the lock, i.e. for mirroring the placement check itself. For "will my order be accepted", use previewPerpOrderMargin.

Parameters

p
marginBank

`0x${string}`

account

`0x${string}`

pool

`0x${string}`

additionalSize

bigint

price

bigint

Returns

Promise<boolean>


quotePerpOrderTopUp()

quotePerpOrderTopUp(p): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1541

The MarginBank's auto-pull sizing, verbatim — how much placing an order would take from the owner's wallet.

For an order form use previewPerpOrderMargin with autoPull instead. It derives lockAmount, feeHeadroom and increasingQuantity from the order, which is the awkward part: they come from the POOL, not the bank, so calling this directly means reproducing the same three numbers the pool would pass. This is the cross-check on that port.

Returns 0n both when no pull is needed and in the three cases where a pull would be wrong rather than unnecessary — a purely reducing order, an account already in debt, and a voucher-blocked increase — so read it beside the unlocked balance.

Parameters

p
marginBank

`0x${string}`

pool

`0x${string}`

account

`0x${string}`

lockAmount

bigint

feeHeadroom

bigint

increasingQuantity

bigint

price

bigint

Returns

Promise<bigint>


getPerpRiskParams()

getPerpRiskParams(pool): Promise<PerpRiskParams>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1551

Parameters

pool

`0x${string}`

Returns

Promise<PerpRiskParams>


getPerpHealthSnapshot()

getPerpHealthSnapshot(pool): Promise<PerpHealthSnapshot>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1564

A perp market's live health inputs in one call — mark price, projected cumulative funding, the effective (OI-scaled) IMF, and the maintenance / close-out thresholds. The contract exposes this precisely so a cross-margin health walk reads a market once instead of making five getter calls.

Returns a discriminated union: an unpriceable market (stale or zero mark) arrives as { priceable: false } rather than an all-zero struct, so a maintenanceMarginBps of 0 cannot be mistaken for "no maintenance requirement". Narrow on priceable before reading any field.

Parameters

pool

`0x${string}`

Returns

Promise<PerpHealthSnapshot>


getEffectiveImfBps()

getEffectiveImfBps(pool): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1576

The initial-margin factor a perp market is charging right now, in bps — OI-scaled when dynamic IMF is enabled, otherwise the static base.

Sizing an order off initialMarginBps instead under-margins it whenever open interest has pushed the curve above its floor, and the pool rejects an order the client believed fit. Reverts if dynamic IMF is on and the index is stale. getPerpHealthSnapshot returns this alongside the rest for one round-trip.

Parameters

pool

`0x${string}`

Returns

Promise<bigint>


getVaultBalance()

getVaultBalance(p): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1583

LIVE claimable balance an owner can withdraw from a pool's internal ERC20Vault for token, raw units — the value behind the append-only getVaultPayoutFallbacks history.

Parameters

p

GetVaultBalanceParams

Returns

Promise<bigint>


getManualVaultMode()

getManualVaultMode(p): Promise<boolean>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1590

Whether user has opted out of wallet auto-pull on this SpotPool, at chain head — see trader.setManualVaultMode. True means their orders draw only on pre-deposited vault balance and their payouts stay as vault credit.

Parameters

p

GetManualVaultModeParams

Returns

Promise<boolean>


getAutoPullRequirement()

getAutoPullRequirement(p): Promise<AutoPullRequirement>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1598

What an order of this shape would consume from owner, and how far short their vault balance falls (delta) — the pool's own worst-case funding envelope. In auto-pull mode delta is what the wallet gets pulled for; under manual vault mode it is what must be deposited first.

Parameters

p

GetAutoPullRequirementParams

Returns

Promise<AutoPullRequirement>


isOperatorAuthorized()

isOperatorAuthorized(p): Promise<boolean>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1605

Whether owner authorized operator for selector on this SpotPool, at chain head — resolved through the pool's OperatorPermissionsRegistry, so no indexer lag.

Parameters

p

IsOperatorAuthorizedParams

Returns

Promise<boolean>


isGloballyApproved()

isGloballyApproved(p): Promise<boolean>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1615

Whether a GLOBAL operator grant is on record for this owner/operator/selector, at chain head — the raw slot trader.setOperatorApprovalGlobal writes.

Independent of pool registration and of denials, so true here does not mean the operator can act on a given pool. For that, use isOperatorAuthorized.

Parameters

p

IsGloballyApprovedParams

Returns

Promise<boolean>


isApprovedForPool()

isApprovedForPool(p): Promise<boolean>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1624

Whether a PER-POOL operator grant is on record, at chain head — the read-back for trader.setOperatorApprovalForPool.

Ignores any global grant and any denial. For the pool's resolved decision, use isOperatorAuthorized.

Parameters

p

IsApprovedForPoolParams

Returns

Promise<boolean>


getOwnLockedBalance()

getOwnLockedBalance(p): Promise<LockedBalance>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1630

Base/quote owner has locked in this pool's resting orders. Pair with getVaultBalance to account for everything the pool holds for them.

Parameters

p
pool

`0x${string}`

owner

`0x${string}`

Returns

Promise<LockedBalance>


getLockedTokenBreakdown()

getLockedTokenBreakdown(pool): Promise<LockedTokenBreakdown>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1636

How the pool's reserves of each token split between resting orders and leftover — venue-health introspection, not a portfolio read.

Parameters

pool

`0x${string}`

Returns

Promise<LockedTokenBreakdown>


convertToQuoteAtPriceCeil()

convertToQuoteAtPriceCeil(p): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1642

Base→quote at a price using the pool's OWN ceil rounding — for interpreting getLockedTokenBreakdown without reimplementing it.

Parameters

p
pool

`0x${string}`

baseQuantity

bigint

price

bigint

Returns

Promise<bigint>


getMarketOnchain()

getMarketOnchain(marketId): Promise<MarketOnchain>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1655

A binary market's full wiring + state (tokens, pool + nonce, status, expiry, resolution, finalized, decimals) straight from chain — authoritative for write eligibility, and works before the indexer has seen the market.

BREAKING (0.13.0): takes the bytes32 marketId (resolved through the BinaryMarketsModule), NOT the BinaryMarket contract address — pools are recycled across successive markets in v2, so market identity is the module id. Post-finalize, backing falls back to the settlement record's net backing. Requires addresses.binaryModule in the config.

Parameters

marketId

`0x${string}`

Returns

Promise<MarketOnchain>


getPoolCreator()

getPoolCreator(pool): Promise<`0x${string}`>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1663

A pool's creator — its first-deploy market creator, the only party that can reuse it — straight from chain (BinaryMarketsModule.poolCreator). Zero address for a pool the module never deployed. No signer needed; requires addresses.binaryModule.

Parameters

pool

`0x${string}`

Returns

Promise<`0x${string}`>


getFreePools()

getFreePools(creator, collateral): Promise<`0x${string}`[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1671

A creator's free (finalized + released, reusable) pools for collateral, LIFO order (the LAST entry is popped first on the creator's next createMarket), straight from chain (BinaryMarketsModule.getFreePools). No signer needed; requires addresses.binaryModule.

Parameters

creator

`0x${string}`

collateral

`0x${string}`

Returns

Promise<`0x${string}`[]>


getPoolBindings()

getPoolBindings(pool): Promise<PoolBindingRecord[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1680

A pool's full pool→market binding history from the indexer, newest (highest nonce) first — every market the pool has served. A row with toBlock === null is the pool's CURRENT binding; closedBy says whether a past binding ended by PoolReleased ("Released") or by the next MarketCreated recycling the pool onward ("Rotated").

Parameters

pool

string

Returns

Promise<PoolBindingRecord[]>


getPool()

getPool(address): Promise<IndexedPool | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1687

The indexer's per-pool aggregate (creator, collateral, current binding, generation count) for a long-lived, recycled BinaryPool — null if the indexer has never seen a MarketCreated on that address.

Parameters

address

string

Returns

Promise<IndexedPool | null>


getErc20Balance()

getErc20Balance(token, account): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1693

ERC-20 balanceOf(account), raw units. For outcome positions use getOutcomeBalance (ERC-6909), not this.

Parameters

token

`0x${string}`

account

`0x${string}`

Returns

Promise<bigint>


getErc20Metadata()

getErc20Metadata(token): Promise<Erc20Metadata>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1699

ERC-20 symbol/name/decimals in one fan-out — label a token the indexer hasn't denormalized.

Parameters

token

`0x${string}`

Returns

Promise<Erc20Metadata>


getErc20Allowance()

getErc20Allowance(token, owner, spender): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1705

ERC-20 allowance(owner, spender), raw units — gate a write that pulls ERC-20 collateral (outcome tokens use per-operator approval instead).

Parameters

token

`0x${string}`

owner

`0x${string}`

spender

`0x${string}`

Returns

Promise<bigint>


getOutcomeBalance()

getOutcomeBalance(p): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1712

ERC-6909 balanceOf(account, id) on the outcome-token singleton, raw units. p.outcomeToken is the singleton (from getMarketOnchain); p.id is the market's yesId/noId.

Parameters

p

GetOutcomeBalanceParams

Returns

Promise<bigint>


getBalances()

getBalances(tokens, account): Promise<bigint[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1722

Batch-read many balances for one account in a single fan-out. Each entry is read as a plain ERC-20 balanceOf(account) when id is omitted, or as an ERC-6909 outcome position balanceOf(account, id) on the singleton token when id is set. Results are returned positionally, aligned to tokens. The explorer uses this to read a portfolio's collateral + outcome positions in one round-trip instead of N calls.

Parameters

tokens

readonly BalanceQuery[]

account

`0x${string}`

Returns

Promise<bigint[]>


getStopOrderSomiPayment()

getStopOrderSomiPayment(registry): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1728

SOMI a SpotStopOrderRegistry charges per pending stop order (funds the trigger gas; refunded on cancel). Raw wei.

Parameters

registry

`0x${string}`

Returns

Promise<bigint>


getMaxBuilderFeeBpsTimes1k()

getMaxBuilderFeeBpsTimes1k(pool): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1734

A pool's protocol-wide per-order builder-fee ceiling (pool bps×1000). Read-only — no signer — for the order form's routing-fee ceiling hint.

Parameters

pool

`0x${string}`

Returns

Promise<bigint>


getBuilderApproval()

getBuilderApproval(ref): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1737

A user's raw per-builder approval cap on a pool (pool bps×1000; 0 = none).

Parameters

ref

BuilderApprovalRef

Returns

Promise<bigint>


getEffectiveBuilderApproval()

getEffectiveBuilderApproval(ref): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1744

The ENFORCED per-builder approval on a pool: the user's raw cap clamped by the pool's protocol-wide ceiling — the limit a builderFeeBpsTimes1k must not exceed. Drives the order form's "approve builder first" gate.

Parameters

ref

BuilderApprovalRef

Returns

Promise<bigint>


getContractMeta()

getContractMeta(address, opts?): Promise<ContractMeta>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1750

owner / EIP-1967 implementation / native balance for a deployed contract — the /system dashboard diagnostics. proxy: true reads the impl slot.

Parameters

address

`0x${string}`

opts?
proxy?

boolean

Returns

Promise<ContractMeta>


getNativeBalance()

getNativeBalance(address): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1753

Native (SOMI/STT) balance, raw wei.

Parameters

address

`0x${string}`

Returns

Promise<bigint>


getHeadBlock()

getHeadBlock(): Promise<number>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1756

Latest block number as the RPC sees it.

Returns

Promise<number>


getSystemInfo()

getSystemInfo(): Promise<SystemInfo>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1762

Deployed protocol state (impl pointers, oracle, collateral) for ops dashboards. Needs config.addresses.

Returns

Promise<SystemInfo>


listOperators()

listOperators(opts?): Promise<IndexedOperator[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1773

List operators, newest-first by id, paginated. Pass owner to scope to one owner's operators (the indexed "my operators", no log scan), enabled to filter by the kill switch, limit/offset to page. Indexer read.

Parameters

opts?

OperatorFilter & object

Returns

Promise<IndexedOperator[]>


countOperators()

countOperators(opts?): Promise<number>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1779

Server-side COUNT of operators matching a filter (for directory pagination). Needs the privileged _aggregate role (server-only), like countBinaryMarkets.

Parameters

opts?

OperatorFilter

Returns

Promise<number>


getOperator()

getOperator(operatorId): Promise<IndexedOperator | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1781

One operator by id, or null if never registered. Indexer read.

Parameters

operatorId

number

Returns

Promise<IndexedOperator | null>


listVenues()

listVenues(opts?): Promise<IndexedVenue[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1786

List venues, creation-order, optionally scoped to one operator and/or market type and/or the venue-level creation flag. Paginated. Indexer read.

Parameters

opts?
operatorId?

number

marketType?

string

creationEnabled?

boolean

limit?

number

offset?

number

Returns

Promise<IndexedVenue[]>


countVenues()

countVenues(opts?): Promise<number>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1797

Server-side COUNT of venues matching a filter (for per-operator venue pagination). Needs the privileged _aggregate role (server-only).

Parameters

opts?
operatorId?

number

marketType?

string

Returns

Promise<number>


getVenue()

getVenue(venueId): Promise<IndexedVenue | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1799

One venue by its opaque bytes32 id, or null. Indexer read.

Parameters

venueId

string

Returns

Promise<IndexedVenue | null>


encodeBinaryVenueFeeParams()

encodeBinaryVenueFeeParams(vp): Promise<`0x${string}`>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1806

Build a BINARY_V1 venue's feeParams bytes from plain-bps rates via the deployed BinaryMarketsModule's encodeVenueFeeParams — the on-chain ground truth for the version tag + struct shape (used by the create/edit venue forms). Needs config.addresses.binaryModule.

Parameters

vp

BinaryVenueParams

Returns

Promise<`0x${string}`>


getMaxVenueFeeBps()

getMaxVenueFeeBps(): Promise<number>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1811

The module's protocol-level ceiling on any single venue fee rate, in plain bps (e.g. 1_000 = 10%). Needs config.addresses.binaryModule.

Returns

Promise<number>


listMarketCreators()

listMarketCreators(opts?): Promise<IndexedMarketCreator[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1825

List MarketCreators, newest-first, paginated. Pass owner for "my machinery", operatorId/venueId to scope. Each row carries its nested series. Indexer read.

Parameters

opts?

MarketCreatorFilter & object

Returns

Promise<IndexedMarketCreator[]>


getMarketCreator()

getMarketCreator(creator): Promise<IndexedMarketCreator | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1827

One MarketCreator by address (with its series), or null. Indexer read.

Parameters

creator

string

Returns

Promise<IndexedMarketCreator | null>


listOracleAdapters()

listOracleAdapters(opts?): Promise<IndexedOracleAdapter[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1834

List oracle adapters, newest-first, paginated. Pass owner to scope, approved to filter by the module-approval gate. Oracle v2: the one approved adapter is the OracleHub — this directory tracks AdapterApproved history. Indexer read.

Parameters

opts?
owner?

string

approved?

boolean

limit?

number

offset?

number

Returns

Promise<IndexedOracleAdapter[]>


getOracleAdapter()

getOracleAdapter(adapter): Promise<IndexedOracleAdapter | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1836

One oracle adapter by address, or null. Indexer read.

Parameters

adapter

string

Returns

Promise<IndexedOracleAdapter | null>


listSeries()

listSeries(opts?): Promise<IndexedSeries[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1838

List series, creation-order, optionally scoped to one creator. Indexer read.

Parameters

opts?
creator?

string

limit?

number

offset?

number

Returns

Promise<IndexedSeries[]>


getSchedulingCost()

getSchedulingCost(def): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1854

The hub's MARGINAL scheduling cost for def — 0 when an identical template definition is already scheduled (the call would dedup), the full oracle submission cost otherwise. Chain read; needs config.addresses.oracleHub.

Parameters

def

QuestionDefinitionInput

Returns

Promise<bigint>


earmarkedOf()

earmarkedOf(operatorId): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1859

Native LOCKED for an operator's outstanding markets (wei; never withdrawable). Chain read; needs config.addresses.oracleHub.

Parameters

operatorId

number

Returns

Promise<bigint>


creditOf()

creditOf(operatorId): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1864

An operator's accrued WITHDRAWABLE surplus credit on the hub (wei). Chain read; needs config.addresses.oracleHub.

Parameters

operatorId

number

Returns

Promise<bigint>


outstandingOf()

outstandingOf(operatorId): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1869

Count of an operator's bound-but-unresolved markets. Chain read; needs config.addresses.oracleHub.

Parameters

operatorId

number

Returns

Promise<bigint>


withdrawableOf()

withdrawableOf(operatorId): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1874

Wei an operator's owner may withdraw right now (== creditOf). Chain read; needs config.addresses.oracleHub.

Parameters

operatorId

number

Returns

Promise<bigint>


payerCreditOf()

payerCreditOf(payer): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1881

A1: the withdrawable surplus credited to a reserve-PAYER (an open-venue creator, or the autonomous MarketCreator on its rolls) rather than the operator; drawn by that account via createOracleHubAdmin().withdrawMyCredit. Chain read; needs config.addresses.oracleHub.

Parameters

payer

`0x${string}`

Returns

Promise<bigint>


payerOf()

payerOf(marketId): Promise<`0x${string}`>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1886

A1: the reserve-payer recorded for a market at onBind (surplus recipient); zero-address once settled + swept. Chain read; needs config.addresses.oracleHub.

Parameters

marketId

`0x${string}`

Returns

Promise<`0x${string}`>


resolveReserve()

resolveReserve(): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1891

The hub's resolveReserve() — the per-market reserve attached+locked at onBind (wei). Chain read; needs config.addresses.oracleHub.

Returns

Promise<bigint>


quoteCreateMarketValue()

quoteCreateMarketValue(def): Promise<bigint>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1898

THE §8e create-market value quote: getSchedulingCost(def) + resolveReserve() (the reserve is attached to the create). Attach exactly this to scheduleAndCreateMarket (excess refunds). Chain read; needs config.addresses.oracleHub.

Parameters

def

QuestionDefinitionInput

Returns

Promise<bigint>


getOracleQuestion()

getOracleQuestion(oracleQuestionId): Promise<OracleQuestionRecord | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1903

One hub-scheduled oracle question (dedup key, scheduler, bind count) by its oracleQuestionId, or null. Indexer read.

Parameters

oracleQuestionId

string

Returns

Promise<OracleQuestionRecord | null>


listOracleQuestions()

listOracleQuestions(opts?): Promise<OracleQuestionRecord[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1908

Hub-scheduled questions, newest first — filter by scheduler / questionKey, paginate. Indexer read.

Parameters

opts?
scheduler?

string

questionKey?

string

limit?

number

offset?

number

Returns

Promise<OracleQuestionRecord[]>


getOperatorHubAccount()

getOperatorHubAccount(operatorId): Promise<OperatorHubAccountRecord | null>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1915

One operator's hub account (earmarked / credit / outstanding) by operatorId, or null. Indexer read.

Parameters

operatorId

string | number

Returns

Promise<OperatorHubAccountRecord | null>


listOperatorHubAccounts()

listOperatorHubAccounts(opts?): Promise<OperatorHubAccountRecord[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1920

Operator hub-account records, most-recently-updated first, paginated. Indexer read.

Parameters

opts?
limit?

number

offset?

number

Returns

Promise<OperatorHubAccountRecord[]>


listOracleBinds()

listOracleBinds(opts?): Promise<OracleBindRecord[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1928

Bind records (operator attribution → exact metered resolve charge + subsidy per market, §8e), newest first — filter by operatorId / oracleQuestionId / resolved, paginate. Indexer read.

Parameters

opts?
operatorId?

number

oracleQuestionId?

string

resolved?

boolean

limit?

number

offset?

number

Returns

Promise<OracleBindRecord[]>


listOracleCallbacks()

listOracleCallbacks(opts?): Promise<OracleCallbackRecord[]>

Defined in: packages/sdk/src/somniaMarketsClient.ts:1936

Resolution-callback conservation records (CallbackAccounted), newest first, paginated (a callback drains across many questions, so no per-question filter). Indexer read.

Parameters

opts?
limit?

number

offset?

number

Returns

Promise<OracleCallbackRecord[]>


createTrader()

createTrader(traderConfig): Trader

Defined in: packages/sdk/src/somniaMarketsClient.ts:1952

Build a Trader bound to a signer and this client's chain, store, and socket. With a privateKey/local account the trader signs locally (fixed fees, locally-tracked nonce — zero pre-send RPCs) and confirms in one round-trip via realtime_sendRawTransaction; with a browser walletClient it sends through the wallet and confirms off the newHeads subscription. Every write resolves only once mined, with its receipt.

Parameters

traderConfig

TraderConfig

Returns

Trader


createOperatorAdmin()

createOperatorAdmin(config): OperatorAdmin

Defined in: packages/sdk/src/somniaMarketsClient.ts:1959

Build an OperatorAdmin bound to a signer — registers/updates operators and creates/updates venues on MarketsCore. Same signer doctrine as createTrader (privateKey/local account, or a browser walletClient).

Parameters

config

OperatorAdminConfig

Returns

OperatorAdmin


createOracleHubAdmin()

createOracleHubAdmin(config): OracleHubAdmin

Defined in: packages/sdk/src/somniaMarketsClient.ts:1970

Build an OracleHubAdmin bound to a signer — the OracleHub surface (Oracle v2 §8e): quote reads (quoteCreateMarketValue = the §8e create value = scheduling cost + resolveReserve), the credit-only withdraw (owner-gated — draws accrued surplus credit only), and the protocol-admin writes (fundHub, gas + drain params, enableReactivity/migrateSubscription — precompile, testnet/mainnet only). Same signer doctrine as createOperatorAdmin. Needs config.addresses.oracleHub.

Parameters

config

OracleHubAdminConfig

Returns

OracleHubAdmin


createGovernanceAdmin()

createGovernanceAdmin(config): GovernanceAdmin

Defined in: packages/sdk/src/somniaMarketsClient.ts:1978

Build a GovernanceAdmin bound to a signer — the protocol-admin-only surface that approves oracle adapters on the module (setAdapterApproved; in Oracle v2 the ONE approved adapter is the OracleHub — deploy wiring + emergency revoke). Gate its UI on GovernanceAdmin.isModuleOwner.

Parameters

config

OracleHubAdminConfig

Returns

GovernanceAdmin


createMarketCreatorAdmin()

createMarketCreatorAdmin(config): MarketCreatorAdmin

Defined in: packages/sdk/src/somniaMarketsClient.ts:1985

Build a MarketCreatorAdmin bound to a signer — stamps MarketCreators (+ policies) from the factory, registers rolling series under them, funds them, and triggers rolls. Same signer doctrine as createOperatorAdmin.

Parameters

config

OracleHubAdminConfig

Returns

MarketCreatorAdmin