译文出自:登链翻译计划
译者:翻译小组
校对:Tiny熊
使用OpenZeppelinUpgrades插件部署的智能合约可以被升级,可以在保留其地址、状态和余额下,修改其合约代码,同时。这允许你迭代地将新功能添加到项目中,或修复你在生产中可能发现的任何错误。
在本教程中,我们将展示使用OpenZeppelinHardhatUpgrades和GnosisSafe多签钱包,进行合约创建、测试和部署,以及使用GnosisSafe多签升级,教程包含以下内容:
创建一个可升级的合约
在本地测试该合约
将合约部署到公共网络上
将升级的控制权转移到Gnosis多签账号中
创建新的实现版本
在本地测试升级
部署新的实现
升级合约
设置环境
我们将首先创建一个新的npm项目。
mkdirmycontract&&cdmycontractnpminit-y
我们将安装Hardhat。运行Hardhat时,选择创建一个空的hardhat
//Readsthelaststoredvaluefunctionretrieve()publicviewreturns(uint256){returnvalue;}}
在本地测试合约
记得应该始终适当地测试我们编写的合约。为了测试可升级的合约,我们应该为实现合约创建单元测试,同时创建更高级别的测试,以测试通过代理的交互。
基于Seaport的Polygon链上OpenSea交易额突破1000万美元:10月12日消息,DuneAnalytics最新数据显示,基于开源NFT协议Seaport的Polygon链上OpenSea交易总额突破1000万美元,截至目前为10,806,739美元(过去7天交易额激增超260万美元,占总交易额四分之一以上),交易量达到247,896笔。[2022/10/12 10:31:26]
我们在测试中使用chaiexpect,所以也需要安装以下:
npminstall--save-devchai
我们将为实现合约创建单元测试。在项目根目录下创建一个test目录,然后在test目录下创建Box
);//Testcaseit('retrievereturnsavaluepreviouslystored',asyncfunction(){//Storeavalueawaitbox
);});
我们还可以创建通过代理进行交互的测试。注意:我们不需要在这里重复我们的单元测试,这是为了测试代理交互和测试升级。
在你的test目录下使用以下JavaScript创建Box
);//Testcaseit('retrievereturnsavaluepreviouslyinitialized',asyncfunction(){//Testifthereturnedvalueisthesameone//Notethatweneedtousestringstocomparethe256bitintegersexpect((awaitbox
Web3开发者社区DeveloperDAO已开放空投申领,NFT持有者可获至少400枚代币:金色财经消息,Web3开发者社区DeveloperDAO已开放CODE Token空投申领。申领者包括NFT持有者以及其他社区活跃者和贡献者,每人可以获得至少400枚CODE Token(约合490美元)。[2022/8/23 12:42:30]
);});
然后我们可以运行测试:
$npxhardhattestDownloadingcompiler0
main()
);
我们通常会先将合约部署到本地测试,然后手动与之交互。为了节省时间,将跳过直接部署到公共测试网络。
在本教程中,将部署到Rinkeby网络。如果你在配置方面需要帮助,请参阅连接到公共测试网络和Hardhat:部署到真实网络。注意:任何如助记符或AlchemyAPI密钥都不应提交到版本控制中。
我们将使用以下hardhat
main()
);
我们可以在Rinkeby网络上运行转移:
$npxhardhatrun--networkrinkebyscripts/transfer_ownership
//Readsthelaststoredvaluefunctionretrieve()publicviewreturns(uint256){returnvalue;}//Incrementsthestoredvalueby1functionincrement()public{value=value1;emitValueChanged(value);}}
OpenSea早时首页推荐PXN系列NFT仿盘链接,交易量超3,600 ETH:5月5日消息,据包括dingaling在内的多位NFT领域KOL发文表示,OpenSea曾于今日早些时候在其首页的Trending inall categories板块为用户推荐NFT项目PXN Ghost Division,但该项目超链接却链接至仿盘PXN:Ghost Divison,导致部分用户出现资金损失。目前OpenSea已下架主页链接,并关闭该仿盘NFT主页。截止下架前,该仿盘NFT交易量已超3,600ETH。[2022/5/5 2:51:20]
在本地测试升级
为了测试我们的升级,我们应该为新的实现合约创建单元测试,同时创建更高级别的测试,以测试通过代理进行的交互,检查状态是否在不同版本的升级中得到维护......
我们将为新的实现合约创建单元测试。我们可以添加到我们已经创建的单元测试中,以确保高覆盖率。在你的test目录下使用以下JavaScript创建BoxV2
);//Testcaseit('retrievereturnsavaluepreviouslystored',asyncfunction(){//StoreavalueawaitboxV2
);//Testcaseit('retrievereturnsavaluepreviouslyincremented',asyncfunction(){//IncrementawaitboxV2
);});
还可以创建升级后通过代理进行交互的测试。注意:我们不需要在这里重复单元测试,仅测试代理交互和测试升级后的状态。
OpenSea总交易量突破150亿美元,交易手续费收入超3.7亿美元:1月6日消息,据TokenTerminal援引数据显示,OpenSea总交易量达151亿美元,交易手续费收入总额达3.77亿美元。此外,目前OpenSea已融资超4.27亿美元,估值达133亿美元。[2022/1/6 8:29:28]
在你的test目录下创建BoxV2
);//Testcaseit('retrievereturnsavaluepreviouslyincremented',asyncfunction(){//IncrementawaitboxV2
);});
然后我们可以运行我们的测试。
$npxhardhattestCompiling1filewith0
main()
);
我们可以在Rinkeby网络上运行迁移,部署新的实现:
$npxhardhatrun--networkrinkebyscripts/prepare_upgrade.jsPreparingupgrade...BoxV2at:0xE8f000B7ef04B7BfEa0a84e696f1b792aC526700
升级合约
为了在GnosisSafe中管理升级,使用OpenZeppelin应用。
首先,我们需要代理的地址和新实现的地址。我们可以从我们运行deploy.js和prepare_upgrade.js脚本时的输出中得到这些。
NFT平台OpenSea正在商谈购买Dharma Labs:1月5日消息,据AXIOS,NFT在线交易市场OpenSea正在商谈购买Dharma Labs。Dharma Labs是一个通用标记化债务协议平台,为交易者和大型加密货币持有者提供贷款,使用可编程的标记化债务构建全球可用贷款产品。(金十)[2022/1/5 8:26:05]
在Apps标签中,选择OpenZeppelin应用程序,在合约地址栏中粘贴代理的地址,并在新实现地址栏中粘贴新实现的地址。
该应用程序应该显示合约是EIP1967兼容的。
GnosisSafeOpenZeppelinUpgrade
仔细检查这些地址,然后按下升级按钮。我们将看到一个确认对话框,提交交易。
GnosisSafeOpenZeppelinUpgradeConfirm
然后,需要在MetaMask中签署该交易。
现在可以与升级后的合约进行交互。需要使用代理的地址与BoxV2交互。注意:BoxV2.attach(PROXYADDRESS)获取我们代理合约的地址。
然后,我们可以调用新的increment函数,可以观察到整个升级过程中状态保持了一致:
$npxhardhatconsole--networkrinkeby>constBoxV2=awaitethers.getContractFactory("BoxV2")undefined>constboxV2=awaitBoxV2.attach("0xFF60fd044dDed0E40B813DC7CE11Bed2CCEa501F")undefined>(awaitboxV2.retrieve()).toString()'42'>awaitboxV2.increment(){hash:...>(awaitboxV2.retrieve()).toString()'43'
接下来
我们已经创建了一个可升级的合约,将升级的控制权转移到Gnosis多签,并升级了合约。同样的过程也可以在主网上进行。注意:我们应该首先在公共测试网中测试升级。
我们也可以使用OpenZeppelinDefender管理升级,参考:https://docs.openzeppelin.com/defender/admin#upgrades
本翻译由CellETF赞助支持。
来源:https://forum.openzeppelin.com/t/openzeppelin-upgrades-step-by-step-tutorial-for-hardhat/3580
参考资料
登链翻译计划:https://github.com/lbc-team/Pioneer
翻译小组:https://learnblockchain.cn/people/412
Tiny熊:https://learnblockchain.cn/people/15
GnosisSafe:https://learnblockchain.cn/article/2980
Hardhat:https://learnblockchain.cn/docs/hardhat/getting-started/
OpenZeppelin学习教程:https://docs.openzeppelin.com/learn/developing-smart-contracts#setting-up-a-solidity-project
initialize函数而不是构造函数:https://docs.openzeppelin.com/learn/upgrading-smart-contracts#initialization
连接到公共测试网络:https://docs.openzeppelin.com/learn/connecting-to-public-test-networks
Hardhat:部署到真实网络:https://learnblockchain.cn/docs/hardhat/tutorial/deploying-to-a-live-network.html
Rinkeby网络上为自己创建一个GnosisSafe:https://rinkeby.gnosis-safe.io/
CreateaSafeMultisig:https://help.gnosis-safe.io/en/articles/3876461-create-a-safe-multisig
升级技术的限制更多细节,可以看这里:https://docs.openzeppelin.com/learn/upgrading-smart-contracts#upgrading
https://docs.openzeppelin.com/defender/admin#upgrades:_https://docs.openzeppelin.com/defender/admin#upgrades_
CellETF:https://celletf.io/?utm_souce=learnblockchain
免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。
本文来源于非小号媒体平台:
登链社区
现已在非小号资讯平台发布105篇作品,
非小号开放平台欢迎币圈作者入驻
入驻指南:
/apply_guide/
本文网址:
/news/10404921.html
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场
上一篇:
每周编辑精选WeeklyEditors'Picks
尊敬的用戶:AOFEX將於2021年10月20日上線LSS,具體時間安排如下:充提業務均已開啟交易時間:10月20日17:00提示:以下內容來源於公告發布時的網絡現有資料,AOFEX已盡力核對.
1900/1/1 0:00:00据TheBlock10月15日报道,英国拍卖行苏富比推出名为“苏富比元宇宙”的精选NFT平台,用户可以查看拍卖中的数字艺术品,并了解NFT背后的收藏家和艺术家.
1900/1/1 0:00:00尊敬的用戶:活動獎勵已發放,獲得獎勵的用戶在用戶中心?-?賬戶資產?查詢發放記錄。再次恭喜所有獲獎用戶!活動詳情:AOFEX關於“首發上線GDRT,四重豪禮狂撒630,000GDRT”的活動公告.
1900/1/1 0:00:00親愛的用戶:幣安將於2021年10月15日18:00上線AVAX/AUD、AVAX/BRL、AXS/ETH、FTM/ETH、LUNA/AUD、SOL/ETH、TROY/BUSD交易對.
1900/1/1 0:00:00尊敬的用戶:活動獎勵已發放,獲得獎勵的用戶在資產-幣幣賬戶,點擊對應的幣種即可查看獎勵詳情。再次恭喜所有獲獎用戶!活動詳情:AOFEX關於並開啟“限時充值交易SHIB,瓜分10萬USDT”活動的.
1900/1/1 0:00:00尊敬的用户:WBF已于暂停短信服务通知,具体详情见《关于WBF调整短信通知服务的公告》,由于很多用户并未及时绑定邮箱和谷歌验证器,导致其无法登陆,请无法登陆的用户,联系在线客服,协助解绑手机号.
1900/1/1 0:00:00