Truffle

selfdestruct:為什麼我可以執行包含 selfdestruct(…) 的函式兩次?

  • January 21, 2021

我創建了以下帶有呼叫 selfdestruct 的銷毀函式的合約:

pragma solidity >=0.5.0 < 0.7.0;

contract Terminate{
  function destroy() public {
     selfdestruct(msg.sender);
  }
}

$ truffle consoletruffle(development)> 

未定義的松露(開發)> T = await Terminate.at(‘0xA79abEbDb5396053aC4Be4b73282fFef060e410A’); 未定義松露(開發)>等待T.destroy();{ TX: ‘0xaaf88fb64a0531d4dd708bbd58908cbf931549519ddbf5e7c5cea40ff30a7bc7’,

現在,如果我嘗試呼叫“destroy()”,它將再次被執行。我覺得我必須收到一些錯誤消息,因為我已經銷毀了契約。

松露(開發)>等待T.destroy();{ tx:

‘0x96166648453aa8653c194e055590849e6bef028ef6017e3e894690b3270f3ff4’, 收據: { transactionHash: ‘0x96166648453aa8653c194e055590849e6bef02690ef6017e0f3e8

為什麼我不能使用我之前的銷毀呼叫來銷毀契約?

我在 Github 中儲存了一份契約副本:

> 這裡

有人請指導我如何使用 selfdestruct 殺死契約?

祖爾菲。

第一次,它成功了——默默地。不會發出任何事件,因此您必須檢查該地址的字節碼長度以肯定地確認它是否有效。

第二次,它失敗了——靜默。“自毀”的效果是沒有程式碼引發錯誤,因為無事可做。這會讓人產生一種奇怪的感覺,那就是出了點問題。你期待更壯觀的東西。

這裡有一篇小論文selfdestruct,可能會提供一些思考的食物。https://blog.b9lab.com/selfdestruct-is-a-bug-9c312d1bb2a5

希望能幫助到你。

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