Перейти к содержанию

Лимит газа блока

Руководство с учетом форков по лимиту газа блока Ethereum, целевому газу EIP-1559, ограничению газа транзакции, фактическому расходу, учету комиссий, оценке пропускной способности и нагрузке на узлы.

Обновлено

Только в образовательных целях; не является инвестиционным советом или инвестиционной рекомендацией. Инвестиции могут привести к убыткам.

Краткий ответ

Лимит газа блока — это записанный в заголовке блока Ethereum предел газа исполнения. Включенные транзакции должны соответствовать правилам учета протокола, чтобы суммарный gasUsed не превышал gasLimit. Газ — абстрактная единица измерения, а стоимость операций, calldata, памяти, хранилища и правила возвратов меняются с форками; это не непосредственное число инструкций процессора, байтов или транзакций.

После Fusaka согласованное базовое значение клиентов основной сети Ethereum составляет 60,000,000 gas на блок, однако определяющим остается фактический заголовок, а предпочтения валидаторов при текущем правиле могут постепенно менять лимит относительно родительского блока. При коэффициенте эластичности EIP-1559, равном 2, долгосрочная цель составляет 30,000,000 gas: блок временно может использовать весь лимит, а следующая базовая комиссия повышается, если расход родителя превысил цель. EIP-7825 отдельно ограничивает заявленный пользователем лимит транзакции значением 2^24 = 16,777,216 gas, а EIP-7934 независимо ограничивает RLP-размер блока исполнения значением 8,388,608 bytes. Эти параметры относятся к основной сети и указанной дате, а не являются универсальными константами EVM.

Как это работает

  1. Зафиксируйте сеть, хеш и номер блока, активный форк, клиент или RPC и время наблюдения. Прочитайте из заголовка gasLimit, gasUsed и baseFeePerGas; не подменяйте их статической таблицей параметров с сайта.
  2. Разделяйте лимит газа блока, целевой газ EIP-1559, заявленный лимит транзакции, фактический расход транзакции и цену единицы газа. Также отделяйте газ исполнения от blob-газа, байтов RLP-блока исполнения и специфического учета L2.
  3. Воспроизведите проверку и исполнение транзакции по графику газа активного форка. Учтите внутренний газ, calldata, списки доступа, расширение памяти, холодный и теплый доступ, запись в хранилище, прекомпилированные контракты и возвраты. Оценка зависит от состояния и тега блока и не является гарантией.
  4. Сверьте емкость блока. Сложите расход газа из квитанций или возьмите накопленное значение последней квитанции, подтвердите gasUsed <= gasLimit и учтите порядок транзакций и зависимость затрат от состояния. Число транзакций не равно лимиту газа и не задает постоянный TPS.
  5. Правильно примените EIP-1559. При эластичности 2 цель равна gasLimit / 2; расход родителя выше цели повышает следующую базовую комиссию, ниже цели — снижает. По текущему правилу лимит дочернего блока также должен оставаться в строгой полосе примерно 1/1024 относительно родителя. Базовая комиссия оценивает спрос, а лимит ограничивает допустимую работу исполнения.
  6. Проверьте эксплуатационные границы. Транзакция сверх действующего индивидуального предела недействительна даже при свободном газе в блоке; чрезмерный RLP-блок исполнения недействителен и тогда, когда суммарный газ ниже лимита. Неиспользованный запас газа транзакции высвобождается, а счетчик возврата представляет отдельное ограниченное форком уменьшение. REVERT сохраняет остаток газа, тогда как исчерпание газа верхнего уровня отменяет состояние и расходует весь предоставленный запас исполнения.
  7. Нагрузочно проверяйте и отслеживайте время исполнения полного блока, рост состояния, распространение блока, пропущенные слоты, реорганизации, возможности сборщиков и валидаторов, разнообразие клиентов и изменения параметров. Прежде чем считать повышенный лимит устойчивой пропускной способностью, сравнивайте реальные блоки и метрики узлов.

Разобранные примеры

  • Предел простых переводов. При 60,000,000 gas блок теоретически вмещает floor(60,000,000 / 21,000) = 2,857 обычных переводов ETH. Цель 30,000,000 gas вмещает 1,428; за идеализированный слот 12-second это 1,428 / 12 = 119 transactions/second. Это однородная иллюстрация верхней границы, а не наблюдаемый TPS.
  • Смешанный целевой блок. Пусть в целевом блоке переводы используют 400 * 21,000 = 8,400,000 gas, обмены — 80 * 180,000 = 14,400,000 gas, развертывания — 6 * 1,200,000 = 7,200,000 gas. Общий расход равен 30,000,000 gas для 486 transactions, то есть 486 / 12 = 40.5 transactions/second при указанном допущении о слоте. Одинаковая цель допускает очень разное число транзакций.
  • Лимит транзакции и фактическое списание. Транзакция заявляет 200,000 gas, но успешно завершается при gasUsed = 146,000. При эффективной цене 22 gwei комиссия равна 146,000 * 22 = 3,212,000 gwei = 0.003212 ETH; неиспользованные 54,000 gas не оплачиваются. Заявка 18,000,000 gas, напротив, превышает текущий предел протокола 16,777,216 gas и недействительна независимо от свободного места в блоке.
  • Реакция базовой комиссии. При gasLimit = 60,000,000 цель равна 30,000,000. Если исходное значение равно 24 gwei, полностью заполненный родитель на 60,000,000 gas повышает следующую базовую комиссию на максимальные 12.5% до 27 gwei; пустой родитель снижает ее на 12.5% до 21 gwei. Это не меняет лимит и не гарантирует загрузку следующего блока.

Риски

  • Использование устаревшего лимита газа основной сети.
  • Перенос параметров Ethereum на другую EVM-сеть или L2.
  • Смешение лимита блока и цели EIP-1559.
  • Смешение лимита блока и индивидуального предела транзакции.
  • Смешение заявленного и фактически использованного газа транзакции.
  • Представление газа как фиксированной единицы процессора, байтов или транзакций.
  • Использование устаревшего графика операций, calldata или возвратов либо игнорирование независимого RLP-предела размера блока.
  • Доверие eth_estimateGas без нужного состояния и тега блока.
  • Игнорирование зависимости исполнения от состояния и порядка транзакций.
  • Смешение неиспользованного запаса транзакции с отдельным счетчиком возврата.
  • Игнорирование оплаты газа при исчерпании газа или откате исполнения.
  • Объединение газа исполнения и blob-газа в один ресурс.
  • Вывод TPS только из однородных переводов.
  • Игнорирование пропущенных слотов, реорганизаций и задержек финальности.
  • Увеличение наихудшего времени исполнения и распространения блока.
  • Ускорение роста состояния и требований к архивам.
  • Повышение требований к оборудованию валидаторов, сборщиков и RPC.
  • Усиление риска централизации или расхождения клиентов.
  • Пропуск изменений предпочтений валидаторов, настроек клиентов или форков.
  • Принятие большей емкости за гарантию меньших комиссий или спроса.

Распространенные заблуждения

  • Лимит газа блока — фиксированная универсальная константа Ethereum или EVM.
  • Лимит 60,000,000 gas означает, что каждый блок должен расходовать 60 миллионов или что цель EIP-1559 тоже равна 60 миллионам.
  • Деление лимита блока на 21,000 дает реальный TPS сети.
  • Транзакция может занять весь блок, если в нем достаточно места; действующий индивидуальный предел независим.
  • Повышение лимита газа автоматически снижает комиссии без компромиссов для узлов, состояния, распространения, спроса и децентрализации.

Связанные темы

Источники

Навигация

Поиск по вики...