Sentinel for Wallets · B2B
Stop the drain before your users lose funds.
Most wallet drains don't break cryptography — they trick users into signing something their wallet didn't explain. Sentinel tests whether your wallet catches the techniques drainers actually use, and tells you exactly what to fix.
1Who's being audited
2Drainer test pack
Replay each payload through your wallet on the Fuji testnet and record what your UI did. The badge shows how Sentinel's own reference engine handles the same request.
Unlimited ERC-20 approval
Sentinel: flags itapprove(spender, 2^256−1)
How it drains: The spender can move the user's entire token balance at any time, long after the site is closed.
A safe wallet should: Show the spender and an unmistakable 'unlimited' warning, and offer to set a spending cap.
The exact test payload is included only in the locally run app.
Sending live test requests to a wallet is available only in the locally run app — a public website that sends drainer-style requests is rightly flagged by wallet security tools.
What did your wallet show?
Unlimited increaseAllowance
Sentinel: flags itincreaseAllowance(spender, huge amount)
How it drains: Same effect as an unlimited approve, but through a function some wallets don't decode.
A safe wallet should: Decode increaseAllowance the same way as approve and warn identically.
The exact test payload is included only in the locally run app.
Sending live test requests to a wallet is available only in the locally run app — a public website that sends drainer-style requests is rightly flagged by wallet security tools.
What did your wallet show?
NFT collection-wide approval
Sentinel: flags itsetApprovalForAll(operator, true)
How it drains: The operator can transfer every NFT the user owns in that collection, including ones bought later.
A safe wallet should: Warn that this grants access to ALL items, name the operator, and flag unknown operators.
The exact test payload is included only in the locally run app.
Sending live test requests to a wallet is available only in the locally run app — a public website that sends drainer-style requests is rightly flagged by wallet security tools.
What did your wallet show?
EIP-2612 Permit signature
Sentinel: flags iteth_signTypedData_v4 · primaryType Permit
How it drains: A gasless off-chain signature that grants an allowance. No transaction appears, so users think they 'just signed in'.
A safe wallet should: Recognise Permit typed data, show it as a token approval with amount and spender, and warn on large values.
The exact test payload is included only in the locally run app.
Sending live test requests to a wallet is available only in the locally run app — a public website that sends drainer-style requests is rightly flagged by wallet security tools.
What did your wallet show?
Permit2 signature
Sentinel: flags iteth_signTypedData_v4 · Permit2 PermitSingle
How it drains: Signs away any token already approved to Permit2 — one signature can empty balances across tokens.
A safe wallet should: Decode Permit2 messages, show token, amount, spender and expiry, and warn on unlimited amounts or far expiries.
The exact test payload is included only in the locally run app.
Sending live test requests to a wallet is available only in the locally run app — a public website that sends drainer-style requests is rightly flagged by wallet security tools.
What did your wallet show?
Blind eth_sign of a raw hash
Sentinel: flags iteth_sign(32-byte hash)
How it drains: The user signs an opaque hash that can be any transaction. Nobody — not even the wallet — can show what it does.
A safe wallet should: Block eth_sign by default, or require an explicit advanced-mode opt-in with a severe warning.
The exact test payload is included only in the locally run app.
Sending live test requests to a wallet is available only in the locally run app — a public website that sends drainer-style requests is rightly flagged by wallet security tools.
What did your wallet show?
Address poisoning (look-alike recipient)
Sentinel: flags ittransfer() to an address matching the first & last characters of a saved address
How it drains: Attackers plant look-alike addresses in the user's history; users copy the wrong one and send funds to the attacker.
A safe wallet should: Detect recipients that resemble a saved/recent address but differ, and warn before sending.
The exact test payload is included only in the locally run app.
Sending live test requests to a wallet is available only in the locally run app — a public website that sends drainer-style requests is rightly flagged by wallet security tools.
What did your wallet show?
Control: transfer to a saved contact
Sentinel: allows ittransfer() to a known saved address
How it drains: Legitimate — included to measure false alarms.
A safe wallet should: Proceed normally. Constant warnings on safe actions train users to ignore warnings.
The exact test payload is included only in the locally run app.
Sending live test requests to a wallet is available only in the locally run app — a public website that sends drainer-style requests is rightly flagged by wallet security tools.
What did your wallet show?
Control: plain-text sign-in message
Sentinel: allows itpersonal_sign(readable message)
How it drains: Legitimate — a human-readable sign-in message moves no funds.
A safe wallet should: Show the readable message and proceed without a drain warning.
The exact test payload is included only in the locally run app.
Sending live test requests to a wallet is available only in the locally run app — a public website that sends drainer-style requests is rightly flagged by wallet security tools.
What did your wallet show?
3Security controls
Signing safety
Do you simulate transactions and show balance changes before the user signs?
Signing safety
Do you decode Permit / Permit2 / typed-data signatures into human-readable approvals?
Signing safety
Is eth_sign (blind hash signing) disabled by default?
Signing safety
Do you let users edit approval amounts and warn on unlimited approvals?
Signing safety
Can users view and revoke existing approvals inside the wallet?
Phishing defence
Do you block or warn on known phishing / drainer domains and contracts?
Phishing defence
Do you detect look-alike recipient addresses (address poisoning)?
Key management
Are seed phrases encrypted at rest, never sent to your servers, and protected from screenshots/clipboard?
Key management
Do you support hardware wallets for high-value accounts?
Security process
Do you have recent third-party security audits and a public bug bounty?
Roadmap: from audit to AI-assisted penetration testing
Today's audit is a structured self-assessment. The same test pack and report format are the foundation for automated and AI-driven testing — every stage keeps the rules transparent and the results verifiable.
Today · Hackathon MVP
Drainer Readiness Audit
A test pack of real drainer techniques that wallet teams replay through their own wallet, a security-controls review, a prioritised fix list, and an audit certificate sealed on Avalanche.
Next
Automated test harness
An SDK and test-dApp that fire the test pack at a wallet build automatically in CI and read its responses — so every release is re-checked, not just once a year.
Future
AI-assisted penetration testing
AI agents that generate new attack variants from fresh drainer campaigns, probe a wallet's signing flows in a sandbox, and explain each finding with a reproducible proof — always under a signed scope and the wallet company's written authorisation.
Vision
Continuous trust score
Each audited release gets a fresh on-chain attestation, so users can check that their wallet is tested against today's attacks — not last year's.
