AMLConsensus · курс
Программа · Урок 2.7
Раздел 2 · Урок 2.7

Внутренние транзакции и смарт-контракты

Начинающий аналитик открывает адрес в эксплорере, видит короткий список из трёх переводов — и делает вывод «кошелёк почти пустой, ничего интересного». А на самом деле через этот адрес прошли миллионы долларов, просто они двигались как внутренние транзакции, которых нет в обычной вкладке. Это одна из самых частых слепых зон новичка. В этом уроке разберём, что такое internal txns, почему их не видно, как смарт-контракты (DEX, мосты) перемещают средства и где всё это правильно смотреть.

Два типа транзакций в Ethereum

Чтобы понять внутренние транзакции, нужно различать, кто инициирует перевод:

Ключевая мысль: «внутренняя транзакция» — это не отдельная запись в блокчейне, а событие внутри исполнения. Поэтому её нельзя увидеть, просто листая обычный список переводов.

Почему их не видно в обычном списке

Блокчейн хранит только внешние транзакции — те, что подписаны пользователями. Перемещения ETH, которые контракт совершает во время своей работы, нигде не записаны как самостоятельные строки. Откуда же тогда эксплореры вроде Etherscan показывают вкладку «Internal Transactions»? Ответ важен для понимания всей механики.

Внутренние транзакции — это реконструкция. Эксплореры не «читают» их из блокчейна напрямую. Они повторно исполняют (trace) каждую транзакцию на своей копии виртуальной машины EVM и записывают все внутренние вызовы, при которых передаётся ETH. Поэтому: (1) внутренние переводы существуют только для нативной валюты (ETH), но не путайте их с ERC-20 токенами — те двигаются через события Transfer; (2) если сервис не делает трейсинг, он этих движений не видит вовсе.
Аналогия. Внешняя транзакция — это как приказ «запусти вендинговый автомат». Автомат внутри себя выдаёт банку, отсчитывает сдачу, включает подсветку — это внутренние действия. В журнале записан только ваш приказ, а всё, что автомат сделал внутри, приходится восстанавливать, «прокрутив» его работу заново.

Как контракты двигают средства: DEX

Рассмотрим самый частый случай — обмен на децентрализованной бирже (DEX), например Uniswap. Пользователь меняет ETH на токен USDC. Что происходит на самом деле?

  1. Внешняя транзакция. Пользователь отправляет ETH на адрес контракта роутера Uniswap и вызывает функцию swap. Это единственная запись, которую видно в его обычном списке. «Отправил ETH на 0xUniswap...» — и всё.
  2. Внутренние переводы. Внутри исполнения контракт роутера обращается к контракту пула ликвидности, пул отправляет USDC пользователю, а часть ETH распределяется по пути. Все эти перемещения — внутренние. Их не видно во вкладке normal.
  3. Возврат сдачи. Если пользователь прислал чуть больше ETH, контракт вернёт остаток внутренней транзакцией обратно на его адрес. Тоже невидимо в обычном списке.

Для AML это критично. Представьте: аналитик видит, что подозрительный адрес отправил 10 ETH на Uniswap и «на этом след обрывается». На самом деле контракт вернул этому же адресу USDC внутренней транзакцией, и деньги живут дальше в другом токене. Без просмотра internal txns и токен-трансферов «нить» теряется, и отмывание через DEX выглядит как тупик.

Как контракты двигают средства: мосты (bridges)

Ещё сложнее с кросс-чейн мостами. Мост принимает актив в одной сети и выдаёт эквивалент в другой. Это классический инструмент разрыва следа: аналитик, работающий только с одним блокчейном, «теряет» деньги на входе в мост.

Механика моста глазами аналитика

  1. Депозит. Пользователь отправляет ETH на контракт моста в сети Ethereum. Внешняя транзакция видна. Дальше в Ethereum деньги «замораживаются» на контракте.
  2. Событие. Контракт моста эмитирует лог-событие с адресом получателя в целевой сети (например, Arbitrum). Это не перевод, а запись в логах — её нужно уметь читать.
  3. Выдача в другой сети. Валидатор/релеер моста в сети Arbitrum отправляет эквивалент средств на адрес получателя. Это уже совсем другая транзакция в другом блокчейне. Связь между «до» и «после» существует только через логику моста.

Чтобы не потерять след через мост, аналитик должен: (1) распознать адрес контракта как известный мост; (2) прочитать событие с адресом-получателем; (3) переключиться на целевую сеть и продолжить трассировку там. Именно поэтому серьёзный AML-движок мультичейновый и знает адреса популярных мостов.

Где и как это смотреть

Теперь практика — как аналитик реально находит скрытые движения.

Практический чек-лист аналитика. Открыв любой EVM-адрес, всегда проверяйте минимум четыре вкладки: Normal, Internal, Token Transfers (ERC-20), NFT Transfers. Оценка «пустой кошелёк» по одной лишь вкладке Normal — грубая ошибка, из-за которой пропускают целые пласты отмывания.

Сквозной пример: отмывание через DEX и мост

Схема, которую легко пропустить.
Взлом → вор получает 100 ETH → внешняя tx на Uniswap (виден только этот перевод) → internal: контракт выдаёт 250 000 USDC на адрес вора (невидимо в Normal) → token transfer: USDC уходит на контракт моста → событие моста: получатель в сети Polygon → продолжение отмывания в другой сети.
Аналитик, смотрящий только вкладку Normal в Ethereum, увидит лишь «отправил 100 ETH на Uniswap» и решит, что след оборвался. На деле деньги живут, просто в другом токене и другой сети.

Разберём, что спасает аналитика на каждом шаге: вкладка Internal показывает возврат USDC; вкладка Token Transfers — движение стейблкоина к мосту; чтение события моста — адрес получателя; мультичейн-подход — продолжение в Polygon. Уберите любой из этих инструментов — и схема выглядит как тупик, а грязные деньги «исчезают».

Итог урока. Внешние транзакции создаёт человек, и только они записаны в блокчейне; внутренние — это переводы ETH, которые контракты совершают в ходе исполнения, реконструируемые трейсингом. DEX возвращают средства в других токенах внутренними транзакциями, мосты переносят ценность между сетями через события. Чтобы AML-анализ был честным, движок обязан читать internal txns, токен-трансферы, логи событий и работать в нескольких сетях. Когда AMLConsensus не «теряет» деньги на входе в Uniswap или мост — это работает именно та механика, что вы разобрали в этом уроке.

Материалы носят образовательный характер.