宇宙链 宇宙链
Ctrl+D收藏宇宙链

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

作者:

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

本文作者:powervip

以太坊智能合约升级

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

思路

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

直播|Andrey Belyakov :如何制定DeFi 规则:金色财经 · 直播主办的金点Trend《以太坊之外的DeFi,香吗? 》15:00准时开播!本场嘉宾Opium Protocol 的创始人分享Andrey Belyakov “如何制定DeFi 规则”,请扫码移步收听![2020/9/1]

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

声音 | 王小云:区块链技术创造性地解决了如何在无许可环境下达成共识的问题:12月7日,由中国科学院学部主办的“区块链技术与应用”科学与技术前沿论坛在深圳举行。中国科学院院士、国际密码协会会士王小云在题为“Hash函数与区块链技术”的演讲中表示,密码是保障网络与信息安全的核心技术和基础支撑,加密算法、数字签名算法和Hash函数是密码学三类基础算法,其中Hash函数是区块链的起源性技术。她指出,区块链技术的出现,创造性地解决了如何在无许可环境下达成共识的问题。区块链共识协议的一致性,确保了所有用户记录的区块链数据相同;链增长速度,确保了区块链区块数量增长速度的稳定;链质量,确保链区块链中敌手生成的区块数量不超过可容忍比例。[2019/12/7]

例子

声音 | 北京工商大学颜苏:区块链行业如何与公检法司形成有效的联动机制,是值得研究的:据新华网消息,本月在上海法学会会议上,北京工商大学法学院副教授颜苏表示,区块链行业从业者应用自身掌握的区块链这一新兴技术,助力公检法司进行区块链领域的反,在这个方向上,行业如何能与公检法司形成有效的联动机制,是值得关注的研究主题。[2019/7/28]

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

动态 | Block.one 总裁发文阐述区块链如何解决银行的 KYC 和 AML 问题:据 IMEOS 报道,Block.one 总裁 Rob Jesudason 十分钟前发文《How Blockchain Offers an Answer to Banks’ KYC and AML Issues 》阐述区块链如何解决银行的 KYC 和 AML 问题。他认为区块链不是官僚或新闻中想象的监管雷区; 相反,它可以成为监管机构的资产。

文中提及在过去十年中,许多世界领先的银行都因反问题而被罚款,罚款总数达260亿美元之多。而在过去12个月中,监管机构如何考虑如何鼓励使用区块链技术方面取得了进展。区块链技术可以减轻数据模糊性并减少欺诈的可能性。如果所有银行都在区块链上,那么KYC和AML数据可以以安全,透明和无缝的方式在金融机构之间共享。[2018/10/16]

图1升级前的合约代码

我们先部署合约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

标签:区块链NUMCALALL区块链运用的技术中不包括哪一项a共识算法NUME价格ethicalvaluesminifootball币合约地址

欧易交易所app官网下载热门资讯
RBN(Ribbon Finance)

項目簡介:RibbonFinance是一個新的協議,幫助用戶獲得DeFi的加密貨幣結構性產品。它結合了期權、期貨和固定收益,以改善投資組合的風險收益狀況.

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

親愛的ZT用戶: ZT創新板即將上線RICE,並開啟RICE/USDT交易對。具體上線時間如下:充值:已開啟;交易:2021年10月19日17:00; RICE 項目簡介:DAOSquare致力於成為Web3.0時代的孵化器.

1900/1/1 0:00:00
NFT NEWS|1021期

重磅Drop信息港 项目名称:UnitedAliensDrop北京时间:2021/10/24?20:00 价格:2?SOL 推特ID&粉丝数:@UnitedAliens21&10KDiscord粉丝数:8.

1900/1/1 0:00:00
比特币挖矿公司Stronghold IPO融资1.27亿美元

10月20日消息,比特币矿业公司StrongholdDigital宣布本次IPO将公开销售总计6,687,305股A类普通股,每股定价为19美元.

1900/1/1 0:00:00
AOFEX於10月19日上線ARPA、ELON

尊敬的用戶:AOFEX將於2021年10月19日上線ARPA、ELON,具體時間安排如下:充提業務均已開啟ARPA交易時間:10月19日17:00ELON交易時間:10月19日18:00提示:以下内容来源于公告发布时的网络现有资料.

1900/1/1 0:00:00
波场链 Tronmeebits 项目即将上线欧易 NFT 市场

像素肖像游戏CryptoPunks是网络上最受欢迎的NFT项目之一,仅次于区块链游戏AxieInfinity、NBA球员卡收藏品NBATopShot,其创作团队LarvaLabs已净赚了超6.5亿美元.

1900/1/1 0:00:00