Skip to main content
EIP-712 enables signing complex, structured data in a standardized way, providing better security and user experience compared to simple message signing. This walkthrough shows how to implement EIP-712 typed data signing using Para’s Ethers integration.

What is EIP-712?

EIP-712 is a standard for signing typed structured data, offering several advantages:
  • Structured data signing - Sign complex objects with multiple fields and nested structures
  • Domain separation - Prevents signature replay attacks across different applications or chains
  • Human-readable format - Users can see exactly what they’re signing in wallet interfaces
  • Type safety - Ensures data conforms to expected structure before signing

Common Use Cases

EIP-712 is commonly used for:
  • Meta-transactions - Gasless transactions with relayer support
  • Permit signatures - Token approvals without on-chain transactions
  • Attestations - Cryptographically signed claims or certificates
  • Voting systems - Off-chain voting with on-chain verification
  • Order signing - DEX orders and marketplace listings

Setup Requirements

You need an authenticated Para client and Ethers provider to implement EIP-712 signing.

Install Dependencies

Create Ethers Provider Hook

hooks/useEthersProvider.ts

Create Para Signer Hook

hooks/useParaSigner.ts

EIP-712 Implementation

Define Domain and Types

The domain separator provides context and prevents replay attacks:

Create Typed Data Structure

Sign Typed Data

Advanced Examples

Permit Signature for Token Approvals

Voting Signature

Marketplace Order Signature

Signature Verification

Client-Side Verification

Smart Contract Verification

Error Handling

Common Issues and Solutions

Validation Before Signing

Best Practices

Security Considerations

  • Validate all inputs before signing
  • Use proper domain separation to prevent replay attacks
  • Include nonces to prevent signature reuse
  • Set reasonable deadlines for time-sensitive signatures
  • Verify contract addresses in domain separator

Type Definition Guidelines

  • Use specific types (uint256 instead of uint)
  • Order fields consistently across your application
  • Document field purposes for maintainability
  • Version your types when making changes

User Experience

  • Provide clear descriptions of what users are signing
  • Show human-readable summaries before signing
  • Handle rejection gracefully with meaningful error messages
  • Cache signatures when appropriate to avoid re-signing

Next Steps

Ethers Integration

Learn more about Para’s Ethers integration

Session Management

Understand Para’s authentication system

Ethereum Transfers

Intermediate · 20 min · Send ETH with Ethers and Viem

Porto Integration

Intermediate · 30 min · EIP-7702 smart accounts with session keys

Aave v3 Integration

Advanced · 45 min · Lending, borrowing, and yield strategies