Truffle migrate --reset 不丢失数据

Truffle migrate --reset without loosing data

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

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

我想知道是否有任何方法可以在保留数据的同时迁移合约,就像传统数据库所做的那样,因为只有 truffle migrate 合约不会被迁移,它只会被重新编译。

非常感谢!

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


通过 运行 truffle migrate 你通常是 运行 javascript 使用标准 CREATE EVM 操作码部署 Solidity 合约的代码。所以每次你 运行 truffle migrate,Truffle 都会将合约部署到一个有空存储槽的新地址。

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

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


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