链资讯 链资讯
Ctrl+D收藏链资讯

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

作者:

时间:

本文作者:powervip

以太坊智能合约升级

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

思路

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

神鱼:准备写耕田日记介绍如何5天挖回500万U:F2Pool联合创始人神鱼在微博表示,准备写个耕田日记,如何5天挖回500万U。 ????神鱼补充说,没仔细算,本金大概500万U。[2020/9/2]

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

直播|“后浪”仙女58Coin-小贝如何乘风破浪:金色财经 · 直播主办的《 币圈 “后浪” 仙女直播周》第7期20:00 58COIN|市场总监小贝将在直播间聊聊“币圈‘后浪’仙女如何乘风破浪”,感兴趣的朋友扫码移步收听![2020/7/1]

例子

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

动态 | 美国国防部将向国会提交“区块链技术如何增强美军工作”相关报告:今年晚些时候,美国国防部(DoD)将向国会提交报告,介绍区块链技术如何增强美军工作。价值技术协会(VTA)主席Jason Brett上周在拉斯维加斯举行的消费电子展(CES)上接采访时说,VTA将牵头要求国防部组织这样一个听证会。(Coindesk)[2020/1/16]

图1升级前的合约代码

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

部胡光俊:正考虑如何将区块链技术应用于领域:据经济参考报消息,近日部第一研究所信息安全部副主任胡光俊接受采访时表示,未来将把物理世界、跟人的关联关系纳入整个区块链生态体系里面来。他透露,目前该部门正考虑如何将区块链技术应用于领域。[2018/5/14]

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

标签:NFTCALALLSUMUltra NFTCalypsoCallisto NetworkCrypto Summoner

中币交易所热门资讯
BNB:BKEX Global 关于上线 POLX(Polylastic)并开放充值功能的公告_KEX

尊敬的用户:?????????????BKEXGlobal即将上线POLX,详情如下:上线交易对:POLX/USDT币种类型:BEP20?充值功能开放时间:已开放交易功能开放时间:2021年10.

HTT:ZT創新板即將上線WND_https://etherscan.io

親愛的ZT用戶: ZT創新板即將上線WND,並開啟WND/USDT交易對。具體上線時間如下:充值:已開啟;交易:2021年10月22日17:00; WND 項目簡介:WonderHero是區塊鏈.

OBE:Photoshop 打响反抗 NFT 艺术剽窃的第一_Dobermann Token

出品|白泽研究院 随着今年2月NFT的浪潮涌现,人们购买数字艺术时,盗版和盗窃的情况时有发生。3月,NFT“淘金热”继续飙升,艺术家德里克·劳夫曼(DerekLaufman)收到了来自他的粉丝的.

ERO:一文了解关于 EIP-4337 在账户抽象中的角色_AHOUSE价格

在这篇文章中我们将得到一个关于EIP-4337在帐户抽象中的角色的完整概念。 介绍 该提案包括一些更改,以避免对共识层协议的更改,而不是依赖于更高层的基础设施.

SERO:马斯克出售NFT图片,BTC险守6万关口_区块链域名的用途

10.25早间新闻 10月24日消息,马斯克此前在推特发布一张图片,其中显示BTC价格达到6.9万美元,ETH价格达到4200美元.

ROB:Binance Dapp 上线,如何用去中心化钱包玩转 Binance_ROBODOGE币

币安发布的官方公告《关于下架C2CCNY交易区及地区用户清查的通知》,表示币安C2C将于2021年12月31日24:00(东八区时间)下架CNY交易区。同时,币安将对平台用户进行清查.