February 13, 2022

Транзакции в Ethereum

Привет друзья!

Продолжаем тему Ethereum и EVM. Сегодня коснемся транзакций в сети, что они из себя представляют, и что включают. Но для начала, вскользь пройдемся по учетным записям в сети Ethereum.

Учетные записи сети Ethereum

Глобальное общее состояние платформы Ethereum состоит из множества небольших объектов – учетных записей, которые взаимодействуют между собой за счет парадигмы обмена сообщениями. У каждой учетной записи есть определенное состояние и 20-байтовый адрес. Адресом в Ethereum является 160-битный идентификатор, используемый для идентификации любой из учетных записей.

Типы

Всего существует 2 типа учетных записей:

  • Внешние учетные записи (контролируются с помощью закрытых ключей пользователей)
  • Контрактные учетные записи, контролируются специальным кодом, указанным в контракте)

Основные отличия

Для внешней учетной записи ("пользовательской") предусмотрена возможность отправлять сообщения другим внешним учетным записям ("пользовательским"), а также другим контрактным учетным записям. Для данной цели необходимо создать и зарегистрировать новую транзакцию, используя закрытый ключ.

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

С помощью контрактных учетных записей, в отличие от внешних ("пользовательских"), самостоятельно инициировать новые транзакции невозможно. Вместо этого с помощью контрактных учетных записей можно только запускать транзакции в ответ на другие полученные транзакции (например, полученные из внешней учетной записи или из другой контрактной учетной записи).

Таким образом каждое действие в блокчейне Ethereum происходит благодаря транзакциям, инициируемым "пользовательскими" учетными записями.

Транзакции

В прошлой статье упоминалось, что Ethereum – это система состояния транзакций. Другими словами, благодаря транзакциям, которые происходят между различными учетными записями, происходит изменение или перемещение глобального состояния Ethereum из одного состояния в другое.

Всего существует два типа транзакций: отправка сообщений и создание контракта (другими словами, такие транзакции создают новые контракты в сети Ethereum).

Состав транзакции:

  • nonce – количество транзакций, которые были отправлены отправителем (берутся из параметров учетной записи).
  • gasPrice – количество Wei (часть от монеты Eth), которое отправитель готов отдать за единицу "горючего" (gas), необходимую для совершения сделки.
  • gasLimit – максимальное количество "горючего", которое отправитель готов заплатить за проведение данной транзакции. Такая сумма задается и оплачивается заранее, прежде чем какие-либо вычисления будут проведены. (о том, как вычислять - поговорим завтра)
[Стоит также отметить, что для внутренних транзакций или сообщений gasLimit не предусмотрен, поскольку лимит горючего задает инициатор исходной транзакции (например, в какой-либо учетной записи)]
  • to – адрес получателя. Если транзакция - создание контракта, то это поле остается пустым.
  • value – количество Wei (часть от монеты Eth), которые будут переданы от отправителя к получателю. В транзакциях, связанных с созданием контрактов, данная величина является стартовым балансом для вновь созданной учетной записи.
  • v, r, s – данные обозначения, используемые для создания подписи, которая идентифицирует отправителя транзакции.
  • init – предназначен только для транзакций, связанных с созданием контрактов. Фрагмент EVM-кода, используемый для инициализации вновь созданной учетной записи контракта. init запускается только единожды и в дальнейшем не используется.
  • data – это входные данные (параметры) для вызова сообщения (data является необязательным элементом, который предназначен только для вызовов сообщений). Например, если смарт-контракт играет роль службы регистрации домена, то вызов этого контракта может ожидать поля ввода (например, домен и IP-адрес).

Полезная информация, послужившая основой этой статьи:

  1. Прекрасная презентация с иллюстрациями принципов работы Ethereum
  2. Официальная документация Ethereum
  3. Большая статья на русском языке от 2017г (в переводе) об Ethereum (можно найти ответы на вопросы, которые могут появиться при изучении презентации из п.1 или при прочтении данной статьи)

На этом на сегодня мы прощаемся с вами!