OpenZeppelin 可昇級合約插件 3/9 在 Truffle 環境下使用插件
在 Truffle 環境下使用插件
本插件增加Truffle 的功能和測試,讓合約可以部署和昇級。但是目前還不支持 truffle 的擴展語法。
Truffle 擴展語法請參考 https://www.trufflesuite.com/docs/truffle/getting-started/writing-external-scripts
安裝
$ npm install --save-dev @openzeppelin/truffle-upgrades
本插件需要 Truffle v 5.1.35 以上。
在Truffle 環境中使用插件
在 Truffle 環境裡使用 deployProxy 函數來部署可昇級的合約。
以上的代碼會自動檢查 Box 合約是否可以安全昇級,如果需要的話會設定合約管理員,會給 Box 合約部署功能合約,除非之前已經部署完成了。然後建立一個代理,並且調用 initialize(42) 來初始化代理合約
以後部署時,可以使用 upgradeProxy 函數來昇級合約到新的版本。這個新版本的合約,可以是完全不同的合約(可以想像是 BoxV2),也可以只修改 Box 然後重新編譯,插件會注意到檔案已經改變。
以上的代碼讓插件比對 BoxV2 跟之前的合約比對,並確定這兩個合約是相容的可以昇級,部署 BoxV2 的功能實作合約(除非已經部署過了),然後昇級代理合約指向新的功能實作合約。
在 Truffle 的測試中使用插件
也可以在 Truffle 的測試中使用 deployProxy 和 upgradeProxy 函數,以下的代碼是為昇級合約加入測試,這個 API 跟 migration 時一樣,只是缺少了 deployer 參數
參考
https://docs.openzeppelin.com/upgrades-plugins/1.x/truffle-upgrades