Upgrading

在編寫可升級的智能合約時,函式順序是否也很重要?

  • November 20, 2018

ZeppelinOS文件清楚地解釋了升級智能合約時狀態變數順序的重要性,但很少說明相同的規則是否適用於函式。

TLDR:僅影響變數

ZeppelinOS 通過使用代理模式進行升級,您​​實際上可以改變它的行為方式,根據具體的實現,變數的順序可能很重要,我們可以在升級過程中保留數據等。

在他們目前的預設實現中,我們可以使用以下結構簡化流程:

客戶端 -> 代理合約 -> 邏輯合約

升級的工作方式:

  1. 通過在升級中部署新的“邏輯合約”來添加新功能
  2. 更改“代理合約”中的指針,將交易發送到新的“邏輯合約”。

由於來自客戶端的交易轉到“代理合約”,因此地址沒有改變,使用者可以像以前一樣使用相同的地址進行互動。

你的問題的關鍵是變數在哪裡儲存和更新,同樣,有多種實現,最簡單的是將變數保存在代理中,這意味著變數儲存在“代理合約”中,一些邏輯在“邏輯合約”中執行,更新代理合約上的變數。

這就是為什麼當您更新邏輯時,舊變數儲存在未更新代理合約上的相同位置,以及為什麼保持這些一致很重要。另一方面,由於函式儲存在新的邏輯合約中,我們不需要擔心這些。

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