说明
前面一篇文章对EIP-1559进行了详细的说明和介绍,虽然有助于我们的交易,但是这还远远不够。根据交易的类型不同,我们可能需要得知某个交易的gas_price,当前交易的gas_price,当前区块的实时gas_price,最近区块的实时gas_price。
本篇文章对目前常见的获取gas_price方法进行一个简单的汇总和说明。
eth_gasprice
eth_gasprices是rpc的方法。
以 Wei 为单位返回最近区块的百分位数 gas 单价。默认情况下,检查最后 100 个区块并返回第 50 个百分点的 gas 单价(即中值)。
如果没有区块,则返回 –min-gas-price 的值。返回的值仅限于 –min-gas-price 和 –api-gas-price-max 之间的值。默认情况下,1000 威和 500 威。
使用 –api-gas-price-blocks、–api-gas-price-percentile 和 –api-gas-price-max 命令行选项配置 eth_gasPrice 默认值。
使用如下:
1 | // Request |
用法很简单
gas tracker
熟悉以太坊的人都知道,gas tracker是一个很好的gas_price查询网站,可以查询到当前的gas_price,以及最近区块的gas_price。如果你想要了解当前的gas_price,可以直接访问https://ethgasstation.info/。
如果常用etherscan,就知道在etherscan有一个gastracker也可以实时查看当前的gas情况,包括当前gas消耗情况,以及最近区块的平均gas情况,当前gas分别是在哪些项目上消耗的。

上面的信息一目了然。相比较于eth_gasPrice这种查询过去块信息获得的平均gas信息,Ethereum Gas Tracker反映的是当前块信息。gasoracle就是结合当前的gas信息,给出 Safe、Proposed、Fast gas prices 三种Gas建议。
对应的API是:
1 | https://api.etherscan.io/api |
返回的信息是:
1 | { |
LastBlock,最新的区块高度suggestBaseFee,当前的Base Fee大致是保存在20.079089026。SafeGasPrice,ProposeGasPrice,FastGasPrice,表示如果想让自己的交易更快的上链。上链速度的对应关系是,FastGasPrice > ProposeGasPrice > SafeGasPrice。所以如果将Gas Fee设置为24,表示上链的可能性更大。gasUsedRatio,反映了当前网络的拥挤程度。
通过gasoracle只能大致反映区块消耗的gas情况,大部分情况下还是能够满足要求的,但是如果当前链上出现了比较严重的网络拥堵,比如当前正在出现了Mint NFT ,抢购NFT的情况,链上的Gas就会猛然被拉得很高,此时即使将交易的Gas设置为FastGasPrice,也不一定能够保证上链。
这种情况,就类似于Linux系统的top命令,能够反映出当前系统的情况,并根据当前的情况能够给出合理的建议,但是一旦系统出现大量的抖动,就不一定能够立马感知和提心,这个时候就需要使用到pidstat实时查看当前的网络Gas情况。
gasprices
Blocknative是美国一家以太坊区块链数据服务商,提供区块链底层协议、挖矿项目的内幕交易、流动性数据监测服务,旗下“Mempool Explorer”内存池浏览器面向开发者和交易者提供内存池交易数据实时监控服务。既然可以监控内存池,相比较上面的两种方式,可以更实时地拿到当前的gas信息,接近与实时的gas信息.
所以,对于更加实时的gas信息,可以使用 gasprices这个API,对应的API是:
1 | $curl -H "Authorization: your-apikey-here" https://api.blocknative.com/gasprices/blockprices |
返回的信息如下:
1 | { |
maxPrice,内存池的交易中的出的最高的Gas
currentBlockNumber,当前区块号
msSinceLastBlock,上一个区块到当前区块的间隔时间,本例是14630321毫秒,换成秒就是14.6秒
blockNumber,预测的下一个区块号
baseFeePerGas,当前区块的Gas Fee
estimatedTransactionCount,在一个快中包含的交易数量(通过内存池监控发现)
estimatedPrices/confidence,表示当价格高于price,上链的可能性是confidence
estimatedPrices/price,用于非EIP1559设置的gas price
estimatedPrices/maxPriorityFeePerGas,EIP1559中设置的maxPriorityFeePerGas
estimatedPrices/maxFeePerGas,EIP1559中设置的maxFeePerGas
estimatedBaseFees/pending+n,表示在当前区块的第n个区块预测的Gas信息
estimatedBaseFees/confidence,表示当价格高于baseFee时,上链的可能性是confidence。对于后面的块预测,只提供可能性为99%的置信区间的预测。
estimatedBaseFees/baseFee,表示大于baseFee,上链的可能性是99%。
相对于eth_gasprices和gas tracker,blocknative采用的是内存池监控的方法,所以准确性和实时性更好,适合需要及时上链的交易。
总结
本篇文章就是对目前市面上常见的获取的gas price的方法进行了总结。在实际使用中,可以根据实际的业务场景和需求,选择合适的方法。需要额外说明的是,第二种和第三种方法都是需要申请API,免费的API可能存在使用频率的限制。