谈谈以太坊交易天价油费

一开始的印象是:gasUsed=gasLimit难道是这笔交易确实需要这么多gas,然后油费不够导致失败。但这只是一个简单的token转帐交易啊

这个合约的名字是CHP, transfer函数代码量不大啊,怎么会耗费这么gas呢?后来才发现是这个sub,add函数的实现问题

它的add, sub函数都用了assert函数,这里应该用require的。那assert和require的区别是什么呢?我们写个简单的示例使用solidity-browser来看看:

可见assert生成的是invalid指令,而require生成的是revert指令,以太坊系统代码对这两种指令的收费逻辑是不一样的。revert指令只收取已耗掉的油费,剩余的邮费退回。而invalid指令是吃掉所有gas

invalid和revert指令都是一种错误,对于非revert错误会吃掉所有的油费。

所以,不仅仅智能合约开发人需要注意,普通用户使用智能合约的时候也要注意,别将gasLimit设置的那么大,智能合约的不合理编程或者bug会吞掉你所有的gas.

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180608G08HIG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券