区块链是不可篡改的,那智能合约可以升级吗?
我们对区块链的第一印象是不可篡改的,而合约一旦部署了确实无法修改。这与传统的开发区别很大,万一上线后还要修改功能怎么办?
在这里,可以为大家提供一个合约升级的设计思路,这里面有一个技术基础是要求合约之间互相能够调用。
我们知道,一个合约部署后地址是固定 的,如果再部署一次,地址就变了。所谓的合 约升级是为了让用户无感知,也就是对外公布 的合约地址是不能变的。
因此,合约升级其实是一个“伪升级”,但某些时候这些“伪升级”也有必要。将合约拆分为代理合约、逻辑合约、存储合约 三部分。
我们再来介绍一下这个图形中各个合约所起的作用。
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。
你可能感兴趣的文章
-
如何通过StepN的以太坊合约地址查看合约源码?
-
如何通过StepN的以太坊合约地址查看合约源码?
如果你知道StepN在以太坊上的合约地址,你可以通过以下步骤来查看该合约的源代码:1. 访问Etherscan:首先,打开[Etherscan.io](http...
2024-10-15
区块链是不可篡改的,那智能合约可以升级吗?
-
区块链是不可篡改的,那智能合约可以升级吗?
我们对区块链的第一印象是不可篡改的,而合约一旦部署了确实无法修改。这与传统的开发区别很大,万一上线后还要修改功能怎么办?在这里,可以为大家提供一个合约升级的设计...
2024-10-09
让矿工和持币者实现合作的DeFi QuarkChain 质押挖矿10 版上线
-
让矿工和持币者实现合作的DeFi QuarkChain 质押挖矿10 版上线
今天向大家介绍我们的QuarkChain 质押挖矿1.0 ,这个产品可以让矿工更加容易找到用于质押的主网QKC,而持币者在持有的同时也可以获得收益。QuarkC...
2024-08-22
MINT币合约地址多少?MINT币属于什么链?
-
MINT币合约地址多少?MINT币属于什么链?
本文主要介绍了MINT币的合约地址和所属链。MINT币是Mint Club的英文全称,它是一个基于智能代币构建的平台,无需编码,并提供即时流动性。MINT币是该...
2024-02-16
shib合约怎么玩?shib合约是什么意思?
-
shib合约怎么玩?shib合约是什么意思?
这篇文章主要介绍了Shib合约的玩法和意义。Shib合约是一个去中心化的自发社区建设实验,投资Shib就是买涨买跌。尽管Shib非常热门,但价格波动很大,投资者...
2024-02-13
OKFLY合约地址是什么?OKFLY合约地址有什么用?
-
OKFLY合约地址是什么?OKFLY合约地址有什么用?
本文主要介绍了OKFLY合约地址的相关信息和用途。OKFLY合约地址是0x02f093513b7872cdfc518e51ed67f88f0e469592。在以...
2024-02-13
TPT币合约地址多少?
-
TPT币合约地址多少?
本文主要介绍了TPT币的合约地址是多少,希望对需要的朋友有所帮助。TPT币是TokenPocket生态中代表TP用户以及开发者权益的应用型通证,是TokenPo...
2024-02-13
XCH币合约地址多少?奇亚币合约地址介绍
-
XCH币合约地址多少?奇亚币合约地址介绍
本文介绍了奇亚币(XCH)的合约地址以及相关信息。奇亚币是一个企业级的数字货币,采用了即时空证明的共识机制,由顶尖的网络工程师创建。奇亚币的合约地址是0x6b5...
2024-02-09
PUSH币合约地址多少?PUSH币属于什么链?
-
PUSH币合约地址多少?PUSH币属于什么链?
本文主要介绍了PUSH币的合约地址和所属链。PUSH币是EPNS协议的本机管理令牌,EPNS协议是一个去中心化通知协议,允许用户接收通知并从中获利。持有PUSH...
2024-02-09
STARL币合约地址是多少?星链币合约地址介绍
-
STARL币合约地址是多少?星链币合约地址介绍
本文主要介绍了STARL币的合约地址以及星链币的相关资料。STARL币是近期爆火的元宇宙项目之一,其核心理念是以更加公平和可持续的方式实现目标,并让每个参与者都...
2024-02-09