More than $3.4 billion in cryptocurrency was stolen in 2025, according to Chainalysis’s 2026 Crypto Crime Report, one of the worst years on record for theft. Of that total, $713 million came directly from personal wallet compromises: seed phrases typed into fake sites, malware that siphoned private keys, and browser extensions that quietly drained approved tokens. Chainalysis counted roughly 158,000 of these incidents hitting about 80,000 victims, an average loss near $4,500 each. Attackers have shifted their aim. Personal wallets made up just 7.3% of stolen crypto value in 2022. By 2024 that share had jumped to 44%. It settled near 20% in 2025, mostly because one outsized exchange hack skewed the annual total, not because attacks on individuals slowed down.
The phishing side tells a similar story at smaller dollar amounts. Scam Sniffer tracked $83.85 million in wallet-drainer losses across 106,106 victims in 2025, down 83% from roughly $494 million the year before, which works out to about $790 per victim. Fewer huge scores, far more small ones. MetaMask’s June 2026 security report adds another data point: its partner Blockaid flagged 65.4 million address-poisoning attempts since January 2025, which is why MetaMask shipped live address-poisoning detection this year.
This tutorial builds a wallet security setup you can actually run, not a checklist you skim once and forget. You’ll split funds across hot, warm, and cold tiers, set up and verify a hardware wallet, back up a seed phrase properly, harden your browser wallet, build a watch-only monitoring address, and write a small Node.js script that scans your live token approvals for risk. By the end you’ll have a repeatable process plus a working tool, and a plan for what to do if something still goes wrong.
None of this requires becoming a full-time security researcher. Most of the twelve steps below take five to ten minutes each, and the two that involve code (the approval scanner and the address checksum validator) are short enough to read end to end before you run them. Follow the steps in order the first time through. The wallet tiers you set up in Step 2 shape how you configure everything after it, so skipping ahead tends to mean redoing work later.
Prerequisites: Tools and Versions You’ll Need
You don’t need to be a developer to follow most of this guide, but the allowance-scanner steps assume basic command-line comfort. Here’s what to have ready before you start.
- A hardware wallet (Ledger or Trezor) purchased directly from the manufacturer, on current firmware
- Node.js 20 LTS or newer, with npm 10 or newer
- Python 3.11 or newer (optional, only needed for the checksum validator in Step 11)
- ethers.js v6 (latest release) for the approval scanner
- A free Etherscan API v2 key, which now covers Ethereum plus dozens of EVM chains under a single key
- MetaMask or Rabby, the latest version from the official Chrome or Firefox store, never a search-ad link
- A password manager such as 1Password or Bitwarden for everything that isn’t a seed phrase
- About 30 to 45 minutes for the full setup, plus a small test transaction to confirm each step
Step 1: Map Every Wallet You Actually Use
Most people who lose funds don’t get hacked through their main wallet. They lose it through the test wallet they set up two years ago, the browser profile they forgot existed, or the exchange-linked address they never revisited. Start with an inventory, not a purchase.
Open a spreadsheet and list every address you control: chain, approximate balance, what it’s used for, and how old the seed phrase is. Include software wallets on your phone, browser extensions on every device, any exchange sub-accounts, and hardware wallets sitting in a drawer. Flag anything you haven’t touched in six months. Those forgotten wallets are exactly what attackers target with drainer contracts, because nobody is watching them. Once the list exists, you can make real decisions about which addresses need hardware backing and which ones should be closed out entirely.
Pay particular attention to any wallet connected to a centralized exchange for withdrawals, since those addresses tend to accumulate a long history of approvals and interactions over time. Also check for wallets created inside game clients, NFT marketplaces, or browser-based mobile apps, since these often generate a seed automatically on first launch and users rarely realize a real private key now exists on that device. If you find a wallet holding meaningful funds that you can’t account for in terms of backup or hardware protection, treat migrating it as priority work rather than something to handle “eventually.”
Step 2: Split Funds Across Hot, Warm, and Cold Tiers
A single wallet holding your spending money, your DeFi positions, and your long-term savings is the most common structural mistake in self-custody. One phishing click and everything is gone at once. Split holdings into three tiers based on how often you need to sign transactions with each one.
| Tier | Purpose | Recommended Max Balance | Typical Setup |
|---|---|---|---|
| Hot | Daily spending, minting, small swaps | Under $500 | Browser wallet, software-only seed |
| Warm | Active DeFi positions, frequent trading | Under 10% of net crypto holdings | Hardware wallet connected for signing |
| Cold | Long-term savings, rarely touched | No practical ceiling | Hardware wallet kept offline, multisig for larger sums |
The hot wallet is the one you connect to unfamiliar sites, so treat any loss there as a cost of doing business, not a catastrophe. The warm wallet signs through a hardware device but stays connected to DeFi protocols you actually use. The cold wallet almost never touches a dApp. If you’re moving savings between tiers, our cold storage seed migration guide walks through doing that without exposing the old seed in the process.
Step 3: Set Up and Verify a Hardware Wallet
Buy the device directly from Ledger or Trezor, not from a marketplace listing or a reseller you don’t recognize. Devices bought secondhand or through unofficial channels have shown up pre-tampered in documented cases, and there’s no reliable way to verify a used unit wasn’t modified before it reached you.
When the device arrives, run the manufacturer’s genuine-check inside Ledger Live or Trezor Suite before you generate a seed. This confirms the secure element hasn’t been swapped and the firmware signature checks out. Update to the current firmware version, then generate a brand-new seed on the device itself. Never import a seed that was ever displayed on a phone, laptop, or website, since that seed is already compromised the moment it touched an internet-connected screen. If you’re on a Trezor Safe 7, our TROPIC01 lockdown guide covers the specific firmware settings worth checking after setup.
Set a PIN of at least eight digits rather than the minimum the device allows, and if your hardware wallet supports a passphrase (sometimes called a 25th word), enable it for cold storage specifically. A passphrase creates an entirely separate hidden wallet from the same seed, so someone who finds your metal backup or forces you to unlock the device under duress still can’t reach funds protected behind a passphrase they don’t know. Write the passphrase down somewhere completely separate from the seed words themselves, since combining them in one location defeats the purpose.
You can also verify a firmware download’s checksum manually before installing it, rather than trusting the desktop app’s automatic check alone.
# Compare the published SHA-256 hash against your download
sha256sum ledger-firmware-latest.bin
# Output should match the hash listed on the vendor's
# official release page for that exact file name
# 4f2a9c1e... (compare full hash, not just the prefix)
Step 4: Back Up Your Seed Phrase the Right Way
Paper backups burn, fade, and get thrown out by someone doing spring cleaning. Stamp your seed words into a metal backup plate rated for fire and water damage, and store it somewhere your household doesn’t casually access. A fireproof safe at home covers most risk. For larger holdings, splitting the backup across two physical locations removes any single point of failure, including your own house.
If you’re protecting savings meaningful enough to justify it, Shamir’s Secret Sharing splits a single seed into multiple fragments where you only need a subset to reconstruct it, so no one location or person holds the whole key. We cover the full fragment math and distribution steps in our Shamir secret sharing walkthrough. Whichever method you pick, test the recovery process once with a small amount of funds before you trust it with everything. A backup you’ve never restored from is a guess, not a plan.
Avoid backup services that ask you to type your seed into a website or app, even ones marketed specifically for crypto backup. Any seed that touches an internet-connected screen at any point stops being a true cold backup, regardless of what encryption claims the service makes afterward. The only exceptions worth trusting are the manufacturer’s own on-device backup features, like Ledger’s Recover or a hardware wallet’s built-in Shamir split, since those generate and encrypt fragments inside the secure element itself without ever displaying the full seed on a connected screen.
Step 5: Lock Down Your Browser Wallet Settings
Browser extension wallets are convenient and that convenience is exactly what drainer campaigns exploit. Start by pairing your extension wallet to a hardware device for signing rather than storing a software-only seed inside the browser. That way a malicious site can still trick you into approving something, but it can’t extract the private key directly from your machine.
In MetaMask, turn on the built-in security alerts (powered by Blockaid) under Settings, Security & Privacy. This flags malicious contracts and suspicious signature requests before you approve them. Rabby ships similar transaction-preview features by default and shows a plain-language summary of what a transaction will actually do to your balances, which catches a lot of drainer patterns that a raw hex signature request would hide. Turn off “auto-connect” wherever the option exists, and consider running a dedicated browser profile just for wallet activity, separate from the one you use for general browsing and email.
Audit your other browser extensions while you’re in there. A malicious or compromised extension with broad page-access permissions can read what’s rendered on screen, including wallet popups, and several documented 2025 incidents involved legitimate-looking extensions that shipped clean for months before a later update added credential-stealing code. Set your wallet extension’s site permissions to “on click” rather than “on all sites” if your browser supports it, so it can’t run in the background on pages you haven’t explicitly opened it for. Remove any extension you installed once and never use again, since an unused extension still executes on every page load and is still a target for a supply-chain compromise even if you’ve forgotten it exists.
Step 6: Build a Watch-Only Monitoring Wallet
You should be able to check your cold wallet’s balance without ever connecting the actual device to a computer. Both MetaMask and Rabby support adding an address in watch-only mode, entering the public address with no private key attached. Add your cold and warm wallet addresses this way on a separate device you use for monitoring only.
This matters more than it sounds. It means you can glance at balances daily, notice anything unexpected fast, and never expose the signing key just to look at a number. Pair this with a block explorer bookmark for each address (Etherscan, Arbiscan, or the relevant chain explorer) so you can review incoming and outgoing transactions without needing the wallet extension open at all.
Step 7: Script an Allowance and Approval Scanner
Token approvals are the quiet risk in self-custody. Every time you swap on a DEX or stake into a protocol, you typically grant that contract permission to move a token on your behalf, and a lot of dApps default to requesting unlimited approval rather than an exact amount. If that contract is later exploited or was malicious from the start, an old approval you forgot about lets it drain the token without touching your seed at all. This is the mechanism behind most drainer-style phishing, and it’s why revoking stale approvals matters as much as protecting your keys.
Rather than checking a revocation dashboard manually every few weeks, build a small script that pulls your approval history from Etherscan’s API and flags anything risky: unlimited allowances, approvals to contracts with no verified source code, or spenders you don’t recognize. First, set up your environment file.
# .env
ETHERSCAN_API_KEY=your_api_v2_key_here
WALLET_ADDRESS=0xYourWalletAddressHere
CHAIN_ID=1
Then install the dependencies and create the scanner.
npm init -y
npm install ethers@6 dotenv node-fetch
// wallet-guard.js
import 'dotenv/config';
import { ethers } from 'ethers';
import fetch from 'node-fetch';
const { ETHERSCAN_API_KEY, WALLET_ADDRESS, CHAIN_ID } = process.env;
const UNLIMITED = ethers.MaxUint256.toString();
async function getApprovalLogs() {
const url = `https://api.etherscan.io/v2/api` +
`?chainid=${CHAIN_ID}&module=logs&action=getLogs` +
`&address=${WALLET_ADDRESS}` +
`&topic0=0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925` +
`&apikey=${ETHERSCAN_API_KEY}`;
const res = await fetch(url);
const data = await res.json();
return data.result || [];
}
function decodeApproval(log) {
const spender = ethers.getAddress('0x' + log.topics[2].slice(26));
const rawAmount = BigInt(log.data);
const isUnlimited = rawAmount.toString() === UNLIMITED ||
rawAmount > ethers.parseUnits('1000000000', 18);
return {
token: ethers.getAddress(log.address),
spender,
unlimited: isUnlimited,
block: parseInt(log.blockNumber, 16),
};
}
async function main() {
const logs = await getApprovalLogs();
const approvals = logs.map(decodeApproval);
const risky = approvals.filter(a => a.unlimited);
console.log(`Scanned ${approvals.length} approval events.`);
console.log(`Found ${risky.length} unlimited approvals:\n`);
risky.forEach(a => {
console.log(` Token: ${a.token}`);
console.log(` Spender: ${a.spender}`);
console.log(` Block: ${a.block}\n`);
});
}
main().catch(console.error);
Run it with node wallet-guard.js. Output looks like this against a wallet with a few stale approvals sitting around.
Scanned 14 approval events.
Found 2 unlimited approvals:
Token: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Spender: 0x1111111254EEB25477B68fb85Ed929f73A960582
Block: 21983221
Token: 0xdAC17F958D2ee523a2206206994597C13D831ec7
Spender: 0x00000000009726632680FB29d3F7A9734E3010E
Block: 21845019
Each flagged entry is a candidate for revocation. Cross-check the spender address against the protocol you actually intended to approve, since a mismatch there is one of the clearest signs of a past drainer interaction. Once you’ve confirmed what’s safe to keep and what isn’t, use our token approval revocation guide to clear the risky ones without paying for a third-party dashboard that also wants a wallet connection.
Step 8: Automate Scans With a Scheduled Job
Running the scanner once and forgetting about it defeats the purpose. Approvals accumulate every time you touch a new protocol, so schedule the script to run weekly and log the output somewhere you’ll actually see it.
# Add to crontab with `crontab -e`
# Runs every Monday at 9am and appends output to a log file
0 9 * * 1 cd /path/to/wallet-guard && node wallet-guard.js >> scan.log 2>&1
If you’d rather not run this on a personal machine that isn’t always on, a $5-a-month VPS or a free-tier GitHub Actions scheduled workflow both work fine for a script this lightweight. Just make sure the API key and wallet address stay in environment secrets, never committed to a public repository, since a public address list combined with your usual activity pattern is exactly the kind of targeting data drainer operators look for.
If you manage wallets for more than yourself, such as a small team’s treasury or a family member’s holdings, extend the scanner to loop through an array of addresses instead of a single one and email or Slack the output rather than only writing to a log file. The script’s core logic doesn’t change, only the loop around it, and the alerting is what turns a manual habit into something that actually happens on schedule.
Step 9: Defend Against Address Poisoning and Phishing
Address poisoning works by sending you a zero-value transaction from an address crafted to look nearly identical to one you’ve transacted with before, matching the first and last few characters. If you later copy an address from your transaction history instead of a verified source, you risk grabbing the attacker’s look-alike instead of the real one. MetaMask’s Blockaid integration flagged 65.4 million of these attempts since January 2025, which gives a sense of how automated and constant this tactic has become.
Build the habit of never copying an address from transaction history. Use a saved address book entry, a bookmarked link from the project’s official site, or a QR code scanned directly from the hardware device’s screen. When sending anything of size, send a small test amount first and confirm it landed before sending the rest. Enable whatever address-book or allowlist feature your wallet offers, since a wallet that only lets you send to pre-approved addresses closes off this entire attack category by design.
Phishing sites have also gotten better at mimicking the exact visual language of real wallet prompts, down to matching fonts and button placement from MetaMask or Rabby’s actual UI. The tell is usually the URL, not the design. Bookmark every dApp you use regularly and navigate to it only through that bookmark, never through a search engine result or a link from a direct message, since sponsored search ads and DM links are two of the most common distribution channels for cloned phishing pages. If a site asks you to “reconnect your wallet” or “verify your assets” through a signature request out of nowhere, close the tab. Legitimate protocols don’t need you to sign a message to prove you own a wallet you’re already connected with.
Step 10: Add Multisig for High-Value Holdings
A single hardware wallet is still a single point of failure. Loss, theft, or a coerced signature all end the same way. For holdings that would meaningfully hurt to lose, a multisig setup requiring two or three signatures out of a larger set removes that single point of failure entirely, since no one key, and no one person, can move funds alone.
For EVM chains, Safe is the standard, and our Safe multisig setup guide covers configuring signer thresholds correctly, which matters more than usual after the $1.5 billion Bybit hack showed what happens when a multisig’s signing interface gets compromised rather than the keys themselves. For Bitcoin, Sparrow Wallet handles multisig coordination across hardware devices cleanly, walked through in our Sparrow multisig guide. Either way, keep the signing devices for a single multisig physically separated, ideally in different locations, so a single break-in or a single compromised device can’t threaten the whole setup.
Step 11: Verify Transactions Before You Sign
Most wallet drains happen because someone signed something they didn’t fully understand, not because their keys were stolen outright. Before approving any transaction, read what your wallet’s simulation feature tells you it will actually do. Rabby, MetaMask’s built-in alerts, and standalone tools like Pocket Universe all show a plain summary of balance changes before you sign, and a mismatch between what you expected and what the simulation shows is your cue to stop.
It’s also worth double-checking recipient addresses programmatically rather than eyeballing a 42-character hex string, since a single swapped character is invisible to the naked eye but changes the destination completely. Ethereum addresses use EIP-55 checksum casing specifically so software can catch typos.
# checksum_validator.py
from eth_utils import to_checksum_address, is_address
def validate(address: str) -> bool:
if not is_address(address):
print(f"Invalid address format: {address}")
return False
checksummed = to_checksum_address(address)
if address != checksummed and address == address.lower():
print("Address has no checksum casing, verify the source before sending.")
return True
if address != checksummed:
print(f"Checksum mismatch. Expected: {checksummed}")
return False
print("Checksum valid.")
return True
if __name__ == "__main__":
validate(input("Paste address to verify: ").strip())
Install the one dependency with pip install eth-utils, then run it against any address before a large transfer. It takes ten seconds and catches the kind of transcription error that a rushed copy-paste won’t.
Signature Types Worth Slowing Down For
Not every risky action shows up as an obvious “approve” transaction. A growing share of drainer activity relies on off-chain signature requests, which cost no gas and generate no on-chain transaction until the attacker actually uses them, so they’re easy to click through without a second thought. Three types are worth recognizing on sight.
- Permit and Permit2 signatures. These let a contract move your tokens using a signed message instead of a separate on-chain approval transaction. A malicious permit request looks almost identical to a legitimate one in most wallet UIs unless the wallet explicitly decodes and labels it
- setApprovalForAll. Common with NFT marketplaces, this grants a contract control over every token in an entire collection you hold, not just one item. It’s convenient for marketplaces and dangerous everywhere else
- Blind eth_sign requests. A request to sign arbitrary data with no readable content should be treated as an automatic rejection. Legitimate dApps have shifted almost entirely to structured, human-readable signature formats, so an opaque request is itself a signal
Both MetaMask and Rabby now decode Permit and Permit2 requests into plain language showing which token, which spender, and what amount, specifically because these signature types became a favored drainer technique through 2025. If your wallet shows a request you can’t read in plain terms, don’t sign it, no matter how urgent the site claims the action is.
Step 12: Write a Wallet Incident Response Plan
Write this down before you need it, not while you’re panicking. Speed matters more than anything else once a compromise is confirmed, and a plan you can follow mechanically beats trying to think clearly under stress.
- Move remaining funds from the compromised wallet to a fresh, never-used address immediately, using a different device if malware is a possibility
- Revoke every active approval from the compromised wallet using the process in our approval revocation guide, even ones that look unrelated
- Assume the seed phrase is fully burned. Never reuse it, even after moving funds out
- If any exchange accounts share a password or device with the compromised wallet, rotate those credentials and review our exchange account security steps
- Document the timeline: what you clicked, what you signed, what device you used. This helps both your own review and any report you file
- Report the incident to the relevant blockchain explorer’s flagging tool and, for significant losses, to your local cybercrime reporting authority
Common Pitfalls That Undo Good Wallet Security
Storing a seed phrase as a photo or cloud note. A picture in your camera roll syncs to the cloud automatically on most phones, which means a seed phrase “backup” often ends up sitting in an account protected by nothing more than an email password.
Approving unlimited allowances out of habit. Many dApps default to requesting unlimited spend approval because it saves the protocol a future gas fee, not because you need it. Set a custom, exact amount whenever the wallet interface allows it.
Reusing one wallet across every chain and protocol. A single address touching dozens of unaudited contracts accumulates risk with every interaction. Tiering wallets by purpose, as covered in Step 2, limits how much exposure any single mistake creates.
Trusting a hardware wallet bought secondhand. There’s no reliable way to confirm a used device wasn’t tampered with before you received it, no matter how convincing the packaging looks.
Skipping the test transaction. Sending a full balance on the first try, to a freshly configured wallet or a freshly copied address, turns a typo into a total loss instead of a near miss.
Ignoring old approvals because “nothing happened yet.” A stale approval isn’t a risk until the moment the approved contract is exploited, and by then it’s too late to revoke it in time.
Signing blind on a mobile wallet. Small screens make it easy to tap “confirm” on a transaction without reading what it actually authorizes. Slow down on mobile the same way you would on desktop, or move signing for anything significant to a device with a larger screen and a real transaction preview.
2025 Wallet Threat Data at a Glance
The year-over-year shift in these numbers is worth reading closely, because it tells you where defenses are actually working and where the risk has moved instead of disappeared. Overall wallet-drainer losses fell sharply while incident volume held steady, which lines up with wallet-level detection catching more attempts before signature. Average scam payment size rising, on the other hand, suggests attackers are compensating by chasing fewer, larger targets rather than mass phishing at small dollar amounts.
| Metric | 2024 | 2025 | Source |
|---|---|---|---|
| Personal wallet compromise losses | ~$1.5B | $713M | Chainalysis 2026 Crypto Crime Report |
| Wallet-drainer phishing losses | ~$494M | $83.85M | Scam Sniffer 2025 Report |
| Wallet-drainer phishing victims | Not disclosed | 106,106 | Scam Sniffer 2025 Report |
| Personal wallet share of stolen value | 44% | ~20% | Chainalysis 2026 Crypto Crime Report |
| Average scam payment size | ~$782 | ~$2,764 | Chainalysis scams chapter (253% YoY) |
Troubleshooting Common Wallet Security Issues
| Issue | Likely Cause | Fix |
|---|---|---|
| Scanner script returns zero approval events | Wrong chain ID or the wallet has never interacted on that chain | Confirm CHAIN_ID in .env matches the network you’re checking |
| Etherscan API returns rate-limit errors | Free tier caps requests per second | Add a short delay between calls or upgrade to a paid tier for large wallets |
| Hardware wallet fails genuine check | Device may be tampered, or firmware is out of date | Contact the manufacturer directly, don’t proceed with setup |
| Watch-only wallet shows wrong balance | Wrong network selected in the wallet UI | Verify the chain dropdown matches where the funds actually sit |
| Transaction simulation shows unexpected balance changes | Malicious or unaudited contract | Reject the transaction, don’t sign to “see what happens” |
| Checksum validator flags a known-good address | Address was pasted from an all-lowercase source | Confirm through a second source such as a block explorer before sending |
| Cron job for the scanner never runs | Environment variables not loaded in the cron shell | Use an absolute path to node and load .env explicitly in the script |
| MetaMask security alerts don’t appear | Feature toggled off or extension out of date | Update the extension and confirm the toggle under Settings, Security & Privacy |
| Multisig transaction stuck pending | Not enough signers have approved yet | Confirm the signature threshold and follow up with remaining signers directly |
Advanced Tips for Power Users
- Use an air-gapped signing setup (a permanently offline device that signs via QR code or SD card) for cold storage that never needs to touch a network-connected machine
- For Bitcoin, sign transactions using PSBT (Partially Signed Bitcoin Transactions) so multiple hardware devices can collaborate on a multisig spend without any device seeing the full private key
- Keep a dedicated deposit-only wallet for sending funds to centralized exchanges, separate from your DeFi wallet, so one compromised session can’t touch exchange-bound funds
- Where exchanges support it, use a hardware security key or passkey instead of SMS-based two-factor authentication, since SIM-swapping remains a working attack against phone-based codes
- Run a separate, disposable wallet for testnets, NFT mints, and unaudited new protocols, keeping it fully isolated from wallets holding real savings
- Review WalletConnect sessions periodically and disconnect anything you don’t recognize, since a stale session can sometimes be reused to request new approvals
None of these advanced steps replace the twelve above, they build on them once the basics are solid. An air-gapped signer is only worth the extra friction if your seed backup and PIN setup from Step 3 and Step 4 are already handled correctly, and a passkey on your exchange account does nothing if the wallet it withdraws to is still a single unprotected browser extension. Treat the advanced tier as what you add once the fundamentals stop being the weak point in your setup.
Organizations building wallet infrastructure should also treat this as an ongoing discipline rather than a one-time setup. The OWASP Smart Contract Top 10 and NIST’s broader guidance on key management are useful references for teams designing custody systems, and MetaMask’s own staying safe in Web3 documentation is a good baseline to point non-technical users toward. For a deeper look at how theft patterns have shifted industry-wide, Chainalysis’s 2026 Crypto Crime Report and Ledger’s Ledger Academy both go further than this guide can on the analytics side. This setup fits into the broader self-custody practices we track across our cryptocurrency coverage, including exchange hacks, bridge exploits, and the hardware flaws that keep surfacing in 2026.
Frequently Asked Questions
How often should I run the allowance scanner?
Weekly is enough for active DeFi users. If you rarely interact with new protocols, monthly is fine, but run it immediately after any new dApp interaction you weren’t fully sure about.
Is a hardware wallet still necessary if I only hold a small amount?
Given that the average personal wallet compromise in 2025 cost victims about $4,500 according to Chainalysis, a $60-$150 hardware wallet pays for itself well before your holdings reach that level.
Can I use the same seed phrase across multiple hardware wallet brands?
Technically the BIP-39 standard allows it, but doing so undermines the tiering strategy in this guide. Generate a distinct seed for each tier instead.
What’s the difference between address poisoning and a wallet drainer?
Address poisoning tricks you into sending funds to a look-alike address you copied by mistake. A drainer is a malicious contract that uses an approval you already granted to move funds without any further action from you.
Do I need multisig if I already use a hardware wallet?
For holdings small enough that losing them wouldn’t be life-altering, a single hardware wallet with a solid backup is reasonable. For anything larger, multisig removes the single point of failure a lone device still represents.
Why did wallet-drainer losses drop 83% in 2025 if attacks are still common?
Scam Sniffer’s data shows losses fell even as attack volume stayed high, largely because wallet-level defenses like MetaMask’s and Rabby’s built-in simulation and address-poisoning detection now catch a meaningful share of attempts before users sign.
Should I revoke an approval even if the protocol looks legitimate?
Revoke anything you no longer actively use, legitimate or not. A protocol’s contracts can be exploited later even if they were trustworthy when you first approved them, and an old unused approval carries risk with no offsetting benefit.
Does watch-only monitoring expose any risk to my cold wallet?
No. A watch-only address contains no private key data at all, only the public address, so adding one to a monitoring wallet or app can’t be used to move funds from the real wallet it tracks.
Is it safe to run the approval scanner script on my own machine?
Yes. The script only reads public on-chain log data through the Etherscan API using your wallet’s public address, and never requests, stores, or transmits a private key or seed phrase at any point.




