火星链 火星链
Ctrl+D收藏火星链

OpenZeppelin Upgrades 教程 : 在 Hardhat 下如何进行合约升级

作者:

时间:1900/1/1 0:00:00

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

使用OpenZeppelinUpgrades插件部署的智能合约可以被升级,可以在保留其地址、状态和余额下,修改其合约代码,同时。这允许你迭代地将新功能添加到项目中,或修复你在生产中可能发现的任何错误。

在本教程中,我们将展示使用OpenZeppelinHardhatUpgrades和GnosisSafe多签钱包,进行合约创建、测试和部署,以及使用GnosisSafe多签升级,教程包含以下内容:

创建一个可升级的合约

在本地测试该合约

将合约部署到公共网络上

将升级的控制权转移到Gnosis多签账号中

创建新的实现版本

在本地测试升级

部署新的实现

升级合约

设置环境

我们将首先创建一个新的npm项目。

mkdirmycontract&&cdmycontractnpminit-y

我们将安装Hardhat。运行Hardhat时,选择创建一个空的hardhat

//Readsthelaststoredvaluefunctionretrieve()publicviewreturns(uint256){returnvalue;}}

在本地测试合约

记得应该始终适当地测试我们编写的合约。为了测试可升级的合约,我们应该为实现合约创建单元测试,同时创建更高级别的测试,以测试通过代理的交互。

OpenSea Pro:尚未铸造的Gemesis NFT元数据将在5月4日申领窗口关闭后公布:金色财经报道,OpenSea Pro在社交媒体上公布了有关Gemesis NFT持有者钱包元数据的最新信息。OpenSea Pro表示Gemesis NFT的排名特征反映了在Gem上NFT的购买时间,较高的排名对应较早的购买日期,反之则较晚,排名前 1% 的用户现在拥有具有特殊视觉效果的 Gemesis NFT,而尚未铸造的Gemesis NFT元数据将在5月4日申领窗口关闭后公布。

如果符合条件,即在 2023 年 3 月 31 日之前使用过 Gem并且仍然没有领取Gemesis NFT,那么可以在OpenSea上进行铸造,截至目前已铸造超9.2万枚Gemesis NFT,占总供应量的51.4%。[2023/4/19 14:12:33]

我们在测试中使用chaiexpect,所以也需要安装以下:

npminstall--save-devchai

我们将为实现合约创建单元测试。在项目根目录下创建一个test目录,然后在test目录下创建Box

);//Testcaseit('retrievereturnsavaluepreviouslystored',asyncfunction(){//Storeavalueawaitbox

);});

我们还可以创建通过代理进行交互的测试。注意:我们不需要在这里重复我们的单元测试,这是为了测试代理交互和测试升级。

在你的test目录下使用以下JavaScript创建Box

权志龙明日将于OpenSea平台发行NFT系列Archive of PEACEMINUSONE:3月21日消息,据官方公告,K-pop顶流歌手权志龙名下品牌PEACEMINUSONE将于3月22日公开发售 “Archive of PEACEMINUSONE” 系列NFT。

据悉,该系列NFT灵感来自权志龙原创作品《|ARCHIVE 2016'|》,白名单发售将于北京时间3月22日9时启动,当日11时启动公开发售,售价为0.27BNB。[2023/3/21 13:17:09]

);//Testcaseit('retrievereturnsavaluepreviouslyinitialized',asyncfunction(){//Testifthereturnedvalueisthesameone//Notethatweneedtousestringstocomparethe256bitintegersexpect((awaitbox

);});

然后我们可以运行测试:

$npxhardhattestDownloadingcompiler0

main()

);

我们通常会先将合约部署到本地测试,然后手动与之交互。为了节省时间,将跳过直接部署到公共测试网络。

在本教程中,将部署到Rinkeby网络。如果你在配置方面需要帮助,请参阅连接到公共测试网络和Hardhat:部署到真实网络。注意:任何如助记符或AlchemyAPI密钥都不应提交到版本控制中。

一级方程式赛车制造商Haas F1 Team宣布与Opensea合作:金色财经报道,美国许可的一级方程式赛车制造商Haas F1 Team宣布与NFT平台Opensea 合作。作为协议的一部分,将为Haas发布一系列NFT,而 Opensea的标志将出现在其汽车上。[2022/11/5 12:20:20]

我们将使用以下hardhat

main()

);

我们可以在Rinkeby网络上运行转移:

$npxhardhatrun--networkrinkebyscripts/transfer_ownership

//Readsthelaststoredvaluefunctionretrieve()publicviewreturns(uint256){returnvalue;}//Incrementsthestoredvalueby1functionincrement()public{value=value1;emitValueChanged(value);}}

在本地测试升级

为了测试我们的升级,我们应该为新的实现合约创建单元测试,同时创建更高级别的测试,以测试通过代理进行的交互,检查状态是否在不同版本的升级中得到维护......

我们将为新的实现合约创建单元测试。我们可以添加到我们已经创建的单元测试中,以确保高覆盖率。在你的test目录下使用以下JavaScript创建BoxV2

);//Testcaseit('retrievereturnsavaluepreviouslystored',asyncfunction(){//StoreavalueawaitboxV2

ZT周边竞拍将于8月13日在Opengaga开启:据官网公告,ZT周边竞拍将于2021年8月13号在Zenith Smart Chain上的NFT交易平台进行竞拍,届时ZT手办、ZT三周年T恤衫黑白款、ZT镭射包、ZT宝、ZT纪念款背包以及ZT三周年纪念卡等在Opengaga?竞拍。[2021/8/12 1:51:12]

);//Testcaseit('retrievereturnsavaluepreviouslyincremented',asyncfunction(){//IncrementawaitboxV2

);});

还可以创建升级后通过代理进行交互的测试。注意:我们不需要在这里重复单元测试,仅测试代理交互和测试升级后的状态。

在你的test目录下创建BoxV2

);//Testcaseit('retrievereturnsavaluepreviouslyincremented',asyncfunction(){//IncrementawaitboxV2

);});

然后我们可以运行我们的测试。

$npxhardhattestCompiling1filewith0

main()

);

我们可以在Rinkeby网络上运行迁移,部署新的实现:

$npxhardhatrun--networkrinkebyscripts/prepare_upgrade.jsPreparingupgrade...BoxV2at:0xE8f000B7ef04B7BfEa0a84e696f1b792aC526700

动态 | 汤森路透合作OpenLaw 以将其文件自动化服务与智能合约相融合:加拿大媒体集团汤森路透(Thomson Reuters)正着眼于将以太坊智能合约引入主流市场。这项工作是与OpenLaw合作的一部分,后者由ConsenSys支持,主要业务为构建自动化法律契约的开源及P2P协议。10月17日,双方展示了首个合作成果,一款名为Smart Contract Express的概念验证(PoC)系统,该系统将汤森路透的文件自动化服务Contract Express与使用以太坊和Chainlink的智能合同功能相融合。(Blockkonomi)[2019/10/19]

升级合约

为了在GnosisSafe中管理升级,使用OpenZeppelin应用。

首先,我们需要代理的地址和新实现的地址。我们可以从我们运行deploy.js和prepare_upgrade.js脚本时的输出中得到这些。

在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

标签:OPENPENRETBOXOPENAIERCPENG Coinreth币有投资价值吗EBOX币

比特币最新价格热门资讯
END:雙幣投資(第63期)產品上線

親愛的用戶:第63期雙幣投資產品已於東八區時間2021年10月20日18:00上線。申購雙幣投資產品,享受更高收益.

1900/1/1 0:00:00
区块链:Footprint 9月月报 各国政策相继的出台,9月的加密市场有何变化?

撰文:Footprint分析师Bella()日期:2021年10月受各国政策的影响,5月加密市场行业迎来了本年的首次寒冬,主流加密货币币价大跌,行业的总锁仓量跌破900亿美金.

1900/1/1 0:00:00
COM:XT关于暂停EKARTINU充提的公告

尊敬的XT用户:因EKARTINU钱包维护,XT.COM现已暂停EKARTINU充提业务。给您带来的不便,请您谅解!感谢您对XT.COM的支持与信任.

1900/1/1 0:00:00
RAN:关于Orangex“1000U大礼包 iPhone 12 Pro Max迎新”第二期活动奖励发放公告

尊敬的Orangex用户:Orangex“1000U大礼包iPhone12ProMax迎新”第二期福利活动已圆满结束。活动奖励已于5月31日全部发放完毕至用户资金账户中.

1900/1/1 0:00:00
CHA:AOFEX關於【限時充值交易SHIB,瓜分10萬USDT】活動獎勵已發放的公告

尊敬的用戶:活動獎勵已發放,獲得獎勵的用戶在資產-幣幣賬戶,點擊對應的幣種即可查看獎勵詳情。再次恭喜所有獲獎用戶!活動詳情:AOFEX關於並開啟“限時充值交易SHIB,瓜分10萬USDT”活動的.

1900/1/1 0:00:00
DEX:详解 BSC 上的元宇宙项目 Dsgmetaverse:项目亮点、存在意义及风险评估

上线9天,锁仓量突破5亿美元,这是Dsgmetaverse交的答卷。同时治理代币DSG随着业务量水涨船高,社区热度持续升温,这样的成绩足以配得上“神矿”的赞誉.

1900/1/1 0:00:00