区块链中的Gas代表什么意思
侧边栏壁纸
  • 累计撰写 192,421 篇文章
  • 累计收到 3 条评论

区块链中的Gas代表什么意思

admin
2022-12-18 / 0 评论 / 0 阅读 / 正在检测是否收录...

区块链中的Gas代表什么意思

在以太坊中,交易、执行智能合约,或是支付数据储存费用,都需要消耗 Gas(燃料)。

Gas 是存在于以太坊虚拟机内部,作为计算工作量的计数。它一方面作为对矿工打包区块的奖励,另一方面,为恶意交易抬高门槛,维护以太坊网络正常运作。 Gas 是以太坊中的燃料,它保证了以太坊生态的运作。正如汽油对于汽车的作用, Gas 不可或缺。

Gas Price:是用户愿意为每个 Gas 支付的价格,一般单位为 Gwei 。1 ETH = 1,000,000,000 Gwei

Gas Limit:是用户愿意为执行某个操作或确认交易支付的最大 Gas 量。

Gas Used:是执行操作消耗的 Gas 总量

老样子,我们举个例子,这次以同样需要 Gas 的汽车为例。

小星驾车从 S 地到 P 地需要消耗 30L 汽油,从 P 地到 A 地需要 40L 汽油,从 A 地到 R 地需要 50L 汽油。火火驾车前往四地需要消耗 120L 汽油。

同样的,以太坊中每一步运算也都需要消耗 Gas 。不同的是汽车的油箱是汽车厂商设置的,油价也不是车主制定,而 Gas Price 和 Gas Limit 都是交易发送方自己设定的。

Gas Limit 设置过低

如果小星的汽车油箱容量为 100L ,那么从 A 地前往 R 地的途中,小星就会面临油耗用尽的困扰,加油的费用也不退还。

同样,如果 Gas Limit 设置过低,无法保证计算完整运行,系统将会提示“ out of gas ”,这笔交易依然被打包到区块中,交易金额被退回,交易费用作为奖励发放给打包这个区块的矿工。

Gas Limit 设置过高

既然 Gas Limit 设置过低会导致交易失败,那将 Gas Limit 无限调高,岂不是没有这个困扰?

正如交易有 Gas Limit ,区块也有 Gas Limit 。每个区块在打包的时候都会确定当前区块的 Gas Limit 总量,以此来确定单个区块所能打包的交易数量,所以矿工在打包每笔交易的时候都会判断当前的 Gas 量够不够打包当前交易。

例如现在有 3 笔交易, A 交易 Gas Limit 为 10 , B 交易为 20 , C 交易为 30 ,如果区块 Gas Limit 为 30 ,那么 A 交易和 B 交易将被打包。由于矿工有权力选择哪些交易被打包,因此另一名矿工选择将 C 交易打包进这个区块。但是如果将 ABC 交易同时打包, Gas Limit 达到 60 ,超过区块 Gas Limit ,这个区块会被网络拒绝。

Gas Price 的高低

矿工总是希望获得更多的挖矿奖励,在打包交易的同时,交易费用越高,越容易被打包。

交易费用 = GasPrice * GasUsed

因此,Gas Price 越高,矿工将会优先打包,交易会被更快确定;如果 Gas Price 设置过低,矿工的报酬降低,交易的确认时间将会延长。

如何理解区块链上的经济模型(FeesGas)

以太坊和Qtum中的Gas表示的是智能合约中具体操作的经济开销。不同的操作对应不同的开销,有些操作开销很小,有些则不然。这种机制的工作原理其实是在价格上限制某些操作,同时使得针对区块链的攻击变得更加昂贵。在图灵完备的系统中,Gas的概念是必不可少的,否则的任何人都可以用一个简单的无限循环语句让整个区块链崩溃。

存储开销

众所周知,在以太坊区块链上的永久存储空间是最昂贵的资源。按照目前的网络状况,大概1Kb数据需要花费2.5美元,这还取决于你想要实现多快的确认速度。而存储1Mb的数据需要花费超过2,000美元。这就意味着在区块链上存储任何稍微多一点的数据都是不太现实的。然而,这一结论仅仅是针对常规的存储方式。实际上在以太坊上还有多种不同的数据存储方式,下面我将具体介绍五种不同的数据存储方法,并介绍其不同的行为,开销以及优势等:

外部代码

这指的是你在以太坊上使用CREATE opcode创建合约时的一种数据存储方式。你可以把任何数据当做新创建合约的opcode进行存储。这或许是最浪费资源的方式了,因为一旦存储了这些数据,即使这些数据不再需要了,用户也没有动力再去销毁数据并回收资源。

这可以看做是一个半易失性存储方式。一旦数据被保存,它将不会更新,直到重新创建。这种方式比较适用于那种几乎不需要更新的比较大的数据区块。值得注意的是,这种方式在加载数据时开销非常低,这方面和接下来介绍几种方法相比具有压倒性的优势。

内部代码

这种方式是存储Solidity内部生成bytecode用到数据的首选。当你可以从构造函数或是缓存中生成某些数据的情况下,一般来说重新计算数据并直接存储到所部署合约的bytecode中,要比在创建合约交易时传入大量数据要来的便宜得多。如果这些数据不需要更新,那么最好采用这种存储方式,同时在加载数据时的开销也很低。

常规存储

这是以太坊提供的常规数据存储方式。它是一种非连续的存储,允许每32字节字长为单位的存储空间进行更新,这比直接写到新的存储空间要便宜。同时这种方式也能激励用户释放不需要的空间,因为这样做将获得Gas奖励。这部分存储区域可以很容易地进行更新和读取的操作,但是对其进行写操作的开销却是这几种存储方式中最昂贵的。

合约交易存储

这是一种完全易失性存储方式,尽管它并没有存储任何合约能够直接获取的永久数据。这种方式实际上将数据存储在EVM中,数据只有通过发送合约数据才能够传递给具体的合约。合约会对这些数据进行hash操作以确保正确的合约状态。这种数据存储方式有不少弊端,其中最大的问题是合约交易数据往往是非常昂贵的。这是目前为止获取数据最为昂贵的一种方式,因为它需要将数据放到调用合约的交易中。然而,对于写数据或更新数据来说,它却是除了内部代码外最便宜的方式,因为它并没有在区块链上存储任何数据。这种存储方式可以扩展成类似hash数的结构,这样能进一步节省宝贵的交易存储空间。这种数据存储方式还有一个弊端就是数据竞争(race)问题。一旦某个用户调用合约导致数据更新,这一操作将导致所有未完成的交易的数据失效。这一弊端再加上之前提到的高昂的获取数据的开销,极大的限制了这种存储方式的应用场景。

0

评论 (0)

取消