2016-07-06 4 views
1

私は疑問に思ってhttps://github.com/hyperledger/fabric/blob/master/docs/protocol-spec.md#5-byzantine-consensus-1Chaincodeが権限またはイベントのコーディングブロックを持っているとき、コンセンサスを正確に作る方法は?

プロトコル仕様をお読みください。

  1. をchaincodeが権限の符号化ブロックを持っている場合、正確に何が起こりましたか?
  2. チェーンコードにイベントのコーディングブロックがある場合はどういうことでしょうか?

たとえば、A、B、C、Dは4つのパーティーで、4つの検証中ピアで実行されています。 チェーンコードAに権限のコーディングブロックがあり、コーディングブロックを実行する権限を持つのはパーティAだけです。 チェインコードAにイベントのコーディングブロックがあり、パーティAだけがイベントの結果を得ることができます。

だから、唯一の当事者Aは、コーディングブロックに実行することができます。パーティーB、C、Dはコーディングブロックに入ることができません。 PBFTは、このような状況ではA、B、C、Dのコンセンサスを作る方法

+0

チェーンコード全体の最終合意を得るにはどうすればいいですか?イベントと権限のコーディングブロックが他のVPにその唯一の結果をブロードキャストできることをイメージします。あなたは親切にチェックしてお返しできますか? または 私の質問を変更してください。どのようなコードやAPIコードがコンセンサスを必要としますか?それはチェーンコードのすべてですか? setEvent()? PutState()? –

+0

「権限のコーディングブロック」 - ソースコードがパーティA証明書で暗号化されている私的なスマート契約について話していますか? –

+0

「権限のコーディングブロック」 - https://github.com/hyperledger/fabric/blob/master/examples/chaincode/go/asset_management/asset_management.goの「isCaller」機能のように ---呼び出し側のみ実行可能「移転」と「割当」に –

答えて

0

上記のコメントを考慮すると、この問題は、このようなものに変更することができます:

「を例asset_management.goが持っている 『発信元『isCaller』のみが実行できる方法を』。この場合、PBFTコンセンサスにどのように到達できるのか?

しかし、トランザクションが元の "admin"証明書で署名されている場合、すべてのA、B、C、D検証ピアは "transfer"、 "assign"および "isCaller"でコードを実行できるため、

のは、この例で見ていきましょう、それはステップバイステップで学びます。

  1. chaincode展開時に役割「クライアント」
  2. を持つ任意のユーザーが元帳に展開できる「asset_management.go」、Init方法では、このユーザーの証明書は、「管理者」として台帳に保存されます:

    adminCert, err := stub.GetCallerMetadata() 
    ... 
    stub.PutState("admin", adminCert) 
    
  3. 誰かが彼が

  4. 自分の証明書を使用して、この要求に署名する必要があり台帳へ assignまたは transferトランザクションを提出したいと思います
  5. この要求は、ネットワーク内のすべてのVPに伝播されます。
  6. VPの各台帳から「管理者」証明書をロードし、この特定の要求に署名するために使用された証明書と比較します:証明書同じでない場合

    adminCertificate, err := stub.GetState("admin") 
    ... 
    ok, err := t.isCaller(stub, adminCertificate) 
    

- この要求は、PBFTコンセンサス段階ではVPによって受け入れられません。

証明書が同じ場合 - すべてのVPは、この要求が元の「発信者」によって署名されていることを認識し、チェーンコードの実行を続行します。

+0

ありがとうございます。 ** 1。** 'このリクエストは、ネットワーク内のすべてのVPに伝播されます。放送方法を意味しますか?親切な放送の場合、どのような内容が放送されたのですか? ** 2。**「証明書が同じでなくても同じであるならば」私は、チェーンコードプログラムコーディングの各行でPBFTコンセンサスが起こったと思いますか?さもなければ、PBFTがチェインコードプログラムの途中で「同じ」または「同じではない」をどのように知ることができるか? –

+0

1.各検証ピアは、ネットワーク内の他のすべてのVPとオープンな接続を維持します。コンセンサスの第一歩として、リーダー(リーダーとして選ばれたVPの1人)が注文された取引のリストを準備し、それを他の妥当性確認の同業者に放送する。内容は、チェーンコードID、関数名、パラメータなどです。 –

+0

2.いいえ、 "各行"レベルのイベントではありません。各バリデーション・ピアはリスト内のすべてのトランザクションを実行し、VPは新しい「状態」のハッシュを計算し、VPはブロック全体の最終ハッシュを計算します。 VPは、他のVPに同じ最終ハッシュがあるかどうかをチェックします。 PBFTはコンセンサスフェーズで中間結果を気にしないPBFTはブロックに対するHASHがすべてのVPで同じであることを検証し、すべてのトランザクションが同じ結果で実行されたことを意味します。 –

関連する問題