Solidity
自毀設計模式 - 資金損失問題
我正在探索有時間限制的智能合約的自毀設計模式。所以我的契約不應該在某個給定的時間段後接受任何進一步的狀態變化。
在進行這項工作時,我遇到了 selfdestruct 設計模式,這種模式非常適合需要,但如果有人試圖將資金發送到已銷毀的合約,則會導致資金損失。
避免發送給此類契約的資金損失的最佳方法應該是什麼
謝謝
您已經確定了使用可暫停模式的原因。
selfdestruct(recipient)
照顧兩個幾乎總是可以解決的問題,而不會在區塊鏈上留下這些危險的空白。
- 收回資金,可以通過提款功能輕鬆解決。
- 拒絕傳入的請求,這很容易用
modifier
.實現範例:https ://github.com/OpenZeppelin/openzeppelin-solidity/blob/v1.12.0/contracts/lifecycle/Pausable.sol
您可以使用它來關閉在終止後不應使用的功能以及只能在關閉時使用的功能(撤回?)。
您還可以刪除該
unPause()
功能以使暫停操作永久化,從而更接近地模擬該selfdestruct
過程。希望能幫助到你。
selfdestruct 是有時間限制的合約的一個很好的模式。如果您確定在到期後刪除所有死連結並且沒有資金損失的風險,您就可以使用。這將在最終的資金轉賬交易中為您節省 gas 費用。
但是,如果存在任何此類風險,那麼正如@Rob 在回應中提到的那樣,避免在合約到期後暫停模式下損失資金的風險會更好。