如何升级或者更新智能合约?

简介: 如果合约发送方想要有一种方法来升级智能合约代码,以便账户数据和其他东西接通,可以有什么办法吗?可以在不改变合约地址的情况下进行,还是总是需要新的地址?是否存在annex机制,在不需要重写的情况下向智能合约中添加一些新的功能?问题解答一旦合约已经部署在区块链中,它就是最终版了并不能再被改变。

如果合约发送方想要有一种方法来升级智能合约代码,以便账户数据和其他东西接通,可以有什么办法吗?可以在不改变合约地址的情况下进行,还是总是需要新的地址?

是否存在annex机制,在不需要重写的情况下向智能合约中添加一些新的功能?

问题解答

一旦合约已经部署在区块链中,它就是最终版了并不能再被改变。当然,可以通过允许原始代码改变某些参数,来做些改变。

更新合约的一种方法是使用版本控制系统。例如,你可以有一个入口通道合约,它将所有调用转发到合同的最新版本,由可更新的地址参数定义。你还可以使用名称注册表,并将其更新为指向最近的合约版本。

另一种方法是将逻辑代码放在库中,然后使用CALLCODE特性,通过Solidity中的库调用位于指定的、可更新的地址的代码。这样,用户数据在版本之间仍然存在。但这也就限制了逻辑合约的ABI必须保持不变。

官方说法:

从Homestead release发布开始,有一个DELEGATECALL操作码。这基本上允许你向前调用一个单独的合约,同时保持msg.sender和所有存储。

例如,你可以拥有一个保持相同地址和存储的合同,但将所有调用转发到存储在变量中的地址:

contract Relay {
    address public currentVersion;
    address public owner;

    function Relay(address initAddr){
        currentVersion = initAddr;
        owner = msg.sender;
    }

    function update(address newAddress){
        if(msg.sender != owner) throw;
        currentVersion = newAddress;
    }

    function(){
        if(!currentVersion.delegatecall(msg.data)) throw;
    }
}

原文《以太坊常见问题和错误》中的:
http://cw.hubwiz.com/card/c/ethereum-FAQ/1/1/17/

另外推荐几个很受欢迎全网稀缺的互动教程:

  • python以太坊,主要是针对python围绕web3.py进行区块链以太坊应用开发的讲解。
  • web3j,主要是针对java和android程序员围绕web3j库进行区块链以太坊开发的讲解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
  • 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
相关文章
|
4月前
|
区块链
关于代币合约项目系统开发DAPP模式方案【源码示例】
以下是一个简单的以太坊代币合约代码示例,它定义了一个名为 `Token` 的代币合约。在实际使用中,请确保您已获得适当的许可并遵循相关法规。
|
5月前
|
安全 Oracle 关系型数据库
智能合约中时间依赖漏洞
智能合约中时间依赖漏洞
73 6
|
4月前
UUPSUpgradeable部署合约和升级合约
UUPSUpgradeable部署合约和升级合约
|
存储 算法 数据挖掘
量化交易合约交易策略系统部署开发执行源码示例
量化交易合约交易策略系统部署开发执行源码示例
|
存储 监控 安全
合约交易所开发详情丨合约交易所系统开发项目/成熟案例/方案逻辑/规则玩法/稳定版/源码部署
合约交易所系统开发是一个复杂的项目,它涉及多个方面,包括系统设计、规则制定、开发实现、部署和稳定运行等
|
11月前
|
存储 算法 区块链
DAPP去中心化合约系统开发详情模式|案例分析
去中心化技术也会产生一些问题。区块链保证了账户绝对的安全性和匿名性
|
存储 大数据 Linux
秒合约交易系统开发部署源码|秒合约详情方案
区块链技术,通过网络中所有节点共同参与计算,互相验证其信息的真伪以达成全网共识
|
存储 供应链 前端开发
智能合约Dapp系统链上开发部署源码规则解析
智能合约Dapp系统链上开发部署源码规则解析
|
区块链
数字货币永续合约系统开发|测试版|逻辑规则|案例详情
永续合约采用了期货合约的特点,尤其是无需交割实际商品。同时,模仿了现货市场的行为,以缩小期货价格与标记价格之间的差距。与传统的期货合约相比,这是一个很大的进步。
|
存储 安全 搜索推荐
DAPP流动性系统开发稳定版|详情规则
在Web3.0中,以区块链为核心的去中心化网络,参与者可以参与记账