以太坊中的 gas (汽油) 是什么意思?

以太坊中的 gas (汽油) 是什么意思?

请先 登录 后评论

最佳答案 2019-12-10 16:09

我想使用的一个以太坊应用程序说需要”gas” 来运行,什么是 gas,我从哪里得到 gas?

理解 gas

“gas” 是以太坊中使用的特殊单位的名称。它测量一个操作或一组操作需要执行多少” 工作” 量:例如,计算一个 Keccak256 加密哈希函数,每次计算哈希时需要 30 个 gas,再加上每 256 位被哈希的数据多花费 6 个 gas。在以太坊平台上通过交易或合约执行的每个操作都会消耗一定数量的 gas,而需要更多计算资源的操作比需要少量计算资源的消耗的 gas 更多。

gas 之所以重要,是因为它有助于确保提交到网络的交易支付适当的费用。通过要求交易为其执行的每个操作 (或合约执行) 付费,可以确保网络不会因执行大量对任何人都没有价值的密集工作而陷入僵局。这与比特币交易费用的策略不一样,后者仅基于交易的千字节大小。由于以太坊允许任意复杂的计算机代码运行,即使是很短的代码也会可能导致大量计算工作。因此,直接衡量工作量很重要,而不是仅仅根据交易或合约的长度来确定费用。

支付 gas

那么,如果 gas 基本上是一个交易费用,那如何支付它?这是它变得有点棘手的地方。尽管 gas 是可以测量工作的单位,却没有任何实际的 gas 代币(Token)来。也就是说,你不能拥有 1000 个 gas。相反,gas 只存在于以太坊虚拟机内,作为正在执行多少工作的计数。当涉及到实际支付 gas,则是收取一定数量的以太币 ether(以太坊网络原生代币)作为交易费,用户奖励矿工生产块。

这也许看起来很奇怪。为什么操作不能直接用以太币(ether) 来衡量成本?答案是以太币像比特币一样,市场价格变化迅速!但是计算成本不会仅仅因为以太价格的变化而上升或下降。因此,将计算价格与以太币价格区分开来是很有帮助的,这样,每次市场波动时,操作成本都不必改变。

这里的术语有点乱。EVM 的执行是需要消耗 gas 的 ,而 gas 本身使用 gas 价格 (用以太币表示) 来衡量。每笔交易都要指定愿意为单位 gas 支付的 gas 价格(gas price),这是两者的结合,*gas 消耗量 gas 价格 = 交易费用**。 这允许市场决定以太价格与计算操作成本 (以 gas 衡量) 之间的关系。

虽然很棘手,但了解 gas 消耗量及 gas 价格区别很重要,它给初学者带来了以太坊交易中最令人困惑的事情: 交易耗尽了 gas(out-of-gas)与交易没有足够高的费用有区别的。如果我在交易中设定的 gas 价格太低,没人会在第一时间运行我的交易,矿工根本不会将其打包到区块链中。但是,如果我提供了一个可接受的 gas 价格,然后交易有太多的计算工作(消耗的太多的 gas),合并起来的 gas 费用超过我附加的费用,gas 就会被矿工花费掉并停止处理交易,所做的变更也会被还原,但它仍将其作为” 失败的交易” 包含在区块链中,矿工收取它的费用。这似乎很苛刻,但是当你意识到矿工的真正工作是在执行计算时,可以看到他们也永远收不回这些资源。因此,即使因设计糟糕的交易消耗完了 gas,你为矿工所做的工作支付报酬是公平的。

提供很大的 gas 也不同于提供太高的 gas 价格。如果设定了一个非常高的 gas 价格,你最终将为几个少量操作支付大量的以太币,就像设置一个超高交易费用的比特币交易。交易肯定会被优先处理,但你的钱不见了。但是,如果你提供了正常的 gas 价格,并且提供的 gas 数量比交易消耗的 gas 所需的更多,超额金额将退还给你。矿工们只收取你实际工作的费用。你可以将 gas 价格视为矿工的小时工资,将 gas 消耗量视为完成的工作时间。

gas 有很多其他的微妙之处,但这些是应该了解的基本知识!Gas 是使支持复杂计算的以太坊网络得以” 安全” 工作的关键,因为任何失控的程序只有在请求运行者提供资金时才能持续。当资金不足时,矿工们就停止工作。而且在程序中所犯的错误只会影响付费使用它的人 —— 网络的其他部分不会因为这个错误而出现性能问题。如果没有这种关键技术,通用区块链的想法将完全不可能。

结论

  • gas 是计算费用的方式。
  • 费用(fee)仍然以以太(ether)支付,但是它与 gas 不同。
  • gas 消耗量是执行的事务的工作量,如劳动小时数、车辆行驶的公里数,而 gas 价格类似于你为完成工作支付的小时工资。两者的结合决定了总交易费用。
  • 如果 gas 价格过低,没有人会处理你的交易。
  • 如果你的 gas 价格正常,但你的交易的 gas 消耗量超出” 预算” 会导致交易失败,仍最为失败交易进入区块链,并且无法收回支付的费用。
  • 它确保没有程序可以永远运行,并且人们会小心运行他们的代码。它使矿工和用户都免受坏代码的影响。

原问答链接

请先 登录 后评论

其它 1 个回答

君莫笑
请先 登录 后评论