問題一覧に戻る
中級実践的な機能
問題74: Selfdestruct(非推奨の参考)
Solidityのselfdestructについて学習します - 0.8.18以降非推奨、参考のみの表示です。Selfdestructはコントラクトを永久に破棄し、残りのETHを指定アドレスに送信するために使用されました。セキュリティ上の懸念とEIP-6049により、段階的に廃止されています。現代のコントラクトは代わりに引き出しパターンを使用すべきです。この関数はレガシーコードにまだ存在しますが、最終的にはストレージを破棄せずETHを送信するだけになります。新しいコントラクトでは常に代替の引き出しメカニズムを使用してください。
pragma solidity ^0.8.0;
// 警告:selfdestructは非推奨です
contract SelfDestructExample {
address payable public owner;
constructor() {
owner = payable(msg.sender);
}
// 参考のみ - 古いパターン
function destroy() public {
require(msg.sender == owner, "Not owner");
// 非推奨の破棄メソッド
(owner);
}
// 現代的な代替アプローチ
function emergencyWithdraw() public {
require(msg.sender == owner, "Not owner");
// 引き出しにはcallを使用
(bool success, ) = owner.call{value: address(this).}("");
require(success, "Transfer failed");
}
}