Aller au contenu
ecdsa.com

EIP-712 (signature de données typées et structurées)

Le standard Ethereum de hachage et de signature de données typées et structurées avec un séparateur de domaine, qui permet aux portefeuilles d’afficher les champs aux utilisateurs et empêche de rejouer les signatures d’un contrat ou d’une chaîne à l’autre.
Autres graphiesEIP-712eth_signTypedData_v4typed datadomain separator

Le condensat est keccak256(0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message)). hashStruct hache un condensat de type (le Keccak-256 d’une chaîne de type canonique telle que Mail(address from,address to,string contents)) avec les champs encodés ; les chaînes, les tableaux d’octets et les tableaux sont hachés, les structures imbriquées sont hachées récursivement. Le séparateur de domaine est hashStruct(EIP712Domain) avec name, version, chainId, verifyingContract et, en option, salt ; le condensat de type du domaine usuel à quatre champs est 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f.

Les portefeuilles l’invoquent via eth_signTypedData_v4. Il sous-tend permit d’EIP-2612, Permit2 d’Uniswap, les hash de transaction Safe, les carnets d’ordres, les relais sans frais de gaz et de nombreux systèmes de gouvernance. Une signature de données typées ne vaut que ce que l’utilisateur a compris : les signatures permit hors chaîne qui accordent des montants autorisés illimités sont l’une des principales techniques d’hameçonnage.

Bugs courants : une chaîne de type qui ne correspond pas exactement à la structure, un chainId ou un verifyingContract manquant ou erroné, et des signatures acceptées deux fois parce que le contrat ne stocke aucun nonce. L’inspecteur EIP-712 recalcule localement chaque condensat.

Normes et références

Tous les termes