Monaco Protocol SDK v1.0.16
This release adds exact tier-resolved fee rates to fee simulation and deprecates the integer/flat fee-bps fields, adds an optional Cloudflare Turnstile token to the faucet, and corrects the HTTP status returned when the matching engine rejects an order-management request. It rolls up the consumer-facing changes shipped since v1.0.7.Added
Exact tier fee rates on fee simulation
fees.simulateFees — GET /api/v1/fees/simulate and gRPC FeesService.SimulateFees — now returns two decimal basis-points strings alongside the existing fields:
Fee tiers are per-user and fractional. An integer field cannot represent a rate like
6.5, so these string fields carry the exact rate the ledger applies. Prefer them for any fee display or reconciliation.
Optional faucet captcha token
sdk.faucet.mint() accepts an optional turnstileToken (Cloudflare Turnstile). It maps to the REST request-body field turnstileToken and gRPC MintTokensRequest.turnstile_token. Omitting it keeps today’s behavior; a valid token becomes required once the gateway enables faucet captcha enforcement.
Changed
Order-management endpoints return the correct HTTP status on rejection
Place, cancel, replace, and batch order endpoints (including conditional orders) now map matching-engine client-fault rejections to their proper HTTP status instead of surfacing them as500 Internal Server Error. For example, an invalid TP/SL trigger price now returns 400.
Genuine matching-engine faults still return
500. Client code that treated every order rejection as a 500 should branch on the specific status.
Rust REST SDK builds on native-tls
The publishedmonaco-sdk crate now builds its reqwest HTTP client on native-tls instead of rustls, matching the rest of the Monaco workspace. Consumers on platforms without a system TLS library — for example static musl builds — now need OpenSSL available at build time.
Deprecated
Integer and flat fee-bps fields
The following fields are deprecated because they echo the pre-tiered, pair-level rate rather than the caller’s per-user tiered fee:monacoTakerFeeBps/monacoMakerRebateBps(integer) on the fee-simulation responsemakerFeeBps/takerFeeBps(flat) on the trading-pair and account responses
monacoTakerFeeBpsExact / monacoMakerRebateBpsExact, or GET /api/v1/fees/tier / fees.getMyFeeTier, for the caller’s real rate. The deprecated fields remain populated for backward compatibility.
Upgrade
monacoTakerFeeBps / monacoMakerRebateBps or the flat makerFeeBps / takerFeeBps, migrate to the exact fields (or getMyFeeTier) to display the tier-resolved rate. If you handle order-rejection errors by HTTP status, branch on the specific 4xx codes above instead of assuming 500.
