Если проанализировать все транзакции блока, в том числе связанные со смарт-контрактами, можно рассчитать совокупный объем газа, требуемый на обработку всего блока. Поэтому в сети Ethereum размер блока ограничен не объемом в байтах, как в Биткоине, а в максимально допустимом количестве газа на один блок. Получается, что в блоке может быть и небольшое число транзакций, но многие из них могут оказаться весьма «газозатратными», поэтому лимит может быть достигнут довольно быстро. На текущий момент лимит на один блок составляет величину около 8 млн единиц газа, что позволяет поместить в один блок Ethereum максимально чуть меньше четырех сотен стандартных транзакций. Предполагается, что лимит газа на блок будет расти по мере естественного увеличения вычислительных возможностей узлов сети.
Посылая в сеть транзакцию для взаимодействия со смарт-контрактом, отправитель может лишь примерно предполагать, какой объем газа потребуется для ее обработки. Поэтому он указывает не точное значение газа, а величину с запасом, то есть максимум газа, который он готов позволить «сжечь» для своей транзакции. Точное значение будет установлено майнером при непосредственной обработке транзакции и смарт-контракта, причем с отправителя будет взыскан именно реально затраченный объем, а неиспользованный остаток будет ему возвращен. В случае же, если лимита газа для обработки смарт-контракта не хватит, его выполнение будет досрочно прекращено и «сделка» не состоится. При этом уже использованный газ возвращен не будет, а его стоимость поступит в доход майнера.
Понятно, что с ростом стоимости монеты эфира цена газа пропорционально падала, за исключением коротких периодов, когда нагрузка на сеть существенно возрастала. В этом случае отправители транзакций боролись за их приоритетное включение в ближайшие создаваемые блоки путем увеличения цены на газ. На весну 2019 года средняя стоимость газа колебалась в пределах 2–4 Gwei, что приравнивает комиссию за обычную транзакцию примерно к одному-двум американским центам. При отправлении транзакции можно указать и меньшую цену газа, чем текущая рыночная. В этом случае транзакция будет обрабатываться дольше, чем обычно, а если цена выставлена сильно ниже рынка, то транзакция может и вовсе не попасть в обработку.
Ценообразование на газ всегда зависит от текущей нагрузки на сеть Ethereum. Если в очереди на обработку и включение в блок стоит много транзакций, майнеры начинают отдавать приоритет тем, чьи отправители указали более высокую стоимость газа. Перед стартом первой версии клиента сети Ethereum было установлено, что единица газа будет стоить 10 000 Gwei, или одну стотысячную долю эфира. Сейчас эта цена считалась бы исключительно высокой, поскольку цена монет эфира с момента запуска проекта очень сильно выросла, хотя и далека от своего исторического максимума. Тем не менее если покупать газ по такой цене, то стоимость отправки обычной транзакции сегодня обошлась бы в сумму около $30.
Как ни странно, главная расчетная криптовалюта сети Ethereum — эфир — была создана в первую очередь для важнейшей утилитарной цели — оплачивать газ для обработки смарт-контрактов. Сам газ является счетной, но немонетарной величиной и напрямую отражает объем затрачиваемого вычислительного ресурса на запуск кода смарт-контракта майнером. Для каждого оператора байт-кода сети Ethereum существует его фиксированная «стоимость», номинированная в единицах газа. Простые операторы вроде арифметических действий «стоят» дешевле. Тогда как сложные, например, процедуры хеширования — дороже. То есть в систему изначально было заложено подобие «прайс-листа», на основе которого всегда можно рассчитать, сколько газа уйдет на обработку конкретного смарт-контракта. Поскольку обычные транзакции на перевод криптовалюты от одного адресата к другому тоже требуют вычислительной обработки, то и у них имеется свой эквивалент «газовой стоимости». Обычно стандартная транзакция обходится в 21 000 газа, вопрос только в том, сколько стоит сам газ.
Как и любая обычная компьютерная программа, смарт-контракт обладает различными функциональными возможностями. То есть для одних смарт-контрактов достаточно нескольких строк кода, а другие могут представлять собой сложные алгоритмы, состоящие из сотен и даже тысяч строк. Это говорит в первую очередь о том, что с точки зрения приложения вычислительных усилий смарт-контракты отнюдь не равноправны — для обработки каждого из них требуется различное процессорное время. Из этого обстоятельства вытекает логичный вопрос: каким же образом формировать мотивацию майнера при обработке подобных контрактов? А что, если код смарт-контракта будет содержать, например, бесконечный цикл, который введет компьютер обработчика в состояние «зависания», когда он будет бесконечно пытаться выполнять один и тот же набор операций по кругу? Чтобы защитить систему от подобных ситуаций, в Ethereum предусмотрена модель оплаты вычислительной мощности при помощи специального «топлива» для обработки смарт-контрактов. Такой вид «топлива» в Ethereum обычно называют «газ», поскольку этот термин созвучен его английскому написанию (gas), хотя есть и другие варианты перевода этого слова.
Для простоты смарт-контракт можно сравнить с торговым автоматом, который продает, например, напитки. Покупатель помещает в автомат определенную денежную сумму наличными или при помощи банковской карты, а аппарат выдает выбранный товар сообразно внесенным средствам. Если данную ситуацию спроецировать на блокчейн-сеть, то активация смарт-контракта происходит в момент, когда в блок помещается транзакция, отправляющая в адрес контракта какие-то криптовалютные активы. Обрабатывая подобную транзакцию, майнер находит блок, где содержится смарт-контракт, и при помощи виртуальной машины запускает его код на обработку, подавая ему «на вход» данные транзакции. Результат действия смарт-контракта может быть разным, что обусловлено логикой алгоритма, заложенной в сам код контракта. Это может быть просто внесение изменений в состояние системы либо формирование контрактом ответных транзакций — одной или даже нескольких. Не следует также забывать, что смарт-контракты запускаются не только майнерами, но и обычными узлами. Это происходит в моменты, когда они обрабатывают транзакции, связанные со смарт-контрактами, в том числе и при проверке получаемых от майнеров блоков на валидность. Подобный протокол предполагает, с одной стороны, некоторую вычислительную избыточность, а с другой — обеспечивает дополнительную гарантию стабильности работы системы в целом.
В целом процесс формирования смарт-контракта похож на обычную транзакцию, которая содержит ряд дополнительных элементов, придающих ей уникальные свойства. В первую очередь речь идет о программном коде, который подлежит децентрализованному исполнению при помощи так называемой виртуальной машины Ethereum (EVM) непосредственно на узлах сети, создающих блоки. В коде смарт-контракта описана алгоритмическая логика обработки сделок между пользователями сети и владельцем смарт-контракта, поместившим его в блокчейн, введя его, таким образом, в действие. С этого момента смарт-контракт присутствует в одном из блоков цепочки, и любой желающий участник сети может активировать его работу путем отправки транзакции на адрес контракта в системе. То есть смарт-контракт является полноправным субъектом сети, который может принимать и формировать транзакции. Но делает он это не самостоятельно, а только когда код контракта запускается на исполнение виртуальной машиной Ethereum на узле майнера при создании нового блока.
В сети Ethereum решили, что будет целесообразно вести базу актуальных состояний для каждого из адресов сети. Этот способ учета хотя и требует дополнительного хранения определенного объема данных, но все же несравнимо удобнее принципа UTXO, при котором нужно постоянно получать актуальные состояния адресов через расчеты