区块链是不可篡改的,那智能合约可以升级吗?

投糖网 阅读:63 1个月前 评论:0

我们对区块链的第一印象是不可篡改的,而合约一旦部署了确实无法修改。这与传统的开发区别很大,万一上线后还要修改功能怎么办?

在这里,可以为大家提供一个合约升级的设计思路,这里面有一个技术基础是要求合约之间互相能够调用。

我们知道,一个合约部署后地址是固定 的,如果再部署一次,地址就变了。所谓的合 约升级是为了让用户无感知,也就是对外公布 的合约地址是不能变的。

因此,合约升级其实是一个“伪升级”,但某些时候这些“伪升级”也有必要。将合约拆分代理合约逻辑合约存储合约 三部分。

区块链是不可篡改的,那智能合约可以升级吗?


我们再来介绍一下这个图形中各个合约所起的作用。

  1. 1) 代理合约(proxy contraCT):负责对外提供调用,调用内部的逻辑处理合约。

  2. 2) 逻辑合约(logic contract):负责完成数据处理的工作。

  3. 3) 存储合约(storage contract):负责存储实际要存储的数据。

在这里,为大家提供一个简易版合约升级的例子,用一个代理合约和一个数据合约来完成简单的合约升级。数据合约 dATa_demo 如下:

区块链是不可篡改的,那智能合约可以升级吗?


再实现一个 call_demo 合约来调用它。

区块链是不可篡改的,那智能合约可以升级吗?


因为两个合约都需要用到 Bank 结构体,所以部署在一个文件中(示例使用 15-data.sol)比较 方便。下面说说调用的事情,模拟场景是假设认为 datADemo 部署一次相当于部署了一个银行, calldemo 通过更换银行地址来实现在不同的银行之间切换。

部署及测试步骤如下。 步骤 01:选择 datademo 合约。因为一个代码文件中存在两个合约,所以需要在【合约列表】下拉框中选择【datademo -browser/15-data.sol】合约。

区块链是不可篡改的,那智能合约可以升级吗?


步骤 02:部署一个“小叶银行”,在【name】输入框中输入“小叶银行”,然后在 【amount】输入框中输入“10000”,表示货币发行量 10000。

区块链是不可篡改的,那智能合约可以升级吗?


合约部署后,可以单击下方箭头所示按钮获得合约地址,笔者的合约地址为
:0x08970FEd061E7747C-D9a38d680A601510CB659FB。


步骤 03:部署 calldemo 合约。 将前一步复制的地址,填入【Deploy】输入框,部署 calldemo 合约,然后单击【getData】按钮可以获得“小叶银行”的数据。

区块链是不可篡改的,那智能合约可以升级吗?


步骤 04:重复上述步骤,再部署一个“叶开银行”,货币发行量 90000。

区块链是不可篡改的,那智能合约可以升级吗?


同理,获得另一个 data_demo 合约的地址为
:0xdC04977a2078C8FFDf086D618d1f961B6C546222

步骤 05:切换银行地址后,再查看数据。将新银行的地址粘贴到【upgrade】输入框内,单击【upgrade】按钮,之后再单击【getData】按钮就可以看到银行信息切换了。

区块链是不可篡改的,那智能合约可以升级吗?


通过这个例子,我们可以看到 upgrade 针对不同的数据合约会做切换,对用户来说调用的入口 始终是 call_demo。

温馨提示:天上真的会掉馅饼!天道酬勤,都是机会!不错过每一个糖果!真假难以辨认,建议零撸! 

投糖网首码发布群(QQ搜索群:565064567)请不要投资,零撸即可!点击加QQ群

版权所属:投糖网-空投糖果-专注区块链行业首码空投

文章作者:投糖网

版权声明:原创文章,转载时必须以链接形式注明原始出处及本声明。

网址:https://www.toutang.net/shipinjiaocheng/749.html

声明

免责声明&重要提醒:投糖网内容均转自互联网,请明辨各个项目风险,一切风险自担,涉及资金交易及个人隐私务必小心并远离,千万不要投资,请谨慎切勿上当受骗!

发表评论
搜索
排行榜
测试模块
关注我们

投糖网首码发布群