数字资产:【翻译】升级智能合约 (Hardhat)_Efi币行情

原文链接

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

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

为什么升级很重要

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

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

学习如何编写可升级合约

什么是可升级的合约

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

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

谷燕西:波卡很可能是下个规模达万亿美元的资产:2月22日,区块链和加密数字资产研究者谷燕西发文《波卡会是下一个万亿美元资产吗?》指出,波卡很有可能是下一个首先达到万亿美元资产规模的加密数字资产。波卡有更广泛的社区支持,它的生态的发展迄今为止也遥遥领先。文章称,波卡目前的主要发展地区是在欧洲和亚洲,这就能同以美国地区为主的公链项目形成差异化的竞争,有利于波卡迅速发展起来。波卡在市场影响力方面也一直是非常正面积极。从它的币值的最近走势来看,它显然也获得了投机者们的认可。所以总的来看,波卡很有可能是下一个首先达到万亿美元资产规模的加密数字资产。但是,波卡要实现这个目标,它的道路只会比比特币的道路更加曲折,而且很有可能需要不止12年的时间。[2021/2/22 17:38:25]

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

部署一个新版本的合约

谷燕西:区块链技术使得数字资产开始进行全球流动:9月9日,区块链和加密数字资产研究者谷燕西发表专栏文章《数字资产的全球流动已经开始》称,区块链技术的出现让我们可以把各种类型的资产通证化,在二级市场中进行交易流通。基于区块链技术的金融服务可以在全球范围内获得。在其之上可以采用数字货币进行直接的数字资产交易。它支持点对点之间的直接交易,也支持中心化的撮合交易。由于这些基本特点,目前的更多的资产种类可以通过通证化的方式在全球范围内交易流通。资产的跨境交易流通机制远优于现有的机制。而且这样的流通方式现在全球范围内已经开始。[2020/9/9]

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

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

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

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

声音 | 谷燕西:Libra经历大改变之后可能首先推出基于美元的稳定币:今日CBX研究院创始人和院长谷燕西在社群中表示,对Libra的分析应该特别注意以下三点。第一,Libra的本质上是区块链技术以及其上的加密数字资产。只不过Libra把这些技术的应用抬高到了一个前所未有的高度。第二,Libra实际上在变化的过程中。这个项目从开始的出现到消息正式公布,已经发生了很大的变化。未来依然会发生很大的变化。第三,美国社会是个商业化驱动的社会。它不会完全禁止这样的一个项目的推出,Libra在进行很大的改变之后,依然会推出。大概率事件Libra会专注于底层的区块链,一定会提供实施稳定币的技术标准,会首先推出基于美元的相应的稳定币,然后更多种类的稳定币会逐步推出。[2019/11/29]

使用升级插件来升级合约

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

声音 | 谷燕西:比特币在过去这一段时间的增长主要得益于各种ICO产生的数字资产:CBX研究院创始人谷燕西表示,自2017年3月以来,比特币重新占据加密数字资产总量70%。对此的一些相关思考。

1, 比特币在过去这一段时间的增长主要得益于各种ICO产生的数字资产。

2, 在可预计的未来,不可能有更多新类型的数字资产进入市场。比特币不可能因为同样的原因产生增长。

3, 在可预见的未来,比特币的价格主要是市场投机所决定。在CME和Bakkt交易的机构投资者将会是决定比特币价格的主要力量。

4, 投机者只关心导致价格变动的各种因素,不管其底层是大豆还是黄金。鉴于比特币的总量有限,而且产出越来越少,其交易价格变化应该更加类似于黄金。[2019/9/6]

deployProxy将创建以下事务;

部署执行合约

部署ProxyAdmin合约

声音 | 孟岩:很多实际的应用项目都可以通过多通证方式解决:8月22日下午,币改试验区发起人、CSDN副总裁孟岩在题为“通证经济系统设计v2.0”的演讲中分享了他对通证经济的几点思考,其中重点讲到多通证结构。通证结构即一个基础之上允许所有个体发通证。这些通证能在市场上自由经营,需要有一些内部的交易所,允许所有的通证在交易所里能够实时自由的交换,通过一个结构模型进行递归和构造,构造出非常复杂的宏大系统。将来,很多实际的应用项目都可以通过多通证方式解决。[2018/8/23]

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

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

//contracts/Box

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

首先需要安装升级插件。

安装HardhatUpgrades插件。

npminstall--save-dev

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

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意味着什么?

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

大币网

[0:0ms0-4:10ms