跳转至

燃气价格 API

原文:https://web3py.readthedocs.io/en/stable/gas_price.html

警告

燃气价格策略仅支持传统交易。伦敦分支引入了maxFeePerGasmaxPriorityFeePerGas交易参数,这些参数应该尽可能在gasPrice上使用。

对于以太坊(遗产)交易,气价是一个微妙的属性。因此,Web3 包含了一个用于配置它的 API。

燃气价格 API 允许您定义 Web3 填充燃气价格的行为。这是使用“燃气价格策略”完成的——该方法采用 Web3 对象和一个交易字典,并返回燃气价格(以 wei 为单位)。

检索燃气价格

要使用所选策略检索燃气价格,只需调用 generate_gas_price()

>>> web3.eth.generate_gas_price()
20000000000 

制定燃气价格策略

燃气价格策略以 python 方法的形式实施,具有以下特征:

def gas_price_strategy(web3, transaction_params=None):
... 

该方法必须返回一个表示汽油价格(单位为魏)的正整数。

为了演示,这里有一个燃气价格策略的基本示例,当交易的价值高于 1 以太网时,该策略返回更高的燃气价格。

from web3 import Web3

def value_based_gas_price_strategy(web3, transaction_params):
    if transaction_params['value'] > Web3.toWei(1, 'ether'):
        return Web3.toWei(20, 'gwei')
    else:
        return Web3.toWei(5, 'gwei') 

选择燃气价格策略

通过调用 set_gas_price_strategy() 可以设置气价策略。

from web3 import Web3

def value_based_gas_price_strategy(web3, transaction_params):
    ...

w3 = Web3(...)
w3.eth.set_gas_price_strategy(value_based_gas_price_strategy) 

## 可用的燃气价格策略

web3.gas_strategies.rpc.rpc_gas_price_strategy(*web3*, *transaction_params=None*)

调用 JSON-RPC eth_gasPrice 方法,该方法返回由连接的以太坊节点配置的燃气价格。

```py web3.gas_strategies.time_based.construct_time_based_gas_price_strategy(max_wait_seconds, sample_size=120, probability=98, weighted=False)


构建一个策略,该策略将计算燃气价格,使得交易将在由`max_wait_seconds`定义的几秒钟内以由`probability`定义的概率被挖掘。燃气价格是通过对最近开采区块的`sample_size`取样计算出来的。如果`weighted=True`,区块时间将向最近开采的区块加权。

*   `max_wait_seconds`挖掘事务所需的最大秒数。
*   `sample_size`要采样的最近块的数量
*   `probability`在`max_wait_seconds`内挖掘交易的期望概率的整数表示。0 表示 0%,100 表示 100%。

以下是该策略的现成版本。

*   `web3.gas_strategies.time_based.fast_gas_price_strategy`:60 秒内挖掘的交易。
*   `web3.gas_strategies.time_based.medium_gas_price_strategy`:5 分钟内挖掘的交易。
*   `web3.gas_strategies.time_based.slow_gas_price_strategy`:1 小时内挖掘的交易。
*   `web3.gas_strategies.time_based.glacial_gas_price_strategy`:24 小时内挖掘的交易。

警告

由于采样最近数据块的开销,建议使用缓存解决方案来减少每次请求需要重新获取的链数据量。

```py
from web3 import Web3, middleware
from web3.gas_strategies.time_based import medium_gas_price_strategy

w3 = Web3()
w3.eth.set_gas_price_strategy(medium_gas_price_strategy)

w3.middleware_onion.add(middleware.time_based_cache_middleware)
w3.middleware_onion.add(middleware.latest_block_based_cache_middleware)
w3.middleware_onion.add(middleware.simple_cache_middleware) 


回到顶部