我想使用的一个以太坊应用程序说需要"gas"来运行,什么是gas,我从哪里得到gas?
我想使用的一个以太坊应用程序说需要"gas"来运行,什么是gas,我从哪里得到gas?
"gas"是以太坊中使用的特殊单位的名称。它测量一个操作或一组操作需要执行多少"工作"量: 例如,计算一个 Keccak256 加密哈希函数,每次计算哈希时需要 30 个gas,再加上每 256 位被哈希的数据多花费 6 个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 是使支持复杂计算的以太坊网络得以"安全"工作的关键,因为任何失控的程序只有在请求运行者提供资金时才能持续。当资金不足时,矿工们就停止工作。而且在程序中所犯的错误只会影响付费使用它的人——网络的其他部分不会因为这个错误而出现性能问题。如果没有这种关键技术,通用区块链的想法将完全不可能。
原问答链接
学习中如遇问题,欢迎到区块链技术问答提问,这里有老师为你解惑。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!