Solidity

如何在 Solidity 中檢查合約是否自毀?

  • April 9, 2019

我有一個問題:我有一個契約工廠,可以創建一些臨時契約。我希望每個契約都存在大約 5 天,之後它會自毀。但是,我想創建一個目錄來儲存所有臨時合約的地址並為您列出它們。將臨時契約註冊到目錄契約沒有問題我只是不知道如何找出契約是否仍然存在,以便不再列出被破壞的契約。

先感謝您。

合約呼叫後selfdestruct(),所有值都設置為0。所以如果你有這樣的契約:

契約凡人{
地址公共所有者;

功能凡人(){
所有者 = msg.sender;
}

函式殺死(){
自毀(所有者);
}

然後從另一個契約中,您可以呼叫:

函式checkMortal(地址凡人){
if (凡人(凡人).owner() == 0) {
// 你知道它已經死了。
} 別的 {
// 你知道它還活著。
}
}

更新:

在以拜占庭或更高版本為目標的較新版本的 Solidity 中,這可能會失敗。Solidity 現在驗證 returndatasize 以了解呼叫是否失敗,因此當owner()不返回任何內容,甚至不返回 0 時,它將恢復事務。現在最好的方法可能是在solidity assembly中使用extcodesize 。如果您知道它以前具有非零程式碼大小,這只會告訴您它自毀。

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