Changelog
Notable changes to the integration surface.
2026-08 — LVMONMinter documented
The mainnet LVMONMinter converts native MON or WMON into LVMON. Calls are permissioned by caller address and go to the standalone minter contract, not the Diamond.
2026-07 — CANCEL_ALL_DECREASE_ORDERS (1CT action 13)
The onchain cancelAllDecreaseOrders(positionHash) now has a gasless counterpart: CANCEL_ALL_DECREASE_ORDERS, action 13, signed under OneClickCancelAllDecreaseOrders with actionData of a single bytes32 positionHash. It clears every take-profit leg and the stop-loss on a position in one intent, and charges no fee.
Two things to check if you already have a 1CT integration:
- Agents authorized with an explicit permission bitmask do not have bit 13. They will keep getting
skipReason = INVALIDfor this action until the trader callsupdateAgentPermissions. Agents authorized with thetype(uint256).maxwildcard pick it up automatically. - Action validation widened to
[0, 13]. If you mirror the relayer's range check client-side, update it.
2026-07 — Documentation rewrite
The documentation was restructured around three integration paths — onchain, gasless, and REST API — and rewritten against the current contracts and services.
If you built against the previous version of these docs, the following changed.
One-Click Trading is now V2
The previous documentation described the V1 flow. V2 is a different protocol; a V1-shaped request will not produce a valid signature.
| Previous docs (V1) | Current (V2) | |
|---|---|---|
| Authorization | Separate OneClickAgent contract | Built into the Diamond — verifyingContract is the Diamond address |
| Operations | Open and close only | 14 actions |
| EIP-712 struct | Business fields expanded per action | Seven shared fields plus actionDataHash |
| Replay protection | salt | Millisecond nonce, strictly increasing, time-windowed |
| Permissions | All or nothing | Per-action bitmask |
| Endpoint | POST /v1/trading/send-open-position-v2 | POST /v2/trading/submit-intent |
| Execution fee | None | Per-action ERC-20 fee |
Migrating means rewriting the signing layer, not adjusting it. Start at Signing Intents.
Trading events renamed
OpenMarketTrade no longer exists. Market and limit opens now emit:
| Old | New |
|---|---|
OpenMarketTrade | OpenPosition (new slot) or PositionIncreased (existing slot) |
CloseTradeSuccessful | ClosePosition, or PositionDecreased for a partial close |
The old close events are retained for positions created before the merged-position upgrade. See Events.
getPositionsV2 superseded by getPositionsV4
getPositionsV2 still exists but its Position struct gained an earliestCloseTime field — an ABI copied from the older documentation decodes incorrectly. Use getPositionsV4, which also exposes accruedFundingFee and accruedHoldingFee.
Positions are merged per market
A position is now a slot keyed by (user, pairBase, isLong, lvToken) rather than one object per trade. Opening the same market twice blends into one position. See Core Concepts.
Newly documented operations
These existed but were not covered previously:
- Partial close
- Add and remove margin
- Update a position's TP/SL
- TP/SL orders — multiple partial take-profit legs per position
- Market info and pair configuration reads
Code samples
Samples previously imported a monad chain object from viem/chains, which does not exist. Define the chain with defineChain — see Networks & Contracts.
Testnet removed
The documentation covers Monad mainnet only.
Trading pairs are no longer listed inline
Pair addresses moved out of the docs and into GET /v1/pairs. Hardcoded addresses go stale as markets are listed and delisted.