Upgrading
在編寫可升級的智能合約時,函式順序是否也很重要?
ZeppelinOS文件清楚地解釋了升級智能合約時狀態變數順序的重要性,但很少說明相同的規則是否適用於函式。
TLDR:僅影響變數
ZeppelinOS 通過使用代理模式進行升級,您實際上可以改變它的行為方式,根據具體的實現,變數的順序可能很重要,我們可以在升級過程中保留數據等。
在他們目前的預設實現中,我們可以使用以下結構簡化流程:
客戶端 -> 代理合約 -> 邏輯合約
升級的工作方式:
- 通過在升級中部署新的“邏輯合約”來添加新功能
- 更改“代理合約”中的指針,將交易發送到新的“邏輯合約”。
由於來自客戶端的交易轉到“代理合約”,因此地址沒有改變,使用者可以像以前一樣使用相同的地址進行互動。
你的問題的關鍵是變數在哪裡儲存和更新,同樣,有多種實現,最簡單的是將變數保存在代理中,這意味著變數儲存在“代理合約”中,一些邏輯在“邏輯合約”中執行,更新代理合約上的變數。
這就是為什麼當您更新邏輯時,舊變數儲存在未更新代理合約上的相同位置,以及為什麼保持這些一致很重要。另一方面,由於函式儲存在新的邏輯合約中,我們不需要擔心這些。