Contract-Development

契約的哪一部分“未初始化”?

  • January 1, 2022

我正在閱讀這個問題,並引用:

我能夠使自己成為該契約的所有者,因為它未初始化。

所以我打開這個連結查看合約,但是我沒有找到“未初始化”的部分。

他在這裡是什麼意思?

WalletLibrary合約用於為所有Wallet實例提供邏輯。每個實例都必須通過呼叫initWallet(第 223 行)所有者和其他配置參數來初始化。此方法通過呼叫來設置所有者initMultiowned。當您現在對實例執行操作時,通過onlymanyowners(第 95 行)修飾符檢查 onwership。為了防止多次初始化,合約有一個only_unitialized(第 219 行)修飾符,它檢查是否有任何所有者已經註冊。

所以這一切都在意料之中,關鍵是你可以對它做同樣的事情,WalletLibrary並通過呼叫來獲得它的所有權initWallet。完成後,您可以對其執行任何互動,甚至通過kill方法(第 229 行)銷毀它。問題是當WalletLibrary程式碼被殺死時從區塊鏈中刪除時,所有Wallet實例也會失去其功能。

更多資訊:https ://www.parity.io/blog/security-alert-2/

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