1

プロトコル仕様を読みました https://github.com/hyperledger/fabric/blob/master/docs/protocol-spec.md#5-byzantine-consensus-1

不思議なんだけど:

  1. チェーンコードに権限のコーディングブロックがあると、正確には何が起こったのでしょうか?
  2. チェーンコードにイベントのコーディング ブロックがあると、正確には何が起こったのでしょうか?

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

したがって、パーティ A だけがコーディング ブロックに遭遇する可能性があります。パーティ B、C、D はコーディング ブロックに遭遇できません。

このような状況で、PBFT はどのように A、B、C、D のコンセンサスを作成するのでしょうか?

4

1 に答える 1

0

上記のコメントを考慮すると、この質問は次のように変更できます。

「例のasset_management.goには、「caller」のみが実行できる「isCaller」メソッドがあります。この場合、どのように PBFT コンセンサスに達することができますか? 」

ただし、トランザクションが元の「admin」証明書で署名されている場合、すべての A、B、C、および D 検証ピアが「transfer」、「assign」、および「isCaller」でコードを実行できるため、この定義は正しくありません。

この例を見て、順を追って調べてみましょう。

  1. 「asset_management.go」チェーンコードは、ロール「クライアント」を持つすべてのユーザーが台帳にデプロイできます</li>
  2. 展開中、Initメソッドでは、このユーザーの証明書は台帳に「admin」として保存されます。

    adminCert, err := stub.GetCallerMetadata()
    ...
    stub.PutState("admin", adminCert)
    
  3. assign誰かが元帳に提出または取引したい場合transfer、彼は自分の証明書でこの要求に署名する必要があります

  4. この要求は、ネットワーク内のすべての VP に伝播されます。
  5. 各 VP は元帳から「管理者」証明書をロードし、この特定の要求に署名するために使用された証明書と比較します。

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

証明書が同じでない場合- この要求は、PBFT コンセンサス フェーズ中に VP によって受け入れられません。

証明書が同じ場合、すべての VP は、このリクエストが元の「呼び出し元」によって署名されていることを認識し、チェーンコードの実行に必要なすべての情報を持っているため、チェーンコードの実行を続行します。

于 2016-07-14T12:30:50.663 に答える