EIP-1559: рынок комиссий, который сам себя оценивает
До 1559 каждая транзакция вслепую участвовала в аукционе первой цены — переплати или застрянь. Выведем замену шаг за шагом: объявленная цена, термостат, который её выставляет, эластичные блоки для всплесков и сжигание, устраняющее последний плохой стимул.
- газ
- мемпул
Каждая транзакция платит за газ, который она сжигает, — но по какой цене за единицу газа? Первые шесть лет существования Ethereum ответом был аукцион, и это было мучительно: комиссии скакали в 10 раз за час, кошельки ошибались с оценкой, а хронической переплатой облагали всех по-тихому. EIP-1559 заменил это. С первого взгляда замена выглядит хитрой и немного произвольной — «базовая комиссия», магические 12,5%, сжигание, — так что не будем её зазубривать. Выведем её, начав с аукциона и исправляя именно то, что не так, шаг за шагом.
Проблема: все ставят вслепую
Исходный дизайн — самый очевидный. Каждая транзакция называет одно число — свой gasPrice, — а предлагающий блока просто сортирует все ожидающие транзакции по этому числу и заполняет блок сверху вниз, от самой высокой ставки. Реализовать просто, а вот пользоваться этим тихо ужасно, потому что это закрытый аукцион первой цены: нужно назвать цену, не зная, что предложили остальные и сколько нужно, чтобы попасть в блок.
Оба сбоя болезненны. Поставишь высоко для надёжности — отдашь намного больше, чем нужно (проклятие победителя). Поставишь низко, чтобы сэкономить, — просидишь в мемпуле часами. А поскольку клиринговую цену никто не видит, каждый кошелёк гадает по-своему, комиссии скачут от блока к блоку, а всплеск спроса превращается в паническую давку ставок. Аукцион не назначает цену ресурсу — он облагает всех налогом за право угадывать.
→ Шаг 2: пусть протокол объявляет цену.
Объявляем одну цену — и пусть термостат её выставляет
Вот и ход. Вместо аукциона за минимальную цену протокол объявляет единую цену за газ, которую платит каждая транзакция в блоке — базовая комиссия Цена за единицу газа, которую протокол назначает каждый блок (а не участники торгов), одинаковая для всех в этом блоке, и сжигается, а не выплачивается предлагающему. EIP-1559. . Больше никаких торгов за нижнюю границу — вы читаете объявленную цену и платите её. Вся игра в угадайку закрытого аукциона за включение в блок исчезает.
Но это лишь сдвигает вопрос: кто выставляет базовую комиссию и откуда знает правильное число? Спрос меняется поминутно — любая фиксированная цена окажется неверной, а любой человек или оракул, назначающий её, становится мишенью для манипуляций. Хитрость в том, чтобы вообще не прогнозировать спрос, а реагировать на него простым контуром обратной связи — термостатом. Каждый блок смотрит, насколько заполненным был предыдущий блок, и подталкивает базовую комиссию к цели в половину заполнения: выше цели → повышаем; ниже → понижаем; с ограничением ±12,5% за блок, чтобы она никогда не дёргалась.
Симулятор базовой комиссии EIP-1559
Всё правило — это несколько строк целочисленной арифметики над родительским блоком: ни аукциона, ни оракула, просто контроллер:
- 1 текущая цена за газ, которую платят все в блоке
- 2 ограничение — не более ±12,5% изменения за один блок
- 3 насколько прошлый блок отклонился от цели в половину заполнения
Это ограничение в ±12,5% — тихий герой: шок спроса не может умножить вашу комиссию в 10 раз за один блок — она разгоняется за несколько, давая кошелькам стабильное, предсказуемое число, которое можно вам показать. Устойчивая перегрузка всё ещё обходится дорого (1,125ⁿ накапливается), но происходит это заметно и постепенно, а не панически.
→ Шаг 3: дать блокам простор для растяжения.
Даём блокам растягиваться, чтобы поглотить всплеск
Разделим «размер, к которому мы стремимся» и «размер, который мы допускаем». Контроллер базовой комиссии нацелен на цель по газу, но блок может раздуться до вдвое больше — газовый лимит равен 2 × target. Поэтому когда спрос подскакивает, лишние транзакции сразу помещаются в эластичное пространство над целью, вместо борьбы на аукционе; затем контроллер видит этот переполненный блок и в течение нескольких следующих блоков разгоняет базовую комиссию, чтобы стянуть спрос обратно к цели.
Так эластичность и контроллер — две половины одного механизма: эластичность справляется с моментом (пространство для поглощения всплеска), контроллер — с трендом (переоценка, чтобы всплеск не задержался). Средний блок остаётся заполненным примерно наполовину — именно тот запас, который держит контроллер отзывчивым в обе стороны.
→ Шаг 4: не платить её никому.
Сжигаем базовую комиссию; чаевые — предлагающему
Решение почти шокирует с первого взгляда: сжечь базовую комиссию. Уничтожить её. Предлагающий не получает от неё ничего — значит, больше нет причин раздувать её вверх, и контроллеру можно доверять. Бонусом сжигание привязывает дефицит валюты к использованию сети: высокий спрос уменьшает предложение ETH.
Но у предлагающего по-прежнему должна быть причина включать вашу транзакцию и хорошо её упорядочивать, поэтому 1559 добавляет небольшую приоритетную комиссию — чаевые — которые платятся предлагающему напрямую, сверх сжигаемой базовой комиссии. Вы подписываете два потолка: maxFeePerGas (максимум, который вы заплатите за газ, база + чаевые) и maxPriorityFeePerGas (чаевые). Вы платите min(maxFeePerGas, baseFee + maxPriorityFeePerGas) — базовая комиссия сжигается, остальное уходит чаевыми.