我的朋友问我geth
如何估算汽油限额和汽油价格。 是怎么做到的?
答案 0 :(得分:0)
如果您通过RPC API发送没有价格限制或价格限制的交易,则geth改用Estimate()或uggestPrice()。 Remix也使用这些。这些行为属于geth v1.8.23。不同的版本可能会有所不同。
输入:区块编号(默认:“ 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