{"uid":"cap_k8ncmZEGokThDrZryQSr7","slug":"eip-712-typed-data-builder-signer-recovery-68dd78ac","name":"EIP-712 Typed Data Builder & Signer Recovery","description":"Pay-per-call on-chain API for AI agents and developers: wallet audits, token safety audits (honeypot detection), live gas prices, token prices, transaction receipts, balances, ENS resolution, block data, ERC-20 allowances, transaction simulation, swap quotes and multicall batches — all computed on-chain via public RPCs (no external market API). Pay per request in USDC on Base via the x402 exact scheme (EIP-3009 transferWithAuthorization). No API key, no signup, no subscription.","url":"https://x402-audit.tatschluizguilherme.workers.dev/eip712","method":"GET","headers":{},"bodySchema":null,"responseSchema":{"type":"json","example":{"types":{"Permit":[{"name":"owner","type":"address"},{"name":"spender","type":"address"},{"name":"value","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"deadline","type":"uint256"}],"EIP712Domain":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}]},"digest":"0x5c2f3e4d5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e","domain":{"name":"USDC","chainId":"8453","version":"2","verifyingContract":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"},"message":{"nonce":"0","owner":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045","value":"1000000","spender":"0x1111111111111111111111111111111111111111","deadline":"1900000000"},"network":"offline","hashStruct":"0x8b3d9f2a1c4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b","primaryType":"Permit","requestedAt":"2026-08-05T09:00:00.000Z","domainSeparator":"0x8a8268fd2a7b6f2c8ab62e4b0c2c2c9f4c3e2f1a0b9c8d7e6f5a4b3c2d1e0f1a2"}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.1","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"registry","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.1/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.1","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.1","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_Of9IHtF2xbrDr2cRpaoRw","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.1","costPer":"request","priority":0,"asset":null,"unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Computes EIP-712 domainSeparator, hashStruct, and final digest from typed data, and optionally recovers the signer address via ecrecover — all offline with no RPC or API key","exampleAgentPrompt":"Can you compute the EIP-712 digest and recover the signer for this Permit2 message? Domain is {name:'Permit2', chainId:1, verifyingContract:'0x000000000022D473030F116dDEE9F6B43aC78BA3'}, the message has spender, nonce and deadline fields, and I have a 0x-prefixed 65-byte signature to verify against address 0xAbCd...","exampleUseCases":[{"title":"Verify off-chain Permit signature","prompt":"I have an EIP-712 Permit signature from a user claiming to have signed a token approval — here's the domain, types, message JSON, and a 65-byte signature starting with 0x. Can you recover the signer address and tell me if it matches 0x1234...abcd?"},{"title":"Build Permit2 digest for relayer","prompt":"I'm building a relayer and need the exact 32-byte digest that the wallet will sign for a Permit2 transfer. Here's my domain (name: Permit2, chainId: 8453, verifyingContract: 0x000000000022D473030F116dDEE9F6B43aC78BA3), the nested PermitTransferFrom types, and the message — give me the domainSeparator, hashStruct, and final digest."},{"title":"Debug off-chain governance vote","prompt":"My off-chain voting contract uses EIP-712 structured data. Can you normalize my Vote struct (domain, types, primaryType, and message JSON attached), show me the domainSeparator and hashStruct, and verify that the 65-byte signature I got actually came from voter address 0xDEAD...BEEF?"}],"resultDescription":"Returns normalized typed data, the computed domainSeparator (32-byte hex), hashStruct (32-byte hex), and the final EIP-712 digest (32-byte hex). If a signature was provided, also returns the recovered signer address (ecrecover result) and a recover.ok boolean indicating whether it matches the optional expectedAddress.","failureModes":["Malformed domain or types JSON returns a 400-level error with a description of the parsing failure","Invalid signature format (not 0x + 65 bytes) causes ecrecover to fail or return an error","Mismatched expectedAddress results in recover.ok: false rather than an error","Unsupported uintN size or invalid address format may produce a normalization error","Deeply nested or circular struct definitions may cause a processing error"],"whenToPreferThis":"Choose this endpoint when you need pure offline EIP-712 cryptography — building digests, checking domainSeparators, or verifying signers — without any RPC call, blockchain connection, or API key. Ideal for relayers, Permit/Permit2 flows, off-chain vote verification, and debugging typed data that a wallet will sign. Prefer over on-chain alternatives when speed, privacy, and zero infrastructure dependency matter.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-14T06:34:28.620Z","isFirstParty":false}