ethers.js 查询平均 gas 价格

推特@Hita_DAO   DiscordHitaDAO

以太坊Gas费用查询

要发送交易或与以太坊去中心化应用(dapp)互动,用户需要支付费用。以太坊费用通常被称为 Gas。类似于汽车需要汽油来运行,以太坊应用程序需要Gas才能执行。Gas本质上是在以太坊上执行一个操作所需的计算工作量的衡量。更复杂的操作需要更多的Gas来运行,而相对简单的交易,如单个Token转移,则需要较少的Gas。最终,Gas 只是衡量交易费用的另一种方式。Gas费用以以太坊支付,以GWEI计价。GWEI只是以太坊的较小面额,类似于一分钱是一美元的较小面额。1个GWEI价值0.000000001以太坊。

名词释义

Gas,字面意思瓦斯、汽油,是一种燃料。当用户在以太坊区块链上进行交易、执行智能合约或支付数据储存费用时,整个计算过程需要消耗网络资源,用户需要为此支付一定的燃料费即Gas费。只有这样,才有矿工愿意为你的交易打包。

换言之,在以太坊网络上,更准确说在以太坊虚拟机(EVM)上,每一个操作都有一个相对应的Gas成本,作为计算工作量的计数单位,而Gas费用完全用以ETH来支付。Gas高低如何界定呢?这当然要根据链上操作的复杂程度而言,其实不难理解,这就和开车一样,跑的路越多自然消耗的越多。

在这里,要提到以太坊网络中的两类账户,外部账户(Externally Owned Account)和合约账户(Contract Account)。外部账户即普通账户,是指用户们所使用的账户,由私钥持有者控制;合约账户不难理解,指带有应用逻辑的智能合约,由合约代码控制,通常比较复杂。

一般而言,普通的转账交易会调用外部账户,所需要的Gas数量是固定的,即21000;但如果涉及到DeFi,就需要调用到合约账户,当用户的账户和DeFi 项目的智能合约进行交互时,由于复杂程度不同(处理交易所占用的资源),所需要消耗的Gas也就越多。

查询平均 gas 价格

在Ethers.js中,你可以使用ethers.js的Provider类来查询网络的当前平均gas价格。具体来说,你可以使用getGasPrice方法来获取当前的平均gas价格。

以下是一个简单的例子,展示了如何使用Ethers.js获取当前的平均gas价格:

    const { ethers } = require("ethers");
 
    // 创建一个Provider实例,连接到你想要查询的以太坊网络
    // 例如,连接到主网
    const provider = new ethers.providers.JsonRpcProvider("https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID");
     
    // 获取当前的平均gas价格
    async function getAverageGasPrice() {
        const gasPrice = await provider.getGasPrice();
        console.log("Current average gas price: ", gasPrice.toString());
    }
     
    // 调用函数
    getAverageGasPrice();
  

请确保将"https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID"替换为你自己的Infura项目ID,或者使用其他的JSON-RPC提供者。

这段代码会输出当前的平均gas价格,单位为wei。平均gas价格是由多个交易所提供的最新gas价格平均得出的,因此它可能不会实时反映最新的价格。