OpenZeppelin 可昇級合約插件 3/9 在 Truffle 環境下使用插件

OpenZeppelin 可昇級合約插件 3/9 在 Truffle 環境下使用插件

AndyHuang
Oct 19, 2020

本插件增加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

--

--

AndyHuang
AndyHuang

Written by AndyHuang

blockchain , defi , programe

No responses yet