【翻译】用 Hardhat 进行升级部署(Using with Hardhat)

这篇文章主要介绍了【翻译】用 Hardhat 进行升级部署(Using with Hardhat) ,文中通过代码以及文档配合进行讲解,很详细,它对在座的每个人的研究和工作具有很经典的参考价值。 如果需要,让我们与区块链资料网一起学习。

https://www.interchains.cc/24070.html

【翻译】用 Hardhat 进行升级部署(Using with Hardhat)是很好的区块链资料,他说明了区块链当中的经典原理,可以给我们提供资料,【翻译】用 Hardhat 进行升级部署(Using with Hardhat)学习起来其实是很简单的,

不多的几个较为抽象的概念也很容易理解,之所以很多人感觉【翻译】用 Hardhat 进行升级部署(Using with Hardhat)比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难

【翻译】用 Hardhat 进行升级部署(Using with Hardhat)

  • 翻译
  • OpenZeppelin
  • Hardhat

该软件包为您的Hardhat脚本添加了功能,以便您可以为您的合同部署和升级代理。取决于ethers.js。

和Hardhat一起使用

该软件包为您的Hardhat脚本添加了功能,以便您可以为您的合同部署和升级代理。取决于ethers.js。

提示:查看分步教程,展示从创建、测试和部署,一直到使用 Gnosis Safe 进行升级。


安装

$ npm install --save-dev @openzeppelin/hardhat-upgrades $ npm install --save-dev @nomiclabs/hardhat-ethers ethers # peer dependencies

并在您的 hardhat.config.js 中注册插件:

require('@openzeppelin/hardhat-upgrades');

在脚本中的使用

您可以在 Hardhat脚本中使用此插件,通过 deployProxy 函数部署其中一个合约的可升级实例:

// scripts/create-box.js const { ethers, upgrades } = require("hardhat");  async function main() {   const Box = await ethers.getContractFactory("Box");   const box = await upgrades.deployProxy(Box, [42]);   await box.deployed();   console.log("Box deployed to:", box.address); }  main();

这将自动检查Box合约是否升级安全,设置代理管理员(如果需要),为Box合约部署一个实现合约(除非之前的部署已经有一个),创建一个代理并初始化它 通过调用initialize(42)。 然后,在另一个脚本中,您可以使用 upgradeProxy 函数将部署的实例升级到新版本。新版本可以是不同的合约(比如BoxV2),或者你可以修改现有的Box合约并重新编译它—插件会注意到它发生了变化。

// scripts/upgrade-box.js const { ethers, upgrades } = require("hardhat");  async function main() {   const BoxV2 = await ethers.getContractFactory("BoxV2");   const box = await upgrades.upgradeProxy(BOX_ADDRESS, BoxV2);   console.log("Box upgraded"); }  main();

注意:虽然此插件会跟踪您在每个网络上部署的所有实现合同,但为了重用它们并验证存储兼容性,它不会跟踪您已部署的代理。这意味着您需要手动跟踪每个部署地址,以便在需要时将这些地址提供给升级功能。

该插件将负责将BoxV2与前一个进行比较,以确保它们与升级兼容,部署新的BoxV2实现合约(除非先前部署中已经存在),并将现有代理升级到新实现。


测试中的使用

您还可以使用Hardhat tests中的deployProxyupgradeProxy函数,以防您想添加测试以升级您的合约(您应该这样做!)。API 与脚本中的相同。

const { expect } = require("chai");  describe("Box", function() {   it('works', async () => {     const Box = await ethers.getContractFactory("Box");     const BoxV2 = await ethers.getContractFactory("BoxV2");      const instance = await upgrades.deployProxy(Box, [42]);     const upgraded = await upgrades.upgradeProxy(instance.address, BoxV2);      const value = await upgraded.value();     expect(value.toString()).to.equal('42');   }); });

部分转自网络,侵权联系删除www.interchains.cchttps://www.interchains.cc/24070.html

区块链毕设网(www.interchains.cc)全网最靠谱的原创区块链毕设代做网站 部分资料来自网络,侵权联系删除! 最全最大的区块链源码站 ! QQ3039046426
区块链知识分享网, 以太坊dapp资源网, 区块链教程, fabric教程下载, 区块链书籍下载, 区块链资料下载, 区块链视频教程下载, 区块链基础教程, 区块链入门教程, 区块链资源 » 【翻译】用 Hardhat 进行升级部署(Using with Hardhat)

提供最优质的资源集合

立即查看 了解详情