Blockchain 如果在invokeChaincode中更改Chaincode状态,会发生什么可怕的事情?

Blockchain 如果在invokeChaincode中更改Chaincode状态,会发生什么可怕的事情?,blockchain,hyperledger-fabric,hyperledger,consensus,Blockchain,Hyperledger Fabric,Hyperledger,Consensus,假设Hyperledger结构中有两个链码,ChaincodeA和ChaincodeB ChaincodeA中的某些事件必须更改ChaincodeB中的状态,例如,更改其平衡。如果在ChaincodeA中使用invokeChaincode()来调用ChaincodeB中的某些逻辑,调用putState()来更改ChaincodeB的状态,那么在达成一致意见时是否会发生竞态情况?处理此问题的最佳实践是什么?在调用时,您不更改状态,只根据当前状态模拟事务执行。只有一次事务通过订购服务放入块中,并到达

假设Hyperledger结构中有两个链码,ChaincodeA和ChaincodeB

ChaincodeA中的某些事件必须更改ChaincodeB中的状态,例如,更改其平衡。如果在ChaincodeA中使用
invokeChaincode()
来调用ChaincodeB中的某些逻辑,调用
putState()
来更改ChaincodeB的状态,那么在达成一致意见时是否会发生竞态情况?处理此问题的最佳实践是什么?

在调用时,您不更改状态,只根据当前状态模拟事务执行。只有一次事务通过订购服务放入块中,并到达对等方,在对等方必须通过并检查它是否最终提交。将考虑可能的比赛条件。工作内容如下:

  • 客户端向对等方发送事务建议
  • 对等方模拟事务对结果进行签名,并将其放入已签名的事务建议书中
  • 客户必须根据预期的背书政策重复步骤2
  • 一旦客户收集到足够的背书,他就会将其发送到订购服务
  • 订购服务将剪切块并订购所有事务
  • 块传递给对等方
  • 对等方验证并最终提交块

  • 正如我所说,两个链码部署在两个不同的通道上。chaincodeA要调用chaincodeB的方法。根据规范,这是可能的,但仅适用于读取操作。

    你能分享你如何从chaincodeA呼叫另一个chaincodeB的代码吗