以太坊智能合約規(guī)范問題之為未觸發(fā)的事件區(qū)塊鏈
ERC20中規(guī)定了transfer函數(shù)必須觸發(fā)Transfer事件,transfer函數(shù)必須返回bool值,在進(jìn)行余額判斷時(shí),應(yīng)拋出錯(cuò)誤而不是簡(jiǎn)單的返回錯(cuò)誤,approve函數(shù)必須觸發(fā)Approval事件。
簡(jiǎn)介:
ERC20是一種代幣標(biāo)準(zhǔn),用于以太坊區(qū)塊鏈上的智能合約。ERC20定義了一種以太坊必須執(zhí)行的通用規(guī)則,如果在以太坊發(fā)行的代幣符合ERC20的標(biāo)準(zhǔn),那么交易所就可以進(jìn)行集成,在它們的交易所實(shí)現(xiàn)代幣的買賣和交易。
ERC20中規(guī)定了transfer函數(shù)必須觸發(fā)Transfer事件,transfer函數(shù)必須返回bool值,在進(jìn)行余額判斷時(shí),應(yīng)拋出錯(cuò)誤而不是簡(jiǎn)單的返回錯(cuò)誤,approve函數(shù)必須觸發(fā)Approval事件。
Transfer事件:
當(dāng)token被轉(zhuǎn)移的時(shí)候必須觸發(fā)該事件,包括零值轉(zhuǎn)移。
一個(gè)創(chuàng)建新token的合約在給_from地址賦0x0值時(shí)必須觸發(fā)一個(gè)Transfer事件
Approval事件:
調(diào)用approval函數(shù)成功時(shí),必須要觸發(fā)Approval事件
1.未觸發(fā)Transfer事件
上述代碼在發(fā)生交易時(shí)未觸發(fā)Transfer事件,在發(fā)生交易時(shí),未產(chǎn)生event事件,不符合ERC20標(biāo)準(zhǔn),不便于開發(fā)人員對(duì)合約交易情況進(jìn)行監(jiān)控。
2.未觸發(fā)Approval事件
上述代碼在發(fā)生交易時(shí)未觸發(fā)Approval事件,在發(fā)生交易時(shí),未產(chǎn)生event事件,不符合ERC20標(biāo)準(zhǔn),不便于開發(fā)人員對(duì)合約情況進(jìn)行監(jiān)控。
漏洞影響
使用了智能合約審計(jì)功能可以準(zhǔn)確掃描到該類型問題。
經(jīng)過對(duì)全網(wǎng)的公開的共39548 個(gè)合約代碼進(jìn)行了掃描,其中共14978個(gè)合約涉及到這類問題。
1.未觸發(fā)Transfer事件
截止2018年8月10日為止,我們發(fā)現(xiàn)了4604個(gè)存在未遵循ERC20標(biāo)準(zhǔn)未觸發(fā)Transfer事件的合約代碼,其中交易量最高的10個(gè)合約情況如下:
2.未觸發(fā)Approval事件
截止2018年8月10日為止,我們發(fā)現(xiàn)了5231個(gè)存在未遵循ERC20標(biāo)準(zhǔn)未出發(fā)Approval事件的合約代碼,其中交易量最高的10個(gè)合約情況如下:
修復(fù)方式
1)transfer函數(shù)中應(yīng)觸發(fā)Tranfser事件
2)approve函數(shù)中應(yīng)觸發(fā)Approval事件
總結(jié):
智能合約安全咨詢公司 曲速未來 表示:如果沒有在transfer和approve時(shí)觸發(fā)相應(yīng)的事件,開發(fā)人員就需要更復(fù)雜的方式監(jiān)控合約的交易情況,一旦發(fā)生大規(guī)模盜幣時(shí)間,甚至沒有足夠的日志提供回滾。
以上兩個(gè)問題算是歷史漏洞中經(jīng)常發(fā)現(xiàn)的一類問題,都屬于開發(fā)人員沒有遵守ERC20標(biāo)準(zhǔn)而導(dǎo)致的,雖然這些問題往往不會(huì)直接導(dǎo)致合約漏洞的產(chǎn)生,但卻因?yàn)檫@些沒有遵守標(biāo)準(zhǔn)的問題,在后期對(duì)于合約代幣的維護(hù)時(shí),會(huì)出現(xiàn)很多問題。在這里智能合約安全咨詢公司 曲速未來 再次建議:所有的開發(fā)者重新審視自己的合約代碼,檢查是否遵守了ERC20合約標(biāo)準(zhǔn),避免不必要的麻煩以及安全問題。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會(huì)明確標(biāo)注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請(qǐng)轉(zhuǎn)載時(shí)務(wù)必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會(huì)經(jīng)TMT觀察網(wǎng)編輯修改或補(bǔ)充。