Toro Trade

Toro additions

Gasless intents

Every user action has an EIP-712 message. You sign it, the relayer pays the gas, and the IntentRouter checks the signature on chain before anything moves. Direct calls stay available.

Domain

FieldValue
nameToro Trade
version1
chainId998
verifyingContract0xf889024Ab481AA9BB9F423e6E2AB734645a6C61A

Actions

Intent(address account, uint8 action, uint32 marketId, bool isLong, uint256 margin,
       uint16 leverage, uint256 priceBound, uint256 positionId, uint256 nonce, uint64 deadline)
ActionSignerWho may submit
OPEN, CLOSE, CANCELwallet or session keyrelayer (CANCEL: anyone)
DEPOSIT (with permit)walletrelayer
STAKE, UNSTAKE, CLAIMwalletrelayer
WITHDRAWwalletanyone; pays only to the account
Session key register / revokewalletanyone

The target’s message types (OpenPosition, Close, WithdrawToCore, Stake, Unstake, Claim, RegisterSessionKey) are accepted too, so existing bots can switch with an endpoint change.

Nonces and deadlines

Nonces are unordered and single use, so intents never block each other. Each intent expires after its deadline (the SDK uses 60 minutes). A CANCEL burns a nonce before the relayer uses it.

Submitting

POST /api/v1/intents   { action, signed: { …message fields, v, r, s } }
→ { action, intentId, state }   // state: queued | prepared | confirmed | failed | …

@toro/sdk builds, signs and serialises every message (toro.sign.*, toWire).

Values on this page are read from the HyperEVM testnet deployment (chain 998, block 67249403) at build time.

Last updated 2026-10-18