Peer channel-based event services

General overview

Fabricの過去バージョンにおいて、ピアイベントサービスはイベントハブとして知られていました。このサービスは、チャネルに関わらず新しいブロックがピアの台帳に追加された際にイベントを送信し、イベンティングピア(すなわちイベントのために接続されているピア)を稼働させている組織のメンバのみがアクセスすることが出来ます。

v1.1から、イベントを提供する新しいサービスがあります。これらのサービスは全く異なる設計となっており、各チャネルをベースにしたイベント提供を行います。これは、ピアのデータへのきめ細かい制御を実現するために、ピアではなくチャネルのレベルでイベントの登録が実施されます。イベントを受信するリクエストは、そのピアの組織とは関係なく、(チャネル設定で定義されている通り)アイデンティティを元に受け付けられます。これはより良い信頼性と(接続上の問題やピアが既に動いているネットワークに参加するかに関係なく)届かなかったイベントを受信する方法も提供します。

Available services

  • Deliver

このサービスは、台帳にコミットされた全てのブロックを送信します。もしチェーンコードによって設定されたイベントであれば、ブロックの ChaincodeActionPayload 内に格納されています。

  • DeliverWithPrivateData

このサービスは、 Deliver サービスと同じデータに加えて、クライアントの組織がアクセスを許可されたコレクションのプライベートデータを含めて送信します。

  • DeliverFiltered

このサービスは、台帳にコミットされたブロックに関する情報の最小セットである "フィルターされた" ブロックを送信します。外部のクライアントがそのクライアントのトランザクションやトランザクションの状態に関する情報を主に使いたい、とピアの所有者が望むようなネットワークで使用することを目的としています。もしチェーンコードによって設定されたイベントであれば、フィルタードブロックの FilteredChaincodeAction に格納されます。

注釈

チェーンコードイベントのペイロードはフィルタードブロックに含まれません。

How to register for events

イベントの登録は、スタートとストップの位置、シークの挙動(利用可能になるまでブロックするか、利用できなければ失敗するか)を含むピアへの配信シーク情報メッセージを含むエンベロープを送信することで完了します。ヘルパー変数として SeekOldestSeekNewest があり、台帳の一番古い(すなわち最初の)ブロックもしくは最新の(すなわち最後の)ブロックを示します。サービスに無制限に送信させるには、 SeekInfo メッセージのストップ位置を MAXINT64 にする必要があります。

注釈

もし相互TLSがピアで有効になっていた場合、TLS証明書のハッシュ値をエンベロープのチャネルヘッダーに設定しなければなりません。

デフォルトでイベントサービスは、イベントをリクエストするクライアントを許可するかどうかを決めるために、チャネルのReadersポリシーを使用します。

Overview of deliver response messages

イベントサービスは、 DeliverResponse メッセージを送り返します。

各メッセージは以下を含みます:

  • ステータス -- HTTPステータスコード。 各サービスは、エラーが発生した場合、適切なエラーコードを返します。そうでない場合、 SeekInfo メッセージによってリクエストされた全情報の送信をサービスが完了すると 200 - SUCCESS を返します。
  • ブロック -- Deliver サービスによってだけ返します。
  • ブロックとプライベートデータ -- DeliverWithPrivateData サービスによってだけ返します。
  • フィルタードブロック -- DeliverFiltered サービスによってだけ返します。

フィルタードブロックは以下を含みます:

  • チャネルID
  • 番号(すなわちブロック番号)
  • フィルタードトランザクションの配列
  • トランザクションID
    • タイプ (e.g. ENDORSER_TRANSACTION, CONFIG).
    • トランザクション検証コード
  • フィルタードトランザクションのアクション
    • フィルタードチェーンコードのアクションの配列
      • トランザクションに対するチェーンコードイベント (ただしペイロードは消去)

SDK event documentation

イベントサービスに関しての詳細は、 SDK documentation を参照して下さい。