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

简介: 如果合约发送方想要有一种方法来升级智能合约代码,以便账户数据和其他东西接通,可以有什么办法吗?可以在不改变合约地址的情况下进行,还是总是需要新的地址?是否存在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应用开发,适合入门。
相关文章
|
10月前
|
存储 算法 数据挖掘
量化交易合约交易策略系统部署开发执行源码示例
量化交易合约交易策略系统部署开发执行源码示例
|
11月前
|
存储 监控 安全
合约交易所开发详情丨合约交易所系统开发项目/成熟案例/方案逻辑/规则玩法/稳定版/源码部署
合约交易所系统开发是一个复杂的项目,它涉及多个方面,包括系统设计、规则制定、开发实现、部署和稳定运行等
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
秒合约开发原理丨秒合约系统开发(详细规则)丨秒合约源码案例部署
秒合约开发原理丨秒合约系统开发(详细规则)丨秒合约源码案例部署
|
8月前
|
区块链
关于代币合约项目系统开发DAPP模式方案
关于代币合约项目系统开发DAPP模式方案
|
8月前
|
存储 大数据 Linux
秒合约交易系统开发部署源码|秒合约详情方案
区块链技术,通过网络中所有节点共同参与计算,互相验证其信息的真伪以达成全网共识
|
9月前
|
安全 前端开发 算法
DAPP智能合约链上系统开发逻辑规则定制部署
DAPP 智能合约链上系统开发是区块链技术的一个重要应用,它可以使去中心化应用程序(DApps)更加安全、高效、便捷地运行。本文将介绍 DAPP 智能合约链上系统开发的规则和详情,以及源码版的设计思路。
|
9月前
|
区块链
数字货币永续合约系统开发|测试版|逻辑规则|案例详情
永续合约采用了期货合约的特点,尤其是无需交割实际商品。同时,模仿了现货市场的行为,以缩小期货价格与标记价格之间的差距。与传统的期货合约相比,这是一个很大的进步。
|
10月前
|
安全
合约跟单丨合约交易丨秒合约丨交易所系统开发规则介绍/成熟技术/细节方案/步骤逻辑/项目详细/源码部署
Second contract is a high-frequency trading strategy or mode, also known as High Frequency Trading (HFT). It refers to the use of computer algorithms and high-speed trading systems to conduct a large number of trading operations in a very short time span.
|
10月前
|
安全 Go
永续合约丨秒合约丨合约跟单丨交易所系统开发稳定版/详细流程/设计需求/规则玩法/案例部署/源码逻辑
The development model of the perpetual contract exchange can vary depending on the platform's scale, technical requirements, and business model.
|
11月前
|
存储 供应链 前端开发
智能合约Dapp系统链上开发部署源码规则解析
智能合约Dapp系统链上开发部署源码规则解析