Truffle
selfdestruct:為什麼我可以執行包含 selfdestruct(…) 的函式兩次?
我創建了以下帶有呼叫 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希望能幫助到你。