Газ (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
Перспективные страницы (в процессе наполнения)
Blob-газ: устройство рынка после EIP-4844