科普|以太坊中的gas和ether是什么

in #cn6 years ago

“Gas"是以太坊中使用的一个特殊单位的名称。它度量了执行一个或一组操作所需要的工作量。例如,计算一个Keccak256加密散列,每次计算一个哈希值时,它将消耗30个gas,每哈希256个比特数据的成本加6个gas。

每一个在Ethereum平台上执行交易或合约操作都需要消耗一定数量的gas,需要消耗的计算资越多,消耗的gas越多。gas之所以重要是因为它有助于确保提交给以太坊网络的交易会支付适当的费用。通过要求交易为其执行的每个操作(或合约执行)支付gas,我们确保网络不会因执行大量对任何人都没有价值的密集工作而陷入困境。

这是一种不同于比特币交易费用的策略,比特币交易费用仅基于交易的千字节大小。由于Ethereum允许运行任意复杂的计算机代码,因此短长度的代码实际上会导致执行大量的计算工作。

因此,重要的是直接衡量工作,而不是仅仅根据交易或合同的长度来选择费用。

所以如果gas是交易费,你怎么支付?这是有点棘手的地方。虽然gas是可以计量的单位,但没有任何实际的gas代币。也就是说,你不能拥有1000个gas。相反,gas只存在于Ethereum虚拟机中,它是对正在执行的工作量的计数。

当涉及到实际支付gas的费用时,交易费以一定数量的ether计算,ether是以太网络内的内置代币,也是用来奖励矿工生产区块的代币。

乍一看,这似乎有些奇怪。为什么不直接使用ether计量操作成本呢?答案是,ether就像比特币一样,有一个可以迅速改变的市场价格,但是计算的成本不会因为ether的价格变化而上升或下降。

因此,将计算价格与ether代币的价格分开是有帮助的,这样每个操作的成本在每次市场变动时都不需要改变。

这里的术语有点乱。EVM的操作有gas成本,但gas本身也有以ether计量的gas价格。每一笔交易都规定了它愿意以ether支付的每一单位gas的gas价格,从而能够使市场决定ether价格和计算操作成本(以gas计量)之间的关系。

这是两者的结合,交易的总费用=使用的gas总量*gas价格。

尽管它很棘手,但很重要的一点是要理解这一区别,因为它导致了一个最让初学者对Ethereum交易困惑的事情:你的交易耗尽gas和你的交易没有足够高的费用是有区别的。

如果我在交易中设定的gas价格太低,没有人会在一开始就费心去运行我的交易。它将不会被矿工包括在区块链中。但如果我提供了一个可接受的gas价格,然后我的交易就会导致这么多的计算工作,gas成本超过了我附加的费用,gas就会被算为“已花费”,就拿不回来了。

矿工将停止对交易的处理,恢复它所做的任何更改,但仍将其作为“失败的交易”包含在区块链中,并收取费用。这看起来可能有些苛刻,但是当你意识到矿工真正的工作是在执行计算的时候,你可以看到他们也永远收不回用于计算的资源。所以,即使你的设计糟糕的交易中gas不够了,你也要为他们所做的工作付钱,这是公平的。

提供太大的费用也不同于提供太多的ether。如果你设定了一个非常高的gas价格,你最终将为少量的操作支付大量的ether,就像在比特币中设置一个超级高的交易费。你肯定会被排在打包的前列,但是你的钱也都已经花光了。

但是,如果你提供了一个正常的gas价格,并且仅仅是附加了比需要来支付你的交易消耗的gas更多的ether,那么剩余的ether将会返还给你。矿工们只向你收取他们实际所做的工作的费用。你可以把gas价格看作是矿工的时薪,而gas则是他们工作的时间。

Gas还有很多其他的微妙之处,但你应该明白一些最基本的东西。Gas是保障Ethereum的复杂计算“安全”执行的关键机制,因为任何失控的程序只会持续到请求它们运行的人员提供的gas被耗完。当gas停止时,矿工们就停止工作。

你在程序中所犯的错误只会影响付钱使用它的人——网络的其余部分不会因为你的错误而出现性能问题。如果没有这个关键技术,通用区块链的概念就完全不可能了。

总结:

-Gas是计算费用的方式。

-不过,这些费用仍以ether支付,ether与gas不同。

-gas成本是指投入到某件事情上的工作量,比如劳动时间,而gas价格就像你为工作付出的每小时工资。两者的乘积决定了你的总交易费。

-如果你的gas价格太低,没有人会处理你的交易。

-如果你的gas价格很好,但是你的交易的gas成本“超出预算”,交易失败了,但是仍然进入区块链,你不能把钱拿回来,因为你的工作确实被矿工执行了。

-这确保了没有任何东西会永远运行,并且人们会对他们运行的代码保持谨慎。它使矿工和用户都免受不良代码的伤害

欢迎大家关注公众号:区块狂热

Run by Wesley&Tintin

微信扫描下方二维码关注我们
qrcode_for_gh_c4bda818371e_258.jpg