以太坊区块链彻底改变了去中心化应用程式和智慧合约,但每笔交易都会产生以太坊 gas 费。在本指南中,我们将揭开以太坊 gas费的神秘面纱,了解其基本原理、计算方法、影响成本的因素以及在控制成本的同时优化交易的有效策略。本文源自 Rosario Borgesi 于《
Ethereum Gas Fees Demystified: A Deep Dive into Transaction Costs
》,由白话区块链整理、编译及撰稿。
(前情提要: 以太坊坎昆升级核心:EIP4844的Blob为何能降低费用100倍?)
(背景补充: Rollup经济学:我们高估了 EIP-4844 对可扩充套件性的影响)
本文目录
了解以太坊 Gas
gas 是以太坊区块链上交易和智慧合约执行的燃料。它代表处理这些操作所需的计算工作,并以称为 gwei 的小面额以太币定价(1 gwei = 10^-9ETH)。
换句话说,gas 是计算工作的计量单位,相当于一定量的以太币。
这就是为什么 gas 费在以太坊生态系统中至关重要:
Gas 费的组成部分
了解构成以太坊汽油费的主要组成部分:
仅支付基本费用的交易在技术上是有效的,但不太可能被包含在内,因为它没有激励验证者选择它。
优先费用取决于您传送交易时的网路使用情况:如果需求量很大,那么您可能需要将优先费用设定得更高,但当需求较少时,您可以支付更少的费用。
交易费用计算
例如,假设乔丹必须向泰勒支付 1 ETH。一笔 ETH 转帐需要 21,000 单位的 gas,基本费用为 10 gwei。乔丹包括 2 gwei 的小费。
总费用现在等于:
units of gas used * (base fee + priority fee)
其中 base fee 是协议设定的值, 是 priority fee 使用者设定的作为验证器提示的值。
即 21,000 * (10 + 2) = 252,000 gwei(0.000252 ETH)。
当乔丹汇款时,1.000252 ETH 将从乔丹的帐户中扣除。泰勒将获得 1.0000 ETH。验证者收到 0.000042 ETH 的小费。0.00021ETHbase fee 被烧毁,这意味着它将被从流通中移除。
读取和写入资料
以太坊网路在向网路写入资料和从网路读取资料之间进行了区分,这种区别在您编写应用程式的方式中起着重要作用。一般来说,写入资料称为事务,而读取资料称为呼叫。
交易物件
您可以通过在交易物件中设定以下引数来设定提交交易时愿意支付的 gas 量:
伦敦升级 (EIP-1559)
在伦敦升级之前,费用的计算没有区分基本费用和优先费用。
在交易物件中我们可以设定:
假设 Alice 必须向 Bob 支付 1 ETH。交易中,gas 限额为 21,000 单位,gas 价格为 200 gwei。
总费用为:Gas units (limit) * Gas price per unit 即 21,000 * 200 = 4,200,000gwei0.0042 ETH
复杂交易中的费用计算
为了更好地了解交易成本,我们可以检视 EVM 操作码。那么我们来计算一下执行这个函式的成本:
函式 doMath (uint a, uint b) { a + b; b - a; a * b; a== 0;}
a + b (ADD) 成本 3 个气体单位 b - a (SUB) 成本 3 个 气体单位 a * b (MUL) 成本 5 个气体单位 a == 0 (EQ) 成本 3 个气体单位
所以这笔交易的总成本是 14 个 gas 单位。
需要理解的重要一点是,如果在交易物件中我们指定的 gasLimit 等于 6,则只会执行前两个操作,然后交易将被停止,并且支付的 gasFee将不会恢复,因为我们必须支付完成的工作。
因此,如果我们必须将引数 gasLimit 设定为一个足够的值,以便我们的交易能够被执行并且不会丢失我们的以太币。
在这个特定的例子中,计算天然气费相对简单。然而,对于更复杂的函式,尤其是那些涉及不同大小变数回圈的函式,提前确定天然气费用可能具有挑战性。
在这种情况下,我们可以利用 estimateGas 两个最着名的开发库提供的功能:ethers.js 和 web3.js。该函式允许我们估计与在以太坊区块链上执行特定函式相关的天然气成本。
然而值得提醒的是,设定 gasLimit 和 maxFeePerGas 始终是一个好习惯,以避免执行会消耗太多以太币的交易。
降低 Gas 费的策略利用第 2 层
Layer-2 是构建在以太坊区块链之上的辅助框架或协议。这些解决方案旨在通过处理以太坊主链(称为第 1层)之外的大多数交易来增强可扩充套件性并优化交易速度。Layer-1 涉及基础以太坊区块链,其中交易成本高昂,并且由于高需求可能面临可扩充套件性问题。
在各种 Layer-2 方法中,有 Arbitrum 和 Optimism 中采用的 Rollups 。
Rollups 将多个交易聚合为单个交易,压缩资料并将其储存在以太坊主网上。这显着降低了 gas费用并提高了可扩充套件性,因为单个主网交易可以代表大量的链下交易。
在网路拥塞减少期间执行
如果我们想在第一层上操作,节省费用的解决方案似乎是显而易见的:我们必须在网路不太拥堵的时候发出交易。
事实上,以太坊区块链每秒只允许大约 20-40 笔交易 (TPS)(这是所有以太坊使用者的总数);当达到限制时,使用者被迫相互竞争以获取其交易,这会导致费用上涨。
要检查网路负载,我们可以使用 Etherscan。
尽量减少交易
以太坊区块链上的每笔交易都会产生成本,称为 gas 费。为了减少这些费用,必须尽可能将多个操作合并到一个交易中。例如,将多个 Token传输或与智慧合约的互动捆绑到单个交易中可以显着降低总体成本。
优化程式码复杂性
以太坊交易涉及执行储存在区块链上的程式码。复杂且低效的程式码需要更多的计算资源,从而导致更高的 gas 费用。通过优化和简化程式码,您可以减少执行所需的 gas。这涉及高效的编码实践、最大限度地减少冗余计算以及利用高效的程式设计技术。
节能智慧合约
在开发智慧合约时,以最小化天然气消耗的方式设计它们至关重要。这包括避免不必要的储存操作、优化回圈以及降低合约逻辑的复杂性。在开发过程中应利用气体优化工具和最佳实践。
结论
总之,gas 费是以太坊的重要组成部分,它维护网路完整性、激励正确使用、确保安全性并支援可扩充套件性,所有这些共同有助于构建高效且可持续的区块链网路。
在本文中,我们探讨了 gas 费的计算和估算,深入了解了减轻其影响的各种策略。通过采用优化技术、利用 Layer2 解决方案以及实施节省 gas的智慧合约程式码,使用者和开发人员可以有效降低交易成本并提高以太坊网路上应用程式的整体效率。
通过对 gas费用和管理它们的实用策略有了更深入的了解,您现在已经做好了驾驭以太坊环境并优化您的编码工作的准备。祝您编码愉快,愿您的以太坊互动既具有成本效益又具有创新性!
📍相关报导📍
2023,你该关注的「以太坊改进」提案?ERC-4337 ERC-6551 ERC-5507 EIP-4844
埋伏以太坊坎昆升级?巨鲸抄底14,275枚ETH、疑Amber地址大买650万镁OP
以太坊坎昆升级确认纳入EIP-7514、将拍板Devnet-9发布日
Leave a Reply