Как читать tx перед подписью в MetaMask 2026: calldata, simulate, blowfish
Большинство потерь крипто-юзеров — из-за подписи tx без проверки. Как читать calldata, использовать simulate-сервисы (Blowfish, Wallet Guard, Pocket Universe).
Опубликовано 03.05.2026
Когда фишинг-сайт даёт вам подписать tx и вы видите в MetaMask что-то типа «MetaMask is requesting your signature» с непонятным hex-кодом — это критический момент. Большинство drainer-атак работают именно здесь: пользователь подписывает tx, не понимая что подписывает, и через 10 секунд кошелёк пуст. Разбираемся, как читать tx до подписи и какие сервисы помогают.
Что такое calldata
Calldata — закодированные данные, которые вы отправляете smart-контракту. Это что именно вы просите контракт сделать + с какими параметрами.
Пример. Когда вы вызываете «approve USDT to Uniswap router for unlimited amount» — calldata выглядит как:
«0x095ea7b3000000000000000000000000c0a47dfe...00000000000000000000ff...»
Раскодировать:
- 0x095ea7b3 — function selector «approve(address,uint256)» (первые 4 байта — хеш сигнатуры функции)
- address — кому вы дали approve
- uint256 — сколько (max uint256 = «unlimited»)
Если вы не понимаете эти 4 байта — у вас нет шансов отличить «approve to Uniswap» от «approve to drainer». Они выглядят одинаково в hex.
Как читать calldata в MetaMask
MetaMask с 2023 показывает Decoded transaction для известных контрактов:
- Если контракт верифицирован на Etherscan, MetaMask парсит ABI и показывает «approve(spender: 0x…, amount: …)».
- Для неверифицированных контрактов — голый hex.
Что проверять:
1. Function name. Должно быть то, что вы ожидаете. Если вы хотели сделать swap, а вижу «setApprovalForAll» — не подписывайте, это NFT-drainer.
2. Spender / target address. Сравните с известным адресом протокола. Uniswap router в Ethereum — «0xE592427A0AEce92De3Edee1F18E0157C05861564» (V3) или «0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af» (V4). Если другой адрес — могут быть поддельный контракт под видом «Uniswap».
3. Amount. Если видите unsigned int максимум («115792089237316195423570985008687907853269984665640564039457584007913129639935» или «2^256 - 1») — это unlimited approve. Опасно. Можно установить лимит самостоятельно (только нужное количество).
4. Recipient (для transfer). Адрес куда уходят токены. Внимательно сверьте с тем, кому вы хотели отправить.
Симуляция tx через сторонние сервисы
В MetaMask нет встроенной симуляции «что произойдёт если я подпишу». Сторонние сервисы решают это:
Blowfish
Расширение для Chrome / Firefox. Перехватывает tx-popup MetaMask, показывает:
- что изменится в вашем кошельке (плюс/минус каких токенов)
- если контракт известный drainer — красный warning
- approve-калькулятор: «вы дадите approve на X USDC, что = Y$»
Бесплатное. Покрытие — основные сети (Ethereum, Arbitrum, Polygon, BSC, Base, Optimism).
Wallet Guard
Аналог Blowfish, ещё немного фокус на phishing-detection. Сравнивает домен сайта с known-good. Базы phishing-доменов обновляются автоматически.
Pocket Universe
Премиум ($5/мес), глубже simulation, лучшая поддержка NFT-операций. Если активно работаете с NFT — стоит того.
Tenderly Simulator (для опытных)
Бесплатный web-инструмент. Введите calldata, contract address, from-address — получаете полный trace выполнения, какие токены двигаются. Не интегрирован в кошелёк, но полезно для review подозрительных tx перед подписью.
Опасные паттерны — что должно вас остановить
❌ setApprovalForAll(true) — даёт оператору контроль над ВСЕМИ вашими NFT в коллекции. Используется legitimately только в OpenSea/Blur/Magic Eden. На любом другом сайте — drainer.
❌ approve(spender, max_uint256) — unlimited approve на стейблкоин. Всегда ограничивайте сумму.
❌ permit / permit2 + transferFrom — gasless approve. Drainer может попросить вас «sign permit», и потом прозрачно списать токены без вашей второй подписи. Проверяйте permit-amount и spender.
❌ multicall с десятком вложенных операций — drainer может скрыть «transfer all your USDT» в третьей внутренней вызове. Отдельные сложные tx подписывайте только если явно понимаете каждый шаг.
❌ EIP-712 typed data signing — сложнее calldata, легче спрятать. Если видите длинный JSON в подписи — внимательно проверяйте domain, type, message. Особенно если речь о Seaport (OpenSea), Uniswap permit, EigenLayer delegate.
Как настроить защиту здесь и сейчас
За 5 минут:
- Установите Blowfish (бесплатно, Chrome Store)
- Включите Wallet Guard как backup
- В MetaMask Settings → Advanced → Show conversion in test networks: Off, Show advanced reset option: On
- Регулярно делайте «revoke.cash» cleanup ваших активных approve
За 30 минут:
- Создайте отдельный hot-wallet для DeFi-операций. Держите там минимум, не основной холд.
- Основной холд переведите на hardware wallet (Ledger, Trezor) или smart-account (Account Abstraction →).
- Настройте Etherscan custom RPC через Flashbots Protect для Ethereum L1 (MEV-защита →).
Что делать если вы уже подписали что-то подозрительное
1. Немедленно зайдите на revoke.cash, подключите кошелёк, посмотрите все active approve. Отзовите всё подозрительное.
2. Переведите крипту на новый адрес если вы дали approve на USDC/USDT/любой ERC-20. Drainer может прийти не сейчас, а через дни/недели.
3. Если уже сняли средства — публичные адреса drainer'а часто известны (chainabuse.com, scamniffer). Подайте репорт в Tether/USDC — иногда они блокируют дренер-адреса (особенно USDC, который не stand 100% censorship-resistant).
4. Налоговые и юридические аспекты: Если суммы значительные — есть смысл записать инцидент в полицию (заявление в РФ принимают в 1-2% случаев) и Chainalysis Reactor (для будущей трассировки).
Чек-лист перед каждой подписью
- ✅ Проверил function name в MetaMask decoded view
- ✅ Проверил spender / target address = известный адрес протокола
- ✅ Проверил amount не unlimited без необходимости
- ✅ Blowfish или Wallet Guard показывает зелёный статус (не красный)
- ✅ Сайт — точно официальный (URL без подмены: uniswap.org не uniswap.com.scam.io)
- ✅ Если что-то непонятно — не подписывал
Дальше
Проверь крипту перед обменом
AML-анализ кошелька за 1-5 минут. $1-3. Не дай бирже заморозить депозит из-за «грязных» монет в истории.