Перейти к основному содержанию
Успешная транзакция Неудачная транзакция Execution Overview — это, по сути, вид «с высоты птичьего полёта» на транзакцию. С первого взгляда вы можете увидеть точные пути выполнения кода всех смарт-контрактов, участвовавших в данной транзакции. Транзакции с картинок выше можно открыть, кликнув сюда (успешная) и сюда (неудачная). На первой вкладке — Transaction Overview — вы можете видеть и перемещаться по всем элементам транзакции. Более того, вы можете мгновенно (Ре)симулировать транзакцию, нажав кнопку в правом верхнем углу, с другими параметрами или даже изменив исходный код, чтобы увидеть результат — подробнее о симуляциях здесь. С вкладки Overview вы можете мгновенно перейти в Contract Sources или Debugger, чтобы понять, что произошло: Если вы разбираете неудачную транзакцию, теперь вы можете сразу перейти ко всем точкам сбоя, кликнув по красному значку предупреждения, а затем — по строке, на которой произошёл сбой: Вы также можете искать по Execution Trace, а также легко перемещаться по ней стрелками клавиатуры:

Call и Function Trace

В разделе Execution Trace вы найдёте выпадающее меню рядом с полем поиска. По умолчанию оно установлено в Function Trace, что означает отображение всех внешних и внутренних вызовов, которые произошли в этой транзакции. Для лучшего обзора ключевых вызовов переключите его в Call Trace, который показывает только внешние вызовы, произошедшие в транзакции.
Вы можете комментировать и расставлять приоритеты для любой трассы — как для себя, так и для того, чтобы облегчить совместную работу над проектом. Подробнее об этом здесь.
Эта функция также доступна в Debugger. Скажем, вы хотите действительно глубоко покопаться в вашей (или любой другой) транзакции. Пройдёмся по каждой из доступных вкладок.

Contracts

Когда вы находитесь на вкладке Transaction Overview, в верхней навигации можно нажать Contracts (или Addresses), чтобы увидеть все контракты, которые были задействованы в определённой транзакции: Кликнув по контракту, можно посмотреть его исходный код:

Events

События смарт-контрактов — де-факто способ уведомлять заинтересованные стороны о том, что произошло какое-то событие. Сами логи также содержат ценную информацию в дополнение к тому, что произошло определённое событие. Кликнув по вкладке Events, мы можем увидеть все события, сгенерированные во время транзакции. Что ещё лучше — параметры событий уже декодированы и показаны в удобочитаемом виде. Больше не нужно тратить время на декодирование hex-строк, чтобы понять, что произошло. Вы также можете фильтровать события по имени и смарт-контракту.

State Changes

По мере усложнения смарт-контрактов усложняются и их состояния. Здесь мы видим, что Tenderly не только показывает переменные состояния, которые были изменены, но и все они декодированы для вашего удобства. И да, структуры также декодируются корректно. Вы можете увидеть эту транзакцию и её тонкости здесь.

Debugger

Отладка стек-трасс — важная часть работы любого разработчика как локально, так и в продакшене. Кликнув по вкладке Debugger, вы сможете глубоко погрузиться во всё, что произошло с вашей (или любой другой) транзакцией. Стек-трасса выше показывает точную строку кода, в которой транзакция не удалась. Оттуда можно нажать Debug Error и в мгновение найти проблему. Посмотрите, как использовать Tenderly Debugger, и исследуйте неудачные транзакции!

Gas Profiler

Диаграмма, которую вы видите на изображении выше, называется flame graph. Это распространённый способ показать использование ресурса, например CPU. Пример выше можно найти здесь. Каждая линия показывает суммарную стоимость линий, расположенных под ней. Кликнув по любой из линий (функций), можно увидеть детальную разбивку расхода газа для вызванных функций. Наконец-то вы можете увидеть, какие функции используют больше всего газа, и выбрать нужные участки кода для оптимизации.