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

时间:2019-03-30 13:06:14

标签: gas go-ethereum

我的朋友问我geth如何估算汽油限额和汽油价格。 是怎么做到的?

1 个答案:

答案 0 :(得分:0)

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

EstimateGas

输入:区块编号(默认:“ pending”),交易的“加油限额”(默认:给定区块编号的加油限额)

EstimateGas尝试找到最小的气体以给定的区块号运行此事务。它在21000和“ gas limit”之间进行二进制搜索。例如,如果“ gas limit”为79000,它将尝试以gas limit,50000 =(21000 + 79000)/ 2运行此事务。如果失败,则尝试以64500 =(50000 + 79000)/ 2,以及以此类推。如果失败并显示“ gas limit”,则返回0和错误消息"gas required exceeds allowance or always failing transaction"

注意:即使由于非汽油问题而导致交易失败,它仍将失败视为汽油不足。然后它将返回0,最后显示一条错误消息。

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

建议(汽油)价格

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

SuggestPrice从“最新”区块并行查询“最近区块数量”的汽油价格。如果由于某种原因无法获得超过“块数”一半的答案,它将查询更多的块,最多是“块数”的五倍。

一个区块的汽油价格意味着该区块内交易中的最低汽油价格。矿工发送的交易不包括在内。

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

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

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