Solidity
使用 web3 刪除乙太坊區塊鏈上的合約
是否可以使用 web3 或鬆露控制台或 geth 控制台刪除或更新已部署的契約?如果我們知道地址和 ABI 數組等合約詳細資訊,我們使用 web3.js 創建一個合約對象
像
var contractObject = web3.eth.contract(abi).at(contractAddress);
那麼是否可以使用創建的對像從區塊鏈中刪除該合約。
我很好奇,有沒有辦法使用web3.js呼叫selfDistruct(“地址”)??我已經指定contractObject 是contract的對象
我可以打電話嗎
contractObject.selfDistruct("new address to transfer remaining balance")
這裡的問題解釋瞭如何更新現有契約,但即使契約不包含 seftDistruct() 方法,我也需要一種刪除現有契約的方法。
您無法在給定地址更新合約。有一些模式可以規避此限制並擁有可升級的合約,例如通過在指向最新版本合約的固定地址上擁有一個前端合約。
您可以在合約上呼叫會導致其自毀的方法,如果該方法已在合約創建時實現並且您滿足要求 - 即通常此類方法應該只接受來自合約所有者的呼叫。例如,查看開放 zeppelin 庫中的 Destructible 合約。
你不能直接從 web3.js 呼叫Solidity selfDistruct操作碼,就像你可以直接更改合約中的變數一樣——你只能通過合約的方法與合約互動。
@manuhalo 所說的,另外,您可能需要考慮使用執行/停止方法和修飾符而不是 selfDestruct() 暫停契約,因為後者會創建一個沉洞。前者可以拋出所有方法並返回所有資金。
希望能幫助到你。