木星链 木星链
Ctrl+D收藏木星链
首页 > Bitcoin > 正文

BOX:【翻译】升级智能合约 (Hardhat)

作者:

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

原文链接

使用OpenZeppelin升级插件部署的智能合约可以通过升级来修改代码,同时保留原合约地址、状态和余额。这让帮助我们为项目添加新功能,或修复在生产中可能发现的任何错误。

在本指南中,我们将学习:

为什么升级很重要

使用升级插件升级我们的盒子。

了解升级在引擎盖下是如何工作的

学习如何编写可升级合约

什么是可升级的合约

以太坊中的智能合约默认情况下是不可更改的。一旦创建了就无法改变,有效地为合约参与者扮演了不可篡改的合约的角色。

然而某些场景下,我们希望能够修改它们。想想传统合约:如果参与双方都同意改变它,就可以去对齐进行改变。同样在以太坊上,我们也希望能够修改智能合约,以修复他们发现的bug,增加额外的功能,或者仅仅是改变它所执行的规则。

俄罗斯将在莫斯科地铁和其他10个城市测试数字卢布:金色财经报道,俄罗斯央行副行长Olga Skorobogatova宣布,俄罗斯首都莫斯科和其他10个城市将举办数字卢布试点测试。十几家俄罗斯银行将参与试验,并计划于8月中旬开始进行实际交易和用户测试。莫斯科负责交通的副市长指出,首都地铁一直是创新的试验场,他补充说,地方当局计划在莫斯科地铁推出数字卢布门票销售。[2023/8/13 16:22:50]

以下是你需要做的事情,以修复你无法升级的合约中的错误。

部署一个新版本的合约

手动将所有的状态从旧的合约迁移到新的合约

更新所有与旧合约交互的合约,使用新合约的地址

联系你的所有用户,并说服他们开始使用新的部署

为了避免出现这种乱象,我们将合约升级直接内置到我们的插件中。这让我们可以改变合约代码,同时保留状态、余额和地址。让我们来看看如何实现。

ApeCoin DAO开启特别委员会成员和治理工作组管理员提名投票,6月22日结束:6月16日消息,据Snapshot页面显示,ApeCoinDAO社区已开启Ape基金会特别委员会会成员提名和治理工作组管理员提名的投票,本轮投票结束时间为6月22日。社区投票的前5名提名人(如果少于5人,则是所有提名人)将于6月22日进入下一轮投票,该投票于28日结束,被选举的特别委员会成员与治理工作组管理员将于7月1日开始任期。[2023/6/16 21:42:16]

使用升级插件来升级合约

使用OpenZeppelin升级插件中的deployProxy部署一个新的合约时,该合约实例就可以实现可升级的功能。默认情况下,只有最初部署合约的地址才有权限执行升级操作。

deployProxy将创建以下事务;

部署执行合约

部署ProxyAdmin合约

腾冲法院审结腾冲首例比特币“挖矿”合同纠纷案:3月28日消息,近日,腾冲法院审结了腾冲首例比特币“挖矿”合同纠纷案,法院判决认定合同无效,驳回了原告要求支付巨额投资款项的诉讼请求。[2023/3/28 13:30:24]

部署代理合约并运行初始化函数

让我们看看它是如何工作的,通过部署我们的Box合约的可升级版本,使用与之前部署时相同的设置:

//contracts/Box

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

首先需要安装升级插件。

安装HardhatUpgrades插件。

npminstall--save-dev

GoldenTree赎回质押的590万枚SUSHI,并将251万枚SUSHI转入币安:金色财经报道,据推特加密KOL余烬监测,半小时前,资管公司GoldenTree赎回了质押的590万枚SUSHI,并将251万枚SUSHI转入了币安。

GoldenTree的SUSHI是在去年9-10月买入:当时他们在SUSHI论坛表示看好SUSHI并购买了590万枚SUSHI,买入成本约1.2美元。[2023/3/23 13:21:26]

在创建Solidity文件后,我们现在使用upgradeProxy函数升级之前部署的实例。

upgradeProxy将创建以下事务:

部署执行合约

调用ProxyAdmin来更新代理合约以应用新的实现

创建一个脚本,使用upgradeProxy将Box合约升级为使用BoxV2。把这个文件保存为scripts/upgrade_box

LooksRare收购NFT分析工具Flava Tools:11月4日消息,NFT交易市场LooksRare宣布收购NFT分析工具Flava Tools。

据悉,Flava Tools是OpenSea的Chrome扩展程序,LooksRare将通过收购为交易者提供收藏和投资组合工具。[2022/11/4 12:16:11]

main();

然后就可以部署我们的可升级合约。

使用run命令,可以在development网络中部署升级Box合约。

$npxhardhatrun--networklocalhostscripts/upgrade_box

//Storesanewvalueinthecontractfunctionstore(uint256newValue)public{require(msg

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

部署合约时,我们需要指定initializer函数名,并提供一个管理员地址。

//scripts/deploy_upgradeable_adminbox

main();

出于实践目的,initializer作为构造函数。然而,请记住,由于它是一个常规函数,你将需要手动调用所有基础合约的初initializer。

要了解更多关于这一点以及编写可升级合约时的其他注意事项,请查看我们的WritingUpgradeableContracts指南。

升级

由于技术上的限制,当你将一个合约升级到新版本时,你不能改变该合约的存储布局。

这意味着,如果你已经在合约中声明了一个状态变量,你就不能删除它,不能改变它的类型,也不能在它之前声明其他变量。在我们的Box例子中,这意味着我们只能在value之后添加新的状态变量。

//contracts/Box.solcontractBox{uint256privatevalue;//Wecansafelyaddanewvariableaftertheoneswehaddeclaredaddressprivateowner;//...}

幸运的是,这种限制只影响状态变量。你可以随心所欲地改变合约的功能和事件。

注意如果你不小心弄乱了合约的存储布局,当尝试升级时,升级插件提出警告。

前往ModifyingYourContracts指南了解更多限制。

测试

为了测试可升级的合约,我们应该为实现合约创建单元测试,同时创建更高级别的测试,来测试与代理的交互。可以在测试中使用deployProxy,就像我们部署时一样。

当要升级时,我们应该为新的实现合约创建单元测试,同时创建更高级别的测试,以便在升级后使用upgradeProxy通过代理测试交互,检查在升级过程中是否保持状态一致。

接下来的步骤

现在你已经知道如何升级智能合约,并且可以迭代开发你的项目,是时候把你的项目带到测试网和正式网中去了。你可以放心,如果出现bug,你有工具来修改你的合约并修复它。

_请戳↓“阅读原文”↓获取文中链接_

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

本文来源于非小号媒体平台:

登链社区

现已在非小号资讯平台发布105篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/9579147.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

币安为何推出第三条链?这对BNB意味着什么?

标签:BOXPROXADEProxyDBOXProxyMetacadeProxyNode

Bitcoin热门资讯
比特币:谈喻凯:报复性回调寻良机 比特币以太坊操作建议及解套

正所谓“期望越大,失望也越大”,当你对市场抱有希望的时候,市场难免也会给你失望的感觉,就像昨日的数字货币市场,主流币集体暴跌,你总是期盼着上涨,但是它还是越跌越凶,开弓之箭,没有回头之路.

1900/1/1 0:00:00
USD:关于ETF部分币种份额合并名单调整的公告

尊敬的客户:由于当前部分ETF产品的价格过低,为提高其价格变化的灵敏度,优化交易体验,链上云将在2021年1月12日00:00-06:00期间.

1900/1/1 0:00:00
比特币:比特币矿工的喜与忧:矿机价格与币价齐飞 担心暴跌再来

2017年冬天,内蒙古的夜很冷,室外温度低于零下20摄氏度。在一座荒凉的“矿场”里,由于没有什么娱乐活动,来自浙江杭州的比特币矿工冯胜在“上下铺式,能睡七八个人”的大房间里早早睡去.

1900/1/1 0:00:00
HOT:Hotbit 定于2021年1月15日上线 LIBFX(libermx)

尊敬的用户:Hotbit即将在开启LIBFX数字资产服务。具体安排如下:充值时间:2021年01月15日14:00交易时间:2021年01月15日16:00(香港时间)提现时间:2021年01月.

1900/1/1 0:00:00
区块链:什么是网络钓鱼?

网络钓鱼是一种网络攻击,是指具有恶意动机的攻击者伪装成信誉良好的企业以人们并收集其信用卡详细信息、用户名或密码等敏感信息的一系列行为.

1900/1/1 0:00:00
HOMI:关于FAR(Farmland Protocol) 交易送积分 轮盘转不停 奖励发放公告

HomiEx已完成"FAR(FarmlandProtocol)交易送积分轮盘转不停"所有奖励已全部分发,请在“钱包-资产记录”查看分发结果.

1900/1/1 0:00:00