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