EIP-3198 и EIP-7516: даём EVM читать собственный рынок комиссий
EIP-1559 сделал базовую комиссию полноценной величиной протокола — вычисляемой каждый блок и сжигаемой. Но контракт не мог её прочитать: GASPRICE показывает только слитую воедино цену база+приоритет, которую заплатил отправитель. EIP-3198 добавляет BASEFEE; EIP-7516 делает то же самое для блобов. Два крошечных опкода, которые делают рынок комиссий читаемым прямо в цепочке.
- EIP-1559 (рынок комиссий)
- EIP-4844 (блобы)
London, август 2021 года (и Cancun, март 2024 года). EIP-1559 превратил цену газа в настоящую переменную протокола: каждый блок сеть вычисляет базовую комиссию и сжигает её. Она каноническая, детерминированная, находится в цепочке — и всё же в момент выхода апгрейда контракт никак не мог её прочитать. Похоже на недосмотр, и исправление почти неловко маленькое; но это чистая иллюстрация повторяющейся темы EVM — значение может существовать в протоколе, но не существовать в EVM, — и это случилось дважды: один раз для газа, один раз для блобов. EIP-3198 и EIP-7516 — два маленьких чтения, закрывающих этот пробел. Выведем их вместе.
Проблема: базовая комиссия вычислялась, сжигалась — и была невидима контрактам
После EIP-1559 цена, которую платит транзакция, делится надвое: сжигаемая базовая комиссия и приоритетные чаевые предлагающему. Единственным значением комиссии, доступным контракту, было GASPRICE Опкод (0x3a), возвращающий tx.gasprice — эффективную цену газа, которую заплатила транзакция. После EIP-1559 это база + приоритетные чаевые, слитые в одно число; не было опкода, чтобы получить компонент базовой комиссии отдельно. — который возвращает эффективную цену, заплаченную отправителем, т.е. базовую комиссию + чаевые вместе. Не было способа прочитать базовую комиссию отдельно. Это блокирует удивительно многое: релеер мета-транзакций Контракт (или смарт-аккаунт), который платит газ от имени пользователя и получает возмещение. Чтобы возместить точную стоимость, он должен знать базовую комиссию, а не только слитую эффективную цену — иначе он берёт больше или меньше нужного. , возмещающему пользователю газ, нужна базовая комиссия, чтобы вычислить истинную стоимость; on-chain газовому оракулу нужна базовая комиссия как сигнал перегрузки; любому контракту, подстраивающемуся под нагрузку сети, нужно её видеть. А позже EIP-4844 ввёл второе такое значение — блоб-базовую комиссию, со своим рынком в стиле EIP-1559, — точно так же вычисляемую протоколом и точно так же нечитаемую из EVM.
→ Шаг 2: раскрыть каждую комиссию как отдельный опкод.
Решение: два однокомандных чтения
Поскольку значения уже существуют в блоке, раскрыть их — тривиально. BASEFEE Опкод 0x48 (EIP-3198, вышел вместе с London и EIP-1559): выталкивает базовую комиссию текущего блока в стек. Единственное, дешёвое чтение значения, которое протокол уже вычисляет. (0x48), добавленный EIP-3198 вместе с 1559 в London, выталкивает базовую комиссию текущего блока. Позже BLOBBASEFEE Опкод 0x4a (EIP-7516, вышел вместе с Cancun и EIP-4844): выталкивает блоб-базовую комиссию текущего блока — блобовый аналог BASEFEE. (0x4a), добавленный EIP-7516 вместе с 4844 в Cancun, делает ровно то же самое для блоб-базовой комиссии. Каждый — это единственная дешёвая инструкция, читающая значение, которое заголовок блока уже несёт, — никаких вычислений, никакого нового механизма, просто окно к числу, которое было там всегда.
→ Шаг 3: что становится возможным, когда контракты видят комиссии.
Итог: контракты, понимающие рынок комиссий
Когда базовая комиссия читаема, релееры и смарт-аккаунты могут вычислять возмещение газа точно, вместо того чтобы гадать по слитой эффективной цене — это важно для абстракции аккаунтов, где контракт авансирует газ пользователя и должен получить возмещение до последнего вея. On-chain газовые оракулы и контракты, учитывающие перегрузку, получают полноценный сигнал, на который можно опереться. А с BLOBBASEFEE становится возможной оценка доступности данных роллапа Роллапы публикуют свои сжатые данные транзакций как блобы. Чтение BLOBBASEFEE позволяет контракту роллапа оценивать стоимость доступности данных прямо в цепочке — передавая реальные затраты L1 на блобы пользователям L2. прямо в цепочке: роллап может прочитать текущую блоб-базовую комиссию и точно оценить свои затраты на доступность данных, передавая реальные затраты L1 пользователям L2. Ни один из опкодов не блещет — но вместе они завершают дело, начатое EIP-1559 и EIP-4844, делая рынок комиссий не просто механизмом протокола, а тем, о чём EVM может рассуждать.