Gas в Ethereum: что такое газ и как считать комиссию (gwei, base fee, tip)

Газ (gas) — единица измерения вычислительной работы в сетях Ethereum и совместимых EVM-цепях. Любая операция смарт-контракта или простая транзакция «сжигает» определённое количество газа. Плата за газ взимается в нативной валюте сети (в Ethereum — ETH), а цена за единицу газа обычно указывается в gwei. Газ решает две задачи: (1) защищает сеть от спама/DoS, делая массовые вычисления экономически дорогими; (2) компенсирует валидаторов/продюсеров блоков за выполненную работу.

Коротко о Gas

  • Gas = «топливо» EVM. Каждая операция имеет цену в единицах газа, а вы платите gas_used × price_per_gas.

После EIP-1559: итоговая плата ≈ gas_used × (base_fee + priority_fee), где base_fee сжигается, а priority_fee («tip») достаётся продюсеру блока.

  • Газлимит (gas limit) — верхняя граница газа, которую вы готовы потратить; если газа не хватило, состояние ревертится, но израсходованный газ теряется.
  • Данные на L1 стоят газа. За байты входных данных взимается газ; после EIP-2028 нулевой байт дешевле ненулевого.

После EIP-4844 появился отдельный рынок blob-газа для данных L2-роллапов — это снизило их издержки публикации на L1.

Базовые определения

Термин Что это Где используется
Единицы газа Абстрактная мера «весa» операции. Для простого перевода ETH минимально требуется 21 000 газа (интринзик-стоимость транзакции). Evm
Цена за газ Ставка за 1 единицу газа (в gwei). Итоговая плата = gas_used × price_per_gas (с учётом модели EIP-1559 — см. ниже). Кошельки, RPC
Gas limit Максимум газа, который отправитель готов потратить на транзакцию. Кошельки, dApp
Gas used Сколько газа реально израсходовано транзакцией. Эксплореры
Base fee / Priority fee В модели EIP-1559: base_fee сжигается протоколом; priority_fee — чаевые продюсеру блока. Ethereum L1, многие L2
Gwei Деноминация ETH: 1 gwei = 10⁻⁹ ETH (а 1 ETH = 10¹⁸ wei). Котировки комиссий

Как считается комиссия после EIP-1559

С London-апгрейда транзакции типа 2 содержат параметры max_fee_per_gas и max_priority_fee_per_gas. Эффективная формула:

Итоговая плата (ETH) = gas_used × (base_fee + priority_fee).

priority_fee = min(max_priority_fee_per_gas, max_fee_per_gas − base_fee).

base_fee — общая для всех транзакций блока и сжигается протоколом; priority_fee получает продюсер блока.

Адаптация base_fee. Сеть стремится держать блоки «нацеленно заполненными» (~50% от максимума): если блок «переполнен» относительно цели, base_fee повышается (накопительно, но не более ≈12,5% за блок); если ниже цели — понижается. Это сглаживает пики и делает комиссии предсказуемее.

Практика. Кошельки подставляют оценки (estimator) и заполняют max_fee с запасом. Переплата поверх фактической (base + priority) возвращается отправителю автоматически (не путать с gas limit).

Интринзик-стоимость и данные транзакции

Каждая транзакция платит интринзик-газ до запуска байткода:

  • 21 000 газа — базовая стоимость «голой» транзакции (например, простой перевод ETH).

Дополнительно взимается плата за каждый байт входных данных: после EIP-2028 0-байт стоит дешевле ненулевого. Это важно для протоколов, активно использующих calldata.

Пример (схема, не котировка): fee = gas_used × (base_fee + priority_fee).

Для простого перевода: gas_used ≈ 21_000. Для вызова контракта: gas_used зависит от логики (чтение/запись хранилища, эмит событий, создание контрактов и т. п.).

Газлимит, out-of-gas и реверт

gas limit — это «топ-крышка»: сколько максимум вы готовы потратить. Если во время исполнения газа не хватило, EVM делает revert всех изменений состояния, а весь предоставленный газ списывается (он компенсирует уже выполненные шаги вычислений). Поэтому:

  • Не занижайте gas limit для сложных вызовов.
  • Обратите внимание на пограничные случаи: внутренние вызовы и «глубина» пути исполнения могут влиять на расход.
  • Оценка газа. RPC-метод eth_estimateGas помогает подобрать gas limit, но это оценка на основе текущего состояния и может ошибаться (например, при сложной ветвистости кода, меняющемся состоянии или защитных checks). Безопаснее добавлять надбавку поверх оценки.

«63/64-правило» при внешних вызовах (EIP-150)

Чтобы защитить вызовы от «высасывания» всего газа, EVM после хардфорка Tangerine Whistle ввёл правило: при внешнем вызове контракту-получателю никогда не пересылается весь оставшийся газ — минимум 1/64 остаётся у вызывающего контракта. Это учитывают паттерны try/catch, обработка ошибок и проектирование reentrancy-безопасных функций.

Что изменили EIP-3529 и EIP-6780 (влияние на «экономику газа»)

  • EIP-3529 (London): значительно урезал газ-рефанды (удалил за SELFDESTRUCT, снизил за некоторые SSTORE). Это «сломало» экономику gas-токенов и снизило стимул «мусорить» состояние ради будущих скидок.
  • EIP-6780 (Dencun): деактивировал удаление кода через SELFDESTRUCT (кроме случая «создан и уничтожен в той же транзакции»). Теперь операция по сути «сметает» баланс к бенефициару, не удаляя аккаунт/код, что тоже влияет на попытки экономить газ мутными трюками.

Эти изменения делают расчёт газа более прямолинейным и уменьшают «арбитраж на механике EVM».

Газ и L2: после EIP-4844 (Dencun)

Для роллапов (Optimistic / ZK) итоговая плата обычно состоит из двух частей:

  • Exec-gas в L2 (внутреннее исполнение).
  • Плата за данные на L1 (публикация доказательств/пакетов).

До 2024 года L2 записывали данные как calldata (дорого). EIP-4844 ввёл blob-транзакции и отдельный рынок blob-газа (по мотивам EIP-1559): у блока есть целевое и максимальное число «блобов», а их цена динамически меняется. Это резко удешевило публикацию данных для L2 и снизило конечные комиссии пользователей.

Практика: как платить меньше газа

  • Выбор времени. Блок-нагрузка волатильна: ночью/в выходные комиссии часто ниже.
  • Правильные параметры. Для L1 используйте EIP-1559-поля: разумный max_priority_fee и max_fee с запасом.
  • Оптимизация контрактов. Избегайте лишних SSTORE, храните тяжёлые данные off-chain/в событиях, проектируйте байтовые форматы (учитывая разную стоимость нулевых/ненулевых байтов).
  • L2 там, где можно. После EIP-4844 многие действия заметно дешевле на роллапах — и всё чаще достаточно «раз в какое-то время» выводить средства на L1.
  • Запас к estimate. Делайте «страховой» запас к eth_estimateGas, особенно в сценариях с внешними вызовами/мостами.

Частые вопросы (FAQ)

Сколько газу стоит простой перевод ETH? Около 21 000 газа (интринзик-стоимость), плюс плата по формуле EIP-1559.

Что такое base fee и почему её «сжигают»? base_fee — обязательная часть платы, одинаковая для всех транзакций в блоке; она сжигается, чтобы исключить переторговку и сделать рынок комиссий предсказуемым. Вознаграждение продюсера блока — это priority_fee (+ MEV, если применимо).

Почему мой вызов «вылетел» с out-of-gas, хотя кошелёк советовал gas limit? eth_estimateGas — это оценка при текущем состоянии. Если в момент включения состояние изменилось (например, вырос массив, прошли другие проверки, изменился путь исполнения), газа может не хватить. Заложите запас и упрощайте внешние зависимости.

Зачем правило «63/64»? Чтобы у вызывающего контракта всегда оставался минимум газа на уборку/обработку ошибок и чтобы снизить риск DoS паттернами «съесть весь газ у каллера».

Чем «блоб-газ» отличается от обычного? Это отдельный рынок для временного хранения больших «пакетов данных» (в основном для L2-роллапов). Он дешевле, не конкурирует напрямую с execution-газом, и тем самым снижает итоговые комиссии на L2.

Мини-пример расчётов

  • Пусть смарт-контрактный вызов потратил gas_used = 95_000, а в блоке: base_fee = 30 gwei и priority_fee = 2 gwei.
  • Тогда плата: 95_000 × (30 + 2) gwei = 3_040_000 gwei = 0.00304 ETH.
  • Если вы поставили max_fee = 50 gwei и max_priority_fee = 3 gwei, переплата сверх фактического base+priority вернётся.

Сопутствующие понятия (24k Wiki)

Технологии: EVM, Блокчейн, dApp, Rollup (L2)

Термины: EIP-1559, EIP-2028, EIP-4844, EIP-6780, Gas limit, Priority fee, Base fee, Ликвидность

Криптоактивы: Ethereum

Перспективные страницы (в процессе наполнения)

Gas refund: эволюция и риски

Blob-газ: устройство рынка после EIP-4844

Паттерны оптимизации газа для Solidity

Дизайн рынков комиссий: от аукциона к EIP-1559

Task Runner