Skip to content

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 = INVALID for this action until the trader calls updateAgentPermissions. Agents authorized with the type(uint256).max wildcard 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)
AuthorizationSeparate OneClickAgent contractBuilt into the Diamond — verifyingContract is the Diamond address
OperationsOpen and close only14 actions
EIP-712 structBusiness fields expanded per actionSeven shared fields plus actionDataHash
Replay protectionsaltMillisecond nonce, strictly increasing, time-windowed
PermissionsAll or nothingPer-action bitmask
EndpointPOST /v1/trading/send-open-position-v2POST /v2/trading/submit-intent
Execution feeNonePer-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:

OldNew
OpenMarketTradeOpenPosition (new slot) or PositionIncreased (existing slot)
CloseTradeSuccessfulClosePosition, 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:

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.

Trading perpetuals involves risk. Nothing here is financial advice.