Лимит gas блока Ethereum: вместимость, предел транзакции и расход

Лимит gas блока Ethereum задаёт максимальное количество gas, допустимое в одном блоке. Лимит gas транзакции обозначает предел, который отправитель готов выделить для одной операции. Использованный gas показывает фактический расход. Эти три величины помогают различать вместимость блока, ограничение отдельной транзакции и результат выполнения.

Разница особенно важна при чтении технических данных: максимум, измеренный расход и цена отвечают на разные вопросы. Ниже разобраны их связи без указания текущей численной вместимости блока и без прогнозов стоимости транзакций.

Три величины gas: какой вопрос решает каждая

Gas измеряет вычислительную работу, необходимую для выполнения операций в Ethereum. Чтобы правильно прочитать число, сначала определите, к чему оно относится:

  • Лимит gas транзакции: какой максимальный расход отправитель допускает для этой операции?
  • Использованный gas транзакции: сколько gas израсходовала именно эта операция?
  • Лимит gas блока: какое максимальное количество gas допустимо для блока в целом?

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

У блока тоже есть две отдельные величины: собственный максимум и суммарный использованный gas. Последний относится ко всем транзакциям этого блока. Расход из квитанции одной транзакции относится только к ней. Поэтому перед сравнением чисел полезно словами обозначить их область: «предел операции», «расход операции», «предел блока» или «расход блока».

Вместимость блока — верхняя граница, а целевой уровень отдельный

Лимит gas блока — верхняя граница. Описанный в документации целевой уровень использования gas составляет половину текущего лимита блока. Это разные ориентиры: целевой уровень не требует, чтобы каждый блок использовал ровно столько gas, а максимум нельзя называть целевым значением.

Например, фраза «расход блока ниже лимита» сравнивает потребление с верхней границей. Сама по себе она ещё не показывает, находится ли расход выше или ниже целевого уровня. Для второго вывода нужен отдельный ориентир — целевой уровень. Так одно и то же наблюдение может быть достаточным для сравнения с максимумом, но недостаточным для сравнения с целью.

Лимит блока может меняться со временем в результате сигналов валидаторов и обновлений сети. Поэтому число, описывающее вместимость, следует связывать с конкретным блоком или периодом. Здесь не приводится текущее численное значение и не предполагается дата следующего изменения.

Настройку отправителя также нужно отделять от параметра блока. Отправитель задаёт предел gas своей транзакции; у блока есть собственный максимум. Из этих определений и отдельно описанных механизмов изменения вместимости следует вывод: изменение лимита транзакции само по себе не меняет лимит блока. Этот вывод разграничивает два параметра, но не описывает подробный механизм сигналов валидаторов.

Почему лимит gas не равен цене gas

Лимит отвечает на вопрос о количестве вычислительной работы. Цена за единицу gas отвечает на вопрос о денежной стоимости этой единицы. Комиссия за исполнение определяется использованным gas, умноженным на цену единицы. Здесь речь именно о комиссии за исполнение, без утверждения, что такая формула перечисляет все возможные платежи в любом контексте.

Из определений следует различие размерностей: предел, выраженный в gas, и цена, выраженная в денежных единицах за gas, не взаимозаменяемы. Это логический вывод о значении показателей. Он не означает, что вместимость блока и цены экономически никак не связаны.

Например, метод JSON-RPC eth_gasPrice возвращает оценку текущей цены за единицу gas в wei. Такой результат следует читать как оценку цены, а не как показатель вместимости блока или гарантированную цену будущего исполнения. Сначала определите единицы измерения, затем решайте, с каким другим числом имеет смысл сравнивать результат.

Отдельный вопрос — чем стоимость исполнения отличается от суммы, предназначенной получателю. Он разобран в статье «Комиссия gas в Ethereum: почему она отличается от суммы перевода». Здесь достаточно сохранить различие между количеством gas, его ценой и вместимостью блока.

Гипотетическое сравнение с явными условиями

Представим вымышленный учебный блок с лимитом 1 000 000 gas. По условию в нём находятся только две транзакции, обе уже исполнены:

  • У транзакции А лимит составляет 100 000 gas, а фактический расход — 60 000 gas.
  • У транзакции Б лимит составляет 120 000 gas, а фактический расход — 90 000 gas.

Все числа придуманы для объяснения. Это не измерения действующей сети Ethereum и не рекомендуемые настройки транзакций. Расход ниже индивидуального предела согласуется с возможностью, показанной в документации, но не обещает такую разницу для любой операции.

По определению расход блока складывается из расхода его транзакций. Следовательно, при заданном составе получается 150 000 gas: 60 000 плюс 90 000. Эта величина ниже вымышленного лимита 1 000 000 gas. Вывод получен арифметически из условий примера и определения суммарного расхода блока.

Сравнение ограничено расходом и вместимостью. Оно не прогнозирует включение транзакций. Для допустимости включения предложенная цена за gas должна быть не ниже базовой комиссии блока. В нашем сравнении предложенная цена отсутствует. Поэтому из него нельзя установить выполнение этого отдельного необходимого условия. Выполнение ценового условия также не гарантирует включения.

Здесь важно сохранить границы вывода: данных достаточно, чтобы сравнить заданный суммарный расход с заданным максимумом. Их недостаточно для полного объяснения выбора транзакций. Пример не содержит алгоритма формирования блока, и его не следует превращать в правило, будто одно сложение лимитов транзакций определяет будущий состав блока.

Читайте поля gas вместе с окружающим объектом

В документации Ethereum JSON-RPC значения полей разграничены по объектам. У блока gasLimit обозначает максимально допустимое количество gas, а gasUsed — суммарный gas, использованный всеми транзакциями этого блока. В квитанции транзакции поле gasUsed относится только к конкретной операции.

Поэтому название окружающего объекта столь же важно, как название поля. Если скопировать два значения gasUsed без пояснений, может показаться, что они описывают одно и то же. Подписи «расход блока» и «расход транзакции» сохраняют нужный контекст и помогают выбрать соответствующий предел для сравнения.

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

Практический список для проверки объяснения

  1. Определите объект. Число относится к транзакции, её квитанции или блоку?
  2. Уточните роль. Перед вами максимум, фактический расход, целевой уровень или цена за gas?
  3. Сохраните контекст блока. Вместимость может меняться; связывайте её с описываемым блоком или периодом.
  4. Ограничьте вывод исходными данными. Расход ниже верхней границы подтверждает это сравнение, но сам по себе не устанавливает допустимость или гарантированное включение транзакции.
  5. Проверьте условия примера. В гипотетической задаче должны быть явно заданы вместимость, состав транзакций и их расход.

Определения gas и различие между целевым уровнем и максимумом приведены в документации Ethereum о gas и комиссиях. Вместе с описанием полей API они позволяют различать эти величины, но не превращают упрощённую задачу в полную модель включения транзакций.

Образовательный материал подготовлен с помощью ИИ. Вымышленный пример поясняет технические определения и не является финансовой рекомендацией или предложением отправить транзакцию.