升级链代码是否会删除存储在分类帐中的先前数据?

Will upgrading a chaincode remove the previous data stored in the ledgers?

我正在学习 Hyperledger Fabric。我尝试更新 FabCar 网络的链代码。重新启动 Fabric 后,我发现分类帐中存储的所有先前数据都丢失了。 更新chaincode会不会导致之前的数据丢失?

学习愉快!!

关于您的问题,升级链代码是安全的。你只是在更新逻辑,它不会损害你现有的数据,你可能已经扰乱了分类账,这就是它行为不端的原因。

您必须发送升级建议才能完成升级过程。

链代码可以随时通过更改其版本进行升级,这是 SignedCDS 的一部分。其他部分,如所有者和实例化策略是可选的。但是,链码名称必须相同;否则它将被视为完全不同的链代码。

升级之前,必须在所需的背书器上安装新版本的链代码。升级是一个类似于实例化交易的交易,它将新版本的链代码绑定到通道。

Fabric 将状态与链码的 version/instance 分开。这使得更新您的链代码逻辑而不会真正丢失您的状态成为可能。

为此,您需要执行链码升级交易(在此之前,您需要在每个节点上安装升级后的链码)。

我的猜测是您的问题的发生是因为您实际上启动和关闭了网络,修改了链码然后再次启动它。在示例中,关闭网络通常是一种破坏性操作...docker-compose down 实际上会破坏您的容器实例,除非您使用外部卷(示例网络不这样做),否则会清除状态数据。