Zum Inhalt springen
ecdsa.com

EIP-712 (Signieren typisierter Daten)

Der Ethereum-Standard zum Hashen und Signieren typisierter, strukturierter Daten mit einem Domain Separator, damit Wallets Nutzern die Felder anzeigen können und sich Signaturen nicht in anderen Contracts oder auf anderen Chains erneut verwenden lassen.
Auch geschrieben alsEIP-712eth_signTypedData_v4typed datadomain separator

Der Digest ist keccak256(0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message)). hashStruct hasht einen Typ-Hash (den Keccak-256-Hash eines kanonischen Typ-Strings wie Mail(address from,address to,string contents)) zusammen mit den kodierten Feldern; Strings, Bytes und Arrays werden gehasht, verschachtelte Structs rekursiv. Der Domain Separator ist hashStruct(EIP712Domain) mit name, version, chainId, verifyingContract und optional salt; der Typ-Hash der üblichen Domain mit vier Feldern lautet 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f.

Wallets rufen EIP-712 über eth_signTypedData_v4 auf. Darauf bauen permit nach EIP-2612, Uniswap Permit2, Transaktions-Hashes von Safe, Orderbücher, Relayer für gaslose Transaktionen und viele Governance-Systeme auf. Eine Typed-Data-Signatur ist nur so sicher wie das, was der Nutzer davon verstanden hat: Off-Chain-Signaturen für permit, die unbegrenzte Allowances gewähren, gehören zu den häufigsten Phishing-Methoden.

Häufige Fehler: ein Typ-String, der nicht exakt zum Struct passt, ein fehlender oder falscher Wert für chainId oder verifyingContract und doppelt akzeptierte Signaturen, weil der Contract keine Nonce speichert. Der EIP-712-Inspektor berechnet jeden Hash lokal neu.

Standards und Quellen

Alle Begriffe