Référence développeurs
EIP-712
Les données typées exactes que vérifient les contrats et le relayer. Les chaînes de type et les hashes proviennent des constantes exportées par les contrats et sont comparés aux définitions TypeScript à la compilation.
Types
| Type | Domaine | Signataire | Vérifié on-chain |
|---|---|---|---|
OpenPosition | exchange | portefeuille ou clé de session | oui |
Chaîne du type OpenPosition(address user,uint32 instrumentId,bool isLong,uint128 size,uint32 leverage,bool useDebt,uint256 nonce,uint64 deadline)Typehash 0xfce2fb41f9ff0457a0f012e62cfd6a7cff4e8439ae20008ab6979c740ba5a983 | |||
Close | exchange | portefeuille ou clé de session | oui |
Chaîne du type Close(address user,uint256[] positionIds,uint256 nonce,uint64 deadline)Typehash 0x9cc23a52214afa42e1ae53cdb2e79dc2d0cd33c33faca383ed3b149300adcb13 | |||
WithdrawToCore | exchange | portefeuille uniquement | oui |
Chaîne du type WithdrawToCore(address user,uint256 amount,uint256 nonce,uint64 deadline)Typehash 0xac4ddb8d63e9d7a862c5d61ce47517623a448262414a7eef6797102104b31214 | |||
RegisterSessionKey | exchange | portefeuille uniquement | oui |
Chaîne du type RegisterSessionKey(address user,address key,uint64 expiry,address feeAddress,uint256 nonce,uint64 deadline)Typehash 0xd3d9a309f635415423ab81e7e3fb16d2117cc8e1edc90506adde9eaa3855edd2 | |||
RegisterSessionKeyV2 | exchange | portefeuille uniquement | oui |
Chaîne du type RegisterSessionKeyV2(address user,address key,uint64 expiry,address feeAddress,uint64 maxBuilderFee,address referrer,uint256 nonce,uint64 deadline)Typehash 0x768549c4ec62ba892ffe75fc24ce07bdbe7e6b6f0f359e49248461f08920a885 | |||
RevokeSessionKeys | exchange | portefeuille uniquement | oui |
Chaîne du type RevokeSessionKeys(address user,address[] keys,bool all,uint256 nonce,uint64 deadline)Typehash 0x01026316a272dd97577cb59b037b3a0753aaf9bb1e3e933c358f48655bc6f9a0 | |||
Stake | staking | portefeuille uniquement | oui |
Chaîne du type Stake(address user,uint256 amount,uint256 nonce,uint64 deadline)Typehash 0x0e9469f2731f138fe05733a3ab1961961d9def010d73419c3f5b55ae6d64e8b0 | |||
Unstake | staking | portefeuille uniquement | oui |
Chaîne du type Unstake(address user,uint256 amount,uint256 nonce,uint64 deadline)Typehash 0x1ecc9b0f79f4bb74abad4adb49babe57570219b3bc83a569a9b25299f833a9ce | |||
Claim | staking | portefeuille uniquement | oui |
Chaîne du type Claim(address user,uint256 nonce,uint64 deadline)Typehash 0x98df9450683706f5e3c8e5a81515893081ae7460248fbba60c7781957adc9f8f | |||
Distribute | staking | portefeuille uniquement | oui |
Chaîne du type Distribute(address user,uint256 nonce,uint64 deadline)Typehash 0x23f3bc470a64f8283203a55adc575bcd5f81b7c537b6831c6886e4a0e2101e5a | |||
CancelIntent | cancel | portefeuille ou clé de session | non (relayer uniquement) |
Chaîne du type CancelIntent(address user,bytes32 intentId,uint256 deadline)Typehash 0xa35cd971369839445ca1bec7da15d6528a097bd9c3d0ebaf7d5d4f368f537b71 | |||
Domaines EIP-712: Mainnet · Chain id 999
Bientôt disponible : publié ici dès que les contrats seront déployés sur ce réseau.
Domaines
Trois domaines servent à tout signer :
- Exchange : le contrat vérificateur est le proxy de l’Exchange. Trading, retraits et clés de session. Le SessionKeyManager vérifie ces signatures pour l’Exchange.
- Staking : le contrat vérificateur est le proxy de Staking. Staking, déstaking, réclamation et distribution.
- Cancel : le contrat vérificateur est le proxy de l’Exchange, avec son propre nom. Seul le relayer le vérifie ; aucun contrat ne le fait.
Les trois utilisent le domaine complet à quatre champs (name, version, chainId, verifyingContract). Les deux contrats exposent leur domaine via eip712Domain() d’ERC-5267.
Nonces et échéances
Les nonces ne sont pas ordonnés : chaque compte a un bitmap, et un nonce n utilise le bit n mod 256 du mot n / 256. N’importe quel nonce inutilisé fonctionne, dans n’importe quel ordre. Un nonce peut être brûlé on-chain sans rien signer, en appelant invalidateUnorderedNonces(word, mask) depuis le portefeuille.
Les clients signent des échéances à 1 heure ; le relayer accepte des échéances jusqu’à 61 minutes.
Format de transport
Sur le réseau, chaque champ entier est une chaîne décimale canonique, et chaque adresse et chaque hash est en hexadécimal minuscule ; la signature voyage sous la forme v, r, s à côté des champs du message. Les signatures à s élevé sont rejetées.
Identifiants d’intention
Le relayer identifie chaque message signé par
intentId = keccak256( keccak256(utf8(intentIdTag)) ‖ digest ‖ signer )
empaqueté sans remplissage : le hash du tag, sur 32 octets, le digest EIP-712, sur 32 octets, et le signataire récupéré, sur 20 octets (la clé de session pour les messages qu’elle signe). Le tag de chaque réseau est listé sur la page Adresses des contrats. Les octets de la signature ne font pas partie de l’identifiant, si bien qu’une signature altérée par malléabilité ne peut pas produire un nouvel identifiant.