1

假设我在 Hyperledger Fabric 中有两个链码,ChaincodeA 和 ChaincodeB。

ChaincodeA 中的一些事件将不得不改变 ChaincodeB 中的状态,例如,改变其余额。如果invokeChaincode()在 ChaincodeA 中使用来调用 ChaincodeB 中的某些逻辑,这些逻辑调用putState()来更改 ChaincodeB 的状态,那么在达成共识时可能会发生任何竞争条件?处理此问题的最佳做法是什么?

4

2 回答 2

1

在调用链码时,您不会更改状态,您只会根据当前状态模拟交易执行。只有通过排序服务将事务放入块中并到达必须通过VSCCMVCC检查的对等方,它才会最终被提交。MVCC将处理可能的竞争条件。交易执行工作如下:

  1. 客户端向对端发送交易提议
  2. Peer 模拟交易签名结果并将其放入已签名的交易提案中
  3. 客户必须根据预期的背书策略重复第 2 步
  4. 一旦客户收集到足够的背书,他就会将它们发送到订购服务
  5. 排序服务切断区块并对所有交易进行排序
  6. 块交付给对等方
  7. 对等方验证并最终提交区块
于 2017-09-09T23:32:34.970 回答
0

正如我低估了部署在两个不同通道上的两个链代码一样。chaincodeA 想调用chaincodeB 的方法。根据规范,它可能但仅用于读取操作。 https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim#ChaincodeStub.InvokeChaincode

你能分享一下你如何从chaincodeA调用另一个chaincodeB的代码吗?

于 2017-10-06T05:45:00.783 回答