Фишинг через симуляцию транзакции — это новая для массового пользователя техника, в которой защитный preview кошелька становится частью обмана. Smart contract способен показать безопасный или даже прибыльный результат при предварительном исполнении, а затем использовать изменившееся состояние блокчейна, параметры gas, номер блока или время, чтобы реальная on-chain транзакция пошла по другой финансовой ветке.

Тема стала особенно актуальной после публикации 30 июля 2026 года исследования Blockchain Transaction Simulation Phishing. Авторы систематизировали шесть классов таких contracts и показали, что атака эксплуатирует разрыв между состоянием, проверенным simulator, и состоянием, в котором transaction фактически исполняется. Для пользователя основной вывод прост: estimated balance changes — прогноз, а не гарантия.

Ниже разобраны не только академические детали, но и практический контроль без чтения EVM bytecode: как увидеть опасный gross outgoing, почему крошечный projected profit не оправдывает большой payable call, когда необходимо повторить simulation, как отличить конкретную вредную transaction от утечки seed и какие доказательства сохранить после инцидента.

Что такое фишинг через симуляцию транзакции

Симуляция и реальное исполнение

Слой Что видит Что может измениться Риск
Simulation Текущий state Storage, block, timestamp Preview устаревает
Signed transaction Фактические параметры Gas/fee Другая ветка
On-chain execution State внутри блока Предшествующие tx Финальный result
Wallet UI Агрегированный preview Округление Ложная уверенность

Атака направлена против самого защитного preview

Transaction simulation phishing — это схема, где malicious smart contract специально создаёт безопасный или прибыльный результат при предварительном исполнении, а реальная on-chain транзакция позже идёт по другой ветке. Пользователь видит защитный preview и воспринимает его как независимое подтверждение. Критическая ошибка — считать estimated balance changes гарантией. Simulator видит конкретный state snapshot и набор параметров, а реальная сеть продолжает меняться. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Смотрите не только на net change, но и на gross outgoing value, destination contract и экономическую логику сделки. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Почему угроза стала заметна именно сейчас

Современные кошельки всё чаще декодируют вызовы, моделируют изменения балансов и показывают security alerts. Старые drainers стали легче обнаруживаться, поэтому атакующие начали эксплуатировать assumptions самого simulation layer. Новая техника не отменяет пользу preview; она показывает security arms race: защита стала популярной — значит её модель начали целенаправленно обходить. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Используйте simulation как один слой defense in depth, а не как единственный критерий разрешения high-value transaction. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Что показало исследование июля 2026 года

Работа Blockchain Transaction Simulation Phishing, опубликованная на arXiv 30 июля 2026 года, описывает шесть классов таких contracts и detector SimGuard. В исследованном наборе авторы нашли 4 224 phishing contracts, более 5 700 victim addresses и свыше 3,48 млн долларов потерь. Эти числа относятся к конкретной методологии и четырём EVM-сетям, а не являются официальной глобальной статистикой. Работа пока является препринтом. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Используйте её как сильный сигнал emerging threat, но отделяйте измеренные findings авторов от более общих пользовательских рекомендаций. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Почему положительный preview психологически опасен

Красное предупреждение естественно заставляет остановиться, а маленький зелёный плюс действует наоборот: пользователь чувствует, что wallet уже всё проверил. Именно этот перенос доверия на интерфейс и делает новую схему эффективной. Даже tiny reward может визуально перекрыть огромный временный deposit, если UI показывает только итоговую дельту или округлённый результат. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Перед подтверждением отдельно ответьте: сколько активов я безусловно отправляю contract до любого обещанного возврата? Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Чем это отличается от обычного wallet drainer

Традиционный drainer часто использует approve, Permit, setApprovalForAll или прямой transfer, который simulator способен показать как потерю. Здесь benign branch специально предназначена для simulation, поэтому security preview может выглядеть безопасно. При расследовании важно не путать эти механизмы: simulation phishing может быть обычным payable call без утечки seed и без старого allowance. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Сначала классифицируйте actual transaction по hash и trace, а уже потом решайте, нужен revoke, migration wallet или только фиксация direct loss. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Атака не требует recovery phrase

Злоумышленнику не обязательно красть seed. Жертва сама подписывает настоящий transaction request своим настоящим ключом, потому что доверяет preview. Поэтому одна вредная transaction ещё не доказывает компрометацию корневого секрета. Ошибочная рекомендация «сразу меняйте seed» может создать лишние transfer risks и не объясняет реальный механизм потери. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Новый wallet обязателен при признаках leaked key/seed; при simulation phishing начните с on-chain evidence и permissions. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Аппаратный кошелёк не распознаёт деловую цель

Hardware signer защищает private key, но честно подписывает transaction, которую подтвердил владелец. Если внешний интерфейс показывает прибыльный simulation result, пользователь может санкционировать вредный contract call, не раскрывая seed. Clear signing уменьшает риск лишь тогда, когда пользователь видит точную сумму, сеть и destination. Оно не анализирует всю будущую state-dependent логику smart contract. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

На аппаратном экране сверяйте gross outgoing и contract, а на основном интерфейсе — simulation и source provenance. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Как работает обычная симуляция транзакции

Масштаб исследования 2026

Метрика Finding авторов Как трактовать
Phishing contracts 4 224 Четыре исследованные EVM-сети
Victim addresses >5 700 Адреса по методологии авторов
Losses >$3.48M+ Не глобальная статистика
Ethereum share 91.5% losses В исследованном dataset

Simulator исполняет transaction на копии состояния

Wallet или security service предварительно выполняет запрос на текущем blockchain state, чтобы оценить balance changes, NFT transfers, approvals и возможный revert. Результат не записывается в сеть — это speculative execution. Такая модель великолепно ловит immediate effects, но она верна только при тех входных параметрах и state, которые использовались во время проверки. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Чем больше сумма, тем важнее знать block/state context и не воспринимать simulation как уже состоявшееся исполнение. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Estimated balance changes — именно оценка

Текущая документация MetaMask прямо предупреждает, что новые transactions постоянно входят в blockchain и финальный outcome simulation не гарантирован. Термин estimated здесь принципиален. В интерфейсе пользователь быстро перестаёт замечать слово estimated и читает лишь знак плюс или минус рядом с балансом. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

При large value сверяйте точный outgoing amount и expected incoming отдельно; net delta — только один из показателей. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

State snapshot может устареть за секунды

Contract читает storage, pool reserves, registry, blacklist, oracle или state внешнего contract. Между simulation и inclusion в block другие transactions могут изменить эти данные. Обычные DeFi-протоколы тоже state-dependent, поэтому сам факт динамики не означает scam. Опасна именно способность state переключить destination крупного payment. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Если неизвестный claim зависит от owner-controlled mapping или внешнего registry, risk намного выше, чем у простого deterministic transfer. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Gas может стать управляющей переменной

Исследование описывает contracts, где branch зависит от gas limit. Simulator может использовать default/adjusted gas, а фактический transaction — значение, которое сформировал dApp. Пользователь привык думать о gas исключительно как о стоимости вычислений и не ожидает, что от него зависит получатель средств. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

После изменения gas для unknown contract нужен новый preview; необычно высокий gas в простом claim — дополнительный red flag. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Gas price тоже способен менять ветку

По аналогии contract может сравнивать fee context с threshold. Simulator и финальная transaction используют разные assumptions, и benign branch перестаёт совпадать с on-chain execution. Для обычного пользователя эта зависимость практически невидима: изменение priority fee кажется чисто технической настройкой. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Не подписывайте high-value unknown contract после manual fee change, если wallet не пересимулировал фактический request. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Block number и timestamp меняются неизбежно

Даже без attacker transaction следующий block имеет другой number и время. Contract может использовать эти переменные как переключатель: simulation проходит до threshold, execution — после него. В отличие от storage attack пользователю нельзя «успеть быстрее» гарантированно: сам процесс mining создаёт временной разрыв. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Unknown payable call, где destination зависит от ближайшего block/time, должен считаться unstable outcome. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Decoding и simulation решают разные задачи

Decoding объясняет, какую функцию и аргументы подписывает пользователь; simulation прогнозирует результат выполнения. Понятная calldata не раскрывает hidden storage branch, а красивый preview не показывает все параметры вызова. Ни один слой не заменяет другой. Особенно опасно, когда dApp пишет Claim, wallet показывает плюс, но transaction фактически отправляет весь native balance в unknown contract. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Для significant transaction нужны contract, method, gross value и predicted changes одновременно. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Классический сценарий: storage-control и TOCTOU

TOCTOU-цепочка

Этап State Что видит пользователь
Connect Address известен dApp Обычная session
Simulation Safe branch Deposit возвращается
State change Blacklist/flag меняется Обычно не видно
Execution Loss branch Deposit уходит attacker

Фальшивый claim сначала выглядит прибыльным

Типовая атака начинается с fake airdrop/free crypto page. Wallet формирует payable transaction в phishing contract, который в текущем state возвращает deposit и символическую прибыль, поэтому preview выглядит положительно. Экономика сама по себе подозрительна: ради tiny reward пользователь временно отдаёт крупную сумму неизвестному contract. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Если downside во много раз больше reward, не позволяйте зелёному preview перекрыть базовую проверку здравого смысла. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

После Connect атакующий уже знает public address

DApp получает account address без seed и может использовать его для адресной blacklist-логики в собственном contract. Это нормальная публичная информация, но в атаке она становится input для targeted state change. Следовательно, совет «не раскрывайте свой адрес» здесь бессмыслен; защита должна работать даже при известном public address. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Оценивайте не секретность адреса, а полномочия contract owner и возможность менять state вокруг вашей transaction. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

State меняется между проверкой и использованием

После simulation attacker меняет blacklist/flag. Когда victim transaction исполняется, if-else идёт уже по loss branch и отправляет deposit на attacker-controlled address. Это time-of-check-to-time-of-use: проверка была корректна для старого state, но этот state не пережил время до исполнения. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Старый preview нельзя считать актуальным, если relevant contract state изменился; wallet должен re-simulate. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Frontrun используется как переключатель логики

Attacker transaction может попасть перед victim transaction и изменить state, не ради цены swap, а ради смены financial destination. Это другой security use of ordering, чем привычный MEV. Даже privacy/mempool protection не нужно автоматически считать универсальным решением: механика зависит от конкретного control variable и submission path. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Главная защита — не доверять неизвестному contract с большим call value и анализировать outcome stability. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Повторная simulation помогает, но окно остаётся

Если wallet увидит изменившийся state и пересчитает result, storage-control attack может раскрыться. Поэтому researchers рекомендуют state monitoring и re-simulation. Но между последней simulation и block inclusion всегда остаётся промежуток. Полностью свести проблему к «пересчитать ещё раз» недостаточно. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Для high-value unknown contracts нужна и behavioral/static analysis, и user-side limit policy. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Dust reward может скрывать огромный outgoing

Исследованные contracts часто возвращали от 1 до 10 000 wei. Такой reward экономически ничтожен, но UI способен показать маленький положительный change, тогда как contract временно получает весь deposit. Net change без gross amount создаёт misleading framing. Пользователь видит «+», хотя реальный downside огромен. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Всегда выделяйте отправляемую сумму отдельно от ожидаемого возврата; tiny reward не оправдывает крупный deposit. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Кейс 143,4 ETH показывает цену ошибки

Авторы описывают victim, потерявшего более 143 ETH в storage-control contract. В safe branch contract возвращал лишь 1 wei, а после blacklist state фактический перевод ушёл attacker. Это один case study, а не доказательство дефекта любого кошелька, но он демонстрирует масштаб возможного mismatch между UI impression и economic exposure. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Для large native-value calls нужен независимый контроль outgoing amount даже при positive simulation. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Шесть классов phishing contracts, меняющих результат после simulation

Шесть классов attack logic

Класс Control variable Причина divergence
Storage-control Internal storage Mapping/flag меняется
External-control External contract Registry меняется
Gas-control Gas limit Simulation/tx отличаются
Gasprice-control Fee context Price assumptions различаются
Blocknumber-control block.number Следующий block меняет branch
Timestamp-control block.timestamp Время меняет branch

Storage-control

Контракт хранит управляющее состояние в собственном storage: blacklist, flag, mapping или другой переключатель. Во время preview значение ведёт к ветке, которая возвращает deposit пользователю, а после simulation владелец phishing contract меняет storage и реальное исполнение направляет средства во внешний адрес. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Для пользователя особенно подозрительны неизвестные claim-функции, где возврат крупного депозита зависит от owner-controlled mapping. Для защитного wallet важна зависимость результата от конкретных storage slots: если они изменились после preview, старый расчёт больше нельзя показывать как актуальный. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

External-control

Основной malicious contract выносит критичное состояние во внешний registry, helper или другой contract. На simulation внешний вызов возвращает значение для безопасной ветки, затем атакующий меняет состояние внешнего адреса, и тот же calldata при реальном исполнении приводит уже к потере. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Такой вариант сложнее обнаруживать, потому что анализировать приходится не только destination contract, но и цепочку внутренних calls. Пользователю red flag даёт несоразмерная сложность: простой airdrop или reward неожиданно зависит от неизвестных helper-contracts, не указанных в документации проекта. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Gas-control

Вредоносная логика сравнивает доступный gas или gas limit с порогом и выбирает финансовую ветку по результату. Если simulator использовал default gas, отличный от параметра реальной transaction, preview и финальное исполнение способны показать противоположные результаты. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Gas обычно воспринимается как техническая настройка стоимости и лимита вычислений, поэтому его использование как переключателя получателя денег нетипично для простого claim. После изменения gas limit high-value request должен быть пересимулирован с фактически подписываемым значением. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Gasprice-control

Вместо gas limit contract использует gas price или связанные fee-параметры. Симулятор может работать с одним предположением, а wallet перед отправкой обновит fee в соответствии с сетью; malicious branch специально рассчитывается на это расхождение. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Пользователь не должен считать настройку комиссии независимой от security preview при неизвестном contract. Если fee меняется после расчёта balance changes, старый preview относится уже не полностью к той transaction, которую пользователь собирается подписать. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Blocknumber-control

Contract использует block.number и строит условие так, чтобы current block при simulation попадал в безопасную ветку, а следующий или один из ближайших блоков — в harmful branch. Отдельная attacker transaction для переключения может не потребоваться: сеть сама продвигает block number. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Для защиты полезна differential simulation на текущем и нескольких будущих blocks. Пользовательский вывод проще: крупный payable call к неизвестному contract не должен становиться приемлемым только потому, что preview на одном текущем block выглядит благополучно. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Timestamp-control

Условие основано на block.timestamp. DApp может сформировать аргумент или threshold, который ещё не истёк в момент simulation, но к реальному inclusion время проходит и contract выбирает ветку, переводящую deposit атакующему. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Timestamp широко применяется легитимными DEX для deadlines, поэтому само его наличие не доказывает phishing. Опасной является финансовая асимметрия: небольшое изменение времени меняет не просто успешность сделки, а адрес или сторону, получающую крупную сумму. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Почему шесть классов не исчерпывают будущие варианты

Исследование классифицирует практически наблюдавшиеся способы управления branch через dynamic blockchain context, но EVM и wallet infrastructure продолжают развиваться. Account abstraction, L2 semantics, new opcodes, paymasters и внешние services дают дополнительные поверхности, которые могут использовать похожий принцип расхождения между check и use. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Поэтому защита не должна сводиться к шести сигнатурам. Более общий критерий — финансовый outcome существенно меняется при малом изменении environment или state. Если такой instability обнаруживается, wallet должен предупреждать пользователя, а не выбирать один удобный прогноз как окончательный. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Почему интерфейс кошелька может вводить в заблуждение

Что должен показывать wallet

Поле Зачем Плохая альтернатива
Gross outgoing Показывает максимум at risk Только net delta
Destination contract Показывает получателя call Только название dApp
Method/calldata Объясняет действие Только кнопка Claim
Simulation context Показывает свежесть Preview без block/time

Net balance change скрывает gross transfer

Интерфейс часто старается показать итог: сколько активов предположительно станет больше или меньше после execution. Но net delta способен скрыть структуру операции, где пользователь сначала отправляет contract крупную сумму, а затем ожидает почти полный возврат. Именно промежуточный gross outgoing и является настоящим размером риска. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Перед подписью полезно отвечать на два отдельных вопроса: сколько безусловно уходит из моего account и сколько simulator предполагает получить обратно. Если первая цифра огромна, а вторая зависит от неизвестного contract, зелёный net result не должен снижать осторожность. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Округление превращает dust в психологический сигнал прибыли

Микроскопический возврат вроде нескольких wei может отображаться как маленький плюс, знак `+` или значение, округлённое почти до нуля. В контексте большой payable transaction пользователь видит положительный direction и интуитивно воспринимает его как подтверждение безопасности. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Экономика должна оцениваться в абсолютных величинах. Reward, который не покрывает даже gas, не оправдывает передачу значимого deposit. UI желательно отделять dust from meaningful gain, а пользователь может самостоятельно сравнить reward с outgoing value и network fee. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Security alert и simulation могут конфликтовать

Wallet способен одновременно показать positive balance preview и предупреждение о неизвестном или подозрительном contract. Эти сигналы получены разными системами: simulation оценивает execution, reputation layer работает с labels, history и threat intelligence. Они не голосуют друг против друга. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Если хотя бы один независимый слой показывает существенный риск, операция должна остановиться до объяснения конфликта. Нельзя выбирать более приятный зелёный preview и игнорировать reputation warning только потому, что обещанная прибыль совпадает с ожиданием пользователя. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

UI не всегда раскрывает internal calls

Top-level transaction может обращаться к одному contract, а тот — к registry, helper, proxy или collection address. Aggregated balance changes иногда скрывают, какая внутренняя ветка и какой внешний state определили получателя. Это особенно важно для external-control variants. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

При high-value DeFi полезны trace-capable explorer или simulator, раскрывающий internal calls. Для обычного пользователя остаётся практичный критерий: простой free claim не должен требовать непрозрачной цепочки неизвестных contracts и большого native deposit. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Свежесть simulation редко видна пользователю

Confirmation screen не всегда сообщает block number, timestamp или время, когда выполнялся preview. Пользователь может держать окно открытым, менять gas или ждать сеть, считая результат всё ещё актуальным, хотя relevant storage уже изменился. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Для значимой операции stale preview следует считать менее надёжным. Wallet ideally должен автоматически пересчитывать результат после state or parameter changes; пользователь может как минимум отменить долго висящий request и сформировать новый через проверенный dApp. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Один зелёный badge создаёт ложную бинарность

Security UI вынужден упрощать сложную модель до `No issues`, зелёной галочки или положительного balance change. Такое представление удобно, но легко превращается в неверный вывод «система гарантирует безопасность», хотя корректный смысл ближе к «известная проблема не обнаружена при текущих assumptions». Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Чем новее attack technique, тем выше вероятность, что reputation rules и simulations ещё не охватывают все варианты. Пользователь должен воспринимать зелёный статус как один аргумент, а не как разрешение на любой размер transaction. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Почему опытный пользователь тоже уязвим

Новичка часто ловят незнанием seed и approvals, а опытного — доверием к уже освоенным защитным инструментам. Человек, привыкший всегда смотреть preview и не подписывать явный outflow, становится особенно уверен, когда malicious contract научился показывать именно тот benign result, который он ожидает. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Security habits должны включать понимание границ инструмента. Simulation отлично помогает при deterministic immediate effects, но слабее при deliberately state-dependent logic. Для large-value operations необходимы provenance, clear signing, independent limits и wallet isolation. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Как пользователь может снизить риск без анализа EVM-байткода

Пользовательские red flags

Сигнал Почему опасно Реакция
Большой deposit ради dust Несоразмерная economics Отменить
Unknown payable contract Нет provenance Проверить source
Stale preview State мог измениться Re-simulate
Fee changed Context другой Новый preview

Начинать с экономической логики сделки

Если неизвестный сайт обещает бесплатный airdrop, но для получения просит временно отправить 2 ETH или почти весь native balance в contract, несоответствие видно без технического анализа. Legitimate reward не становится рациональным только потому, что simulator прогнозирует возврат с крошечным бонусом. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

До подписи сформулируйте, что вы отдаёте безусловно и что обещают вернуть условно. Если downside в тысячи раз больше reward, лучшая защита — отказаться от сделки до исследования bytecode. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Смотреть gross outgoing value

Для simulation-phishing это один из самых практичных controls. Пользователь должен видеть `value` native transaction и прямые token transfers до любых предполагаемых возвратов. Большой gross outgoing означает, что contract на момент execution получает реальную возможность распоряжаться значимой суммой по своей логике. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

На hardware wallet и confirmation screen сверяйте amount, network и destination. Если приложение показывает только итоговый net balance и скрывает исходящий value, используйте другой decoder или не выполняйте high-value call. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Проверять provenance contract address

Contract address должен быть подтверждён официальной документацией protocol, а source и deployment history — хотя бы базово понятны. Verified source не гарантирует честность, но неизвестный contract, существующий только на странице claim, имеет существенно более слабую доказательную базу. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Не позволяйте одному сайту одновременно сформировать transaction и быть единственным источником, подтверждающим адрес назначения. Для известного DeFi найдите contract в docs, repository или explorer labels независимо. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

После фактического исполнения результат сверяют по TxID и данным блокчейна, а не только по старому preview.

Не использовать основной резерв для неизвестных claims

Отдельный dApp-wallet с ограниченным балансом не распознаёт malicious branch, зато заранее ограничивает максимум потери. Этот control работает даже против новой техники, о которой scanner или wallet ещё ничего не знает. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Долгосрочный reserve лучше не подключать к airdrops, mints и экспериментальным protocols. Рабочий адрес получает только сумму, необходимую для конкретной операции, плюс разумный network fee. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Отменять сделки с несоразмерно маленькой наградой

Исследованные contracts нередко возвращали символический reward. Если предполагаемая прибыль измеряется dust и не покрывает комиссию, transaction не имеет рациональной экономической причины, особенно когда требует крупный deposit. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Сравните projected reward, gas cost и amount at risk. Не позволяйте зелёному `+` заменять арифметику: экономически бессмысленная операция должна быть отклонена до сложного security analysis. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Не считать второй simulator абсолютной независимой проверкой

Два wallets или security services могут использовать одинаковый current-state RPC и одинаковые assumptions. Тогда оба воспроизведут benign branch и покажут похожий result. Независимость названий продуктов не означает независимость модели исполнения. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Второй preview полезен, но сочетайте разные виды evidence: gross value, verified contract, source history, internal calls, wallet isolation и отсутствие unusual state-sensitive conditions. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Осторожно менять gas после preview

При unknown contract ручное изменение gas limit или fee после simulation меняет контекст, на котором строился прогноз. В обычной transaction это часто влияет только на стоимость и вероятность включения, но gas-control и gasprice-control специально превращают эти параметры в branch condition. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

После существенной коррекции fee ожидайте новый preview. Если wallet не пересимулирует request, для high-value interaction безопаснее отменить и заново сформировать transaction. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Не воспринимать simulation как страховку

Transaction simulation ничего не гарантирует после mining и не создаёт chargeback. Это diagnostic control до подписи. Даже protection products и security alerts имеют scope, exclusions и технические ограничения. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Главная защита остаётся до execution: проверенный dApp, contract provenance, понятная сумма, минимальные permissions и заранее ограниченный blast radius. После необратимого harmful call возможности пользователя уже значительно меньше. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Что делать, если вы уже подписали подозрительную transaction

Seed и тип компрометации

Событие Seed может быть безопасна? Контроль
Malicious call подписан Да Tx trace
Loss через contract Да Проверить другие tx
Seed введена на сайте Нет Новый wallet
Malware executed Высокая неопределённость Clean-device audit

Сразу найти transaction hash и фактический результат

Первый источник истины — blockchain execution. Нужно проверить status, top-level value, internal transfers, token movements, logs и destination contract. Сравнение actual result с тем, что показывал preview, помогает отличить simulation mismatch от обычного slippage, fee, revert или ошибки интерфейса. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Не основывайте расследование только на screenshot кошелька. TxID позволяет другому специалисту воспроизвести факт. Если transaction ещё pending, возможность cancel или replace зависит от сети и nonce mechanics; используйте функции проверенного wallet, а не recovery-link из чата. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Для расследования заранее сохраните скриншоты, TxID и адреса, подтверждающие перевод.

Проверить, не было ли approvals кроме прямого платежа

Фишинговая страница может сочетать payable call с approve, Permit, NFT permission или batch. Поэтому даже если основная потеря уже очевидна, нужно проверить, не остались ли долгоживущие права, способные затронуть будущий баланс. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Просмотрите ERC-20 allowances, NFT operators и известные permits. On-chain approvals отзываются отдельной transaction. Revoke не возвращает уже отправленный deposit, но способен закрыть вторичный канал риска. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Не объявлять seed скомпрометированной без фактов

Если пользователь подключил настоящий wallet и собственноручно подписал malicious contract call, атакующий мог получить только конкретное разрешённое действие, а не recovery phrase. Ошибочная массовая миграция всех accounts сама создаёт новые network и address risks. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Новый key root обязателен при факте ввода seed/private key на сайте, при malware/key theft или неизвестных outgoing transactions без участия владельца. В остальных случаях сначала классифицируйте on-chain incident. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Если появились реальные признаки утечки ключевого материала, используйте отдельный план защиты криптокошелька после компрометации.

Отключить подозрительный dApp, но помнить о границе disconnect

Disconnect прекращает session и новые interactive requests, но не изменяет уже подтверждённое состояние blockchain. Если contract получил allowance, операторское право или другую permission, оно продолжит существовать после закрытия сайта. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Не возвращайтесь на phishing page ради кнопки Disconnect. Используйте connected-sites section своего wallet или проверенный wallet interface, затем отдельно выполните permission audit. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

После сомнительной сессии примените алгоритм действий после подключения к подозрительному сайту.

Сохранить preview как отдельное доказательство

Для transaction simulation phishing особенно ценен screenshot confirmation screen: он показывает, что wallet прогнозировал перед подписью. Вместе с TxID можно документировать конкретное расхождение между simulated и actual result и передать его security team. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

В evidence не включают seed, private key или backup QR. Достаточно wallet/version, network, timestamp, contract, transaction hash, screenshot balance changes и, при возможности, simulation block/context. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Сообщить wallet vendor и security-команде

Воспроизводимый simulation mismatch важен не только конкретному пользователю. Разработчики wallet могут проверить assumptions simulator, добавить contract pattern в protection system или изменить UI, если он скрывает gross outgoing. Исследователи новой техники также уведомляли relevant services об обнаруженных addresses. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Используйте официальный security/support route. Хороший report описывает expected preview, actual result, block, contract address и точные параметры transaction без передачи секретов. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Не платить recovery-сервису за «отмену блокчейна»

После крупной потери жертву часто атакуют второй раз. Мошенник обещает validator rollback, secret miner, guaranteed reversal или возврат через AML deposit. Подтверждённую transaction нельзя отменить коммерческой кнопкой. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Tracing и официальные обращения к centralized services могут быть уместны, но никто не должен получать новую seed для анализа TxID. Любая гарантия возврата за upfront fee требует отдельной проверки. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Что должны изменить кошельки и simulation services

Incident response

Ситуация Первое действие Далее
Pending tx Hash/nonce Cancel/replace если возможно
Mined loss Trace transfers Permissions/evidence
Approval найден Spender/amount Revoke
Key leaked Новый root Миграция

Пере-симулировать при изменении relevant state

Storage-control и external-control variants используют изменение состояния между preview и execution. Защитная система должна понимать, какие storage slots и external calls повлияли на финансовый branch, и инвалидировать старый result, если эти зависимости изменились. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Простого таймера недостаточно: state может измениться сразу после simulation. Dependency-aware monitoring и re-simulation уменьшают TOCTOU window и позволяют показать пользователю уже harmful outcome до подписи или отправки. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Симулировать с фактическим gas limit

Gas-control возникает, когда simulator применяет convenient default, а подписываемая transaction имеет другое значение. Preview должен использовать exact gas parameter либо гарантированно пересчитываться после изменения wallet settings. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

UI также должен объяснять, что старый security result больше не относится к новой transaction configuration. Fee controls в этом случае являются не только UX, но и частью threat model. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Пересчитывать результат при изменении fee

Gasprice-control использует различие между assumed и final fee context. В EIP-1559 среде параметров несколько, однако общий принцип остаётся тем же: simulation должна соответствовать реально подписываемому request. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Если wallet автоматически обновил fee перед send, security preview нужно обновить. Пользователь не должен видеть старую зелёную оценку рядом с уже изменёнными параметрами исполнения. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Моделировать текущий и будущий block number

Blocknumber-control не требует отдельной attacker transaction: ближайший блок естественно меняет условие. Differential simulation для current и нескольких plausible future blocks способна выявить outcome, который нестабилен во времени. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Если destination или финансовый result меняются при продвижении на один-два блока, wallet должен показывать uncertainty warning, а не один уверенный positive net change. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Моделировать несколько timestamp values

Timestamp-control аналогично использует течение времени. Legit DEX тоже применяют deadlines, поэтому detector должен различать нормальный revert после deadline и branch, который отправляет deposit третьей стороне. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Практичная защита — future-time simulation плюс анализ destination changes. Пользователю важнее увидеть сообщение «финальный результат чувствителен ко времени», чем красивый прогноз, который уже через секунды может стать неверным. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Показывать gross outgoing amount отдельно

Исследование подчёркивает UI-проблему: большинство examined wallets фокусировались на predicted balance change, а точная сумма, передаваемая phishing contract, была менее заметной. Это позволяет dust-return создавать ощущение положительного outcome. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Интерфейс должен визуально отделять «вы безусловно отправляете X» от «simulation предполагает получить Y». Для native payable call это один из самых понятных пользователю controls. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Предупреждать о нестабильном outcome

Если небольшое изменение storage, gas, block или timestamp приводит к другому получателю средств, сама нестабильность является security signal. Wallet может не знать, какая ветка будет реализована, но способен честно сообщить о неопределённости. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Такой warning лучше бинарной зелёной галочки. Пользователь получает основание отказаться от high-value unknown contract даже без полного определения attacker address. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Комбинировать static и dynamic analysis

SimGuard из исследования сочетает bytecode analysis, symbolic execution и runtime validation, чтобы искать paths, где одна ветка возвращает deposit с profit, а другая направляет его внешнему address. Это пример более широкого подхода, чем one-shot current-state simulation. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Промышленная реализация может быть иной, но принцип важен: security engine должен исследовать несколько возможных execution paths. Reputation lists и known-scam labels дополняют этот анализ, но не заменяют его. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Как оценивать новую угрозу без паники

Countermeasures

Класс Wallet mitigation User mitigation
Storage/external State monitoring Unknown contract не финансировать
Gas Exact gas simulation Не менять без preview
Gasprice Exact fee simulation Re-simulate fee change
Block/time Future-context simulation Избегать unstable claim

Simulation по-прежнему полезна

Новое исследование не делает transaction preview бесполезным. Он остаётся одним из лучших способов увидеть обычный unexpected transfer, approval, NFT operator или revert до подписи. Ошибка — перейти от абсолютного доверия к полному отказу от инструмента. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Правильная модель — defense in depth. Simulation отвечает на часть вопросов, contract provenance и clear signing — на другие, wallet isolation ограничивает последствия, а post-transaction verification подтверждает реальный result. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Не каждая разница preview и result является phishing

Slippage, MEV, pool reserve changes, oracle updates, rebasing mechanics, network fees и другие легитимные dynamics тоже создают расхождения. Термин simulation phishing нельзя использовать как универсальное объяснение любой неудачной DeFi сделки. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Начинайте с transaction trace и protocol mechanics. Сильное доказательство malicious pattern — intentional branch, который при simulation возвращает/сохраняет средства, а в actual context переводит deposit attacker-controlled side. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

ArXiv-препринт не равен окончательному отраслевому стандарту

Работа Blockchain Transaction Simulation Phishing опубликована 30 июля 2026 года как arXiv preprint. Она подробно описывает detector, dataset и case studies, однако результаты могут уточняться в ходе peer review, воспроизводимости и дальнейшего анализа индустрии. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Поэтому численные findings следует атрибутировать авторам исследования. Нельзя писать, что 4 224 contracts — официальный глобальный подсчёт всех существующих simulation-phishing contracts. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Дата публикации и период наблюдения различаются

Исследование вышло летом 2026 года, но detected contracts в основном относятся к более раннему периоду, начиная с августа 2024 года и с заметной активностью весной 2025-го. Это нормально для академической работы, где сбор и анализ данных занимают время. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Актуальность темы определяется новой систематизацией attack vector и продолжающимся использованием simulation в ведущих wallets, а не утверждением, что каждый найденный contract активен сегодня. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Основной пользовательский риск — неизвестный payable contract

Наиболее наглядный phishing scenario требует отправить native asset неизвестному contract с обещанием вернуть deposit и добавить reward. Это существенно отличается от обычного transfer на собственный exchange deposit или interaction с давно известным verified protocol. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Повышайте глубину проверки пропорционально неизвестности contract и размеру call value. Не нужно бояться любого simulation; нужно особенно осторожно относиться к high-value temporary deposits и free-money narratives. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Wallet isolation защищает даже от неизвестных техник

Отдельный dApp-wallet не умеет анализировать bytecode, но ограничивает максимальный ущерб архитектурно. Даже если attacker обошёл reputation, simulation и пользовательское внимание, cold reserve не участвует в interaction. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Этот control особенно ценен против emerging threats. Он не зависит от скорости обновления vendor database и превращает неизвестную уязвимость в заранее ограниченный финансовый риск. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Security tools нужно оценивать по assumptions

Scanner, simulator, reputation engine и hardware wallet имеют разные входные данные и границы. Зелёный status корректнее читать как «данный инструмент не обнаружил проблему при текущих assumptions», а не как математическое доказательство безопасности. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Для бизнеса и high-value пользователей полезно заранее описать stop conditions: unknown contract, blind signing, unstable simulation, необъяснимый full-balance call или отсутствие независимого provenance. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Практические сценарии проверки в 2026 году

До подписи

Вопрос Хороший ответ Стоп-сигнал
Сколько уходит? Ожидаемая сумма Весь balance ради dust
Куда? Official/verified contract Unknown address
Зачем? Понятная функция Free reward требует deposit
Что при state change? Outcome устойчив Destination меняется

Free airdrop просит отправить ETH в contract

Сайт обещает награду и формирует payable transaction. Wallet показывает, что deposit якобы вернётся плюс небольшой bonus. Это наиболее близко к исследованному phishing pattern: огромный downside скрывается за benign simulated branch. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Без подтверждённого official contract и понятной economics такую transaction нужно отменять. Бесплатный claim не должен требовать риска значительной частью резерва ради dust reward. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

Отдельно проверьте сценарий неизвестного token или airdrop и риск опасной подписи.

Новый DeFi protocol показывает положительный simulation

Legitimate DeFi действительно использует сложные contracts и state-dependent logic. Положительный preview сам по себе не является red flag. Проверка должна включать официальный domain, contracts, source, audits, protocol history, expected call path и размер exposure. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Первое interaction выполняйте ограниченным wallet. Так вы не смешиваете simulation-phishing risk со smart-contract risk и не ставите весь reserve на одно решение. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

После preview пользователь повышает fee

Если confirmation открыт долго или пользователь меняет gas settings, старый preview может быть рассчитан для другого context. Для известного protocol это обычно не меняет destination, но emerging attack показывает, что assumptions важны. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

При unknown contract требуйте новую simulation после fee change. Если wallet её не делает, отмените high-value request и сформируйте transaction заново. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Wallet показывает маленький плюс, но отправляется весь balance

Это критическая комбинация независимо от sophistication attack. Если contract получает 10 ETH и simulator прогнозирует возврат 10 ETH плюс tiny amount, maximum amount at risk остаётся 10 ETH, а не величина бонуса. При оценке риска полезно разделять три уровня: то, что обещает dApp, то, что показывает wallet, и то, что способен сделать contract при фактическом исполнении. Совпадение этих уровней повышает доверие; противоречие хотя бы одного из них является основанием остановиться.

Смотрите на call value. Если projected reward меньше gas или экономически бессмыслен, transaction не имеет разумной причины и не заслуживает риска. После исполнения сравнивайте prediction с actual on-chain result. Такое сравнение полезно и без ущерба: оно формирует историю поведения protocol и помогает заметить instability раньше, чем следующее interaction станет существенно крупнее.

Два wallets показывают одинаковый безопасный preview

Совпадение повышает уверенность только если tools действительно используют разные assumptions. В реальности они могут симулировать один current state и получить одинаковую benign branch. Для high-value операции пользователь не пытается угадывать намерения разработчика, а проверяет наблюдаемые параметры: destination, value, network, contract provenance и ожидаемые изменения балансов. Чем меньше этих данных доступно, тем ниже допустимый размер риска.

Дополните проверку contract provenance, source, gross outgoing, internal calls и ограниченным dApp-wallet. Разные логотипы не создают независимость методологии. Для неизвестного contract полезно заранее задать stop-condition: full-balance call, blind signing, отсутствие official address, необычная fee-dependency или несоразмерный reward означают отказ до дополнительного анализа.

После потери других неизвестных transactions нет

Если пользователь сам подписал одну вредоносную call, а account дальше не проявляет unauthorized activity, это совместимо с incident без утечки seed. Проверка permissions всё равно необходима, но automatic key-compromise conclusion не обоснован. Практическая безопасность здесь строится не на одном scanner. Reputation, clear signing, simulation и лимитированный рабочий wallet закрывают разные классы ошибок, поэтому один положительный сигнал не должен автоматически отменять другой красный.

Если позже появляются transactions без участия владельца, оценка меняется: рассматриваются leaked key, malware, old approvals или session keys. Оценка должна быть воспроизводимой: другой человек с теми же public data должен понимать, почему transaction допустима. Если решение держится только на зелёной кнопке одного интерфейса, система контроля слишком хрупкая.

Если появляются новые списания без вашего участия, переходите к инструкции что делать при неизвестных исходящих токенах.

Компания выполняет крупные DeFi operations

Для high-value workflow полезно разделять роли. Один сотрудник проверяет protocol/domain/contracts, другой — decoded transaction, gross outgoing и simulation. Multisig approval должен опираться на заранее сформированный expected-changes checklist. Обычному пользователю не требуется доказать вредоносность bytecode математически. Достаточно установить опасную асимметрию: крупная безусловная передача средств сочетается с условным возвратом, который зависит от неизвестной программной логики.

Ни один vendor preview не должен быть единственной точкой доверия. Организация фиксирует contract allowlist, лимиты, screenshots/TxID и условия, при которых новая transaction автоматически отправляется на дополнительный review. Если смысл сделки можно объяснить только фразой «кошелёк показывает, что всё безопасно», проверка ещё не закончена. Preview должен подтверждать уже понятную операцию, а не заменять понимание того, кому и на каких условиях передаются активы.

Simulation и другие controls

Контроль Сильная сторона Чего не гарантирует
Simulation Expected effects Future state
Reputation Known threats Fresh scam
Clear signing Параметры call Честность contract
Wallet isolation Лимит ущерба Распознавание scam

Итоговая матрица

Сценарий Риск Решение
Known protocol + small amount Умеренный Проверить и продолжить
Unknown contract + positive preview Высокий Не доверять одному preview
Full-balance payable call Критический Отменить
Preview изменился после re-simulation Критический Не подписывать

Вывод: preview помогает, но решение должно переживать изменение state

Главная ошибка — превратить transaction simulation из полезного инструмента в единственный источник доверия. Новый класс phishing показывает, что attacker может строить contract вокруг assumptions simulator. Поэтому пользователь должен одновременно видеть gross outgoing value, проверять provenance contract, понимать экономическую цель вызова и ограничивать blast radius отдельным dApp-wallet.

Для wallet vendors задача сложнее: simulation должна быть максимально близка к фактически подписываемой transaction, отслеживать изменения зависимого state и выявлять unstable outcomes при будущем block number, timestamp и изменённых fee parameters. Интерфейс должен показывать не только net delta, но и точную сумму, которую пользователь передаёт contract до ожидаемого возврата.

Появление transaction simulation phishing не отменяет ценность simulation. Оно показывает зрелость противостояния: когда один защитный слой становится массовым, злоумышленники изучают его assumptions. Практическая безопасность поэтому строится на нескольких независимых controls, проверяемом contract и заранее ограниченном максимальном ущербе.