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

ouyi交易所
bitget

欧易OKX交易所

欧易OKX交易所,是世界领先的数字资产交易所,主要面向全球用户提供比特币、莱特币、以太币等数字资产的现货和衍生品交易服务。

点击注册 进入官网

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

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

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

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

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

1) 代理合约(proxy contract):负责对外提供调用,调用内部的逻辑处理合约。2) 逻辑合约(logic contract):负责完成数据处理的工作。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。

bitget

欧易OKX交易所

欧易OKX交易所,是世界领先的数字资产交易所,主要面向全球用户提供比特币、莱特币、以太币等数字资产的现货和衍生品交易服务。

点击注册 进入官网

ouyi交易所

ouyi交易所V

ouyi交易所为用户提供ouyi最新版下载,ouyi官网app下载,欧亿ok交易所最新注册地址等相关业务,致力于为全球用户提供更安全、优质的数字资产交易、管理及金融服务。

10474 文章数
0 评论数
101205 浏览数

最近发表

热门文章

标签列表

目录[+]