Truffle migrate --reset 不会丢失数据

问题描述

我正在使用 solidity 开发智能合约。每次我编辑合同并想证明它时,我都会运行 truffle migrate --reset

这样做,我会丢失合同中保存的所有数据。

我想知道有没有什么方法可以在保留数据的同时迁移合同,就像传统数据库一样,因为只有truffle migrate,合同没有被迁移,它只是重新编译。

非常感谢!

解决方法

简短回答:目前无法使用 Truffle。但是,如果您知道自己在做什么,就可以使用更底层的方法来保留存储空间。


通过运行 truffle migrate,您通常会运行使用标准 CREATE EVM 操作码部署 Solidity 合约的 javascript 代码。因此,每次运行 truffle migrate 时,Truffle 都会将合约部署到具有空存储槽的新地址。

即使可以使用 CREATE2 操作码将智能合约重新部署到已使用的地址(并保留原始存储数据),但 Truffle 目前不支持此选项。

注意:--reset 选项仅在先前失败的情况下从头开始运行所有迁移,但对存储或合约地址没有影响。


您可以通过将(合约部署)交易数据设置为部署到已包含自毁合约的地址的指令来实现此目标(保持存储)。但它比 Truffle 目前允许的低级得多。如果您想了解有关此技术的更多信息,这些文章将是一个良好的开端:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...