Материал проверен 28 октября 2026?
БК

ГЛАВНАЯ / ИНСТРУКЦИИ / INTERNAL TRANSACTION В ОБОЗРЕВАТЕЛЕ: ПОЧЕМУ ЭТО НЕ ОТДЕЛЬНАЯ ТРАНЗАКЦИЯ

Internal transaction в обозревателе: почему это не отдельная транзакция

В Ethereum блок содержит транзакции, а исполнение одной транзакции может вызвать множество контрактов. Обозреватель иногда показывает эти вложенные действия в разделе Internal Transactions. Это удобное представление execution trace, а не ещё один подписанный пользовательский объект, добавленный в блок.

Транзакция в блоке

Подписанный запрос имеет hash и параметры верхнего уровня

Обычная внешняя транзакция подписывается отправителем, имеет nonce и попадает в блок как самостоятельный объект. Она указывает верхний адрес назначения, value, calldata и параметры газа. После исполнения для неё создаётся receipt с итоговым статусом.

Вызванный контракт может обращаться к другим контрактам, отправлять ETH и вызывать новые адреса. Такие message calls происходят внутри исполнения исходной транзакции. Вложенный вызов сам не получает отдельную подпись отправителя и обычно не имеет отдельного transaction hash.

ОбъектСамостоятелен в блокеИдентификатор
Внешняя transactionДа, подписана и включенаTransaction hash
Вложенный CALLНет, часть исполненияПозиция в trace
Event logЗапись события в receiptLog index и родительский hash
ReceiptРезультат внешней transactionHash родительской транзакции
Execution trace

Trace восстанавливает цепочку исполнения по кадрам вызова

Execution client может повторно исполнить транзакцию на состоянии блока и записать вызовы, создание контрактов, передачу value, возвраты и ошибки. Это даёт структуру parent/child и помогает понять, какой контракт инициировал следующий шаг. Конкретная глубина, поля и формат зависят от реализации клиента или обозревателя.

Trace обычно не является отдельным consensus-объектом с тем же статусом, что transaction и receipt. Это рассчитанное клиентом или индексатором представление исполнения. Для проверки деталей сравните используемый метод, клиент, номер блока и доступность исторического состояния; разные обозреватели могут по-разному группировать frames.

  • запишите RPC-метод или формат trace;
  • зафиксируйте клиент, блок и родительский hash.
Как читать

Найдите родительский вызов и проверяйте каждый шаг

Начните с внешнего hash и проследите trace сверху вниз. Для каждого шага установите тип вызова, адрес инициатора и получателя, переданное значение, входные данные и результат. Не принимайте имя контракта из подписи обозревателя за доказательство его назначения. Для токенов отдельно проверяйте логи и изменение token storage: ERC-20 перевод обычно не является передачей нативного ETH во вложенном CALL.

Ребёнок может завершиться ошибкой, которую родительский код обработал. Поэтому не выводите status верхней транзакции из одной строки trace. Напротив, верхний вызов может завершиться revert, хотя trace показывает несколько успешно исполненных до этого операций: итоговое состояние и логи родительского отката нужно читать вместе.

Границы данных

Internal transaction не создаёт вторую комиссию отправителя

Комиссия относится к внешней транзакции и её итоговому расходу газа. Вложенный вызов может добавлять работу к этому расходу, но не образует самостоятельный gas market bid со своим nonce отправителя. Если обозреватель показывает вкладки или строки, похожие на отдельные переводы, найдите родительский hash и receipt прежде, чем считать их новыми транзакциями.

Название internal transaction – исторически распространённый термин интерфейсов, но оно способно запутать. Точнее говорить о вложенном вызове или trace frame, если речь не о самостоятельной транзакции в блоке. Для проверки доказательства используйте receipt, логи, код и состояние; trace объясняет путь исполнения и зависит от реализации инструмента.

  • не назначайте вложенному вызову отдельный hash транзакции;
  • запишите клиент или сервис, построивший trace.
FAQ

Частые вопросы

У internal transaction есть отдельный transaction hash?

Обычно нет. Это часть исполнения внешней транзакции; для поиска используют родительский hash и позицию trace.

Нужно ли оплачивать отдельную комиссию за каждый internal transfer?

Нет отдельной самостоятельной комиссии и ставки отправителя; вложенные действия увеличивают расход родительской транзакции.

ERC-20 Transfer считается internal transaction?

Событие Transfer – log. Изменение токенового состояния проверяется отдельно; оно не обязательно выглядит как передача нативной валюты через CALL.

Почему у двух обозревателей trace отличается?

Методы, доступная история и представление execution frames зависят от клиента и индексатора.

Может ли дочерний вызов упасть при status 1?

Да, если родительский контракт обработал его ошибку и верхний вызов завершился успешно.

Итоговая проверка

Чек-лист: internal transaction в обозревателе: почему это не отдельная транзакция

  • родительский hash найден в нужной сети;
  • trace отличён от объекта транзакции в блоке;
  • инициатор и адрес каждого frame проверены;
  • value transfer отличён от event log и token state;
  • ошибка дочернего вызова сопоставлена с родителем;
  • receipt status прочитан отдельно;
  • клиент или индексатор trace указан.

Материал подготовлен редакцией сайта и проверен 28 октября 2026 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.