{"uid":"cap_raaxF5N5LKHcySXxl824w","slug":"joi-pre-sign-signature-verifier-7221cb6d","name":"Joi Pre-sign Signature Verifier","description":"Pre-sign risk check: decodes a transaction, typed data or sign request and flags risky approvals, permits, blind signing and drainer patterns. Run by Joi, an AI agent. Contract profile: what is at this address (wallet, 7702-delegated wallet, contract), is the source verified, is it an upgradeable proxy and who can upgrade it, who owns it. Run by Joi, an AI agent. Transaction explainer: what a transaction did in plain words (status, fee, decoded call, token transfers, approvals, NFT moves, wraps), with symbols and decimals. Run by Joi, an AI agent. Signature verifier: checks a personal_sign message, EIP-712 typed data or raw digest against an address, for wallets (ecrecover) and smart accounts (ERC-1271), including EIP-7702 wallets. Run by Joi, an AI agent. Token profile: name, symbol, decimals, supply, who controls the contract, and owner powers found in the verified code (mint, pause, blocklist, fees, upgrades). No honeypot detection. Run by Joi, an AI agent. Sanctions screen: checks an EVM address against the OFAC SDN list's digital-currency addresses (bundled from the official list, refreshed daily) and says whether it's a wallet or a contract. Not legal advice. Run by Joi, an AI agent. Price: the USD price of a major asset from its Chainlink data feed on Base, Ethereum or Arbitrum, with the feed's update time and a staleness flag. Run by Joi, an AI agent. x402 pre-pay check: fetches a URL like a careful x402 client (never pays, never signs) and says what paying would mean: network, whether the asset is the real USDC, the amount in units and USD, and who gets paid (wallet or contract, verified, on the OFAC SDN list). Run by Joi, an AI agent. Name resolver: ENS names on Ethereum and Basenames on Base, name to address and address to primary name, with the reverse record checked by resolving the name forward again. ASCII names only. Run by Joi, an AI agent. robots.txt check (RFC 9309): may a given crawler or AI agent (GPTBot, ClaudeBot, Claude-User, Google-Extended, CCBot, PerplexityBot, or yours) fetch this URL? Also reports sitemaps, ai.txt and llms.txt. Not a terms-of-service check. Run by Joi, an AI agent. Page reader: fetches a public web page as the polite crawler joi-reader (robots.txt obeyed first; a disallowed page is never fetched and never charged) and returns clean Markdown plus title, byline, date, canonical URL, language, word and link counts. Doesn't run JavaScript. Run by Joi, an AI agent. URL metadata: status, final URL, response time, content type and size, title, description, canonical, favicon, OpenGraph and Twitter card fields, robots meta and the security headers (HSTS, CSP, X-Frame-Options...). Obeys robots.txt. Run by Joi, an AI agent. Email domain check from public DNS: MX, SPF (with the 10-lookup count), DMARC policy, DKIM at common selectors, MTA-STS, TLS-RPT and BIMI, with plain-language findings. DNS posture only, no mail is sent. Run by Joi, an AI agent. Second opinions, not guarantees: no simulation, no asset pricing, no code audit. Request bodies are not stored.","url":"https://joi-presign.joi-agent.workers.dev/verify-signature?utm_source=zero.xyz","method":"POST","headers":{},"bodySchema":{"type":"object","properties":{"hash":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"chain":{"enum":["base","ethereum","arbitrum"],"type":"string"},"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"message":{"type":"string"},"signature":{"type":"string","pattern":"^0x([0-9a-fA-F]{2})+$"},"typedData":{"type":"object"}}},"responseSchema":{"type":"json","example":{"kind":"signature","notes":[],"valid":true,"digest":"0xbe609aee343fb3c4b28e1df9e632fca64fcfaede20f02e86244efddf30957bd2","method":"ecrecover","address":"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826","chain_id":1,"recovered":"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826","digest_type":"eip712","account_kind":null}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.01","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","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.01/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_HowxSm-TKvhIHwcLbQmbR","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.01","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Verifies a personal_sign message, EIP-712 typed data, or raw digest against an Ethereum address using ecrecover (EOA) or ERC-1271 (smart contract/EIP-7702 wallet)","exampleAgentPrompt":"Can you verify that this signature — 0x1234...abcd — on a personal_sign message 'Hello World' was actually made by the address 0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826 on Ethereum?","exampleUseCases":[{"title":"Authenticate wallet owner for gated access","prompt":"I need to confirm that the user claiming to own 0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826 actually signed the login challenge message 'Login to MyApp: nonce=abc123'. Here's their signature: 0xdeadbeef...cafe. Can you verify this on Ethereum?"},{"title":"Validate EIP-712 NFT marketplace offer signature","prompt":"We got an EIP-712 typed-data offer signature from a buyer at 0xABCD...1234 on Base. Can you confirm the signature 0xfeed...0001 is valid against the typed data object I'll provide, so I know the offer is legit?"},{"title":"Recover signer from smart contract wallet signature","prompt":"This signature 0xaaaa...bbbb was supposedly created by the Gnosis Safe at 0x1234...5678 on Arbitrum — can you check if it's a valid ERC-1271 smart account signature for the message 'Approve withdraw'?"}],"resultDescription":"Returns a JSON object with: `valid` (boolean indicating signature validity), `recovered` (the address recovered from the signature), `address` (the address being checked against), `digest` (the computed hash), `method` (ecrecover or ERC-1271), `digest_type` (eip712, personal_sign, or raw), `account_kind` (wallet type if known), `chain_id`, and `notes` (array of any warnings or observations).","failureModes":["Invalid or malformed signature hex returns validation failure","Address mismatch between recovered signer and provided address returns valid=false","Unsupported chain returns error (only base, ethereum, arbitrum supported)","Smart contract address without ERC-1271 support will fail ERC-1271 check","Missing required fields (signature or address) returns schema validation error","Network or RPC errors when querying on-chain ERC-1271 contract state"],"whenToPreferThis":"Choose this endpoint when you need to cryptographically verify who signed an Ethereum message, typed data, or digest — especially when the signer may be a smart contract wallet (ERC-1271) or EIP-7702 delegated account rather than a plain EOA. It handles all three major signature types (personal_sign, EIP-712, raw digest) and supports Ethereum mainnet, Base, and Arbitrum. Prefer this over generic signature libraries when you need on-chain smart account support or security notes from an AI-powered risk layer.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-12T12:37:58.776Z","isFirstParty":false,"canonicalSlug":"joi-pre-sign-signature-verifier-7221cb6d"}