原文标题:《Binance研报丨硬核解析智能合约漏洞原理》。 撰文:ChenBoYu、HsuTzuHsiu
在探讨智能合约漏洞解析之前,我们先从一个基本的范例来了解一个智能合约会具备哪些元素。
● 变数:即此范例中的balances,在这个合约中负责存储使用者地址在合约中对应的存款余额。 ● 函数:即此范例中的getBalance,使用者呼叫此函数时,会回传使用者在合约中的存款余额。 ● 接收函数:即此范例中的receive,这是一个内建的函数。当合约收到使用者传入ETH且无呼叫其他函示时会触发,此范例在触发接收函数时,会变更变数balances的状态,而函数中的msg.sender代表的是交易的发送者地址。 ● 回退函数:即此范例中的fallback,这也是一个内建的函数。当使用者呼叫了不存在的函数时触发,可以理解为例外处理函数。在此范例中,触发时把交易回退,亦即让交易失效。
了解问题发生的原因,并且归纳问题的类别可以帮助我们更好的防范。DASP(Decentralized Application Security Project)收录了十种智能合约漏洞,下面我们整理了其中最常见的合约漏洞以及新型态的攻击模式。