问题描述
我正在使用 solidity 开发智能合约。每次我编辑合同并想证明它时,我都会运行 truffle migrate --reset
。
这样做,我会丢失合同中保存的所有数据。
我想知道有没有什么方法可以在保留数据的同时迁移合同,就像传统数据库一样,因为只有truffle migrate
,合同没有被迁移,它只是重新编译。
非常感谢!
解决方法
简短回答:目前无法使用 Truffle。但是,如果您知道自己在做什么,就可以使用更底层的方法来保留存储空间。
通过运行 truffle migrate
,您通常会运行使用标准 CREATE
EVM 操作码部署 Solidity 合约的 javascript 代码。因此,每次运行 truffle migrate
时,Truffle 都会将合约部署到具有空存储槽的新地址。
即使可以使用 CREATE2
操作码将智能合约重新部署到已使用的地址(并保留原始存储数据),但 Truffle 目前不支持此选项。
注意:--reset
选项仅在先前失败的情况下从头开始运行所有迁移,但对存储或合约地址没有影响。
您可以通过将(合约部署)交易数据设置为部署到已包含自毁合约的地址的指令来实现此目标(保持存储)。但它比 Truffle 目前允许的低级得多。如果您想了解有关此技术的更多信息,这些文章将是一个良好的开端: