Транзакции в 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-адрес).
Полезная информация, послужившая основой этой статьи:
- Прекрасная презентация с иллюстрациями принципов работы Ethereum
- Официальная документация Ethereum
- Большая статья на русском языке от 2017г (в переводе) об Ethereum (можно найти ответы на вопросы, которые могут появиться при изучении презентации из п.1 или при прочтении данной статьи)