合约升级是否能保留原合约的数据和地址

每次升级合约,都会返回新的合约地址,合约升级是否能保留原合约的数据和地址?

你升级的步骤是什么?
数据是一定会保留在链上的,关键是你在新的合约中是否还可以读取到原合约的数据。
这取决于你升级方法的设计。

如果只是合约代码的修改,不涉及合约数据变动的话,可以用amend功能,直接改合约的code。


这种情况下合约的地址和数据都是保留的。

注意:这个方法需要对EVM有比较深入的理解,使用要慎重。

智能合约升级要保持合约地址不变需要有一些技巧,这里有教程可以参考:

合约升级其实有两个考虑点:

  1. 合约地址保持不变;其目的是保证你的应用能够不感知。
  2. 合约数据不变。

要做到第 1 点相对还比较容易,使用 @rain 的方案就可以。
但要做到合约中数据不变(我相信这也是非常重要的),就要麻烦很多, 如果采用一般的方法,你还需要迁移数据。

对于联盟链(相当于你有能力使用管理员权限),我觉得 --amend 是最有效和简单的方法 (如 @rink1969 所提供的方法)。