2021.08.13
智能合约中也存在DoS攻击,受到攻击用户可以在短时间内使合约无法操作,或者在某些情况下,永久无法操作。这可能会永远将ether困在这些合约中。
当执行功能的成本超过区块限制时,可能会导致智能合约中的服务拒绝。例如修改较大的数组,会消耗大量的gas,就可能会导致拒绝服务的情况。
另一种常见模式是所有者在合约中具有特定特权,并且必须执行某些任务才能使合约进入下一个状态。一个例子是 ICO 合约,它要求所有者先调用finalize(),然后允许代币进行转让。
有时编写合约时,为了进展到新状态需要将以太币发送到一个地址,或者等待来自外部源的一些输入。当外部调用失败或由于外部原因被阻止时,这些模式可能导致 DOS 攻击。在发送以太币的例子中,用户可以创建一个不接受以太币的合约。如果合约需要退回以太币以进入新状态,则该合约将永远不会达到新状态,因为永远无法发送以太币到不接受以太币的用户合约。