如何解决Hyperledger Fabric如何回滚数据?
我阅读了有关Hyperledger Fabric网络接受数据以写入分类帐的方式的文档。这是由认可同行完成的。 但这是另一种情况,我有多次调用PutState的情况。
// 1. Update User
err = stub.PutState(userKey,updateUser)
if err != nil {
return nil,Response.Error
}
// 2. Update Product
err = stub.PutState(productKey,updateProduct)
if err != nil {
return nil,Response.Error
}
如果第二个呼叫(更新产品)失败,但是第一个呼叫(更新用户)成功,这很奇怪。 用户数据仍然显示在分类帐中,但不应显示在分类帐中。我有两个问题:
-
在这种情况下,谁能向我解释或提供与回滚相关的任何文件?
-
如何解决此问题以进行真正的回滚?
织物1.4版
解决方法
从客户发送给对等方的提案可能会多次调用分类帐的方法。通常,成功的链码调用应达到return shim.Success(nil)
chaincode example
当您调用链码存根的方法(PutState
,GetState
,...)时,链码服务将向已连接到Peer-Endorser的流发送一条消息到尝试与分类帐互动。您可以看一下Fabric的源代码here-Endorser在其中处理来自链码服务的事件。
如果您的第一个呼叫成功,则对等方对chaincode服务的响应没有错误。这并不意味着分类帐已更新。事务仅在提交到一个块时才成功。
第二次调用失败时,调用将以错误结束。对等方将向调用方提供错误响应。如果呼叫者不断将交易发送给订购者,则对等方-提交者仍然拒绝该交易=>实际没有更新数据=>无需回滚
我认为您应该仔细阅读the transaction flow document
根据您的情况,让我们尝试在触发错误时return shim.Error(err.Error())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。