Найти в Дзене
Про Крипто

Транзакции Ethereum

Мы продолжаем рассказывать об устройстве сети Ethereum. В предыдущей статье мы описали типы существующих аккаунтов в Ethereum, а сегодня пришло время поговорить о транзакциях, которые позволяют аккаунтам взаимодействовать друг с другом. Что же это такое? Формально говоря, транзакции можно рассматривать как подписанные цифровой подписью наборы инструкций, которые изменяют состояния аккаунтов. При этом состояние аккаунта определяется совокупностью данных, ассоциированных с ним: баланс аккаунта, значение nonce(см. ниже), содержание хранилища в случае смарт-контрактов и. д.). Напомним, что в сети Ethereum существует два типа аккаунтов: EOA и аккаунты смарт-контрактов. Одной из главных особенностей транзакций сети Ethereum на сегодняшний день является тот факт, что они могут быть инициированы только EOA аккаунтами. При этом заметим, что в ближайшее время(1 квартал 2025 года) данная особенность может быть нивелирована с введением обновления Pectra. Как мы уже писали ранее, в данно
Оглавление

Мы продолжаем рассказывать об устройстве сети Ethereum. В предыдущей статье мы описали типы существующих аккаунтов в Ethereum, а сегодня пришло время поговорить о транзакциях, которые позволяют аккаунтам взаимодействовать друг с другом. Что же это такое? Формально говоря, транзакции можно рассматривать как подписанные цифровой подписью наборы инструкций, которые изменяют состояния аккаунтов. При этом состояние аккаунта определяется совокупностью данных, ассоциированных с ним: баланс аккаунта, значение nonce(см. ниже), содержание хранилища в случае смарт-контрактов и. д.).

Напомним, что в сети Ethereum существует два типа аккаунтов: EOA и аккаунты смарт-контрактов. Одной из главных особенностей транзакций сети Ethereum на сегодняшний день является тот факт, что они могут быть инициированы только EOA аккаунтами. При этом заметим, что в ближайшее время(1 квартал 2025 года) данная особенность может быть нивелирована с введением обновления Pectra. Как мы уже писали ранее, в данном обновлении будет введено в эксплуатацию предложение EIP-7702, которое представляет механизм абстракции аккаунта. Данный подход позволит объединить лучшие качества обоих типов аккаунтов(EOA и смарт-контрактов), что позволит пользователям работать со смарт-кошельками с произвольной логикой верификации. Таким образом, аккаунты в Ethereum станут более универсальными.

Однако об обновлении Pectra и механизме абстракции аккаунта подробнее мы поговорим в одной из следующих статей. А сейчас вернёмся к транзакциям. Начнём мы со структуры транзакций в сети Ethereum. При этом заметим, что структура транзакций может варьироваться в зависимости от типа транзакции, поэтому посмотрим, чем отличаются разные типы транзакций в Ethereum.

Классификация транзакций по типу:

На сегодняшний день в Ethereum выделяют три типа транзакций:

  • Тип 0(legacy). Тип транзакций, существовующий сначала работы сети Ethereum.
  • Тип 1. Введён в обновлении Берлин предложением EIP-2930.
  • Тип 2. Введён в обновлении Лондон предложением EIP-1559.

Рассмотрим подробнее их структуры и чем они отличаются друг от друга.

Транзакции типа 0

Данный тип транзакций существует с момента запуска основной сети Ethereum. Согласно yellow paper Эфириума, транзакции типа 0, также называемые legacy транзакциями, имеют следующую структуру:

-2

*1 ETH=10^18 WEI.

Заметим, что поле v содержит идентификатор сети и информацию, позволяющую восстановить точку эллиптической кривой, X-координатой которой является значение r. Данная точка необходима для проверки подписи ECDSA. При этом значение v вычисляется по следующей формуле:

-3

где chainId - идентификатор сети(для основной сети Ethereum chainId=1), а Yparity определяет чётность координаты Y точки, для которой значение r - это X-координата. Yparity принимает значения 0, если Y - чётная координата, и 1, если нечётная. При этом для сети Ethereum(c chainId=1) значение v может принимать только значения 0x25(чётная Y координата) и 0x26(нечётная Y координата).

Отдельно остановимся на поле Data. Данное поле используется для вызова смарт-контракта или создания смарт-контракта. В случае обычного перевода ETH между двумя EOA аккаунтами поле остаётся пустым(или содержит значение 0x). При этом, с точки зрения траты газа, за каждый нулевой байт(0x00) пользователю придётся заплатить 4 единицы газа, за каждый ненулевой байт - 16 единиц газа.

Транзакции типа 1

В рамках предложения EIP-2930 обновления Берлин был введён новый тип транзакции(type 1). Структура транзакций первого типа несколько отличается от транзакций типа 0. В частности, были добавлены поля type и chainId, определяющие тип транзакции и сеть, в которой совершается транзакция. Заметим так же, что поле chainId в транзакциях данного типа не участвует в формировании параметра v.

Помимо этого, было введено поле Access List, содержащее информацию об адресах и ключах хранилища смарт-контракта, которые будут вызваны в ходе совершения данной транзакции. Это нововведение позволило оптимизировать траты газа при вызове смарт-контракта. Использование данного поля является опциональным, в силу чего оно может оставаться пустым. В частности, поле Access List может не содержать данных по следующим причинам:

  • Обычный перевод ETH между EOA аккаунтами. Так как такие транзакции не вызывают смарт-контракт и не происходит взаимодействие с хранилищем смарт-контракта, исчезает необходимость в указании адреса смарт-контракта и ключа хранилища смарт-контракта.
  • При небольших тратах на обращения к хранилищу смарт-контракта может быть выгодно оставить поле Access List пустым. Выгода от использования данного поля проявляется при многократном обращении к конкретным слотам, определённых соответствующими ключами хранилища смарт-контракта.
  • Выбор пользователя или разработчика, предоставляющего пользователю соответствующее программное обеспечения для совершения транзакций.
-4

Транзакции типа 2

Данный тип транзакций сети Ethereum(тип 2) был введён в предложении EIP-1559 в рамках форка London и содержал ряд новых полей, связанных с изменением расчёта комиссии. В частности, появилось поле maxFeePerGas, отвечающие за максимальную плату за единицу газа, и поле maxPriorityFeePerGas, отвечающее за максимальное значение приоритетной части комиссии, которую готов заплатить пользователь валидатору. Полная структура транзакций типа 2 приведена ниже.

-5

Классификация транзакций по назначению

Транзакции сети Ethereum, помимо типов, можно также классифицировать и по назначению. В данном контексте можно выделить три вида транзакций.

  • Транзакция-перевод ETH. Перевод между EOA аккаунтами не требует вызова смарт-контракта и при этом является самым дешёвым видом транзакции с точки зрения необходимого газа. Для такой транзакции используется базовая комиссия в 21,000 единиц газа.
  • Транзакция создания смарт-контракта(contract creation). Данный вид транзакций позволяет развернуть код смарт-контракта в сети Ethereum. Количество необходимого газа зависит от величины кода. Однако при этом существует ограничение на размер кода, зафиксированное в EIP-170. На сегодняшний день в сети нельзя развернуть смарт-контракт, размер которого больше 24,576 bytes (24 KB). При попытке развернуть смарт-контракт с большим по размеру кодом будет выдана ошибка, а транзакция не будет совершена.
  • Транзакция, вызывающая функцию смарт-контракт. Данный вид транзакций позволяет взаимодействовать с развёрнутым в сети Ethereum смарт-контрактом. Количество необходимого газа зависит от вызываемой функции.

Таким образом, как мы видим, транзакции могут отличаться по назначению. При этом требуемое количество газа для совершения этих транзакций будет сильно варьироваться. Так, как уже было сказано выше, самой дешевой транзакцией является транзакция обычного перевода ETH от одного EOA аккаунта к другому. Стоимость такой транзакции равна 21,000 единиц газа. Это покрывает операцию проверки подписи, обновление балансов и передачу данных транзакции. В то же время развертывание и вызов функции смарт-контракта будет стоить намного дороже. Стоимость такой транзакции будет зависеть от количества и сложности операций, которые должны быть выполнены. В Ethereum каждая операция стоит фиксированное количество единиц газа. Так, например, операция сложения стоит 3 единицы газа, а операция записи в хранилище смарт-контракта - 20,000 единиц газа. Поэтому одной из задач при написании смарт-контрактов является оптимизация кода с точки зрения потребляемого газа. Однако об этом мы поговорим в одной из следующих статей. А пока на сегодня всё. Не забывайте подписаться на наш канал и быть в курсе последних новостей криптомира!