2017-09-09 3 views
1

ここで、Hyperledger Fabric、ChaincodeA、ChaincodeBに2つのチェーンコードがあるとします。invokeChaincodeでChaincodeの状態を変更すると、ひどいことが起こりますか?

ChaincodeAのいくつかのイベントは、ChaincodeBで状態を変更する必要があります。たとえば、そのバランスを変更します。 ChaincodeAでinvokeChaincode()を使用してChaincodeB内のロジックを呼び出すと、putState()を呼び出してChaincodeBの状態を変更すると、コンセンサスを得るときに競合状態が発生する可能性がありますか?これを処理するベストプラクティスは何ですか?

答えて

1

chaincodeを呼び出すと、現在の状態に基づいてトランザクションの実行をシミュレートするだけで状態を変更することはありません。注文サービスによってブロックに入れられたトランザクションは、一度だけ、VSCCMVCCが通過しなければならないピアに到達し、最終的にコミットされることがチェックされます。 MVCCは可能な競合状態を処理します。次のようにTransaction execution作品:

  1. クライアントは
  2. ピアトランザクションが結果に署名し、
  3. クライアントが期待承認ポリシーに基づいてステップ#2を繰り返す必要がある署名したトランザクションの提案に入れてシミュレートピアに取引提案を送る
  4. 彼は
  5. 注文サービスは、ブロックと順番にすべてのトランザクション
  6. ブロックデリをカット注文サービスに送信し、クライアント集め十分裏書たら
  7. ピアにベレド
  8. ピアが検証され、最終的に私は2つの異なるチャネルにデプロイされた2つのchaincodeを控えめとしてブロック
関連する問題