火星链 火星链
Ctrl+D收藏火星链

NUM:如何利用 delegatecall 进行以太坊智能合约升级

作者:

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

本文作者:powervip

以太坊智能合约升级

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

思路

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

陈茂波:如何将虚拟资产服务提供者纳入合适规管是特区政府的重点所在:金色财经报道,香港财政司司长陈茂波接受《大公报》最新访问时提到虚拟资产发展,特区政府去年发表有关虚拟资产在港发展的政策宣言,阐明政府为在香港发展具活力的虚拟资产行业和生态系统而订定的政策立场和方针,近期亦积极推动Web3生态圈发展。陈茂波表示,如何将虚拟资产服务提供者纳入合适规管,保护投资者利益,同时又保持金融稳定和安全,是特区政府的重点所在。[2023/6/23 21:56:03]

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

Poly Network攻击者:想为Poly Network提供有关如何保护其网络安全的提示:金色财经报道,Poly Network攻击者再次发布了自问自答。攻击者称:“归还代币一直是计划中的。我对金钱不是很感兴趣。我知道人们受到攻击时会很痛苦,但他们不应该从这些攻击中学到一些东西吗?我在午夜之前宣布了退还的决定,所以相信我的人应该好好休息。我想为Poly Network提供有关如何保护他们网络安全的提示,以便他们在未来有资格管理这一10亿美金级别的项目。 Poly Network是一个设计良好的系统,它将处理更多资产。”对此网友表示,“在午夜之前”似乎暴露了该攻击者所处的地理区域。[2021/8/12 1:49:25]

例子

以太坊核心开发者:没人询问开发人员如何看待提高Gas上限问题:7月20日,以太坊核心开发者Péter Szilágyi发推称,很惊奇的是,那些“提高Gas上限”的文章中,没有一个文章询问任何开发人员如何看待这个问题。[2020/7/20]

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

图1升级前的合约代码

比特币如何被盗:5种常见威胁:1、小偷在存储服务中获取您的帐户的密码;2你公开你的私钥;3、黑客冒充比特币收件人;4、你依靠一个不安全的第三方;5、出口局。[2017/12/9]

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

然后,我们部署合约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

标签:NUMCALALLSUMNUMEMCALFParallel Universe MetaMoney Versum

中币交易所热门资讯
COM:XT关于即将上线MUSK的公告

尊敬的XT用户:XT即将上线MUSK(MUSKTOKEN),并在主板区开放MUSK/USDT交易对。具体开通时间,请关注后续公告.

1900/1/1 0:00:00
ZSC:ZT創新板即將上線OHM

親愛的ZT用戶:ZT創新板即將上線OHM,並開啟OHM/USDT交易對。具體上線時間如下:充值:已開啟;交易:2021年10月15日17:00;OHM項目簡介:Olympus是一種基於OHM代幣.

1900/1/1 0:00:00
BANK:一文了解 DAO 实现去中心化资本流动的重要性

原文:BanklessBankless前言:我们已经给出了案例来证明DAO是工作方式的未来。我们这一点非常坚信。但对于DAO来说,现在的发展还为时过早。相关的工具和基础设施还稀少.

1900/1/1 0:00:00
VEMP:BKEX Global 关于“VEMP交易特享空投活动”活动结果的公告

尊敬的用户:BKEXGlobal举办的"VEMP交易特享空投"活动已于2021年9月21日16:00(UTC8)圆满结束,感谢用户的大力支持!活动奖励将于5个工作日内发放,请留意账户余额变动.

1900/1/1 0:00:00
COM:【奖励发放】ETH 限时折扣第二期活动结束及奖励发放的公告

ETH限时折扣第二期活动结束及奖励发放的公告作者AAXManager一周前已更新尊敬的AAX用户:AAX于2021年9月8日08:00-9月20日07:59(UTC8)举办的“ETH限时折扣第二.

1900/1/1 0:00:00
ETF:外媒:近期或有5只比特币期货ETF准备推出,本周可能会推出2只

金色财经报道,美国第一个比特币交易所交易基金(ETF)预计将在当地时间本周二推出,近期将有大约5只比特币期货ETF准备推出,本周可能会推出2只.

1900/1/1 0:00:00