コントラクトがehterを保持していた場合、不要となったらコントラクトからetherを回収しなければなりません。
そのため、コントラクトを破棄すると同時にownerにetherを送金するようにしておく必要があります。
脆弱性が発見されることに備えて、攻撃者からの不正な引出しをされる前にetherを回収できるようにしておくことはセキュリティ的に必須です。
実装
コントラクトをきれいに破棄するためのサンプルコードは以下の通りです。
[ソースコード]
1 | pragma solidity ^0.4.11; |
ポイントは23行目のselfdestruct関数です。
selfdestruct関数はコントラクトを破棄し、引数のアドレスにコントラクト内のetherを送金します。
不特定のアドレスからコントラクトを破棄されては困るので、onlyOwner(22行目)を付加して、コントラクトのオーナーからのみ実行できるようにアクセス制限をかけています。
次回は、このコントラクトの動作確認を行います。