Часть III · Глава 23 из 43 · London

EIP-3529: закрываем лазейку газовых возвратов

Раньше освобождение хранилища давало солидный газовый возврат — хорошая идея, которую начали эксплуатировать. Контракты копили возвраты как «газовые токены», а возвраты позволяли блоку выполнять почти вдвое больше реальной работы, чем предполагал его газовый лимит. EIP-3529 не отменяет возвраты — он их урезает и ограничивает, так что уборка состояния всё ещё немного окупается, но эксплойт умирает, а блоки остаются предсказуемыми для нового рынка комиссий.

Обновлено 24 июн. 2026 г. · 9 мин
Предполагается
  • газ и хранилище (SSTORE)
  • рынок комиссий EIP-1559

London, август 2021 года. Знаменитым изменением того дня был EIP-1559, но вместе с ним вышел более тихий спутник, благодаря которому 1559 действительно заработал. Ethereum давно предлагал газовый возврат за освобождение хранилища: обнулите слот или примените SELFDESTRUCT к контракту — и получите газ обратно. Замысел был безобидным — награждать за уменьшение состояния, которое хранят все. Но возврат — это деньги, а деньги провоцируют эксплуатацию. К 2021 году возврат превратился в небольшую индустрию и настоящую головную боль для учёта блоков. EIP-3529 — это исправление, и это хороший пример настройки стимула, а не его удаления. Выведем его.

1 шаг Возвраты начали эксплуатировать

Проблема: возвраты стали торгуемым активом

Очистка слота хранилища возвращала до ~15000 газа; SELFDESTRUCT возвращал 24000. Это создало порочную сделку. Когда газ дёшев, контракт может выполнить SSTORE для кучи слотов в ненулевые значения; позже, когда газ дорог, он их очищает и собирает возвраты — по сути, покупая газ по низкой цене и тратя его по высокой. Такие контракты называли газовый токен Контракт (например, GST2, CHI), который копит газ, записывая слоты хранилища, когда газ дёшев, и очищая их ради возврата, когда газ дорог — храня ценность в бесполезном иначе состоянии, чтобы арбитражировать цену газа. , и они не делали ничего полезного, кроме раздувания состояния и арбитража рынка комиссий.

возвратами злоупотребляли: купить газ дёшево, потратить дорого газ дёшев → минт SSTORE во много слотов газ дорог → харвест очистка → большой возврат хуже: refund позволяет блоку сделать работы на 2× лимита газа «газовый токен» — ценность хранится в бесполезном состоянии, играя на цене газа
Заполняем слоты хранилища, пока газ дёшев, затем очищаем их, когда газ дорог, чтобы собрать возвраты — «газовые токены» хранили ценность в бесполезном состоянии, чтобы играть с ценой газа. Хуже того: поскольку возвраты компенсируют уплаченный газ, реальная работа одного блока могла достигать почти двойного газового лимита.

Есть второй, более тонкий вред. Возврат уменьшает газ, который начисляется транзакции, поэтому под газовый лимит блока помещается больше транзакций, чем реальной работы стоит этот лимит. Значит, блок мог выполнять до реальных вычислений сверх того, что подразумевал его газовый лимит — ужасно для предсказуемости размера блоков и особенно плохо для EIP-1559, чей контроллер целиком зависит от того, что gasUsed отражает подлинную нагрузку.

→ Шаг 2: уменьшить, а не вырвать с корнем.

2 шаг Урезать, а не отменить

EIP-3529: меньше возвраты, жёстче ограничение

Решение — это калибровка, а не отмена. EIP-3529 вносит три изменения: полностью убирает возврат за SELFDESTRUCT, урезает возврат за очистку SSTORE с 15000 до 4800 и ужесточает ограничение возврата Потолок на то, сколько газа транзакции может вернуться в виде возврата, как доля от использованного газа. EIP-3529 снизил его с gasUsed/2 до gasUsed/5 — так что вернуться может не более одной пятой газа транзакции. с gasUsed / 2 до gasUsed / 5. Скромная награда за действительно освобождённое состояние сохраняется, но теперь она слишком мала, чтобы газовые токены или трюк с 2×-блоком имели смысл.

не убирать возврат газа совсем — уменьшить и ограничить до после SELFDESTRUCT refund 24000 0 SSTORE clear refund 15000 4800 max refund cap gasUsed / 2 gasUsed / 5 скромный возврат за очистку состояния остаётся; игра на нём — нет
EIP-3529 не убирает возвраты — он их урезает: возврат за SELFDESTRUCT становится 0, возврат за очистку SSTORE падает с 15000 до 4800, а ограничение суммарного возврата ужесточается с gasUsed/2 до gasUsed/5. Достаточно, чтобы всё ещё награждать за освобождение состояния, слишком мало, чтобы этим злоупотреблять.
Формула
maxRefund = gasUsed / 5 1 ( was gasUsed / 2 2 )
  1. 1 не более пятой части газа транзакции можно вернуть — против половины раньше
  2. 2 старое ограничение позволяло возвратам компенсировать до половины, что открывало 2×-блок
Именно ужесточение ограничения с половины до пятой части удерживает реальную работу блока около его газового лимита.

→ Шаг 3: итог — и ниточка, за которую мы потянем позже.

3 шаг Блоки снова ограничены

Итог: предсказуемые блоки — и толчок к временному хранилищу

С ограничением возвратов пятой частью реальная работа блока снова удерживается около его газового лимита, вместо того чтобы дрейфовать к удвоенному значению. Именно эта предсказуемость нужна контроллеру комиссий EIP-1559, чтобы честно считывать спрос, поэтому они и вышли вместе.

реальная работа за блок, ограничена лимитом лимит газа до ~2× лимита после ≈ лимит gas-токены невыгодны — блоки предсказуемы для EIP-1559 поэтому же трюк с SSTORE-reset подорожал — см. transient storage
Раньше возвраты позволяли реальной работе блока достигать ~2× газового лимита; теперь она удерживается около лимита. Газовые токены становятся невыгодными, а блоки остаются предсказуемыми — именно на это полагается контроллер EIP-1559.
04 Глубже Куда двигаться дальше