什么是以太坊气体?有史以来最好的循序渐进指南
什么是以太坊气体?…
以太坊气体 – 是以太坊生态系统的命脉,没有其他方法可以解决这个问题。气体是衡量执行某些操作所需的计算量的单位。
参加以太坊的每一项操作,无论是简单的交易,还是智能合约,甚至是ICO都需要一些燃气。气体用于计算为执行操作而需要支付给网络的费用金额。
在本指南中,我们将了解天然气的工作原理。但在我们这样做之前,我们必须学习几个概念。所以,不用多说了,让我们开始深入研究以太坊气体。
- 什么是以太坊气体:循序渐进指南
- 什么是智能合约?
- 什么是以太坊虚拟机?
- 什么是以太坊气体?
- 为什么我们有这个气体系统?
- 那么,我们如何将气体转化为Ether?
- 什么是以太坊气体限量?
- 高和低以太气体与高和低费用
- 以太坊天然气退税方案会发生什么?
- 对以太坊气体的批评。它有道理吗?
什么是以太坊气体:循序渐进指南
比特币,以太坊和智能合约的出现
创建比特币是因为每个人都在问同样的问题。
- 是否有可能创造一种可以在没有任何中间人的情况下在两个人之间转移的资金形式?
- 是否有可能创建一个可以在区块链之类的东西上运作的去中心化资金?
中本聪在创造比特币时回答了这些问题。我们最终建立了一个去中心化的货币体系,可以将钱从一个人转移到另一个人。
然而,比特币存在问题,这是所有第一代区块链的问题。他们只允许进行货币交易,没有办法为这些交易增加条件。
Alice可以发送Bob 5 BTC,但她无法对这些交易施加条件。例如。她无法告诉鲍勃,只有当他执行某些任务时,他才能获得这笔钱。
这些条件需要极其复杂的脚本。需要一些东西才能使流程更加无缝。
……那个“东西”是一个智能合约。
什么是智能合约?
智能合约可帮助您以透明,无冲突的方式交易所金钱,财产,股票或任何有价值的东西,同时避免中间人的服务。
Vitalik Buterin的以太坊很容易成为这一代人的坚定后盾。他们向世界展示了区块链如何从简单的支付机制演变为更有意义和更强大的东西。
那么,这些“智能合约”是什么?有什么大不了的?
智能合约是自动合约。它们是自动执行的,并且在其代码中编写了特定的指令,这些指令在特定条件下执行。
您可以在我们的深入指南中了解有关智能合约的更多信息。
智能合约是以太坊生态系统中的事情。当有人想要在以太坊完成特定任务时,他们会与一个或多个人签订智能合约。
智能合约是一系列指令,使用编程语言“solidity”编写,它基于IFTTT逻辑(即IF-THIS-THEN-THAT逻辑)工作。基本上,如果完成了第一组指令,则执行下一个功能,然后执行下一个功能并继续重复,直到达到合约结束。
理解这一点的最好方法是想象一台自动售货机。您采取的每一步都像下一步执行自身的触发器。它有点像多米诺骨牌效应。那么,让我们来看看在与自动售货机交互时你将采取的步骤:
- 第1步:你给自动售货机一些钱。
- 第2步:按下与所需项目对应的按钮。
- 第3步:该项目出来,你收集它。
现在看看所有这些步骤并考虑一下。如果前一个步骤没有执行,任何步骤都可以工作吗?这些步骤中的每一步都与前一步骤直接相关。还有一个要考虑的因素,它是智能合约的一个组成部分。您可以看到,在与自动售货机的整个交互过程中,您(请求者)仅与机器(提供商)合作。绝对没有第三方参与。
那么,现在如果它在以太坊网络中发生的话,这个交易会怎样?
假设你刚从以太坊网络中的自动售货机买了东西,那么步骤会是什么样子呢?
步骤1:您给自动售货机一些钱,这由以太坊网络中的所有节点记录,并且交易在分类帐中更新。
第2步:打入与您想要的项目对应的按钮,并在以太坊网络和分类帐中更新记录。
第3步:项目出来,你收集它,这将由所有节点和分类帐记录。
您通过智能合约完成的每笔交易都将由网络记录和更新。这样做是因为它让每个参与合约的人都对他们的行为负责。它通过使整个网络可以看到每个动作来消除人类的恶意
什么是以太坊虚拟机?
在我们了解以太坊虚拟机(EVM)之前,我们必须理解为什么需要“虚拟机”。
那么让我们回到智能合约。
我们在智能合约中想要的理想属性是什么?
在区块链上运行的任何东西都必须是不可变的,并且必须能够在不损害其完整性的情况下运行多个节点。因此,智能合约功能需要三件事:
- 确定性。
- 可终止。
- 隔离的。
特征#1:确定性
如果程序每次给出给定输入的相同输出,则程序是确定性的。例如。如果3 + 1 = 4则3 + 1总是4(假设基数相同)。因此,当程序将相同的输出提供给不同计算机中的同一组输入时,该程序称为确定性的。
程序可以以不确定的方式行动的各种时刻:
- 调用不确定的系统函数:当程序员在程序中调用不确定的函数时。
- 不确定的数据资源:如果程序在运行时获取数据并且数据源不确定,则程序变得不确定。例如。假设一个程序获取特定查询的前10个谷歌搜索。该列表可能会不断变化。
- 动态调用:当程序调用第二个程序时,它称为动态调用。由于呼叫目标仅在执行期间确定,因此它本质上是不确定的。
功能#2:可终止
在数学逻辑中,我们有一个称为“停止问题”的错误。基本上,它表明无法知道给定程序是否可以在一个时间限制内执行其功能。 1936年,Alan Turing使用康托尔的对角线问题推断出,没有办法知道某个节目是否可以在一个时间限制内完成。
这显然是智能合约的问题,因为根据定义,合约必须能够在给定的时间限制内终止。采取了一些措施来确保有一种方法可以从外部“杀死”合约,而不会进入无限循环,从而耗尽资源:
- 图灵不完整:图灵不完整的区块链功能有限,无法进行跳跃和/或循环。因此他们无法进入无限循环。
- 步进和费用计:程序可以简单地跟踪它所采用的“步数”,即它已经执行的指令数,然后一旦执行了特定的步数就终止。另一种方法是费米。这里的合约是以预付费的方式执行的。每个指令执行都需要特定的费用。如果花费超过预付费,则合约终止。
- 定时器:这里保留一个预先确定的定时器。如果合约执行超过时间限制,则外部中止。
功能#3:隔离
在区块链中,任何人和每个人都可以上传智能合约。但是,由于这个原因,合约可能在知情和不知不觉中包含病毒和错误。
如果合约不是孤立的,这可能会妨碍整个系统。因此,将合约保持隔离在沙箱中以保护整个生态系统免受任何负面影响至关重要。
现在我们已经看到了这些功能,了解它们的执行方式非常重要。通常,智能合约使用以下两个系统之一运行:
- 虚拟机:以太坊使用它。
- Docker:Fabric使用它。
让我们比较这两者,并确定哪个更好的生态系统。为简单起见,我们将比较以太坊(虚拟机)和Fabric(Docker)。
因此,可以看出,虚拟机为智能合约提供了更好的确定性,可终止和隔离的环境。然而,码头工人有一个明显的优势。它们提供编码语言的灵活性,而在像以太坊这样的虚拟机(VM)中,人们需要学习一种全新的语言(可靠性)来创建智能合约。
EVM是所有智能合约在以太坊中运行的虚拟机。它是一个简单但功能强大的图灵完整256位虚拟机。图灵完成意味着在给定资源和内存的情况下,EVM中执行的任何程序都可以解决任何问题。
什么是以太坊气体?
正如引言中所解释的那样,Gas是一个单元,用于衡量执行某些操作所需的计算量。
注意:在我们继续之前,他对Joseph Chow对以太坊气体的精彩演示表示了极大的敬意。
在EVM中运行的大多数智能合约都是使用Solidity编码的(以太坊计划将来从Solidity转向Viper)。 Solidity中的每一行代码都需要执行一定量的气体。
下面的图片取自以太坊黄纸,可以用来大致了解具体指令在气体方面的成本。根据此表,每笔交易至少需要21,000个气体:
图片提供:以太坊黄纸
为了更好地了解以太坊的天然气如何运作,让我们用一个类比。假设你要去公路旅行。在此之前,您将完成以下步骤:
- 你去加油站,并指明你想要在汽车里装满多少汽油。
- 你的汽车里充满了气体。
- 你向加油站支付你欠它们的天然气费。
现在,让我们与以太坊绘制相似之处。
驾驶汽车是您想要执行的操作,例如执行智能合约的功能。
气体很好……气。
加油站是你的矿工。
你付给他们的钱是矿工费。
用户想要在以太坊中执行的所有操作必须为以下内容提供气体:
- 覆盖其数据又称固有气体。
- 涵盖其整个计算。
现在我们已经涵盖了基本的基础知识,您可能会问以下问题。
为什么我们有这个气体系统?
答案很简单……激励。
与任何工作证明的点对点系统一样,以太坊严重依赖于他们的矿工的哈希值。更多的矿工,更多的哈希值,更安全和快速的系统。
为了吸引更多的矿工进入系统,他们需要使系统尽可能地为矿工带来利润和吸引力。在以太坊,矿工可以通过两种方式赚钱:
- 通过挖矿块并获得块奖励。
- 成为他们开采区块的临时独裁者。
让我们探讨第二点。
矿工负责将交易放入他们的区块内。为此,他们必须利用计算能力来验证智能合约。燃气系统允许他们收取一定的费用。
这笔费用被称为矿工的费用,它有助于激励他们积极参与生态系统。
那么,他们可以收取多少费用?在我们计算之前,让我们了解我们如何测量天然气。
简单地以气体为单位测量气体。发送到以太坊网络的交易根据需要执行多少EVM指令而花费一些离散量的气体(例如100个气体)。
那么,我们如何将气体转化为Ether?
没有固定的转换价格。由交易的发送者指定他们喜欢的任何汽油价格。另一方面,由矿工来验证他们喜欢的任何交易(通常是指定最高天然气价格的交易)。平均汽油价格通常约为20 Gwei(或0.00000002 ETH),但在高网络流量时可能会增加,因为有更多交易竞争包含在下一个区块中。
下图显示了以太坊的平均天然气价格K线走势图。
图片提供:Etherscan。
在我们进一步研究之前,了解气体限制的概念非常重要。
什么是以太坊气体限量?
为了在以太坊中完成操作,交易的发件人必须在将其提交给网络之前指定气体限制。天然气限制是发件人愿意为此交易支付的最大天然气量。
指定气体限制时,必须考虑以下几点:
- 不同的运营将产生不同的燃气成本(如前所述)。
- 煤气用完后,矿工将停止执行。
- 如果剩余气体,它将立即退还给操作发生器。
让我们在假设情景中看到这一点。
假设我们正在添加两个数字,为此合约必须执行以下操作:
- 在变量中存储10。让我们说这个操作需要45气。
- 添加两个变量,假设这需要10个气体。
- 存储结果再次花费45气体。
假设发送方指定的气体限制为120气体。
矿工用于计算的总气体为(45 + 10 + 45)= 100气体。
假设1燃气费为20 Gwei,欠矿工的费用是(100 * 20 Gwei)= 0.000002 ETH。
现在剩下多少煤气?
120 – 100 = 20气。
20个未使用的气体返回发送器(20 * 20 Gwei)= 0.0000004 ETH。
所以,话虽如此,有两种情况需要考虑:
- 指定的气体限制太低。
- 指定的气体限制太高。
情景#1:气体限制太低
如果一个操作耗尽了气体,那么它将恢复到原来的状态,就像实际上没有发生任何事情一样,但是,操作发生器必须仍然向矿工支付他们的计算成本的费用,并且操作被添加到区块链中(即使它尚未执行)。
回到我们的公路旅行类比,如果你没有在你的车里装满足够的气体,那么你将无法到达目的地,但即便如此,你还要向加油站支付燃油费用吗?
让我们看看这在我们假设的智能合约中是如何运作的。步骤是:
- 在变量中存储10。让我们说这个操作需要45气。
- 添加两个变量,假设这需要10个气体。
- 存储结果再次花费45气体。
但是,这次,发送方设定了90气体的气体限制。
现在,我们知道完成交易所需的气体是100气体,但我们只指定了90气体限制。
在这种情况下,矿工将进行90气体计算,然后收取90气体的发送者费用,结果是(90 * 20 Gwei)= 0.0000018 ETH。
此外,合约恢复到原始状态,交易也包含在区块链中。
场景#2:气体限制太高
那么,如果我们将气体限制设置得太高怎么办?
这样做是否合理?毕竟,剩下的东西都会退还给发件人吗?
这在纸面上听起来不错,但实际上并没有那么好用。
矿工受限于气体限制,我们认为这是6,700,000天然气。基本交易(ETH的简单转移)至少需要21,000气体。矿工只能包括加起来小于或等于区块气体限制的交易。
图片提供:Hackernoon
假设存在交易A(其进行简单的ETH转移)并且具有42,000的特定气体限制和两个具有指定的气体限制21,000的交易B和C(也简单的ETH转移)。
对于矿工来说,哪个更有意义呢?
- 他们会投入交易A并退还大量未使用的天然气吗?
- 或者他们会将交易B和C放回去并且几乎没有退款?
第二点在经济上对他们更有意义吗?
这正是为什么有一个膨胀的气体限制不是明智的方法。设置一个比您交易所需的天然气量略高的气体限制更合理。
以下是平均气体限制图。
图片提供:Etherscan
高和低以太气体与高和低费用
到目前为止,你应该清楚天然气和Ether不是一回事。气体是所需的计算能量,而以太是用于支付该气体的货币。
现在了解到目前为止我们所获得的一切,让我们来看看某些天然气和费用情景。
如果一个操作有低气体,那么矿工甚至不会捡起它,因为它没有足够的气体来完成计算。
如果一项行动的费用很低,那么它可能只有足够的天然气来覆盖它,但是,矿工们不会因为低费用的操作对他们没有经济上的吸引力。
如果操作具有高气体,则意味着操作膨胀且气体极限高,因此矿工不会捡起它。
如果一项行动收取高额费用,那么矿工们就会知道他们会从中赚到很多钱,并立即将其收拾起来。
根据ethgasstation,目前推荐的不同类型交易速度的汽油价格是:
以太坊天然气退税方案会发生什么?
实际上,有两个命令可以确保您获得一些汽油退款。
- 自杀:这基本上杀死了智能合约。这样做会让你回到24000气体。
- SSTORE:存储删除,可以让你回到15,000。
那么,如果你的合约耗尽了14,000个气体并删除了一个存储器,那么你应该回来(15000-14000)1000个气体退还给你吧?
事情并非那么简单。
如果是这样的话,那么矿工将失去所有激励。毕竟,矿工们不应该付钱给你进行计算吗?
为了避免这样的情况,提出了一个条件。
上涨的退款不能超过计算过程中用完的气体的一半。
让我们举一个例子来澄清这一点。
…假设我们有一份智能合约,耗资14,000瓦斯。
我们建立的天然气限量为20,000天然气。
智能合约还包括SSTORAGE命令。
那么,合约创建者在计算后会得到多少天然气?
首先,他们将返回(20,000-14,000)= 6,000单位未使用的天然气。
现在,SSTORAGE命令也已被使用,因此理论上它们也应该回收15,000气体。
但是,合约中使用的天然气量为14,000,自15,000> 14,000 / 2以来,产生的REFUND将为14,000 / 2 = 7000。
因此,创造者最终获得的总气体量为6000 + 7000 = 13,000。
让我们再看一个例子。
假设这次合约耗尽70,000气体,它包括SUICIDE功能。
SUICIDE功能应该为您提供24,000回气,<70,000 / 2。
在这种情况下,天然气退税将是24,000 +未使用的天然气。
对以太坊气体的批评。它有道理吗?
尽管天然气系统因提供一个平稳运行的机制而受到赞誉,这种机制非常积极地激励矿工,但最近由于对开发商和智能合约创造者而言过于昂贵而受到批评。
对此,Danny Ryan在他的Hackernoon文章中做了一些有趣的研究。
请考虑以下情形:
如果在以太坊中增加两百万次,费用约为26.55美元。
Danny Ryan将其与标准AWS系统进行了比较。他说他可以在0.04秒内使用python添加两个数字一百万次,每小时0.0059美元的Amazon EC2费用为0.000000066美元。
这意味着以太坊的计算成本高出4亿倍
根据他的研究,这是他做出的结论:
“公平地说,将两个数字加在一起一百万次是有点人为的。一份写得很好的合约可能会使这种计算复杂性脱离链条,并在合约中更新状态。将大量数据存储到区块链也不是一项普通的任务。根据任务的不同,用户可能会在链上存储数据的加密货币引用(哈希),并将其余数据保留在链外。
也就是说,我们作为开发人员需要了解这些成本,并相应地设计dApp。我们需要找到链上和链外复杂性之间的平衡,同时仍然利用区块链的去中心化能力。“