`geth``EstimateGas和`Suggest(Gas)Price`如何运作?

问题描述 投票:-1回答:1

我的朋友问我geth如何估算天然气限制和天然气价格。它是如何做到的?

gas go-ethereum
1个回答
0
投票

如果您通过RPC API发送没有燃气限制或汽油价格的交易,则geth会使用Estimate()或SuggestPrice()。 Remix也使用这些。这些行为属于geth v1.8.23。不同的版本可能会有不同的

EstimateGas

输入:块编号(默认:“挂起”),事务的“气体限制”(默认:给定块编号的气体限制)

EstimateGas尝试在给定的块编号上找到运行此事务的最小气体。它在21000和'气体限制'之间进行二进制搜索。例如,如果'gas limit'为79000,它会尝试使用气体限制运行此事务,50000 =(21000 + 79000)/ 2.如果失败,则尝试使用64500 =(50000 + 79000)/ 2,并且等等。如果它以'gas limit'失败,则返回0并返回错误消息"gas required exceeds allowance or always failing transaction"

注意:即使交易因非天然气问题而失败,也会认为天然气不足。然后它将返回0,最后带有错误消息。

来源:geth /internal/ethapi/api.go

Suggest(Gas)Price

输入:要搜索的块数(默认值:20,--gpoblocks),价格百分位数(默认值:60,--gpopercentile),后备结果(默认值:1 GWei,--gasprice

SuggestPrice并行查询“最新”区块中“最近区块数”的汽油价格。如果由于任何原因它无法获得超过一半“块数”的答案,它将查询多达5个块数的块。

区块的天然气价格意味着该区块内交易的最低天然气价格。排除矿工发送的交易。

SuggestPrice对区块的天然气价格进行分类,然后在价格中获得给定的百分位数(最小价格为0,最大价格为100)。它缓存此结果,并立即为相同的“最新”(挖掘)块返回缓存结果。

如果所有尝试都失败,则返回最后一个结果。如果没有最后结果,则返回“后备结果”。而SuggestPrice无法返回超过500 GWei。

来源:geth /eth/gasprice/gasprice.go

© www.soinside.com 2019 - 2024. All rights reserved.