Account
Update margin mode
Changed onSwitch between cross and isolated margin mode for a market. Gas sponsored by API service.
Permit: Client signs an EIP-712 VerifyWitness permit; the server recovers the signer off-chain and matches it to permit_params.signer (server holds no keys).
Prerequisites:
- GET /v1/auth/eip712-domain — EIP-712 domain (name, version, chainId, verifyingContract = Authorization contract)
- GET /v1/nonce-state/{account} — nonce_anchor and current_bitmap_index (pass it as permit_params.nonce_bitmap_index; if 208 the anchor is full — use nonce_anchor+1 with bitmap index 0)
- GET /v1/system/config — router address (RISExUniversalRouter), used as the target field below
Action hash: (marginMode: 0 = Cross, 1 = Isolated)
actionHash = keccak256(abi.encode(
keccak256("RISE_PERPS_UPDATE_MARGIN_MODE_V1"), // bytes32 action selector
uint16(marketId),
uint8(marginMode)))
Permit digest (EIP-712):
VerifyWitness(address account,address target,bytes32 hash,uint48 nonceAnchor,uint8 nonceBitmap,uint32 deadline)
Sign as standard EIP-712 typed data (e.g. ethers signTypedData) with hash = actionHash, target = RISExUniversalRouter address (NOT the account, NOT the domain verifyingContract), nonceBitmap = permit_params.nonce_bitmap_index.
Signature: 64-byte EIP-2098 compact (r + yParityAndS) or 65-byte (r+s+v, auto-converted).
post/v1/account/margin-mode
Request
- Base URLhttps://api.testnet.rise.trade
- Authnone required
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Request body
Example request
{
"permit_params": {
"account": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"signer": "0x1234567890123456789012345678901234567890",
"nonce_anchor": "0"
}
}Response
A successful response.
Changes
- info
endpoint added
- info