Selfdestruct

自毀是一個好習慣嗎?

  • February 28, 2019

自毀後的合約無法管理交易,因此發送給它的任何乙太幣都會失去。切換到契約定義的“已解僱”狀態並拒絕在這種狀態下錯誤發送的任何乙太幣不是更好嗎?

在我看來,不,自毀通常不是一個好習慣。正如你所說,它在區塊鏈上創造了危險的空白,其中:

  1. 沒有人有簽名密鑰,
  2. 沒有合約程式碼,並且
  3. 可能使用者認為那裡有契約。

發送到該地址的任何資金都將無法恢復,這與銷毀相同。

認真的開發人員可以完全禁用契約而不會造成這樣的空白。

contract Pausable is Ownable {

 bool public isRunning;

 modifier onlyWhenRunning {
   require(isRunning);
   _;
 }

 function stopContract() public onlyOwner {
   isRunning = false;
 }
}

查看 OpenZeppelin 以獲得更完整的模式實現。

希望能幫助到你。

您可以自己實現此功能。你可以在 selfdestruct 指令之前執行一個修飾符來檢查合約擁有的乙太數量。這樣,合約只有在它不擁有乙太幣的情況下才會被“銷毀”。

引用自:https://ethereum.stackexchange.com/questions/59780