本文作者: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
美国议员要求孙宇晨解释如何防止极端内容在DLive平台上播出:2月10日消息,Reps. Raja Krishnamoorthi和Jackie Speier两位美国议员写信要求波场创始人孙宇晨和DLive首席执行官Charles Wayn解释,继上月华盛顿特区企图叛乱后,他们计划如何防止极端内容在BitTorrent旗下流媒体平台DLive上播出。这封信与上个月国会的叛乱有关。几名极右极端分子在美国国会大厦被攻破时通过DLive进行直播,其中一些人后来被捕。(CoinDesk)[2021/2/10 19:23:04]
例子
假设我们要计算一个求和公式:numC=numAnumB我把数据numA、numB、numC作为数据存放在数据合约contractA中,把求和的业务逻辑放在数据合约contractB中。为了演示合约升级,我故意把contractB中的业务逻辑函数calcSum()中的加法运算故意写成乘法运算,以便后面进行合约升级。代码不是很复杂,代码如下:
币情观察室 |币圈一哥:牛市真的来了吗?下一步如何布局翻倍币?:5月23日19:17,金色独家播主 币圈一哥 做客金色财经《币情观察室》直播间,将分享《牛市真的来了吗?下一步如何布局翻倍币?》,敬请关注,扫描下图二维码即可观看直播。[2020/5/23]
图1升级前的合约代码
我们先部署合约A,再部署合约B。通过合约A的setNumA()函数把NumA设为1,通过合约A的setNumB()函数把NumB设为2,再复制合约A的地址0x692a70D2e424a56D2C6C27aA97D1a86395877b3A。
然后,我们部署合约B,并把合约A的地址粘贴到函数run_sum()的参数栏中,见下图。运行函数run_sum()。这时候,我们再点击numC,会看到numC的值为2。显然,这不是我们想要的求和结果。
新华网分析:区块链如何带来个人数据保护“革命”:新华网今晚发表文章《区块链如何带来个人数据保护“革命”》,文章表示大数据时代,个人的数据被认为是黄金般珍贵。个人数据泄漏令人担忧,但绝大部分人不可能因为害怕数据被收集而切断与互联网的联系,而现阶段有责任保管个人信息的企业、学校、酒店、社交网站等往往担责不力。专家们认为,区块链技术作为一种带有加密、信任、点对点、难篡改等特征的“中间件”,有望解决这个难题。
区块链技术的出现令个人数据掌控权从互联网公司转移到用户自己手中,使人人掌控自己的个人数据成为可能。通过它,用户个人数据可以与个人数字身份证相关联,用户可以选择数字身份证是匿名、化名或公开,还可以随时随地从任何设备访问区块链应用平台,控制他们的互联网个人数据。[2018/4/18]
图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'Picks
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。