Contract-Design

“自毀”案例?

  • January 6, 2021

根據solidity.readthedocs.io連結)這裡是定義Self-destruct

定義:從區塊鏈中****刪除程式碼的唯一方法是在該地址的合約執行Selfdestruct操作時。儲存在該地址的剩餘乙太幣被發送到指定目標,然後從狀態中刪除儲存和程式碼。”

雖然這個定義聽起來允許擦除功能的可能性(這是GDPR 通用數據保護條例與區塊鏈不兼容的主要挑戰之一。(連結到 GDPR 中的擦除權));但是在定義之後Self-destruct,有以下注意警告

“**注意:**即使合約的程式碼不包含對 的呼叫 Selfdestruct,它仍然可以使用 delegatecallor執行該操作callcode。”

“**警告:**即使合約被刪除Selfdestruct,它仍然是區塊鏈歷史的一部分,並且可能被大多數乙太坊節點保留。因此使用Selfdestruct與從硬碟中刪除數據不同。”

究竟Self-destruct給了我們什麼以及它如何幫助我們?

首先,一個小的修正。一切都是不可逆的,你無法逆轉自毀。引用僅僅意味著數據仍然存在於區塊鏈歷史中,即使合約在最新的區塊中不再存在。因此,不會從區塊鏈(歷史)中刪除任何數據。

我至少能想到幾個自毀的案例:

  1. 當一個合約不再需要時,你可以自毀它。這樣你就可以確定沒有人可以向它發送交易,也沒有人可以與之互動。即使合約本身因程式碼而變得無用(例如通過更新某些狀態變數),也可能存在例如安全漏洞。

  2. 強制合約使用者開始使用新合約,因為舊合約根本不存在。例如,當您從舊的代幣合約切換到新的代幣合約時。

  3. 契約的“最後手段”後門。如果合約沒有像你想像的那樣工作,並且你已經包含了 selfdestruct 的功能,你可以刪除它並創建一個更好的。

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