Существует много вопросов и ответов по поводу оценки количества потребляемого газа. Вопрос в том, что делать с этой оценкой.
Какие значения мы на самом деле должны указать в параметрах gas
и gasPrice
в send()
параметрах, чтобы убедиться, что транзакции проходят, но мы не будем платить слишком много:
myContract.methods.myMethod(123).send({
from: myAddress,
gas: myGasLimit,
gasPrice: myGasPrice
}, function(error, transactionHash){
...
});
Большинство людей, кажется, советуют установить gas
параметр на 10-20% выше estimatedGas
(что можно получить через интерфейс web3).
Но как насчет случая, когда оценка неверна ? Поскольку неиспользованный газ возвращается, почему бы не установить максимум на что-то огромное? Как насчет gasPrice
, должны ли мы оставить это на усмотрение майнера или установить значение?
До сих пор я не указал никаких значений для gas
и gasPrice
в параметрах отправки, и это привело к сильно различающимся суммам фактически оплаченного газа между кошельками. В браузере с MetaMask развертывание контракта стоит 0,000633134 эфира (на Rinkeby), а такое же развертывание в CoinbaseWallet стоит 0,01268828 эфира (также на Rinkeby). Очевидно, gasPrice
транзакция CoinbaseWallet составила 20 GWei по сравнению с 1 GWei для транзакции MetaMask.
Изменить: уточнение этого вопроса:
Чтобы сделать мой вопрос более ясным: когда вопрос, на который я ссылаюсь выше, касается ограничений функции getEstimate, я здесь спрашиваю о передовых методах после использования этой функции для получения оценки.
Имея оценку, какие значения я должен указать для полей gas
и gasPrice
, чтобы ограничить риск переплаты и получения в первом следующем блоке?
Предположим здесь, что метод наш собственный, и мы знаем, что оценка более-менее корректна (невозможны никакие изменения состояния, существенно увеличивающие расход газа).
Из текущих ответов я могу сделать вывод: не устанавливайте слишком высокий лимит газа (так что правило на 10-20% выше оценки звучит хорошо?)
О gasPrice
: я провел несколько экспериментов и увидел, что MetaMask использует значение, установленное децентрализованным приложением, а CoinBaseWallet игнорирует его. Так что, может быть, позволить кошельку (и, если возможно, конечному пользователю) решать, что делать?
Плюсы и минусы установки высокого лимита на gas
:
out of gas
событии весь газ будет аннулирован: когда заканчивается газ, транзакция завершается неудачей, но эфир, потраченный на газ, не возвращается.Плюсы и минусы установки (готовы платить) высокой цены gasPrice
:
Таким образом, для лимита газа вы хотите иметь хорошую оценку, основанную на фактических параметрах транзакции и текущем состоянии хранилища, к которому ваша транзакция обращается и использует, и действительно добавить немного маржи для учета изменения состояния между указанной оценкой. и фактическое выполнение транзакции, так как вы не хотите, чтобы закончился газ (и, таким образом, потратили весь газ на неудачную транзакцию) из-за небольшого увеличения там.
Что касается цены на газ, в идеале вы должны позволить конечному пользователю выбирать на основе текущих средних значений цены на газ для «быстрых» (следующий блок) транзакций, «средних» транзакций (за минуту?) и «дешевых» транзакций. транзакции. Для получения этих средних значений вы можете обратиться к заправочной станции ETH .
Coinbase Wallet, похоже, устанавливает цену на газ на уровне 20 GWei, что является довольно высоким показателем. Хорошо при передаче эфира или покупке токена, но при вызове некоторых функций контракта стоимость транзакции может быть непомерно высокой. Кошельки должны давать своим пользователям возможность устанавливать цену газа с хорошим связанным UX.
Я думаю, что это важная тема.
Причина, по которой не следует вкладывать большие суммы, заключается в том, что транзакция может вернуться и в некоторых случаях поглотить весь ваш газ.
Кроме того, оценка изменится, если функция каким-то образом зависит от времени, а это означает, что выполняемый код зависит от предыдущих инструкций. Тем не менее, если вы знаете функцию, которую выполняете, вы можете определить, удобно или нет позволять узлу решать, какой газ необходим.
Надеюсь, это поможет
Исмаэль