TypedData
EIP-712 typed structured data - enables human-readable, type-safe signatures in Ethereum.Overview
TypedData implements EIP-712 for typed structured data signing. Instead of signing opaque hex strings, users sign structured data with clear field names and types. This improves UX and security by making signatures human-readable in wallets like MetaMask.Type Definition
Usage
Define Typed Data
Hash for Signing
Encode Message
Validate Structure
Type System
Atomic Types
Struct Types
Define custom types with named fields:Array Types
Use[] suffix for arrays:
Common Use Cases
ERC-20 Permit (Gasless Approval)
DAI Permit
Meta-Transactions
Voting/Governance
Hash Calculation
EIP-712 hash is computed as:\x19\x01- EIP-191 structured data prefixdomainSeparator- keccak256(encodeData(‘EIP712Domain’, domain))encodeData()- Recursive encoding of message fields
Type Encoding
Simple Type
Nested Types
Security
Benefits
- Human-readable - Users see structured data, not hex
- Type-safe - Field types are validated
- Domain-specific - Signatures bound to contract/chain
- Replay-protected - Domain separator prevents replay
Validation
Always validate typed data:MetaMask Display
MetaMask shows structured data clearly:Error Handling
TypedData operations throw typed errors for precise error handling:InvalidTypedDataError
Thrown when typed data structure is invalid.Validation Errors
Thevalidate() function throws InvalidTypedDataError for various issues:
Specification
- EIP-712: https://eips.ethereum.org/EIPS/eip-712
- eth_signTypedData_v4: https://docs.metamask.io/wallet/reference/eth_signtypeddata_v4/
See Also
- Domain - Domain separator structure
- DomainSeparator - Domain separator hash
- Hash - Hash primitive
- Signature - Signature primitive

