Saltar al contenido
ecdsa.com

EIP-712 (firma de datos estructurados tipados)

El estándar de Ethereum para calcular el hash de datos estructurados tipados y firmarlos con un separador de dominio, de modo que las billeteras puedan mostrar los campos a los usuarios y las firmas no puedan repetirse entre contratos ni cadenas.
También se escribeEIP-712eth_signTypedData_v4typed datadomain separator

El resumen es keccak256(0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message)). hashStruct calcula el hash de un hash de tipo (el Keccak-256 de una cadena de tipo canónica, como Mail(address from,address to,string contents)) junto con los campos codificados; las cadenas, los bytes y los arrays se sustituyen por su hash, y el hash de las estructuras anidadas se calcula de forma recursiva. El separador de dominio es hashStruct(EIP712Domain) con name, version, chainId, verifyingContract y, opcionalmente, salt; el hash de tipo del dominio habitual de cuatro campos es 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f.

Las billeteras lo invocan mediante eth_signTypedData_v4. Es la base de permit de EIP-2612, Permit2 de Uniswap, los hashes de transacción de Safe, los libros de órdenes, los relayers sin gas y muchos sistemas de gobernanza. Una firma de datos tipados solo es tan segura como lo que el usuario entendió: las firmas permit fuera de la cadena que conceden límites de gasto ilimitados son una de las principales técnicas de phishing.

Errores habituales: una cadena de tipo que no coincide exactamente con la estructura, un chainId o un verifyingContract ausente o incorrecto, y firmas aceptadas dos veces porque el contrato no guarda ningún nonce. El inspector de EIP-712 vuelve a calcular cada hash localmente.

Estándares y referencias

Todos los términos