Как работают `geth`` EstimateGas и `Suggest (Gas) Price`? - PullRequest
0 голосов
/ 30 марта 2019

Мой друг спросил меня, как geth оценивает лимиты газа и цены на газ. Как делает это?

1 Ответ

0 голосов
/ 30 марта 2019

Если вы отправляете транзакции без ограничений на газ или цен на газ через API-интерфейс RPC, geth использует вместо этого Estimate () или SuggestPrice (). Ремикс тоже их использует. Эти поведения относятся к geth v1.8.23. Разные версии могут работать по-разному.

EstimateGas

input: номер блока (по умолчанию: «в ожидании»), «газовый лимит» транзакции (по умолчанию: газовый лимит для данного номера блока)

EstimateGas пытается найти минимальный газ для выполнения этой транзакции с данным номером блока. Он выполняет бинарный поиск между 21000 и «газовым пределом». Например, если «газовый лимит» равен 79000, он пытается выполнить эту транзакцию с газовым лимитом, 50000 = (21000 + 79000) / 2. В случае неудачи он пытается с 64500 = (50000 + 79000) / 2, и скоро. Если это не удалось с «газовым пределом», он возвращает 0 и сообщение об ошибке, "gas required exceeds allowance or always failing transaction".

ПРИМЕЧАНИЕ. Даже если транзакция не удалась из-за проблем, не связанных с газом, она считается недостаточной. Затем он вернет 0 с сообщением об ошибке в конце.

источник: geth /internal/ethapi/api.go

Предлагайте (газ) Цена

input: количество блоков для поиска (по умолчанию: 20, --gpoblocks), процентиль цены (по умолчанию: 60, --gpopercentile), результат отката (по умолчанию: 1 GWei, --gasprice)

SuggestPrice запрашивает цены на газ «числа последних блоков» параллельно с «последним» блоком. Если по каким-либо причинам он не может получить ответы, превышающие половину «количества блоков», он запросит больше блоков, чем «количество блоков», в пять раз больше.

Цена на газ для блока означает минимальную цену на газ в рамках транзакций в этом блоке. Транзакции, отправленные майнером, исключаются.

SuggestPrice сортирует цены на газ по блокам, затем подбирает данный процентиль среди цен (0 для наименьшей цены и 100 для наивысшей цены). Он кэширует этот результат и немедленно возвращает кэшированный результат для того же самого «последнего» (добытого) блока.

Если все попытки не удаются, возвращается последний результат. Если нет последних результатов, он возвращает «запасной результат». А SuggestPrice не может вернуть более 500 ГВтэй.

источник: geth /eth/gasprice/gasprice.go

...