作者:Rosario Borgesi 翻译:火火/白话区块链
以太坊区块链彻底改变了去中心化应用程序和智能合约,但每笔交易都会产生以太坊gas费。在本指南中,我们将揭开以太坊gas费的神秘面纱,了解其基本原理、计算方法、影响成本的因素以及在控制成本的同时优化交易的有效策略。
1、了解以太坊 Gas
gas是以太坊区块链上交易和智能合约执行的燃料。它代表处理这些操作所需的计算工作,并以称为 gwei 的小面额以太币定价(1 gwei = 10^-9 ETH)。
换句话说,gas是计算工作的计量单位,相当于一定量的以太币。
这就是为什么 gas 费在以太坊生态系统中至关重要:
1)资源分配 : gas 费充当分配网络资源的机制。通过要求用户为其使用的计算能力和存储空间付费,网络确保公平访问并防止资源滥用。
2)防止网络垃圾邮件 : 如果没有gas费,恶意行为者可能会用垃圾邮件交易淹没网络,导致系统超载并减慢合法交易的速度。gas费使得向网络发送垃圾邮件成本高昂且在经济上不切实际。
3)激励矿工 : gas费激励矿工将交易纳入区块中。矿工优先考虑gas费较高的交易,鼓励用户为及时交易处理提供有竞争力的费用。
4)网络安全 : gas费用有助于以太坊网络的安全。他们通过要求用户支付所涉及的计算步骤来确保交易和智能合约的正确执行。这可以阻止潜在的攻击和漏洞。
5)可扩展性和效率 : 通过为每个操作附加成本,gas费鼓励开发人员编写高效且优化的代码。对效率的关注对于扩展网络至关重要,因为它鼓励最佳实践并减少区块链的压力。
6)经济模型 :gas费是以太坊经济模型的一个组成部分。它们促进了可持续的生态系统,让矿工的努力得到补偿,促进网络的增长和稳定。
2、Gas 费的组成部分
了解构成以太坊汽油费的主要组成部分:
1)基本费用 :由协议设定,您必须至少支付此金额才能使您的交易被视为有效。
2)优先费 :是添加到基本费用中的小费,以使您的交易对验证者有吸引力,以便他们选择将其包含在下一个区块中。
仅支付基本费用的 交易 在技术上是有效的,但不太可能被包含在内,因为它没有激励验证者选择它。
优先 费用 取决于您发送交易时的网络使用情况:如果需求量很大,那么您可能需要将 优先费用 设置得更高,但当需求较少时,您可以支付更少的费用。
3、交易费用计算
例如,假设乔丹必须向泰勒支付 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.00021 ETH
base fee
被烧毁,这意味着它将被从流通中移除。
4、读取和写入数据
以太坊网络在向网络写入数据和从网络读取数据之间进行了区分,这种区别在您编写应用程序的方式中起着重要作用。 一般来说,写入数据称为 事务 ,而读取数据称为 调用 。
1)事务 :事务在写入或更改数据时会更改网络状态。它可以像将以太币发送到另一个帐户一样简单,也可以像执行合约功能或向网络添加新合约一样复杂。为了进行交易,我们必须支付gas费,并且它们需要时间来处理。
2)调用 :调用可用于在网络上执行代码,但不会永久更改数据。它们基本上用于读取数据,因此可以免费运行(不花费gas)。当您通过调用执行合约函数时,您将立即收到返回值。
5、交易对象
您可以通过在交易对象中设置以下参数来设置提交交易时愿意支付的gas量:
1)GasLimit :交易可以消耗的最大 Gas 单位量。EVM 指定每个计算步骤所需的气体单位。
2)maxPriorityFeePerGas :作为验证器小费包含的消耗 Gas 的最高价格。
3)maxFeePerGas :愿意为交易支付的每单位 Gas 的最高费用(包括 baseFeePerGas 和 maxPriorityFeePerGas )
6、伦敦升级 (EIP-1559)
在伦敦升级 之前, 费用的计算没有区分基本费用和优先费用。
在交易对象中我们可以设置:
1)GasLimit/startGas :交易可以消耗的最大 Gas 单位量。和之前一样。
2)GasPrice:我们愿意为每单位 Gas 支付的 wei 金额。
假设 Alice 必须向 Bob 支付 1 ETH。 交易中,gas限额为21,000单位,gas价格为200 gwei。
总费用为:
Gas units (limit) * Gas price per unit
即
21,000 * 200 = 4,200,000 gwei
0.0042 ETH
7、复杂交易中的费用计算
为了更好地了解交易成本,我们可以查看 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 始终 是一个好习惯,以避免执行会消耗太多以太币的交易。
8、降低 Gas 费的策略
1)利用第 2 层
Layer-2 是构建在以太坊区块链之上的辅助框架或协议。 这些解决方案旨在通过处理以太坊主链(称为第 1 层)之外的大多数交易来增强可扩展性并优化交易速度。 Layer-1 涉及基础以太坊区块链,其中交易成本高昂,并且由于高需求可能面临可扩展性问题。
在各种 Layer-2 方法中,有
Arbitrum
和
Optimism
中采用的 Rollups 。
Rollups 将多个交易聚合为单个交易,压缩数据并将其存储在以太坊主网上。
这显着降低了 gas 费用并提高了可扩展性,因为单个主网交易可以代表大量的链下交易。
2)在网络拥塞减少期间运行
如果我们想在第一层上操作,节省费用的解决方案似乎是显而易见的:我们必须在网络不太拥堵的时候发出交易。
事实上,以太坊区块链每秒只允许大约 20-40 笔交易 (TPS)(这是所有以太坊用户的总数); 当达到限制时,用户被迫相互竞争以获取其交易,这会导致费用上涨。
要检查网络负载,我们可以使用 Etherscan 。
3)尽量减少交易
以太坊区块链上的每笔交易都会产生成本,称为gas费。 为了减少这些费用,必须尽可能将多个操作合并到一个交易中。 例如,将多个Token传输或与智能合约的交互捆绑到单个交易中可以显着降低总体成本。
4)优化代码复杂性
以太坊交易涉及执行存储在区块链上的代码。 复杂且低效的代码需要更多的计算资源,从而导致更高的gas费用。 通过优化和简化代码,您可以减少执行所需的gas。 这涉及高效的编码实践、最大限度地减少冗余计算以及利用高效的编程技术。
5)节能智能合约
在开发智能合约时,以最小化天然气消耗的方式设计它们至关重要。 这包括避免不必要的存储操作、优化循环以及降低合约逻辑的复杂性。 在开发过程中应利用气体优化工具和最佳实践。
9、结论
总之,gas费是以太坊的重要组成部分,它维护网络完整性、激励正确使用、确保安全性并支持可扩展性,所有这些共同有助于构建高效且可持续的区块链网络。
在本文中,我们探讨了 gas 费的计算和估算,深入了解了减轻其影响的各种策略。 通过采用优化技术、利用 Layer2 解决方案以及实施节省 gas 的智能合约代码,用户和开发人员可以有效降低交易成本并提高以太坊网络上应用程序的整体效率。
通过对 gas 费用和管理它们的实用策略有了更深入的了解,您现在已经做好了驾驭以太坊环境并优化您的编码工作的准备。 祝您编码愉快,愿您的以太坊交互既具有成本效益又具有创新性!