谈谈以太坊交易天价手续费(油费)

    前一段时间在统计以太坊交易数据时发现一些很奇怪的交易,大量油费高达几百美金的交易,比如下面的这笔交易就耗费了188多美金    https://etherscan.io/tx/0x38d52226332458f5488b8947b49b43f8757a8d10a7c1b3882cbfcf2d4c64814e

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

    为了弄清楚,看看合约代码是最清晰的。点击上面智能合约的地址即可查看合约信息

 

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

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

 

 

 

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

 

 

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

 

/********************************

* 本文来自CSDN博主"爱踢门"

* 转载请标明出处:http://blog.csdn.net/itleaks

******************************************/

如果你对EOS,ETH技术及开发感兴趣,请入QQ群讨论: 829789117


如需实时查看最新文章,请关注公众号"区块链斜杠青年",一起探索区块链未来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值