如果在invokeChaincode中更改Chaincode状态会发生任何可怕的事情吗?

时间:2017-09-09 04:06:28

标签: blockchain hyperledger-fabric hyperledger consensus

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

ChaincodeA中的某些事件必须改变ChaincodeB中的状态,例如,改变其平衡。如果ChaincodeA中使用invokeChaincode()来调用ChaincodeB中的一些逻辑,调用putState()来改变ChaincodeB的状态,那么在达成共识时会出现任何竞争条件吗?处理此问题的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

在调用chaincode时,您不会更改状态,只能根据当前状态模拟事务执行。只有一旦通过订购服务将事务放入块中并到达必须通过VSCCMVCC的对等点,它才会最终提交。 MVCC将照顾可能的竞争条件。 Transaction execution的工作原理如下:

  1. 客户端向对等方发送交易提案
  2. Peer模拟交易签署结果并将其纳入签署的交易提案
  3. 客户必须根据预期的认可政策重复第2步
  4. 一旦客户收集到足够的背书,他就会将其发送给订购服务
  5. 订购服务会削减区块并订购所有交易
  6. 阻止交付给同行
  7. Peer验证并最终提交块

答案 1 :(得分:0)

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

请你分享代码如何从chaincodeA调用另一个chaincodeB?