EIP-3529: закрываем лазейку газовых возвратов
Раньше освобождение хранилища давало солидный газовый возврат — хорошая идея, которую начали эксплуатировать. Контракты копили возвраты как «газовые токены», а возвраты позволяли блоку выполнять почти вдвое больше реальной работы, чем предполагал его газовый лимит. EIP-3529 не отменяет возвраты — он их урезает и ограничивает, так что уборка состояния всё ещё немного окупается, но эксплойт умирает, а блоки остаются предсказуемыми для нового рынка комиссий.
- газ и хранилище (SSTORE)
- рынок комиссий EIP-1559
London, август 2021 года. Знаменитым изменением того дня был EIP-1559, но вместе с ним вышел более тихий спутник, благодаря которому 1559 действительно заработал. Ethereum давно предлагал газовый возврат за освобождение хранилища: обнулите слот или примените SELFDESTRUCT к контракту — и получите газ обратно. Замысел был безобидным — награждать за уменьшение состояния, которое хранят все. Но возврат — это деньги, а деньги провоцируют эксплуатацию. К 2021 году возврат превратился в небольшую индустрию и настоящую головную боль для учёта блоков. EIP-3529 — это исправление, и это хороший пример настройки стимула, а не его удаления. Выведем его.
Проблема: возвраты стали торгуемым активом
Очистка слота хранилища возвращала до ~15000 газа; SELFDESTRUCT возвращал 24000. Это создало порочную сделку. Когда газ дёшев, контракт может выполнить SSTORE для кучи слотов в ненулевые значения; позже, когда газ дорог, он их очищает и собирает возвраты — по сути, покупая газ по низкой цене и тратя его по высокой. Такие контракты называли газовый токен Контракт (например, GST2, CHI), который копит газ, записывая слоты хранилища, когда газ дёшев, и очищая их ради возврата, когда газ дорог — храня ценность в бесполезном иначе состоянии, чтобы арбитражировать цену газа. , и они не делали ничего полезного, кроме раздувания состояния и арбитража рынка комиссий.
Есть второй, более тонкий вред. Возврат уменьшает газ, который начисляется транзакции, поэтому под газовый лимит блока помещается больше транзакций, чем реальной работы стоит этот лимит. Значит, блок мог выполнять до 2× реальных вычислений сверх того, что подразумевал его газовый лимит — ужасно для предсказуемости размера блоков и особенно плохо для EIP-1559, чей контроллер целиком зависит от того, что gasUsed отражает подлинную нагрузку.
→ Шаг 2: уменьшить, а не вырвать с корнем.
EIP-3529: меньше возвраты, жёстче ограничение
Решение — это калибровка, а не отмена. EIP-3529 вносит три изменения: полностью убирает возврат за SELFDESTRUCT, урезает возврат за очистку SSTORE с 15000 до 4800 и ужесточает ограничение возврата Потолок на то, сколько газа транзакции может вернуться в виде возврата, как доля от использованного газа. EIP-3529 снизил его с gasUsed/2 до gasUsed/5 — так что вернуться может не более одной пятой газа транзакции. с gasUsed / 2 до gasUsed / 5. Скромная награда за действительно освобождённое состояние сохраняется, но теперь она слишком мала, чтобы газовые токены или трюк с 2×-блоком имели смысл.
- 1 не более пятой части газа транзакции можно вернуть — против половины раньше
- 2 старое ограничение позволяло возвратам компенсировать до половины, что открывало 2×-блок
→ Шаг 3: итог — и ниточка, за которую мы потянем позже.
Итог: предсказуемые блоки — и толчок к временному хранилищу
С ограничением возвратов пятой частью реальная работа блока снова удерживается около его газового лимита, вместо того чтобы дрейфовать к удвоенному значению. Именно эта предсказуемость нужна контроллеру комиссий EIP-1559, чтобы честно считывать спрос, поэтому они и вышли вместе.