×

揭开以太坊交易费用Gas的神秘面纱(1)

96
Sunface撩技术
2018.04.20 15:42* 字数 1862

大家都知道Gas有燃料的含义,那么以太坊的Gas是什么呢?估计能正确理解的人就不多了,甚至一些区块链老兵也无法说得很清楚。而且以太坊为什么要选择Gas这种设计,而不是更简单的方式,例如比特币。

首先来看看Gas到底是啥?

以太坊的货币是以太币(Ether),但是Gas其实并不是以太币延伸处的货币。Gas是以太坊虚拟机(EVM)内部的Token,当以太坊虚拟机执行一些指令操作时(例如智能合约、转账代码等),将扣除相应的Gas。

例如,不同类型合约的Gas消耗:

  • 仅执行一条指令: 1 Gas
  • 存储一个值: 100Gas
  • 调用另外一条合约: 20Gas

这样做是有很多好处的,最主要的是以太坊可以控制外部数据输入的边界,例如你如果想要写很长的合约或存储很多数据来达到恶意的目标,你就需要支付很多的费用来达成,天底下没有免费的午餐!

假如你想要向一条智能合约发送一次事务请求,首先被要求输入下面的内容:

  • Gas Price : 你需要为每一单位的Gas支付的以太币数额
  • Gas Limit: 为了执行这次事务,你愿意支付的最大Gas单位数

看到这里,各位同学可能还是很迷惑。到底这些Gas XXX 合在一起是什么鬼?这里我们用一个类比的例子来诠释一下。

女佣服务

假设你加入了一个新的女佣服务中介,这个中介决定给旗下的女佣更多的特权—例如她们拥有更灵活的选择服务目标的权利,甚至如果市场允许的情况下,可以让女佣们赚取更高的佣金。

这里,中介引入了一种新的中间货币Token,来计算女佣的酬劳,最终再将中间货币兑换为美元发放。这种Token可以通过以下方式获取:

  • 卧室保洁 : 1 Token
  • 客厅保洁: 3 Tokens
  • 浴室保洁: 10 Tokens

目前来说,这些价格是由中介制定的,不会改变。所以无论如何,对于女佣来说,她的收入将是固定的。

服务灵活性

之前提到过,引入中间货币Token后,一些服务和佣金形式将更佳灵活,那应该怎么实现呢?毕竟单次服务的Token数是固定的。

灵活性就体现在对于每个Token,顾客愿意为之支付的金额,这个金额是可以协商的。

女佣可能提出:我为每个Token收取的费用是25美元,你可能会提出不同的意见:我最多只能为你的每个Token付出15美元

这个时候,意见出现了分歧,就只有两种办法:女佣接受你的价格然后开始保洁或者她拒绝你的价格去寻找能提供更好价格的用户。

以上的过程和Gas Price是非常相像的
你会说:我愿意为每个Gas支付0.00002以太币,那矿工可以选择接受你的出价,或者拒绝你后去选择出价更高的人。

(当然,对于以太坊来说,还略有不同,为了实现自动化,矿工会设置一个最小可接受的Gas Price,如果你的出价高于这个最小值,那矿工就可以开始为你服务)

截止目前,通过女佣服务这个例子,我们更好的理解了何为Gas Price,那么再来看看Gas Limit,在真实世界中,该是怎么样的例子?

女佣服务中间货币的限制

现在假设你租用了一栋房子准备用来举办一次大型聚会party,聚会当然很high,但是结果也很残酷:起来后,你发现屋里子到处都是乱糟糟的,我擦,好头疼,该怎么办?别急,这个时候就可以使用咱们的女佣服务中介了,最终我们跟中介谈妥了每个Token的价格:20美金

“你这栋房子有多少间房间?”
“额,不是很清楚”
“那你希望我们怎么报价呢”
你假装深沉(其实就是钱包羞涩):"这样吧,我最多给你支付100个Token,如果房间太多用完了,那你停止打扫即可;如果没有用完,需要退还给我剩余的Token"

最终,大家达成了一致的协议:

  • 总计需要支付Token数: 100
  • 每个Token需要支付的价格:20美元

以上过程跟Gas Limit也是极其相似的,假如你要发起一次交易,那你提供以下报价:

  • Gas Price : 20 Gwei (单位Gas的价格)
  • Gas Limit : 10000 Gas

Gwei是以太币的子单位,1以太币 = 1,000,000,000 Gwei

对于矿工来说,就意味着你提供了这个报价,如果他愿意执行,那就消耗Gas Limit,如果任务成功完成,则退给你余额;反之则,停止任务,并收取所有的Gas Limit

不要心存侥幸

你发起请求之前,肯定会觉得10000Gas足够执行智能合约的任务了。但是一旦执行费用超过了这个10000Gas,那你的任务就会执行失败,而且钱概不退还。

同样的,如果你之前支付的100个Token不够用,那女佣也将立刻停止打扫。

不过还是稍有不同的:女佣虽然没有彻底打扫完,但至少你收获了大部分的干净房间;但是智能合约不同,如果你的Gas Limit用完,智能合约还没有执行完,那执行过程将全部回滚,简而言之—你赔了夫人又折兵。

小秘诀
如果你想要节省交易费用,应该降低Gas Price,保持或者提升Gas Limit,一般用户恰恰都是进行相反的选择。

总结

Gas是EVM用来执行你的智能合约的收费,合理的理解和设置Gas Limit和Gas Price是很重要的,在下一节我们将讨论以太坊为什么选择Gas的方式而不是比特币的方式

如果我写的任何文章曾在你的心里荡起涟漪,那至少说明在逝去的岁月里,我们在某一刻,共同经历着一样的技术探索之路。
有时候,虽然素未谋面,却已相识很久,很微妙也很知足。

想学习区块链技术,可以搜索公众号优优区块链课堂或者添加公众微信号uulesson

UU课堂

区块链
Web note ad 1