2017-09-09 3 views
1

Disons que j'ai deux chaincode dans Hyperledger Fabric, ChaincodeA et ChaincodeB.Toute chose terrible se produira si changer l'état Chaincode dans invokeChaincode?

Certains événements dans ChaincodeA devront changer d'état dans ChaincodeB, par exemple, modifier son équilibre. Si invokeChaincode() utilisé dans ChaincodeA pour invoquer une logique dans ChaincodeB, qui appelle putState() pour modifier l'état de ChaincodeB, toute condition de concurrence pourrait-elle se produire lors de l'obtention d'un consensus? Quelles sont les meilleures pratiques pour gérer cela? Lors de l'appel d'un chaincode vous ne modifiez pas l'état que vous simulez uniquement l'exécution de la transaction en fonction de l'état actuel

Répondre

1

Une fois que la transaction a été placée dans le bloc en ordonnant le service et atteint le pair où elle doit passer, VSCC et MVCC vérifie que l'opération sera finalement validée. MVCC prendra soin de l'état de la course possible. Transaction execution fonctionne comme suit:

  1. client envoie une proposition de transaction au pair
  2. Peer simule transaction signe les résultats et les mettre dans signé une proposition de transaction
  3. client doit répéter l'étape 2 sur la base des politiques d'approbation attendues
  4. Une fois avals recueilli suffisamment de clients, il les envoie au service de commande
  5. coupe service de commande du bloc et pour toutes les transactions
  6. de charcuterie bloc Vered aux pairs
  7. pairs valide et engage finalement le bloc