气体单位用于衡量在以太坊上执行交易所需的计算量。由于每笔交易都需要一些计算资源来执行,因此需要一笔费用,通常称为Gas fee或Transaction fee 。

汽油费以以太坊的本地货币——ether或ETH支付。汽油费的计算方式在伦敦升级前后略有不同。

注意:通常当有人说“Gas”时-他们指的是“Gas Fees”而不是单位本身。但是,出于本教程的目的,我们在技术上是正确的,在提到单位时说“Gas”,在提到 Ether 中的费用时说“Gas Fees”。

1、gas为什么存在?

gas有助于保持以太坊网络的安全。通过对网络上执行的每次计算收取费用,可以防止不良行为者向网络发送垃圾邮件。

为了避免智能合约中的意外或恶意无限循环,这将导致所有以太坊节点永远卡住,交易的气体限制设置了交易可以使用多少计算的限制。

2、gas的计算方式

Gwei 代表 Giga-Wei,等于 1,000,000,000(10^9) wei。Wei是ETH的最小面额。1 ETH = 10^18 Wei。

gas fee =gas的价格* 需要消耗gas的数量

2.1、gas价格的获取方式,可以通过ethers进行获取

import {getProvider } from '@wagmi/core'export const getGasPrice = async () => {const providers = getProvider()const result = await providers.getGasPrice()console.log('getGasPrice...', getGasPrice)return result.toString()}

2.2、消耗gas数量的获取方式(影响gas最大的因素是gas的单价)

import {getProvider } from '@wagmi/core'/** * * @param factor 需要多少个gas * @returns */export const estimateGasNumber = async (factor: number) => {const provider = getProvider()const gasPrice = await provider.getGasPrice()const data = formatFixed(gasPrice.mul(factor), 18)// 统一保留6位。return data.slice(0, 8)}// 预判eth注册的gas费用export const estimateEthRegisterGasFee = async () => {const registerCount = 169869const commitCount = 46255const totalCount = registerCount + commitCountconst data = await estimateGasNumber(totalCount)return data}// 预判bnb普通注册费用export const estimateRegisterBnbGasFee = async () => {const registryCount = 293767const commitCount = 44027const totalCount = commitCount + registryCountconst data = await estimateGasNumber(totalCount)return data}// 预判bnb礼品卡注册费用export const estimateRegisterBnbAndPointGasFee = async () => {const registerCount = 304505const commitCount = 44027const totalCount = commitCount + registerCountconst data = await estimateGasNumber(totalCount)return data}

ENS浏览器:

https://testnet.bscscan.com/tx/0x48187736a21e19bc1d274002b3b557745695bf80e520ee0ea6b373e681c94809

注意(合约每一个操作消耗的gas数量基本不变,ETH举例):

1、Commit所需的gas数量:46255

2、注册所需的gas数量:169869

3、授权需要的gas数量:46339

4、转换需要的gas数量:27966