本文来源:知乎区块链专栏
理解以太坊一定要理解以太坊中的gas的概念,以太坊gas可以说是以太坊生态系统的命脉。
任何涉及到以太坊的行为,无论是简单交易,还是智能合约,甚至ICO都需要一定量的gas。gas是衡量执行某些操作所需的计算量的单位,用来计算为了执行操作而需要支付给网络的费用数额。
这里我们将了解gas的工作原理和具体对gas的具体理解。
1.什么是以太坊gas
gas的名字起得非常贴切,翻译成中文就是天然气的意思。在这之前,我们先了解下bitcoin的背景和bitcoin面临的问题。
比特币的创建是因为每个人都在问同样的问题:
• 是否有可能创造一种可以在没有任何中间人的情况下在两个人之间转移的金钱形式?
• 是否有可能创建一个可以在区块链等功能上运行的分散化资金?
Satoshi Nakamoto在创造比特币时回答了这些问题。我们终于有了一个去中心化的货币体系,可以将资金从一个人转移到另一个人身上。
然而,比特币存在问题,这是所有第一代区块链都存在的问题。他们只允许货币交易,没有办法为这些交易添加条件。
Alice可以发送Bob 5 BTC,但她不能对这些交易施加条件。例如。她不能告诉鲍勃,只有当他执行某些任务时他才能拿到钱。
这些条件将需要非常复杂的脚本,需要一种“东西”使流程更加无缝。...这个“东西”是就是以太坊的智能合约。关于以太坊的基本原理不多阐述,各位可以参考:区块链技术:以太坊系统核心总结
进入正题:
2.什么是以太坊gas?
正如介绍中所解释的那样,Gas是一个单位,用于测量执行某些操作所需的计算量。
以太坊虚拟机(EVM)中运行的所有智能合约都使用 solidity进行编码(以太坊计划未来将从Solidity转移到Viper。)每一行代码都需要一定量的gas来计算,就好比汽车要用汽油。
下面的图片来自以太坊黄页,可以用来粗略地了解多少具体说明的成本。
3. 以太坊Gas如何工作
为了更好地理解以太坊的gas工作方式,我们使用一个类比。假设你正在进行一次公路旅行。在你这样做之前,你要经过这些步骤:
• 你去加油站,并指定你想要在你的车中注满多少汽油(gas)。
• 你的汽车里充满了汽油(gas)。
• 你向加油站支付你欠他们汽油(gas)的金额。
现在,让我们来与以太坊展开类似的比较。
汽车,就是你想要执行的操作,如gas或智能合同。
加油站是你的矿工。
你付给他们的钱是矿工费。
用户希望在以太坊执行的所有操作必须为以下方面提供gas:
• 涵盖其数据,即intrinsic gas。
• 覆盖整个计算。
现在我们已经介绍了基本的基础知识,你可能会问以下问题。
为什么我们有这个gas系统?
答案很简单...激励。
像任何工作对等系统一样,以太坊严重依赖矿工的哈希效率:更多的矿工,更多的哈希效率,更安全和快速的系统。
为了吸引更多的矿工进入该系统,他们需要使该系统对矿工有利可图并尽可能诱人。在以太坊,矿工有两种赚钱方式:
• 通过挖掘块和获得块奖励。
• 通过成为他们的开采块裁决和打包者。
我们来探讨第二点。
矿工负责将交易置于其区块内。为了这样做,他们必须使用他们的计算能力来验证智能合约。gas系统允许他们为此收取一定的费用。
这笔费用被称为矿工费,它有助于激励他们积极参与生态系统。
那么,他们可以收取多少费用?
gas度量的最小单位是wei。所以,如果我们在操作过程中花费1个gas单位,我们称它为1 wei。
单位增加如下:
那么:
4:我们如何将gas转换成以太?
没有固定的转换价格,完全取决于矿工来确定转换价格,然而,平均转换率通常为:1 gas = 0.02 micro Ether
如果要继续深入,了解Gas Limit的概念很重要:
5:以太坊燃料限制(Gas Limit)是什么?
为了在Ethereum中完成操作,发起交易的人员或智能合约创建者必须在向矿工提交Gas Limit之前指定Gas Limit。当指定Gas Limit时,矿工将开始执行操作。
提交Gas Limit时,必须考虑以下几点:
• 不同的运营会产生不同的gas成本(如前所示)。
• gas用完时,矿工将停止执行。
• 如果有剩余gas,将立即退还给发起交易的人员或智能合约创建者。
让我们在假设的场景中看到这一点。
假设我们添加两个数字,并且合同必须执行以下操作:
• 把10存储在一个变量中 —假设这个操作成本是45 wei 的gas。
• 储存最终结果 —成本为45wei。是10 wei。
• 储存最终结果—成本为45wei。
假设 gas limit是120 wei。
矿工使用的gas总量为45 + 10 + 45=100 wei。
假设1 wei的费用为0.02 micro ETH,则所欠的费用为(100 * 0.02 micro ETH)= 0.000002 ETH。
现在,剩下多少gas?
120 - 100 = 20 wei。
20 wei退还给发起交易的人员或智能合约创建者。
所以,在指定的情况下,我们必须考虑两种情况:
• gas limit太低。
• gas limit太高。
情景#1:gas限制太低
如果一个操作用尽了gas,那么它就会恢复到原来的状态,就好比啥事都没发生过,然而,发起交易者或智能合约创建者仍然需要向矿工支付计算成本的费用,并将操作添加到区块链中(即使它尚未执行)。
回到我们的刚刚提到驾车旅行的比喻,如果你的汽车中没有充足的汽油,那么你将无法到达目的地,但即使如此,你还是向加油站支付了燃油费。
让我们看看这是如何在我们假设的智能合约中起作用的。步骤是:
• 把10存储在一个变量中—假设这个操作成本是45 wei 的gas。
• 增加两个变量—假设这个成本是10 wei。
• 储存最终结果—成本为45wei。
但是,这一次,gas limit是90wei
现在,我们知道履行合同所需的gas是100 wei,但我们却有90 wei的限制。
在这种情况下,矿工将进行90 wei的计算,然后对90 wei的运行生成器费用进行计费,结果为(90 * 0.02微ETH)0.000018 ETH。
此外,合约还原为原始状态并添加到区块链中。
情景#2:gas limit太高
那么,如果我们将gas limit设置得太高怎么办?
是不是看起来很合理?毕竟剩下的东西都退还给发起者是吧?
虽然听起来不错,但在现实中并没有那么好。
矿工受到每块6,700,000gas limit的限制。以太坊的每个简单交易通常都有2.1万的gas limit。矿工只能增加加起来小于或等于块gas limit的操作。
图片来源:Hackernoon
假设有一个交易A有一个42,000 gas limit 和两个交易B和C的正常 limit (如21,000)。
哪一个矿工更容易投入其中?
• 他们是否会优先进行交易A并退还大量gas?
• 或者他们会优先处理交易B和C并且退还少量gas?
显而易见,第二点对他们来说更具备吸引力
这正是为什么超高的gas limit不是明智的做法。
以下是平均gas限制图表。
图片来源:Hackernoon
到目前为止,你应该清楚,gas和以太币不是一回事,就如燃料(gas)和费用(fee)不是同一回事一般。gas是需要的计算能力的数量,而以太币是价格,也就是人们必须为这种gas支付的费用。
现在我们已经掌握了迄今为止所获得的一切,让我们通过一些gas和收费情景。
如果一项操作只有低gas,那么矿工不会去处理,因为它没有足够的gas来完成计算。
如果一项操作的费率(fee)较低,但矿工们仍然不会去处理,因为低费用的工作没有吸引力。
如果一个操作有高gas,那么这意味着gas limit非常高,矿工还是不会去处理。
如果一项操作收取高额费用(fee),那么矿工知道他们会从中赚取很多钱,当然优先处理。
根据ethgasstation推荐的不同交易费用的gas价格是:
以太坊gas机制。它是否合理?
尽管gas系统因为提出了一个能够非常积极地激励矿工的平稳运行机制而受到赞扬,但最近也受到了很多质疑,因为对于开发商和智能合约创造者来说成本有点高了。无论如何,以太坊项目的参与者必须了解这些成本,并据此设计dApp。我们需要在区块链链上和链外的复杂性之间找到平衡。
微信公众号:区块链大小姐