原文链接
使用OpenZeppelin升级插件部署的智能合约可以通过升级来修改代码,同时保留原合约地址、状态和余额。这让帮助我们为项目添加新功能,或修复在生产中可能发现的任何错误。
在本指南中,我们将学习:
为什么升级很重要
使用升级插件升级我们的盒子。
了解升级在引擎盖下是如何工作的
学习如何编写可升级合约
什么是可升级的合约
以太坊中的智能合约默认情况下是不可更改的。一旦创建了就无法改变,有效地为合约参与者扮演了不可篡改的合约的角色。
然而某些场景下,我们希望能够修改它们。想想传统合约:如果参与双方都同意改变它,就可以去对齐进行改变。同样在以太坊上,我们也希望能够修改智能合约,以修复他们发现的bug,增加额外的功能,或者仅仅是改变它所执行的规则。
CoinFLEX更名为Open Exchange,Leslie Lamb担任首席执行官:金色财经报道,Coinflex新任首席执行官 Leslie Lamb 在LinkedIn上分享了Coinflex 正在更名为 Open Exchange (OPNX)的消息。塞舌尔法院周一批准了该公司的重组计划。CoinFLEX 最初的重组提案没有提及 OPNX 或品牌重塑计划。[2023/3/9 12:50:46]
以下是你需要做的事情,以修复你无法升级的合约中的错误。
部署一个新版本的合约
手动将所有的状态从旧的合约迁移到新的合约
更新所有与旧合约交互的合约,使用新合约的地址
联系你的所有用户,并说服他们开始使用新的部署
为了避免出现这种乱象,我们将合约升级直接内置到我们的插件中。这让我们可以改变合约代码,同时保留状态、余额和地址。让我们来看看如何实现。
Rhodium计划通过与SilverSun Technologies的反向合并上市:金色财经报道,比特币矿企Rhodium Enterprises已经同意与科技公司SilverSun Technologies(SSNT)合并,这将使该矿业公司进入美国公开市场。
根据合并协议的条款,SilverSun公司的股东将获得每股不低于1.5美元的现金股息,总额约为850万美元,以及新成立的容纳SilverSun公司传统业务的子公司的一股股票。
另外该交易计划在今年年底前完成,投资银行B. Riley担任Rhodium的财务顾问。(coindesk)[2022/9/30 6:02:59]
使用升级插件来升级合约
使用OpenZeppelin升级插件中的deployProxy部署一个新的合约时,该合约实例就可以实现可升级的功能。默认情况下,只有最初部署合约的地址才有权限执行升级操作。
FTX 机构投资者:币安宣布收购后,担心股权会清零:11月9日消息,据外媒报道,FTX的四名投资者透露,所持股权的命运仍然未知,他们仍在试图弄清楚将如何受到币安交易的影响。另一位投资者表示,他们全天都在接收有限合伙人的短信,这些机构投资者担心股权的价值会归零。
此前报道,今年9月,FTX正在与潜在投资者谈判,以筹集高达10亿美元的新资金,这将使该公司的估值保持在约320亿美元,与今年早些时候的融资保持一致。据两位知情人士透露,FTX已经筹集了近20亿美元的资金,红杉资本和Paradigm或为其最大的风险投资支持者。(TheInformation)[2022/11/9 12:35:46]
deployProxy将创建以下事务;
部署执行合约
部署ProxyAdmin合约
部署代理合约并运行初始化函数
Binance Card阿根廷增加了对Shiba Inu作为付款方式的支持:金色财经报道,据Watcher.Guru发推称,Binance Card阿根廷增加了对Shiba Inu作为付款方式的支持。[2022/9/16 7:01:11]
让我们看看它是如何工作的,通过部署我们的Box合约的可升级版本,使用与之前部署时相同的设置:
//contracts/Box
//Readsthelaststoredvaluefunctionretrieve()publicviewreturns(uint256){returnvalue;}}
首先需要安装升级插件。
安装HardhatUpgrades插件。
npminstall--save-dev
在创建Solidity文件后,我们现在使用upgradeProxy函数升级之前部署的实例。
印度中小微企业区块链业绩及信誉平台IOUX拟融资1000万美元:金色财经报道,印度中小微企业区块链业绩及信誉平台IOUX宣布将融资1000万美元,约合7.7亿印度卢比,以进一步提升市场影响力并帮助中小微企业用更低成本、更便捷的方式从金融机构获得资金。据该公司联合创始人Vineet K Sachdev透露,IOUX此前已成功募集到一笔50万美元的种子轮融资,目前正与法律科技和金融科技领域里的投资公司接洽,以更好地支持区块链技术。(indiatimes)[2022/6/6 4:04:54]
upgradeProxy将创建以下事务:
部署执行合约
调用ProxyAdmin来更新代理合约以应用新的实现
创建一个脚本,使用upgradeProxy将Box合约升级为使用BoxV2。把这个文件保存为scripts/upgrade_box
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意味着什么?
文章系金色财经专栏作者币圈北冥供稿,发表言论仅代表其个人观点,仅供学习交流!金色盘面不会主动提供任何交易指导,亦不会收取任何费用指导交易,请读者仔细甄别防上当.
1900/1/1 0:00:00以太坊的植物根基正在生长出一个木质的、稳定的、整体的网状网络。网状网络越密集,木质性和稳定性就越高,DeFi经济也就越可靠.
1900/1/1 0:00:00随着国内数字人民币测试的正式展开,越来越多的人开始关注央行数字货币给社会经济带来的变化。其中,央行数字货币在跨境支付、国际清结算方面的影响最引人关注.
1900/1/1 0:00:00尊敬的LBank用户:LBank将于2021年1月13日19:50(UTC8)上线BAGS,具体如下:开启交易对:BAGS/USDT开启充值时间:2021.1.1319:30(UTC8)开启交易.
1900/1/1 0:00:00BTC行情分析:1小时图来看,k线受布林带中轨和MA10均线支撑向上运行,MA5均线上穿MA10均线金叉延伸,MACD多头头能量柱放量上行,多头势能明显增强,KDJ三线有聚合向下运行迹象.
1900/1/1 0:00:001月14日,检察日报发布《从预防犯罪视角对私人数字货币实施刑法规制》。文章指出,为了维护货币的发行和流通秩序,世界上大多数国家都通过刑法来规范与货币相关的行为,同时用刑罚来惩罚涉及货币的犯罪行为.
1900/1/1 0:00:00