Skip to content

Repository files navigation

SignShield

SignShield

See what you sign — before you sign it.

GitHub Rust License Ext

SignShield decodes Ethereum transactions into human intent: approvals, transfers, swaps, multicalls, NFT operators — and flags drainer patterns before you click Sign in your wallet.


Why SignShield?

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.


60-second demo

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:8787

CLI

signshield 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

Transaction JSON shape

{
  "from": "0x...",
  "to": "0x...",
  "value": "0x0",
  "data": "0x095ea7b3...",
  "chain_id": 1
}

Detectors (v0.6)

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.


WalletConnect middleware (v0.6)

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 UI

See bridge/walletconnect/README.md.


Chrome extension (v0.6)

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


Security notes (v0.6.1)

  • Demo /api/examples/{name} only serves simple *.json basenames under examples/
  • 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.


License

MIT © FounderB — see LICENSE.

Don't sign what you can't read.

About

See what you sign before you sign it — Ethereum intent guard

Resources

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages