Contract-Design
“自毀”案例?
根據
solidity.readthedocs.io
(連結)這裡是定義Self-destruct
:“定義:從區塊鏈中****刪除程式碼的唯一方法是在該地址的合約執行
Selfdestruct
操作時。儲存在該地址的剩餘乙太幣被發送到指定目標,然後從狀態中刪除儲存和程式碼。”雖然這個定義聽起來允許擦除功能的可能性(這是GDPR (通用數據保護條例)與區塊鏈不兼容的主要挑戰之一。(連結到 GDPR 中的擦除權));但是在定義之後
Self-destruct
,有以下注意和警告:“**注意:**即使合約的程式碼不包含對 的呼叫
Selfdestruct
,它仍然可以使用delegatecall
or執行該操作callcode
。”“**警告:**即使合約被刪除
Selfdestruct
,它仍然是區塊鏈歷史的一部分,並且可能被大多數乙太坊節點保留。因此使用Selfdestruct
與從硬碟中刪除數據不同。”究竟
Self-destruct
給了我們什麼以及它如何幫助我們?
首先,一個小的修正。一切都是不可逆的,你無法逆轉自毀。引用僅僅意味著數據仍然存在於區塊鏈歷史中,即使合約在最新的區塊中不再存在。因此,不會從區塊鏈(歷史)中刪除任何數據。
我至少能想到幾個自毀的案例:
當一個合約不再需要時,你可以自毀它。這樣你就可以確定沒有人可以向它發送交易,也沒有人可以與之互動。即使合約本身因程式碼而變得無用(例如通過更新某些狀態變數),也可能存在例如安全漏洞。
強制合約使用者開始使用新合約,因為舊合約根本不存在。例如,當您從舊的代幣合約切換到新的代幣合約時。
契約的“最後手段”後門。如果合約沒有像你想像的那樣工作,並且你已經包含了 selfdestruct 的功能,你可以刪除它並創建一個更好的。