See exactly what you're about to sign. Paste what your wallet is showing you and get a plain-English answer — or recompute a Safe transaction hash, decode any EIP-712 request, and hash a message to compare against your hardware wallet. Blind-signing is how the biggest treasuries get drained; this closes that gap.
Paste whatever your wallet is showing you — the calldata, the signature request, the Safe transaction. We work out the format and tell you in plain English what it lets someone do. Everything happens in this page; nothing is sent anywhere.
You can copy this from the contract's page on a block explorer, or from the app's docs. We check it against the selector so a wrong signature cannot silently mis-decode.
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