FREE TOOL

Hash Verifier

See exactly what you're about to sign. Recompute a Safe multisig transaction hash from its parameters, decode any wallet's EIP-712 signing request, or decode raw calldata into plain language — then compare against the hash your hardware wallet or Safe UI shows. Blind-signing is how the biggest treasuries get drained; this closes that gap.

100% in your browser. Everything runs locally in JavaScript — no data is sent anywhere, no server, no tracking. Works offline (save the page and pull the network cable). The hashing is a from-scratch implementation of the public EIP-712 standard and Safe's on-chain type definitions; verify it against your hardware wallet for a second independent path.
EARLY RELEASE · This verifier is new and still expanding its coverage. It handles the most common Safe, EIP-712, and calldata cases today, but some formats and less-common functions may decode incompletely or not at all — and behavior may change as we refine it. Treat the output as a second opinion, not the final word: always confirm the hash on your hardware wallet or Safe UI before you sign. Found something off? Tell us and we'll fix it.

Enter the Safe transaction fields (from the Safe UI's "Advanced details", a proposal JSON, or a treasury ticket), or paste the wallet's EIP-712 typed-data JSON below to auto-fill. This recomputes the Safe transaction hash and decodes what the call does. Load example

Paste the exact eth_signTypedData_v4 payload your wallet (MetaMask, Rabby, Ledger Live, any EIP-712 signer) is asking you to sign. This computes the domain separator, the struct hash, and the final signing digest, and renders the message so you can read it. Works for Permit, Permit2, Safe, orders — any typed data. Load example

Paste raw transaction calldata (the data field) to decode the function and its arguments — ERC-20 transfer/approve, Safe owner & module changes, MultiSend batches, and more. Load example

Compute the hash a wallet signs for a plain message. personal_sign applies the EIP-191 prefix (what MetaMask "Sign message" shows). Add a Safe address + network to also get the Safe off-chain message hash. Load example