以太坊中智能合约调用中用的gas相关概念详解
我想用一个以太坊应用程序谈论需要“gas”运行。 什么是gas,我在哪里得到它?
1
“gas”是以太坊使用的特殊单位的名称。它衡量一个动作或一系列动作需要执行多少“工作”:例如,计算一个Keccak256密码散列,每计算一次散列需要30个气体,每256位 数据被哈希。 Ethereum平台上的一项交易或合同可以执行的每项操作都会花费一定数量的天然气,其运营所需的计算资源比计算资源要求较少的运算需要更多的天然气。
gas的重要性在于它有助于确保提交给网络的交易支付适当的费用。 通过要求交易支付每个操作的执行(或导致合同执行),我们确保网络不会因为执行大量对任何人无价值的密集工作而陷入困境。 这与比特币交易费用不同,它仅基于交易的千字节大小。 由于以太坊允许运行任意复杂的计算机代码,所以短的代码实际上可能导致大量计算工作的完成。 所以衡量直接完成的工作非常重要,而不是仅仅根据交易或合同的长度选择费用。
所以,如果gas基本上是交易费用,那么你如何支付? 这是一个棘手的地方。 虽然gas是一个可以测量物质的单位,但gas并没有任何实际的标志。 也就是说,你不能拥有1000gas。 相反,gas只存在于以太坊虚拟机内部,作为正在执行多少工作的计数。 在实际支付gas时,交易费用是ether的一定数量,以太坊网络上的内置令牌和矿工奖励生产块的令牌。
起初这可能看起来很奇怪。 为什么不直接用ether衡量成本? 答案是,就像比特币一样,以太网的市场价格可能会迅速变化! 但是计算的代价并不是因为以太的价格变化而上升或下降的。 所以将计算价格与以太币的价格区分开来是很有用的,这样每次市场走势就不需要改变操作成本。
这里的术语有点混乱。 EVM中的操作具有gas成本,但gas本身也具有以ether的gas价格。 每笔交易都规定了每个gas单位愿意支付的gas价格,从而使市场能够决定gas价格和计算成本(以天然气计量)之间的关系。 这是两者的总和,即所用gas总量乘以gas price,得到交易支付的全部费用。
尽管这很棘手,但了解这个区别是很重要的,因为这会导致以太坊交易对最初的学习者来说最混乱的一件事情:您的交易没有用完,交易也没有足够高费用。 如果我在我的交易中设定的gas pri