ЗНАНИЯ БЕЗ ЛИШНЕГО ШУМА

Max fee и priority fee в Ethereum. Как посчитать фактическую плату

Как базовая ставка, maxFeePerGas и maxPriorityFeePerGas влияют на плату Ethereum и почему итог отличается от максимума в кошельке.

Три кольца шкалы платы за газ

В Ethereum поле max fee задаёт верхнюю ставку за единицу газа, которую подписавший готов заплатить. Поле max priority fee ограничивает надбавку за приоритет. При включении транзакции базовую ставку берут из блока, а надбавку ограничивают оставшимся запасом до max fee. Сумма в строке «максимальная комиссия» в кошельке поэтому может быть заметно выше фактической платы.

Как связаны три поля

Базовая ставка, base fee, зависит от блока. Её задаёт протокол. В отправляемой операции с механизмом EIP-1559 пользователь или кошелёк указывает два предела. Первый ограничивает суммарную плату за одну единицу газа. Второй ограничивает часть, которая добавляется к базовой ставке. Если потолок 60 gwei, базовая ставка 36 gwei, а максимум надбавки 2 gwei, остаётся достаточно места для всей надбавки. Эффективная ставка равна 38 gwei.

При той же настройке в блоке с базовой ставкой 59 gwei остаётся только 1 gwei. Эффективная ставка будет 60 gwei, а надбавка — 1 gwei. Если базовая ставка выше 60 gwei, транзакция с этим пределом не может быть включена в такой блок. Как долго она останется доступной для следующих блоков, зависит от состояния операции и поведения узлов. Верхний предел надбавки не обещает время включения.

Расчёт суммы по квитанции

Предположим, лимит газа установлен в 21 000, операция использовала все 21 000 единиц, а эффективная ставка составила 38 gwei. Умножение даёт 798 000 gwei, или 0,000798 ETH. Верхняя оценка платы за газ перед отправкой равнялась 21 000 × 60, то есть 1 260 000 gwei или 0,00126 ETH. Разница между оценкой и платой в этом примере составляет 0,000462 ETH. Для перевода в ETH делите значение в gwei на один миллиард.

Если вызов контракта использовал меньше единиц, чем указано в лимите, при сверке берите фактический расход из квитанции. Лимит газа и верхняя ставка решают разные задачи. Первый ограничивает объём работы, второй ограничивает цену каждой единицы. Поэтому сравнивать только max fee у двух операций недостаточно. Вызов контракта с меньшей ставкой может обойтись дороже обычного перевода из-за большего расхода газа.

Три ставки в примере. Base fee — 36 gwei. Priority cap — 2 gwei. Max fee — 60 gwei
Три ставки в примере

Какие строки открыть в обозревателе

Выберите сеть и найдите транзакцию по её хешу. Сверьте статус, фактически использованный газ и эффективную цену газа. Если указаны ещё параметры из подписанной операции, оставьте их отдельными строками. При сверке остатка на счёте сначала отделите сумму отправленных ETH от платы за выполнение. При переводе токена номинал списывается в токене, а газ по обычной схеме на основной сети оплачивается в ETH.

Отдельно проверьте результат вызова. При ошибке revert изменения от вызова откатываются, но работу, которую сеть уже выполнила, всё равно оплачивают по правилам газа. Поэтому отсутствие переведённых токенов и наличие списания ETH в такой ситуации совместимы. Для других сетей и типов операций могут существовать дополнительные компоненты платы. Формула здесь относится к плате за исполнение обычной транзакции EIP-1559.

Что было списано. Газ — 21 000. Ставка — 38 gwei. Плата — 0,000798 ETH
Что было списано

Что можно проверить до отправки

Прочитайте, в каких единицах интерфейс показывает ставку и итог. Убедитесь, что лимит покрывает оценку работы, а max fee не ниже указанной надбавки. Проверьте, хватает ли нативной монеты на верхнюю оценку платы и сумму операции, если она отправляется в ETH. Если лимит ставки едва выше текущей базовой платы, рост базовой ставки может отложить включение. Когда меняете одну настройку, пересчитайте верхнюю оценку в ETH. Так легче заметить, какое именно поле изменило стоимость.

Для перевода стейблкоина сначала сверьте выбранную сеть. Единицы и расчёт комиссии в другой сети могут отличаться, даже если в форме вывода указан тот же тикер.

Поиск по сайту