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

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

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

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

创建一个可升级的合约

在本地测试该合约

将合约部署到公共网络上

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

创建新的实现版本

在本地测试升级

部署新的实现

升级合约

设置环境

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

mkdirmycontract&&cdmycontractnpminit-y

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

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

在本地测试合约

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

Mini Koyé NFT在Opensea地板价最高涨至0.1 ETH,24小时涨幅超200%:11月9日消息,Mini Koyé NFT在Opensea地板价最高涨至0.1 ETH,24小时涨幅为212%,交易量达到42ETH,在opensea趋势榜最高排行第二。行情波动较大,请做好风险控制。[2022/11/9 12:37:45]

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

npminstall--save-devchai

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

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

);});

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

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

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

OpenSea Seaport交易额突破20亿美元:金色财经报道,据Dune Analytics最新数据显示,基于开源NFT协议Seaport的OpenSea总交易额已突破20亿美元,截至目前为2,008,266,305美元,其中以太坊链上交易额为1,984,588,824美元,独立用户量949,552;Polygon链上交易额为23,677,481美元,独立用户量为120,158。此外,当前基于Seaport协议的OpenSea链上交易总量已接近700万笔,其中以太坊链上交易总量为6,366,656笔,Polygon链上交易量则刚刚突破50万笔,达到503,730笔。[2022/11/6 12:23:19]

);});

然后我们可以运行测试:

$npxhardhattestDownloadingcompiler0

main()

);

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

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

我们将使用以下hardhat

main()

);

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

$npxhardhatrun--networkrinkebyscripts/transfer_ownership

Solana:Slope用户或曾在Slope导入助记词的设备或存在被盗风险:据官方消息,Solana发布8月2日Slope钱包事件更新:从UTC时间2022年8月2日22:37开始并持续约4小时,一个或多个恶意攻击者盗取了9231个钱包中共计价值约410万美元的资产。链上交易显示,受影响钱包的私钥已被泄露,并被用于签署恶意交易。

在开发人员、分析公司和安全审计员的调查中,受影响的地址似乎曾在iOS和Android上的Slope钱包应用程序(由Slope Finance创建和发布)中创建、导入或使用。这些Slope用户的私钥资料被Slope无意中传输到应用程序监控服务,但黑客获取或截获这些信息的途径仍在调查中。

此次攻击没有涉及与Solana Labs、Solana基金会或任何与Solana协议本身相关的核心代码,这不是协议级别的漏洞。

这一漏洞似乎孤立于支持Solana和以太坊地址的一个钱包提供商,但其他软件钱包(如Phantom和Solflare)上受影响的用户可能是用户重复使用在Slope中生成或存储的助记词的结果。

目前官方认为这不是与Slope以外的任何特定钱包实现直接相关的问题。由于以太坊和Solana都使用BIP39助记符,因此对使用以太坊钱包用户的任何影响也可能是由于重复使用了助记词。

无论是否使用Slope的硬件钱包没有受到影响,任何从助记词生成的从未被导入(或被Slope钱包使用)的钱包都没有受到影响。然而,用户只要将他们的助记词导入Slope应用程序,就有受攻击的风险。

Solana官方强调,Slope钱包用户或者之前曾将助记词导入Slope的设备,即使没有资产被转移,钱包也可能会被盗用。因此建议:

- 在另一个钱包应用程序中生成一个新的助记词;

- 将所有资产(代币和NFT)转移到这个新钱包;

- 放弃旧地址,因为它可能会受到攻击。

用户不应该重复使用以前在Slope移动应用中使用过的助记词衍生的钱包。[2022/8/9 12:11:42]

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

OpenSea:此前部分Pudgy Penguins被下架系技术错误,已重新上架:7月2日消息,OpenSea官方在社交媒体上澄清,此前因为技术错误导致部分Pudgy Penguins NFT被下架,但下架时间非常短暂。OpenSea表示目前已经解决了相关问题,所有受影响的项目都已重新上架。[2022/7/2 1:46:37]

在本地测试升级

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

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

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

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

);});

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

在你的test目录下创建BoxV2

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

HBTC Chain霍比特公链及Opendex均已通过PeckShield派盾完成代码审计:据霍比特HBTC 12月29日官方消息,基于HBTC Chain霍比特公链Opendex已于本周通过PeckShield(派盾)的代码审计。据悉,HBTC Chain霍比特公链的公链审计报告也已在12月中旬完成。霍比特公链及Opendex审计报告详情见底部原文链接。

HBTC Chain是目前市场上支持最全面以及使用最便捷的去中心化跨链解决方案,定位为“异构跨链DeFi公链”。支持OpenDex协议及AMM+Orderbook模式跨链Swap;跨链资产桥支持完整的资产安全去中心化跨链流通兑换,支持任意公链自由流通兑换。现HBTC Chain开启主网节点投票阶段,HBC持有者均可公正公开公平参与去中心化投票,共建HBTC Chain生态。详情见原文链接。[2020/12/29 16:00:01]

);});

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

$npxhardhattestCompiling1filewith0

main()

);

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

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

升级合约

为了在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

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:15ms0-3:993ms