Monaco Protocol SDK v0.8.11
This release adds life-to-date market statistics, asset-class categorisation on trading pairs, and direct deposit routing into margin collateral. It also removes the deprecatedCreateConditionalOrder gRPC RPC and fixes a scoping bug in parent-account collateral transfers.
Removed
CreateConditionalOrder gRPC RPC removed
The deprecated CreateConditionalOrder RPC and its CreateConditionalOrderRequest / CreateConditionalOrderResponse messages are removed from monaco.api.orders.OrdersService. The method had been returning FAILED_PRECONDITION since standalone conditional TP/SL creation was deprecated in v0.8.7. The Rust gRPC SDK drops the generated create_conditional_order client method and the associated types.
Migration: attach TP/SL at order placement via CreateOrder, or use AttachPositionTpSl / sdk.positions.attachPositionTpSl(...). Listing and cancelling conditional orders are unchanged.
Added
Asset-class category on trading pairs
Every trading pair now carries a category field indicating its asset class: "crypto", "equities", or "commodities".
Affected surfaces:
TradingPair(returned byGET /api/v1/market/pairs,GET /api/v1/market/pairs/{trading_pair_id}, and gRPCListTradingPairs/GetTradingPair) gainscategory: string.ScreenerItem(returned byGET /api/v1/market/screener/GetScreener) gainscategory: string.ListTradingPairsRequestandGetScreenerRequestaccept an optionalcategoryfilter. Invalid values return 400.
crypto by default; known equity/RWA markets (NVDA, SPX, AMZN, GOOG, META, TSLA, SPCX) as equities. The field is always present and never null.
Life-to-date market statistics
NewGET /api/v1/market/stats (no auth) returns exchange-wide cumulative statistics:
MarketMetadata(getMarketMetadata) gainstotal_base_volume_ltd,total_quote_volume_ltd(decimal strings), andtotal_trade_count_ltd(number).ScreenerItem(getScreener) gainstotal_quote_volume_ltd(decimal string) andtotal_trade_count_ltd(number).
"0" / 0, never null. The global endpoint omits base volume intentionally — base quantities are not comparable across different base assets.
Direct deposit to margin collateral
vault.deposit() accepts an optional target parameter to route an on-chain deposit straight into margin collateral, skipping the separate transferCollateralToAutoMarginAccount step:
target is "spot" (default) or "margin". Deposits that cannot be routed to margin (unsupported asset, etc.) fall back to spot automatically.
The encoding is handled by the new encodeDepositApplicationData() helper — spot deposits remain byte-identical to before, so existing integrations are unaffected.
The MCP vault_deposit tool accepts the same optional target input.
Fixed
Parent margin account collateral transfers now correctly scope to parent
marginAccounts.transferCollateralToMarginAccount(parentMarginAccountId, { asset, amount }) and transferCollateralFromMarginAccount(parentMarginAccountId, { asset, amount }) now stay scoped to the parent account when tradingPairId is omitted, even when an active cross-margin bucket exists. Previously the REST API could route a parent-level transfer into an active cross bucket.
Transfer-out from the parent also now correctly honors live collateral when there is a temporary projection lag, instead of rejecting it as isolated bucket collateral.
getAvailableCollateral returns parent account free collateral
marginAccounts.getAvailableCollateral({ asset }) previously returned 0 for the parent account in certain configurations. It now correctly surfaces the parent margin account’s free collateral alongside the bound asset balance.

