See what you sign — before you sign it.
SignShield decodes Ethereum transactions into human intent: approvals, transfers, swaps, multicalls, NFT operators — and flags drainer patterns before you click Sign in your wallet.
| Problem | SignShield |
|---|---|
| Wallet shows raw hex | Plain English intent |
| Drainers hide in multicall | Inner action detection |
| Infinite approve scams | CRITICAL before you sign |
| No offline tool | CLI + demo UI, no API key |
Part of the FounderB security stack: FluxTap watches the wire · Tracefuse watches what you ship · SignShield watches what you sign.
git clone https://github.com/FounderB/SignShield.git
cd SignShield
cargo build --release
# malicious infinite approve → Do NOT sign
./target/release/signshield analyze --file examples/malicious-approve.json
# optional RPC simulation (eth_getCode + eth_estimateGas)
./target/release/signshield analyze --file examples/malicious-approve.json --rpc https://eth.llamarpc.com
# safe ERC-20 transfer
./target/release/signshield analyze --file examples/safe-transfer.json
# cinematic web UI
./target/release/signshield serve
# → http://127.0.0.1:8787signshield analyze --file tx.json # human report
signshield analyze --file tx.json --json # machine output
signshield analyze --file tx.json --fail-on-risk # exit 1 if risky
signshield analyze --file tx.json --rpc $SIGNSHIELD_RPC # simulate via JSON-RPC
signshield analyze-typed --file examples/malicious-permit.json
signshield reputation # feed stats
signshield update-reputation # fetch latest feed
signshield wc-bridge --project-id $WALLETCONNECT_PROJECT_ID # WC middleware
signshield decode --data 0x095ea7b3...
signshield explain infinite_approve
signshield rules
signshield init # writes .signshield.toml (loaded for high_eth_wei + reputation cache)
signshield serve --addr 127.0.0.1:8787{
"from": "0x...",
"to": "0x...",
"value": "0x0",
"data": "0x095ea7b3...",
"chain_id": 1
}| Rule | Severity | What it catches |
|---|---|---|
reputation_malicious |
CRITICAL | Address in SignShield reputation feed |
infinite_approve |
CRITICAL | Unlimited ERC-20 allowance |
zero_address |
CRITICAL | Zero address in tx or calldata |
multicall_hidden_transfer |
CRITICAL | Approve/transfer buried in batch |
nft_operator_all |
CRITICAL | setApprovalForAll |
phishing_typed_data |
CRITICAL | Fake Mail/Login typed data drains |
permit2_signature |
WARN | Off-chain spend authorization via Permit2 |
eip2612_permit |
WARN | On-chain EIP-2612 permit (0xd505accf) |
typed_data_permit |
WARN | EIP-712 Permit / Permit2 |
permit2_batch |
WARN | Multiple token permissions in one sign |
increase_allowance |
WARN | Persistent allowance bump |
high_eth_outflow |
WARN | Large native transfer |
call_to_eoa_with_data |
WARN | Calldata to EOA (RPC) |
simulation_revert |
WARN | eth_estimateGas failed (RPC) |
rpc_url_blocked |
WARN | SSRF-safe RPC URL rejected |
balance_snapshot |
INFO | Live ETH/token balance via RPC |
trusted_contract |
INFO | Known protocol (Uniswap, Permit2, …) |
siwe_login |
INFO | Sign-In With Ethereum auth |
seaport_order / blur_order |
INFO | NFT marketplace orders |
Reputation feed: data/reputation.json — auto-updated in extension every 6h.
Guard mobile wallet connections from desktop dApps:
dApp ──WC──► SignShield ──analyze──► MetaMask / Rabby
export WALLETCONNECT_PROJECT_ID=… # free at https://cloud.reown.com
signshield wc-bridge
# 1. Scan QR with your wallet
# 2. Paste dApp wc: URI at http://127.0.0.1:8789
# 3. Approve/reject each request in UISee bridge/walletconnect/README.md.
Guard MetaMask/Rabby before sign:
chrome://extensions → Developer mode → Load unpacked → SignShield/extension/
Hooks window.ethereum, WalletConnect providers, typed data, legacy send/sendAsync · overlay on risky txs · optional RPC simulate · trusted domains · extension/README.md
- Demo
/api/examples/{name}only serves simple*.jsonbasenames underexamples/ - Optional
--rpc/?rpc=URLs must be http(s); private, link-local, and cloud-metadata hosts are blocked - Default analyze path stays offline — RPC is opt-in
See SECURITY.md.
MIT © FounderB — see LICENSE.
Don't sign what you can't read.