What is Ethereum Gas? [The Most Comprehensive Step-By-Step Guide Ever!]

Ameer Rosic

2 years ago

什么是以太坊天然气?

TL; 博士

Ethereum Gas 是一个测量执行某些操作所需要的计算工作量的单元。

参与以太坊的每一个操作,无论是交易还是智能合约的执行都需要一定量的天然气。

矿工得到一定数额的乙醚,相当于他们执行一个完整的操作所需的天然气总量。

以太坊天然气 — 是以太坊生态系统的命脉,没有其他办法可以说。 Gas 是一个测量执行某些操作所需的计算工作量的单元。

参与以太坊的每一个操作,无论是简单的交易,还是智能合约,甚至是 ICO 都需要一定量的天然气。 Gas 是用来计算执行操作需要支付给网络的费用金额的内容。

在本指南中,我们将了解天然气是如何工作的。 但在我们这样做之前,我们必须学习几个概念。 所以,没有进一步的时候,让我们开始深入探索以太坊天然气。

什么是以太坊天然气:分步指南

为什么比特币不需要气体?

比特币之所以创建,是因为每个人都在问同样的问题。

是否有可能创造一种可以在没有任何中间人的情况下在两个人之间转移的资金?

是否有可能创建一个分散的资金,可以在类似区块链的东西上运作?

当他创建比特币时,中本聪回答了这些问题。 我们终于有了一个分散的货币体系,可以把钱从一个人转移到另一个人。

然而,比特币有一个问题,这是所有第一代区块链的问题。 它们只允许货币交易,没有办法为这些交易增加条件。

爱丽丝可以发送 Bob 5 BTC,但她不能对这些交易强加条件。 例如, 她不能告诉鲍勃,他会得到的钱,只有如果他执行某些任务。

这些条件需要极其复杂的脚本。 为了使这一进程更加顺畅,需要一些东西。

... 而 “东西” 是一个聪明的合同。

什么是智能合约?

智能合约帮助您以透明、无冲突的方式交换货币、财产、股票或任何有价值的东西,同时避免中间人的服务。

What is Ethereum Gas: Step-By-Step Guide

维塔利克布特林的复仇很容易是这一代的坚定。 他们向世界展示了区块链如何从简单的支付机制演变为更有意义和更强大的东西。

那么,什么是这些 “智能合约”,什么是大不了的?

智能合约是自动化合约。 它们是自动执行的,并在其代码中编写的特定指令,这些指令在创建特定条件时被执行。

What is Ethereum Gas: Step-By-Step Guide

您可以在我们的深入指南中了解更多关于智能合约的信息。

智能合约是如何在以太坊生态系统中完成事情。 当有人想要在以太坊完成一个特定的任务时,他们会与一个或多个人启动一个智能合同。

智能合约是一系列的指令,使用编程语言 “稳固性”,其工作原理 IFTTT 逻辑的基础上,又名 IF-THIS-然后-那逻辑。 基本上,如果第一组指令完成,那么执行下一个函数,然后执行下一个函数,并继续重复,直到达到合同结束。

理解这一点的最佳方式是想象一台自动售货机。 您执行的每一步都像下一步执行自己的触发器。 它有点像多米诺骨牌效应。 因此,让我们来看看您在与自动售货机交互时将采取的步骤:

第一步:你给自动售货机一些钱。

步骤 2:你冲对应于你想要的项目的按钮。

第 3 步:该项目出来,你收集它。

现在看看所有这些步骤,并考虑一下。 如果前一个没有执行,任何步骤是否会起作用? 这些步骤中的每一个步骤都与上一个步骤直接相关。 还有一个需要考虑的因素,它是智能合约的一个组成部分。 你看,在你与自动售货机的整个交互中,你(请求者)只是与机器(提供者)一起工作。 绝对没有第三方参与。

那么,现在如何将这笔交易看起来像,如果它发生在以太坊网络?

假设你刚刚从以太坊网络中的自动售货机购买了东西,那么这些步骤会怎么样呢?

第 1 步:你给自动售货机一些钱,这会被以太坊网络中的所有节点记录,交易会在分类账中更新。

第 2 步:你冲对应于你想要的项目的按钮,并记录在以太坊网络和分类账中得到更新。

第 3 步:项目出来,你收集它,这会被所有节点和分类帐记录。

您通过智能合约进行的每笔交易都会被网络记录和更新。 这样做的是,它使与合同有关的每个人都对自己的行为负责。 它通过让整个网络可见的每一个行动来消除人类恶意

什么是以太坊虚拟机?

在我们理解以太坊虚拟机(EVM)是什么之前,我们必须了解为什么需要一个 “虚拟机”。

所以让我们回到智能合约。

我们希望在我们的智能合约中有哪些理想的属性?

任何在区块链上运行的东西都需要是不可变的,并且必须有能力在不损害其完整性的情况下运行多个节点。 因此,智能合约功能需要三件事:

确定性。

终止。

孤立。

特征 #1:确定性

如果程序每次向给定输入提供相同的输出,则程序具有确定性。 例如, 如果 3+1 = 4,那么 3+1 将始终是 4(假设相同的基数)。 因此,当一个程序向不同计算机中的同一组输入提供相同的输出时,该程序被称为确定性。

程序可以以非确定性的方式行事的各种时刻:

调用非确定性系统函数:当程序员在其程序中调用非确定性函数时。

非确定性数据资源:如果程序在运行时获取数据,并且该数据源是非确定性的,那么程序就变得非确定性的。 例如, 假设一个程序,获得特定查询的前 10 个谷歌搜索。 列表可能会不断变化。

动态调用:当程序调用第二个程序时,它被称为动态调用。 由于调用目标仅在执行过程中确定,因此它本质上是非确定性的。

功能 #2:可终止

在数学逻辑中,我们有一个称为 “停止问题” 的错误。 基本上,它指出,无法知道给定的程序是否可以在时间限制内执行其功能。 1936 年,艾伦·图灵推断,使用坎托尔的对角线问题,没有办法知道给定的程序是否可以在时间限制内完成。

这显然是智能合同的一个问题,因为根据定义,合同必须能够在给定的时限内终止。 采取了一些措施,以确保有一种方法在外部 “杀死” 合同,并且不会进入一个无休止的循环,从而消耗资源:

图灵不完整:图灵不完整的区块链将具有有限的功能,并且不能够进行跳跃和/或循环。 因此,他们不能进入一个无尽的循环。

步骤和费用计量:程序可以简单地跟踪它已经采取的 “步骤” 的数量,即它已执行的指令数量,然后在执行特定步骤计数后终止。 另一种方法是费用计。 这里的合同是用预付费用执行的。 每个指令的执行都需要一定金额的费用。 如果所花费的费用超过预付费用,则合同终止。

计时器:这里保留了一个预先确定的计时器。 如果合约执行超过时间限制,则在外部中止。

功能 #3:隔离

在区块链中,任何人和每个人都可以上传智能合约。 然而,正因为如此,合同可能,故意和不知不觉中含有病毒和错误。

如果合同不是孤立的,这可能会妨碍整个系统。 因此,将合同隔离在沙箱中是至关重要的,以保护整个生态系统免受任何负面影响。

现在,我们已经看到了这些功能,了解它们是如何执行的非常重要的。 通常,智能合约使用以下两种系统之一运行:

虚拟机:以太坊使用这个。

码头:织物使用这个。

让我们比较这两个,并确定哪些使得更好的生态系统。 为了简单起见,我们将以太坊(虚拟机)与 Fabric(Docker)进行比较。

What is Ethereum Gas: Step-By-Step Guide

因此,可以看出,虚拟机为智能合约提供了更好的确定性、可终止和隔离的环境。 但是,码头工作者有一个明显的优势。 他们提供了编码语言的灵活性,而在像以太坊这样的虚拟机(VM)中,人们需要学习一种全新的语言(可靠性)来创建智能合约。

EVM 是所有智能合约在以太坊中运行的虚拟机。 这是一个简单而强大的图灵完成 256 位虚拟机。 图灵完成意味着给定的资源和内存,EVM 中执行的任何程序都可以解决任何问题。

什么是以太坊天然气?

如导言中所述,Gas 是一个测量执行某些操作所需的计算工作量的单元。

注意:在我们继续之前,巨大的炫耀约瑟夫周为他惊人的介绍以太坊气体。

在 EVM 中运行的大多数智能合约都是使用 Solidity 编码的(以太坊计划在未来从 Solidity 转移到 Viper)。 Solidity 中的每一行代码都需要执行一定量的气体。

ETH 天然气价格图表

下面的图片取自以太坊黄纸,可以用来获得多少具体指令成本气体方面的粗略想法。 根据本表,每笔交易需要至少 21,000 天然气:

What is Ethereum Gas: Step-By-Step Guide

图片提供:以太坊黄皮书

为了更好地了解天然气在以太坊是如何工作的,让我们使用一个类比。 假设你正在进行一次公路旅行。 在执行此操作之前,请执行以下步骤:

你去加油站,并指定你想填补你的车多少气体。

你把汽油充满了你的车。

你付给加油站的钱你欠他们的油。

现在,让我们绘制与以太坊的相似之处。

驾驶汽车是您想要执行的操作,就像执行智能合约的功能一样。

气体很好.... 气体。

加油站是你的矿工

你付给他们的钱就是矿工费

用户想要在以太坊中执行的所有操作都必须为以下内容提供气体:

覆盖其数据又名内在气体。

覆盖它的整个计算。

现在我们已经涵盖了最基本的知识,你可能会问以下问题。

为什么我们有这个气体系统?

答案很简单... 激励。

像任何工作证明的点对点系统一样,以太坊严重依赖于矿工的散列率。 更多的矿工,更多的散列率,更安全和快速的系统。

为了吸引更多的矿工进入该系统,他们需要使该系统尽可能有利可图,吸引矿工。 在以太坊,矿工可以通过两种方式赚钱:

通过挖掘块和获得块奖励。

通过成为他们开采的块的临时独裁者。

让我们来探索第二点。

矿工负责将交易置于他们的区块内。 为此,他们必须使用其计算能力来验证智能合约。 天然气系统允许他们收取一定的费用。

这笔费用被称为矿工的费用,它有助于激励他们积极参与生态系统。

那么,他们可以收取多少费用? 在我们可以计算之前,让我们来了解我们如何测量气体。

气体仅以气体单位进行测量。 发送到以太坊网络的交易会花费一些离散量的气体(例如 100 气体),具体取决于需要执行多少 EVM 指令。

那么,我们如何将气体转化为乙醚?

没有固定的转换价格。 它是由交易的发送者指定他们喜欢的任何天然气价格。 另一方面,由矿工来验证他们喜欢的任何交易(通常是指定最高天然气价格的交易)。 平均天然气价格通常大约为 20 Gwei(或 0.00000002 ETH),但在高网络流量的时候可能会增加,因为有更多的交易要包括在下一个区块中。

下面的图表显示了以太坊天然气的平均价格图表。

What is Ethereum Gas: Step-By-Step Guide

图片提供:以太扫描。

在我们进一步探讨之前,了解气体限制的概念是很重要的。

什么是以太坊气体限制?

为了在以太坊完成操作,交易的发送者必须指定一个气体限制,然后他们将其提交给网络。 气体限额是发送者愿意为此次交易支付的最高气体金额。

在指定气体限制时,必须考虑以下几点:

不同的操作将有不同的气体成本(如前所示)。

煤气耗尽后矿工就停止执行

如果有剩余的气体,将立即退还给操作发电机。

让我们在假设情况下看看这个操作。

假设,我们添加了两个数字,为此合同必须执行以下操作:

将 10 存储在变量中。 比方说,这次操作花费 45 气体。

添加两个变量,假设这花费 10 气。

存储再次成本 45 气体的结果。

假设发送者指定气体限制为 120 气体。

矿工用于运行计算的总气体为 (45+10+45) = 100 气体。

这是欠矿工的费用,假设 1 天然气成本 20 格威,是(100 * 20 格威)= 0.000002 ETH。

现在,剩下多少气体?

120 — 100 = 20 种气体。

20 个未使用的气体返还给发件人(20 克 * 20 克威)= 0.00004 ETH。

所以,话虽如此,必须考虑两种情况:

指定的气体限制太低。

指定的气体限制过高。

场景 #1:气体限制太低

如果一个操作耗尽了气体,那么它会恢复到原始状态,就像没有实际发生的事情一样,但是,操作生成器仍然必须支付矿工的计算费用,并且操作被添加到区块链中(即使它还没有执行)。

回到我们的公路之旅的比喻,如果你没有充足的汽油在你的车里,那么你将无法到达你的目的地,但即使如此,你支付了加油站的钱的燃料权吗?

让我们来看看这是如何在我们假设的智能合约中工作的。 这些步骤是:

将 10 存储在变量中。 比方说,这次操作花费 45 气体。

添加两个变量,假设这花费 10 气。

存储再次成本 45 气体的结果。

但是,这一次,发送者设置的气体限制为 90 气体。

现在,我们知道履行交易所需的气体是 100 气体,但我们只规定了 90 气体限制。

在这种情况下,矿工将进行 90 种气体价值的计算,然后对 90 种气体收取发送费用,这种气体原来是(90 * 20 Gwei)= 0.0000018 ETH。

此外,合同恢复到其原始状态,交易包含在区块链中。

场景 #2:气体限制过高

那么,如果我们把气体限制设得太高呢?

这将是有道理的做对吗? 毕竟,无论是什么剩余的退还给发件人的权利?

这在纸上听起来不错,但在现实中并不是真正的效果。

矿工受到区块气体限制,我们假设这是 670 万气体。 基本交易(简单的 ETH 转移)至少需要 21,000 气体。 矿工只能包括加起来小于或等于区块气体限制的交易。

What is Ethereum Gas: Step-By-Step Guide

图片提供:黑客中午

假设有一个交易 A(简单地转移 ETH),并且具有指定的气体限额为 42,000,两个交易 B 和 C(也简单地转移 ETH)具有指定的气体限额为 21,000。

对于矿工来说,哪一个更有意义?

他们会投入交易 A 并退还大量未使用的气体吗?

或者他们会把交易 B 和 C 并退款少到什么都没有回来?

第二点更有意义,他们经济上的权利?

这正是为什么有一个膨胀的气体限制不是一个明智的方法。 设置气体限额比交易所需的气体数量略高一点,这是更合理的。

以下是平均气体极限图表。

What is Ethereum Gas: Step-By-Step Guide

图片提供:以太扫描

高和低以太坊天然气 vs 高和低费用

到目前为止,应该清楚的是,气体和醚是不一样的东西。 气体是所需的计算能力量,而乙醚是用于支付该气体的货币。

现在凭借我们迄今为止所获得的一切知识,让我们通过一些天然气和费用情况。

如果一个操作具有低气体,那么矿工甚至不会拿起它,因为它没有足够的气体来完成计算。

如果一个操作的费用很低,那么它可能只有足够的天然气来支付它,但矿工们不会在这些位上挑选它,因为低费用的操作对他们来说没有经济上的吸引力。

如果一个操作具有高温气体,那么这意味着操作是膨胀的气体极限,因此矿工不会把它捡起来。

如果一个操作的费用很高,那么矿工知道他们会从中赚取很多钱,并会立即拿起它。

目前建议的不同类型的交易速度的天然气价格,根据人种站如下:

What is Ethereum Gas: Step-By-Step Guide

以太坊天然气退款情况会发生什么?

在牢固的情况下,有两个命令可以确保你得到一些燃气退款。

自杀:这基本上杀死了智能合约。 这样做会让你回来 24000 气体。

SSTORE:存储删除,它可以让你回到 15000。

所以,如果你的合同使用了 14,000 气体并删除了存储,那么你应该得到回来(15000-14000)1000 气体退还给你的权利?

没那么简单

如果是这样,那么矿工将失去所有的动力。 毕竟,矿工不应该付钱给你做你的计算对吗?

为了避免这样的情况,放入了一个条件。

已累积的退款不得超过计算期间用完的气体的一半。

让我们举个例子来清除这一点。

... 假设我们有一个智能合同,它使用了 14000 天然气。

我们设定的气体限制是 2 万个气体。

智能合约还包括一个 SStorage 命令。

那么,合约创建者会在计算后获得多少气体?

首先,他们将返回(20 000 至 14 000)= 6000 单位未使用的气体。

现在,SStorage 命令也已经被使用了,所以理论上他们也应该回 15000 气体。

然而,在合同中使用的天然气量是 14,000,而且自 15000 万元/2,生成的退款将是 14000 元/2 = 7000 元。

所以创造者最终得到的总气体是 6000+7000 = 13,000。

我们再举一个例子。

假设这一次的合同使用了 70,000 气体,它包括一个自杀功能.

一个自杀功能应该给你二万四千个气体回来,这是七万零零二。

在这种情况下,天然气退款将是 24,000 多个未使用的天然气。

以太坊天然气的批评。 有道理吗?

尽管天然气系统因提供了一个顺利运行的机制而获得了赞誉,这个机制激励了矿工相当积极的激励,但最近却受到批评,因为它对开发商和智能合同创建者来说太昂贵。

关于这一点,丹尼·瑞安在他的 Hacker12:00 文章中做了一些有趣的研究。

考虑以下情况:

What is Ethereum Gas: Step-By-Step Guide

当两个数字在以太坊中添加一百万次时,它的费用约为 26.55 美元。

Danny Ryan 将其与标准 AWS 系统进行了比较。 他说,他可以在 0.04 秒内使用 python 添加两个数字一百万次,按 0.0059 美元的亚马逊 EC2 每小时费率计算,花费 0.0000066 美元。

这意味着,在以太坊计算是 400 万倍的昂贵!

根据他的研究,这是他得出的结论:

“公平地说,将两个数字加在一起 100 万次是有点人为的。 写得很好的合同可能会将这种计算复杂性移到链外,并更多地处理合同中的更新状态。 将大量数据存储到区块链也不是一项普通的任务。 根据任务,用户可能会在链上存储数据的加密引用(散列),并将其余数据保留在链外。

也就是说,我们作为开发人员需要了解这些成本,并相应地设计 DAApps。 我们需要找到链内复杂性和链外复杂性之间的平衡,同时仍然利用区块链的分散功能。”

Like what you read? Give us one like or share it to your friends and get +16

283
Hungry for knowledge?
New guides and courses each week
Looking to invest?
Market data, analysis, and reports
Just curious?
A community of blockchain experts to help

Get started today and earn 128 bonus blocks

Already have an account? Sign In