Исходные данные

После EIP-7623 минимальный расход газа транзакции зависит от объёма calldata. Правило особенно заметно у операций, которые отправляют много данных и выполняют мало вычислений. Для транзакции с более дорогим исполнением обычный расчёт может по-прежнему дать больше нового минимума. Ethereum EIP-7623 ↗

Один байт даёт разный вклад

Спецификация переводит calldata во внутренние единицы расчёта. Нулевой байт даёт одну единицу, ненулевой — четыре. Для минимального расхода каждая единица стоит 10 газа. Протокол сравнивает значение этой границы с обычным расчётом и использует большее. Для gas limit тоже действует проверка нижней границы. Поэтому старый расчёт, который учитывает только прежнюю стоимость байтов и ожидаемое исполнение, может дать неприемлемый лимит.

Условный вызов со 100 ненулевыми байтами

Данные дают 400 единиц. В нижней границе calldata добавляет 4000 газа к базовым 21 000, то есть получается 25 000. По прежней части расчёта те же байты добавляют 1600 газа. Если речь о простом вызове без дополнительных полей, а обычный расчёт с исполнением даёт 24 000, срабатывает граница 25 000. При обычном расчёте в 30 000 останется большее значение.

Для кошельков и сервисов отправки транзакций полезно проверять оценку для точного calldata и на нужной сети. Сравнение только по размеру входной строки упускает состав байтов. Комиссия в ETH также зависит от цены единицы газа, поэтому изменение количества газа следует считать отдельно от изменения рыночной комиссии.