木星链 木星链
Ctrl+D收藏木星链
首页 > 火币APP > 正文

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

作者:

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

本文作者:powervip

以太坊智能合约升级

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

思路

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

Aave社区正对“如何分配Aave Grants DAO收到的30万枚OP”提案进行投票:5月4日消息,Aave社区正对“如何分配Aave Grants DAO(AGD)收到的30万枚OP”提案进行温度检查投票,该提案目前支持率为99.97%,并将于5月8日结束。根据该提案,Aave社区去年创建了一个提案并成功收到了30万枚OP代币,作为激励基金OP Stimpack阶段0的一部分。这些代币将用于资助项目,以帮助Aave在Optimism上的发展。该提案旨在澄清收到的OP应如何分配并获得社区支持。

该提案建议分配最多10万枚OP用于当前AGD季度的赠款以及以Optimism为中心的事件和赏金,并将剩余的20万枚OP保留在AGD多签钱包中以用于AGD的未来季度赠款或分配。如果该提案获得此次投票通过,AGD将按照上述方式进行资金分配。不需要AIP或进一步的治理行动。[2023/5/4 14:42:34]

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

人民日报整版阐释如何加快数字化发展建设数字中国:加强区块链等关键数字技术研究:金色财经报道,《人民日报》2021年10月29日 09 版整版阐释如何加快数字化发展,建设数字中国,其中提到坚持创新驱动,全面推动区块链等数字技术融入政务服务全流程。夯实技术创新基础,加强区块链等关键数字技术研究,夯实技术创新升级基础。[2021/10/29 6:18:58]

例子

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

SBF:人们知道如何计算年收益,只是有时不理会:FTX首席执行官SBF今日发推称:“嘿兄弟,我认为每个人都忘记如何计算年收益。对此,他在最新的推特中补充说明:可以明确地说,人们知道如何计算年收益,但他们只是有时候不理会。”[2020/9/18]

图1升级前的合约代码

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

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

声音 | 罗玫:金融机构非常重视如何对加密货币进行计量:据数字金融资产研究中心微信公众号消息,清华经管数字金融资产研究中心主任罗玫称如何对加密数字货币进行计量是国际国内证券监管机构、税务和会计准则制定机构都非常重视的领域,国际会计准则和美国GAAP都没有对加密数字货币的会计计量和确认制定单独准则。建立新的财务报告规范需要会计准则制定委员会的参与,也需要和正在经历变化的加密数字货币的证券规范、以及税务规范同时融合更新。[2018/11/27]

图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

标签:NUMCALALLSUMPlatinumBARColu Local Networktrustwallet安卓版下载SUMO币

火币APP热门资讯
ETH:Pantera 合伙人:理解质押协议 Lido 如何解决质押与资产利用间的二元选择难题

Lido让用户可以同时从质押中获得回报,并使用同一笔底层资产从DeFi中获得额外收益,从而在区块链上实现无穷无尽的新金融机会.

1900/1/1 0:00:00
MEKA:一文了解 MekaVerse 爆火原因:高颜值与社群力量助推 MekaVerse 登顶

MekaVerse在NFT社区爆红,由于借鉴了日本80年代著名机甲动漫《机械战士高达》元素,该NFT项目自10月8日开始铸造发售以来,在短短不到7天的时间内,成交量已经高达32955ETH.

1900/1/1 0:00:00
CAP:由A16z支持的风投公司Patron推出9000万美元游戏种子基金,将投资Web 3.0项目

据CoinDesk10月20日消息,由RiotGames两位资深人士Yeh及BrianCho创立的早期风险投资公司Patron宣布推出首个9000万美元种子基金,由100多个有限合伙人支持.

1900/1/1 0:00:00
BIT:BitMart上线LUFFY INU (LUFFY)

亲爱的BitMart用户:BitMart将于2021年10月28日上线代币LUFFYINU(LUFFY)。届时将开通LUFFY/USDT交易对.

1900/1/1 0:00:00
NFT:NFT 繁荣下的危机:是藏家还是徒?

作者|?陈丽姗?编审?|于百程?排版?|?王纪珑琰作为区块链技术上的产物,NFT是IP文化的载体。目前NFT市场的生产力和生产关系是不相适应的.

1900/1/1 0:00:00
EXT:XT 关于恢复HAM交易及充值的公告

尊敬的XT用户:XT.COM现已恢复HAM交易以及充值业务。提现开启时间将另行公告通知。暂停期间给您带来的不便,敬请谅解.

1900/1/1 0:00:00