Selfdestruct
自毀是一個好習慣嗎?
自毀後的合約無法管理交易,因此發送給它的任何乙太幣都會失去。切換到契約定義的“已解僱”狀態並拒絕在這種狀態下錯誤發送的任何乙太幣不是更好嗎?
在我看來,不,自毀通常不是一個好習慣。正如你所說,它在區塊鏈上創造了危險的空白,其中:
- 沒有人有簽名密鑰,
- 沒有合約程式碼,並且
- 可能使用者認為那裡有契約。
發送到該地址的任何資金都將無法恢復,這與銷毀相同。
認真的開發人員可以完全禁用契約而不會造成這樣的空白。
contract Pausable is Ownable { bool public isRunning; modifier onlyWhenRunning { require(isRunning); _; } function stopContract() public onlyOwner { isRunning = false; } }
查看 OpenZeppelin 以獲得更完整的模式實現。
希望能幫助到你。
您可以自己實現此功能。你可以在 selfdestruct 指令之前執行一個修飾符來檢查合約擁有的乙太數量。這樣,合約只有在它不擁有乙太幣的情況下才會被“銷毀”。