如何利用 delegatecall 进行以太坊智能合约升级_NUM:num币最新消息

本文作者:powervip

以太坊智能合约升级

在以太坊智能合约的开发过程中,对于一些复杂的合约开发,要开发出完美没有bug的智能合约,要求是相当高的。即使编写出来的智能合约能完美没有bug,也很难保证以后的需求和应用业务逻辑一成不变。所以,在开发智能合约的同时,就要考虑好以后的合约更新和升级问题。

思路

以太坊智能合约的更新和升级,其中一种思路就是:在智能合约的编写过程中,要做到数据和应用逻辑的分离。简单来说,就是把数据和应用逻辑分别放在2个独立的合约里(本文称之为数据合约和业务合约)。我们在升级合约时,保证存放数据的数据合约里的数据结构不改变,改变的只是存放应用逻辑的业务合约。这样才能保证原有的业务数据不被破坏和能够继续使用。

美国国会研究人员:立法者需考虑数字货币立法将如何影响美元:金色财经报道,美国国会研究服务局在其题为“美元作为世界主要储备货币”的报告中称,不断增长的加密货币空间的影响并没有引起任何与美元地位有关的重大担忧。报告承认,尽管“加密货币仍然是一个小而动荡的利基市场”,但中央银行数字货币(CBDC)正在兴起。报告指出,迄今为止,尚无证据表明美元已脱离主要储备货币。但是,国会不妨考虑一下包括制裁和数字货币在内的一系列政策领域的立法将如何影响美元。[2020/12/22 16:03:19]

Solidity有三种合约间的调用方式call、delegatecall和callcode。其中,delegatecall可作为智能合约升级的一个较好的途径。关于合约间的调用方式call、delegatecall和callcode,详见我另一篇文章<<图文并茂详细介绍Solidity的三种合约间的调用方式call、delegatecall和callcode>>,有兴趣的同学们可以看一下。原文链接:https://blog.csdn.net/powervip/article/details/104330170

动态 | 火币中国CEO与马来西亚总理讨论区块链将如何在马来西亚落地:据雅虎财经消息,近日,火币中国CEO袁煜明与马来西亚总理马哈蒂尔(Mahathir Mohamad)就“如何在制造业和能源行业中应用区块链”以及“区块链将如何在马来西亚落地”进行了讨论。[2019/5/29]

例子

假设我们要计算一个求和公式:numC=numAnumB我把数据numA、numB、numC作为数据存放在数据合约contractA中,把求和的业务逻辑放在数据合约contractB中。为了演示合约升级,我故意把contractB中的业务逻辑函数calcSum()中的加法运算故意写成乘法运算,以便后面进行合约升级。代码不是很复杂,代码如下:

肯尼亚成立了一个特别小组,研究如何利用人工智能和区块链等最新技术:肯尼亚成立了一个特别小组,研究如何利用人工智能和区块链等最新技术。“我们错过了互联网浪潮,赶上了移动技术……区块链是下一个浪潮,我们必须参与其中。”信息部部长约瑟夫·穆切鲁(Joseph Mucheru)表示,在其他用途中,区块链可以帮助组织政府存储的土地记录,这对那些想要购买、出售或核实有关土地信息的人来说,是一种持续性的保障。[2018/5/5]

图1升级前的合约代码

我们先部署合约A,再部署合约B。通过合约A的setNumA()函数把NumA设为1,通过合约A的setNumB()函数把NumB设为2,再复制合约A的地址0x692a70D2e424a56D2C6C27aA97D1a86395877b3A。

杨东:如何保护区块链行业和数字货币的投资者:中国人民大学教授杨东在三点钟区块链社群中谈到保护区块链行业和数字货币投资者应该:1、首先应当控制源头,从资产端抓起,制定相关标准;2、投资者进入市场应该有一定的门槛;3、进行投资者适当性管理;4、发挥一行三会投资者保护部门的作用,加强行为监管;5、完善投资者争议多元解决机制;6、可以考虑用区块链技术建立纠纷解决、保护、教育的生态,实现可追溯的可信的纠纷解决机制,改变传统的纠纷解决模式,实现“链金有法”。[2018/3/7]

然后,我们部署合约B,并把合约A的地址粘贴到函数run_sum()的参数栏中,见下图。运行函数run_sum()。这时候,我们再点击numC,会看到numC的值为2。显然,这不是我们想要的求和结果。

图2部署合约B,并把合约A的地址粘贴到函数run_sum()的参数栏中

我们把函数calcSum()的returna*b;这句注释掉,把returnab;这句的注释去掉,变成下面的代码:

图3升级后的合约代码

先删掉合约B,重新编译和部署合约B,并把合约A的地址粘贴到函数run_sum()的参数栏中重新运行run_sum()。这时候,我们再点击numC,会看到numC的值为3。合约B升级成功,由原来的乘法运算升级为加法运算。合约A原来的NumA和NumB的内容完美地保留了下来。

如果你觉得这篇文章写得还可以,请帮忙点个赞,谢谢!你的鼓励,我的动力!

我的github:https://github.com/powervip

参考资料

powervip:https://learnblockchain.cn/people/5018

以太坊:https://learnblockchain.cn/article/1201

智能合约:https://learnblockchain.cn/article/1258

Solidity:https://learnblockchain.cn/docs/solidity/

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

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

登链社区

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

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

入驻指南:

/apply_guide/

本文网址:

/news/10423871.html

免责声明:

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

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

上一篇:

每周编辑精选WeeklyEditors&#039;Picks

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

水星链

[0:15ms0-1:218ms