气体单位用于衡量在以太坊上执行交易所需的计算量。由于每笔交易都需要一些计算资源来执行,因此需要一笔费用,通常称为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 = 169869
const commitCount = 46255
const totalCount = registerCount + commitCount
const data = await estimateGasNumber(totalCount)
return data
}
// 预判bnb普通注册费用
export const estimateRegisterBnbGasFee = async () => {
const registryCount = 293767
const commitCount = 44027
const totalCount = commitCount + registryCount
const data = await estimateGasNumber(totalCount)
return data
}
// 预判bnb礼品卡注册费用
export const estimateRegisterBnbAndPointGasFee = async () => {
const registerCount = 304505
const commitCount = 44027
const totalCount = commitCount + registerCount
const 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