以太坊智能合约规范问题之为未触发的事件区块链

区块链安全档案 2018-09-11 22:52
分享到:
导读

ERC20中规定了transfer函数必须触发Transfer事件,transfer函数必须返回bool值,在进行余额判断时,应抛出错误而不是简单的返回错误,approve函数必须触发Approval事件。

简介:

ERC20是一种代币标准,用于以太坊区块链上的智能合约。ERC20定义了一种以太坊必须执行的通用规则,如果在以太坊发行的代币符合ERC20的标准,那么交易所就可以进行集成,在它们的交易所实现代币的买卖和交易。

ERC20中规定了transfer函数必须触发Transfer事件,transfer函数必须返回bool值,在进行余额判断时,应抛出错误而不是简单的返回错误,approve函数必须触发Approval事件。

Transfer事件:

当token被转移的时候必须触发该事件,包括零值转移。

一个创建新token的合约在给_from地址赋0x0值时必须触发一个Transfer事件

Approval事件:

调用approval函数成功时,必须要触发Approval事件

1.未触发Transfer事件

上述代码在发生交易时未触发Transfer事件,在发生交易时,未产生event事件,不符合ERC20标准,不便于开发人员对合约交易情况进行监控。

2.未触发Approval事件

上述代码在发生交易时未触发Approval事件,在发生交易时,未产生event事件,不符合ERC20标准,不便于开发人员对合约情况进行监控。

漏洞影响

使用了智能合约审计功能可以准确扫描到该类型问题。

经过对全网的公开的共39548 个合约代码进行了扫描,其中共14978个合约涉及到这类问题。

1.未触发Transfer事件

截止2018年8月10日为止,我们发现了4604个存在未遵循ERC20标准未触发Transfer事件的合约代码,其中交易量最高的10个合约情况如下:

2.未触发Approval事件

截止2018年8月10日为止,我们发现了5231个存在未遵循ERC20标准未出发Approval事件的合约代码,其中交易量最高的10个合约情况如下:

修复方式

1)transfer函数中应触发Tranfser事件

2)approve函数中应触发Approval事件

总结:

智能合约安全咨询公司 曲速未来 表示:如果没有在transfer和approve时触发相应的事件,开发人员就需要更复杂的方式监控合约的交易情况,一旦发生大规模盗币时间,甚至没有足够的日志提供回滚。

以上两个问题算是历史漏洞中经常发现的一类问题,都属于开发人员没有遵守ERC20标准而导致的,虽然这些问题往往不会直接导致合约漏洞的产生,但却因为这些没有遵守标准的问题,在后期对于合约代币的维护时,会出现很多问题。在这里智能合约安全咨询公司 曲速未来 再次建议:所有的开发者重新审视自己的合约代码,检查是否遵守了ERC20合约标准,避免不必要的麻烦以及安全问题。

合约 问题 ERC 事件 触发
分享到:

1.TMT观察网遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2.TMT观察网的原创文章,请转载时务必注明文章作者和"来源:TMT观察网",不尊重原创的行为TMT观察网或将追究责任;
3.作者投稿可能会经TMT观察网编辑修改或补充。