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
| Field | Value |
|---|---|
| name | Toro Trade |
| version | 1 |
| chainId | 998 |
| verifyingContract | 0xf889024Ab481AA9BB9F423e6E2AB734645a6C61A |
Actions
Intent(address account, uint8 action, uint32 marketId, bool isLong, uint256 margin,
uint16 leverage, uint256 priceBound, uint256 positionId, uint256 nonce, uint64 deadline)| Action | Signer | Who may submit |
|---|---|---|
| OPEN, CLOSE, CANCEL | wallet or session key | relayer (CANCEL: anyone) |
| DEPOSIT (with permit) | wallet | relayer |
| STAKE, UNSTAKE, CLAIM | wallet | relayer |
| WITHDRAW | wallet | anyone; pays only to the account |
| Session key register / revoke | wallet | anyone |
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