Kuru
Status
IN PROGRESSTwo facts, kept apart. Kuru itself is live on Monad mainnet and testnet: its docs publish contract addresses for both networks, and the monad-crypto protocols registry lists it live on both. Vessel routing through Kuru is not live: no deployed Vessel route is publicly verifiable, and no transaction shows a Vessel fill on a Kuru market. A LIVE tier requires exactly that transaction link, so the integration is in progress. As of 2026-08-29.
What Vessel uses it for
Vessel is long spot and short the equivalent notional on a perp CLOB. The spot leg is the long side. It is entered when the book is opened, trimmed or added to on every rebalance (on a delta band breach of 1% of gross notional, or on the 4-hour timer), and unwound when the engine de-risks.
A central limit order book gives that leg limit-price control on entry and exit. An AMM curve cannot: a swap against a curve takes whatever price the curve is at, bounded only by a slippage parameter. On a CLOB the engine can post a resting order at a chosen price, or cross the book with an explicit _minOut, and the fill either happens at or better than that price or does not happen.
Kuru describes itself as "a fully onchain order book decentralized exchange (DEX) and smart aggregator built on Monad," a hybrid CLOB-AMM. It publishes two surfaces that matter here:
- The raw OrderBook contracts, one per market.
- Kuru Flow, the routing engine, which "aggregates liquidity across all available markets on Monad… swap from any token to any token through a single interface. Integrators can also add their own fees on top."
Whether Vessel will call the raw book or route through Flow is not yet decided publicly. This page documents both surfaces until it is.
What is actually wired today
Nothing verifiable. The Vessel repository at github.com/Lemma-Development-Labs/vessel contains only a README and a LICENSE as of 2026-08-29: no contracts, no ABIs, no deployment addresses. The litepaper names Kuru as the spot venue alongside Uniswap-style routing, which is the extent of the public record.
The spot leg on the deployed testnet contracts is served today by the V2-interface router path described on Routers. The Kuru adapter name, its branch, and its target market are not published UNVERIFIED — PENDING GATE-0.
Interface
The OrderBook entry points, verbatim from the Kuru docs:
// Resting orders. _price and _size are in the market's tick and lot units.
function addBuyOrder(uint32 _price, uint96 _size, bool _postOnly) external;
function addSellOrder(uint32 _price, uint96 _size, bool _postOnly) external;
// Crossing orders. _minOut bounds the fill; _isFOK rejects partial fills.
function placeAndExecuteMarketBuy(
uint96 _quoteSize,
uint96 _minOut,
bool _isMargin,
bool _isFOK
) external payable;
function placeAndExecuteMarketSell(
uint96 _size,
uint96 _minOut,
bool _isMargin,
bool _isFOK
) external payable;
// Cancels resting orders by id.
function batchCancelOrders(uint40[] _orderIds) external;
The comments are ours; the signatures are Kuru's. Full semantics, including the _isMargin path through MarginAccount, are on the OrderBook page. The Kuru Flow interface is documented separately at Flow overview; its calldata shape is not reproduced here because Vessel has not committed to it.
Addresses
These are Kuru's addresses, from the Kuru contract-addresses page, cross-checked against the monad-crypto protocols registry. None of them is a Vessel contract.
| Contract (mainnet) | Address | Actions |
|---|---|---|
| KuruFlowEntrypoint | 0xb3e6778480b2E488385E8205eA05E20060B813cb | Explorer ↗ |
| Router (market factory) | 0xd651346d7c789536ebf06dc72aE3C8502cd695CC | Explorer ↗ |
| MarginAccount | 0x2A68ba1833cDf93fa9Da1EEbd7F46242aD8E90c5 | Explorer ↗ |
| Market MON-USDC | 0x065C9d28E428A0db40191a54d33d5b7c71a9C394 | Explorer ↗ |
| Market MON-AUSD | 0x131a2e70a5b31a517a74b8c567149bc294470da9 | Explorer ↗ |
The address 0x0d3a1BE29E9dEd63c7a5678b31e847D68F71FFa2 is labelled "KuruFlowRouter" on the Kuru docs page but "KuruFlowRouterV2" in the monad-crypto registry, whose plain "KuruFlowRouter" entry is 0x465D06d4521ae9Ce724E0c182Daad5D8a2Ff7040. Both sources are official for their own scope. Neither router is listed in the table above until the label is settled; the entrypoint is the documented integration surface either way.
| Contract (testnet) | Address | Actions |
|---|---|---|
| Router (market factory) | 0x7EFbE105Ca7415dE98F96622173458ac1c054630 | Explorer ↗ |
| MarginAccount | 0xd029C2D98ff85D8F64799017fE00a59B1159CE02 | Explorer ↗ |
| Market MON-USDC | 0xa241896A7Dbe8a550D2E5fF7A914bB1989ceD2D9 | Explorer ↗ |
The Vessel-side adapter address, on either network, is unpublished UNVERIFIED — PENDING GATE-0.
Verify it yourself
Open any Explorer link in the tables above. Each address has bytecode and a transaction history on monadscan.com or testnet.monadscan.com; that is the evidence that Kuru is live.
To confirm code presence from a terminal:
# mainnet MON-USDC market
cast code 0x065C9d28E428A0db40191a54d33d5b7c71a9C394 --rpc-url https://rpc.monad.xyz
# testnet MON-USDC market
cast code 0xa241896A7Dbe8a550D2E5fF7A914bB1989ceD2D9 --rpc-url https://testnet-rpc.monad.xyz
A non-empty result means the contract exists. It says nothing about Vessel.
When the Vessel route ships, Vessel fills will be checkable on those same market pages: a transaction from the Vessel adapter calling placeAndExecuteMarketBuy, placeAndExecuteMarketSell, or one of the resting-order functions. Today there are none. If you find a transaction on a Kuru market that claims to be Vessel's, it is not, until this page links it.
Failure mode
If the Kuru book is unavailable, whether the market is paused, the contracts are upgraded, or liquidity on the pair thins out below what the engine will cross, the spot leg cannot rebalance at limit prices.
The fallback is the V2-interface router path on Routers, with wider slippage bounds. That trades price control for execution certainty: the leg still rebalances, but at whatever the curve gives inside the bound. The cost shows up as a worse fill, absorbed by the accrual waterfall like any other execution cost, Ballast first.
If both paths fail persistently, the spot leg cannot be adjusted while the short leg's mark keeps moving, and net delta drifts beyond the 1% band. The engine's response to a band breach it cannot close is to de-risk: reduce gross notional on the side it can still move, never add leverage. Hull principal is not touched by execution drift; it is impaired only after Ballast NAV and the Reserve are exhausted.
What the fallback thresholds are, in slippage basis points and in time before de-risking triggers, is not published UNVERIFIED — PENDING GATE-0.
Links
- kuru.io — site
- docs.kuru.io — documentation
- Contract addresses
- OrderBook reference
- Kuru Flow overview
- Kuru-Labs on GitHub
- @KuruExchange on X
- monad-crypto/protocols registry
No official Kuru brand assets are published; the wordmark on the integrations index is text.