Solidity
如果沒有寫在契約中,如何呼叫“selfdestruct”,因為文件說它是可能的
如文件中所述“即使合約的程式碼不包含對 selfdestruct 的呼叫,它仍然可以使用 delegatecall 或 callcode 執行該操作。” 所以我的問題是怎麼可能,我的目的是釋放由於程式碼錯誤而卡在合約中的Eth,現在沒有辦法退出
如果你的合約有一個函式可以
delegatecall
通過某種方式執行來提供呼叫的函式,你可以讓它在另一個合約中執行一個函式,它呼叫selfdestruct
. 由於執行的函式delegatecall
將在第一個合約的上下文中執行,這將自毀第一個合約。例如:contract A { function kill (address payable to) public { selfdestruct(to); } } contract B { function run (address target, string calldata func, address to) public { target.delegatecall(abi.encodeWithSignature(func, to)); } }
run
使用合約 A 的地址kill(address)
asfunc
和任何地址 as呼叫to
,將導致合約 B 自毀並將乙太幣發送到 addressto
。
run
如您所見,此功能不是很安全。如果你的合約沒有內置這樣的功能,那你就不走運了,你的 ETH 不幸被卡住了。