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

投糖网 阅读:1765 2021-06-25 10:03:09 评论: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。

本文 投糖网 原创,转载保留链接!网址:https://www.toutang.net/shipinjiaocheng/749.html

声明

1.投糖网遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
排行榜
最近发表