Блокчейн
Gas: модель вычислений
Отправил swap на Uniswap за $500, а комиссия оказалась $150 - больше, чем за банковский перевод. Через час тот же swap стоил 3. Почему цена за одну и ту же операцию скачет в 50 раз? Потому что в Ethereum вычисления на виртуальной машине - ограниченный ресурс, и за него идёт конкуренция. Gas - это модель, которая превращает вычислительную мощность в экономический рынок.
- **DeFi:** Uniswap swap потребляет ~150,000 gas. В пик NFT-бума 2021 года один swap мог стоить 200+, потому что блоковое пространство — конечный ресурс
- **Fee burn:** с момента EIP-1559 (август 2021) сожжено ETH на сумму более 10 млрд — это ETH, навсегда выведенный из обращения
- **Gas оптимизация:** протокол Seaport (OpenSea) сэкономил пользователям ~460M в gas-расходах за счёт оптимизации кода контрактов
EIP-1559: от идеи до революции
EIP-1559 был предложен Виталиком Бутериным в 2018 году и формализован экономистом **Tim Roughgarden** (Колумбийский университет). Roughgarden написал 59-страничное исследование, доказывающее, что EIP-1559 - game-theoretically sound: ни один участник не может манипулировать системой с выгодой для себя. Майнеры были яростно против - EIP-1559 сжигал их доход. В марте 2021 крупнейшие пулы (Sparkpool, Ethermine) контролировали >50% хешрейта и угрожали форком. Напряжение дошло до того, что сообщество обсуждало перенос The Merge (переход на PoS) как экстренную меру. В итоге EIP-1559 активировался 5 августа 2021 в блоке #12,965,000 (London Hard Fork). В первый час было сожжено 36 ETH (~$90,000). За первый месяц - более 200,000 ETH (~$700M).
EIP-1559 стал крупнейшим изменением экономической модели Ethereum. Он превратил ETH из инфляционного актива в потенциально дефляционный (ultrasound money) и сделал комиссии предсказуемыми для пользователей.
Предварительные знания
Gas: зачем нужна единица вычислений
EVM - это Тьюринг-полная виртуальная машина. Это значит, что любой смарт-контракт может содержать бесконечный цикл. А теперь представь: тысячи узлов сети должны выполнить код контракта. Если контракт зациклится - **вся сеть зависнет**.
Это фундаментальная проблема компьютерных наук - **halting problem** (проблема останова). Алан Тьюринг доказал в 1936 году: невозможно написать программу, которая для произвольной другой программы определит, завершится ли та. Нельзя статически отличить полезный контракт от бесконечного цикла.
Решение Ethereum: **gas** - единица измерения вычислительной работы. Каждая операция в EVM стоит фиксированное количество gas. Каждая транзакция должна заранее оплатить gas. Если gas закончился - выполнение прерывается. Бесконечный цикл невозможен, потому что рано или поздно газ кончится.
**Gas - это не деньги.** Gas - это единица вычислений (как киловатт-часы для электричества). Оплата идёт в ETH, а «курс» gas → ETH определяется через **gas price** в единицах **gwei** (1 gwei = 10^9 wei = 0.000000001 ETH).
| Opcode | Gas cost | Описание |
|---|---|---|
| ADD | 3 | Сложение двух чисел на стеке |
| MUL | 5 | Умножение |
| SHA3 (KECCAK256) | 30 + 6/слово | Вычисление хеша |
| SLOAD | 2100 | Чтение из storage |
| SSTORE (новое значение) | 20000 | Запись в storage (новый слот) |
| SSTORE (обновление) | 5000 | Перезапись существующего слота |
| CREATE | 32000 | Создание нового контракта |
| TRANSFER (ETH) | 21000 | Минимум для простого перевода |
Обрати внимание: операции с **storage** в сотни раз дороже арифметики. Это не случайность - запись в storage требует, чтобы **каждый full node** навсегда хранил эти данные. SSTORE = 20,000 gas, ADD = 3 gas - разница в 6,666 раз отражает реальную стоимость для сети.
Почему в EVM каждая операция стоит gas?
Gas Limit: два уровня ограничений
Gas limit существует на **двух уровнях**: transaction gas limit (задаёт отправитель) и block gas limit (определяется протоколом и валидаторами).
**Transaction gas limit** - максимум gas, который отправитель готов потратить на транзакцию. Это страховка: ты говоришь «я готов заплатить максимум 100,000 gas». Если контракт потратит меньше - неиспользованный gas вернётся. Если потратит больше - транзакция откатится.
**Out of Gas = revert, но gas НЕ возвращается!** Если транзакция исчерпала gas limit до завершения: 1. Все изменения state **откатываются** (revert) 2. Потраченный gas **НЕ возвращается** - ты заплатил за вычисления, которые уже были выполнены 3. Транзакция записывается в блок со статусом `failed` Это принципиально: валидатор тратил ресурсы на выполнение. Если бы gas возвращался при ошибке, это был бы вектор DoS-атаки - бесконечные «неудачные» транзакции бесплатно.
**Block gas limit** - максимум gas для всех транзакций в одном блоке. В Ethereum это ~30 млн gas (target ~15 млн, об этом в EIP-1559). Это ограничивает объём вычислений, который сеть должна обработать за 12 секунд.
**Почему не ставить gas limit = 30M на всякий случай?** Можно, но если контракт уязвим и съест весь gas - ты заплатишь за все 30M единиц. Поэтому `estimateGas()` + 20% запас - стандартная практика.
Что произойдёт, если транзакция исчерпает свой gas limit до завершения?
EIP-1559: новая модель комиссий
До августа 2021 года Ethereum использовал **first-price auction** (аукцион первой цены). Каждый пользователь указывал gas price - сколько готов платить за единицу gas. Валидаторы выбирали транзакции с наивысшей ценой. Проблемы были серьёзные.
**Проблемы first-price auction:** 1. **Переплата** - пользователи не знали «правильную» цену и ставили с запасом 2. **Волатильность** - цена gas прыгала в 10-100 раз за минуты 3. **Неэффективность** - две транзакции в одном блоке могли заплатить 10 gwei и 100 gwei за тот же сервис 4. **Gas wars** - при популярном NFT drop цена взлетала до 1000+ gwei
**EIP-1559** (London upgrade, 5 августа 2021) полностью переделал модель комиссий. Вместо одного gas price появились два компонента: **base fee** (определяется алгоритмически) + **priority fee** (tip для валидатора).
Ещё одна ключевая инновация: **elastic block size**. До EIP-1559 блоки всегда заполнялись до лимита. Теперь есть target (15M gas) и max (30M gas). Если блок больше target - base fee растёт. Если меньше - падает. Это автоматически балансирует спрос.
**Результат EIP-1559:** пользователь больше не гадает цену. Он видит текущий base fee (определён протоколом) и добавляет tip. Кошелёк автоматически выставляет `maxFeePerGas` и `maxPriorityFeePerGas`. Переплата возвращается.
В чём главная проблема first-price auction, которую решил EIP-1559?
Base Fee: алгоритмическая цена блокового пространства
**Base fee** - минимальная цена за единицу gas, которую должна заплатить каждая транзакция в блоке. Этот параметр вычисляется **алгоритмически** на основе загрузки предыдущего блока. Никто - ни валидаторы, ни governance - не контролирует base fee.
Ключевой момент: при устойчивом повышенном спросе base fee растёт **экспоненциально**. Увеличение на 12.5% за блок (каждые 12 сек) означает удвоение за ~6 блоков (~72 секунды). За минуту base fee может вырасти в 2 раза, за 5 минут - в 30 раз. Это быстро охлаждает спрос.
**Fee burn** - самое революционное в EIP-1559. Base fee **сжигается** - ETH уничтожается навсегда. Ни валидатор, ни протокол не получают эти ETH. Это превращает ETH из инфляционного актива в потенциально **дефляционный**.
Ultrasound Money: когда ETH становится дефляционным
Баланс эмиссии и сжигания ETH
Ethereum выпускает ~1,700 ETH/день (staking rewards). Если base fee > ~23 gwei, за день сжигается БОЛЬШЕ ETH, чем выпускается. С момента The Merge (сентябрь 2022) до конца 2024: Выпущено: ~1,100,000 ETH Сожжено: ~1,400,000 ETH Баланс: -300,000 ETH (дефляция!) Сообщество назвало это «ultrasound money» - в противовес «sound money» (Bitcoin) и «unsound money» (фиат). Мониторинг в реальном времени: ultrasound.money
**Зачем сжигать?** Если бы base fee шёл валидаторам, они были бы заинтересованы в высоких комиссиях и могли бы искусственно загружать блоки спам-транзакциями (себе же и платят). Сжигание устраняет этот конфликт интересов.
Что происходит с base fee при полностью заполненных блоках (30M gas) в течение 10 блоков подряд?
Priority Fee: tip для валидатора
Base fee сжигается - валидатор его не получает. Тогда зачем валидатору вообще включать транзакцию в блок? Для этого существует **priority fee** (или **tip**) - добровольная доплата, которая идёт напрямую валидатору.
В EIP-1559 транзакции пользователь указывает два параметра: - **maxPriorityFeePerGas** - сколько ты готов заплатить валидатору сверх base fee - **maxFeePerGas** - абсолютный максимум за единицу gas (base fee + priority fee) Фактическая цена: `effectiveGasPrice = min(baseFee + maxPriorityFeePerGas, maxFeePerGas)`
**Стратегии выставления fee** зависят от срочности транзакции. Кошельки вроде MetaMask используют API вроде `eth_feeHistory` для анализа последних блоков и предлагают три уровня.
| Стратегия | Priority fee | Время ожидания | Когда использовать |
|---|---|---|---|
| Low / Slow | 0.1–1 gwei | Минуты | Не срочно: claim rewards, одобрение токена |
| Medium | 1–3 gwei | ~12-24 сек | Обычные операции: swap, transfer |
| High / Fast | 3–10 gwei | Следующий блок | Срочно: арбитраж, ликвидация |
| Aggressive | 10–100+ gwei | Гарантированно | MEV, NFT mint war |
**Flashbots Protect** - сервис, который решает проблему frontrunning. Обычно транзакция попадает в публичный mempool, где MEV-боты видят её и могут вставить свою транзакцию перед ней (frontrun). Flashbots Protect отправляет транзакцию напрямую валидаторам через приватный канал, минуя публичный mempool.
**maxFeePerGas** - это твоя «страховка» от внезапного роста base fee. Ставь с запасом (2-3x текущего base fee). Ты заплатишь ровно baseFee + priorityFee, а разница вернётся. Высокий maxFeePerGas не увеличивает реальную стоимость - он лишь расширяет диапазон приемлемого base fee.
Высокий gas price (или maxFeePerGas) ускоряет выполнение транзакции внутри EVM
Gas price влияет только на **приоритет включения** транзакции в блок. Скорость выполнения кода в EVM одинакова для всех транзакций - каждый opcode занимает фиксированное время. Высокий gas price = быстрее попадёшь в блок, но не быстрее выполнишься.
Путаница возникает из-за UX кошельков: кнопки «Slow / Medium / Fast» относятся к времени ожидания включения в блок, а не к скорости вычислений. Транзакция с priority fee 100 gwei выполняется в EVM ровно так же быстро, как с 1 gwei - разница только в очерёдности попадания в блок.
Пользователь отправил транзакцию с maxFeePerGas=60 gwei, maxPriorityFeePerGas=3 gwei. Текущий base fee = 40 gwei. Сколько gwei за единицу gas фактически заплатит пользователь?
Итоги
- **Gas** — единица вычислений в EVM, решающая halting problem: бесконечный цикл невозможен, потому что gas конечен. Поэтому swap на Uniswap не может зависнуть навсегда — даже если контракт содержит баг
- **Gas limit** работает на двух уровнях: transaction limit (задаёт отправитель, страховка от переплаты) и block limit (~30M, ограничивает вычисления за 12 секунд). Out of gas = revert + потеря gas
- **EIP-1559** заменил хаотичный аукцион алгоритмическим base fee + priority fee. Elastic block size (target 15M, max 30M) автоматически балансирует спрос
- **Base fee** сжигается (fee burn), создавая дефляционное давление на ETH. Алгоритм увеличивает/уменьшает base fee до 12.5% за блок в зависимости от загрузки
- **Priority fee** (tip) — единственное, что получает валидатор. Стоимость комиссии тех самых 150 за swap, упомянутых в начале, зависит не от сложности операции, а от конкуренции за блоковое пространство — и EIP-1559 сделал эту конкуренцию прозрачной и предсказуемой
Связанные темы
Gas-модель связывает виртуальную машину с экономикой и безопасностью Ethereum:
- EVM: виртуальная машина Ethereum — Gas определяет стоимость каждого opcode в EVM - связывает вычисления с экономикой
- MEV: экстрагируемая ценность — Priority fee и порядок транзакций создают рынок MEV - валидаторы извлекают ценность из переупорядочивания
- Ethereum транзакции — Gas limit, maxFeePerGas и maxPriorityFeePerGas - ключевые поля в каждой EIP-1559 транзакции
Вопросы для размышления
- Если Ethereum перейдёт на шардинг и block gas limit вырастет в 100 раз — как это повлияет на base fee и «ultrasound money» тезис?
- Почему дизайнеры EIP-1559 выбрали именно 12.5% как максимальное изменение base fee за блок — что случится при 50% или 1%?
- В Layer 2 решениях (Optimism, Arbitrum) gas работает иначе. Какие свойства EIP-1559 сохраняются, а какие — нет?