EIP-712 Typed Data Hasher
Compute the EIP-712 domain separator, struct hash and signing digest from typed data — in your browser.
🔒 100% in your browser — nothing is uploaded
Paste the JSON a wallet shows for signTypedData_v4 (types, primaryType, domain, message).
0xbe609aee343fb3c4b28e1df9e632fca64fcfaede20f02e86244efddf30957bd20xf2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f0xc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371eMail(Person from,Person to,string contents)Person(string name,address wallet)How it works
Paste the typed-data JSON a wallet shows on signTypedData_v4 and this computes the encoded type string, the domain separator, the message hashStruct, and the final signing digest keccak256(0x1901 ‖ domainSeparator ‖ hashStruct). Everything runs in your browser — handy for debugging signatures and understanding what a wallet is asking you to sign.
Frequently asked questions
What is EIP-712?
A standard for hashing and signing structured data so wallets can show humans what they are signing, instead of an opaque hash. The signing digest is keccak256(0x19 0x01 ‖ domainSeparator ‖ hashStruct(message)).
What is the domain separator?
A hash of the domain (name, version, chainId, verifying contract) that binds a signature to one app and chain, preventing replay elsewhere.
Is my data uploaded?
No — the typed data is hashed entirely in your browser.