Channel capabilities

対象読者: チャネル管理者、ノード管理者

注意: これは、新しいユーザーやアプリケーション開発者が理解する必要のない高度なFabricの概念です。ただし、チャネルやネットワークが成熟するにつれて、ケーパビリティの理解と管理が不可欠になります。 さらに、アップデートケーパビリティは、ノードのアップグレードとは別のプロセスですが、関連することが多いプロセスであることを認識することも重要です。 この点については、このトピックで詳しく説明します。

Fabricは通常、複数の組織が関与する分散システムであるため、異なるバージョンのFabricコードが、ネットワーク内の異なるノードおよびそのネットワーク内のチャネルに存在する可能性があります。Fabricでは、すべてのピアとオーダリングサービスが同じバージョンレベルである必要はありません。実際、異なるバージョンレベルをサポートすることで、Fabricノードのローリングアップグレードが可能になります。

重要なのは、ネットワークとチャネルが同じ方法で処理し、チャネル設定の更新やチェーンコード呼び出しなどの決定的な結果を生成することです。結果が決定的でなければ、チャネル上のあるピアがトランザクションを正当としない(無効)一方で、別のピアはトランザクションを正当とするかもしれません。

そのために、Fabricは「ケーパビリティ(capabilities)」と呼ばれるレベルを定義します。これらのケーパビリティは、各チャネルの設定で定義され、動作が一貫した結果を生成するレベルを定義することによって決定性を保証します。これらのケーパビリティには、ノードのバイナリバージョンと密接に関連したバージョンがあります。ケーパビリティにより、異なるバージョンレベルで実行されているノードは、特定のブロックの高さでのチャネル設定を前提として、互換性のある一貫した方法で動作することができます。また、特定のタスクを行うための管理領域ごとに定義されたケーパビリティが、設定ツリーの多くの部分に存在することもわかります。

これから説明するように、新しい機能を有効にするためには、チャネルを新しいケーパビリティレベルに更新する必要がある場合があります。

Node versions and capability versions

Hyperledger Fabricに精通している場合は、Fabricはv1.1、v1.2.1、v2.0などの一般的なバージョン管理パターンに従うことを知っていると思います。これらのバージョンは、リリースおよび関連するバイナリバージョンを指します。

ケーパビリティは、同じバージョン付け規則に従います。v1.1のケーパビリティ、v1.2のケーパビリティ、v2.0のケーパビリティなどがあります。しかし、いくつかの違いに注意することが重要です。

ユーザーがバイナリをアップグレードできない場合は、ケーパビリティを下位レベルに残しておく必要があります。下位レベルのバイナリとケーパビリティは、本来の目的どおりに動作します。ただし、ユーザーがケーパビリティを更新しないことを選択した場合でも、常に新しいバイナリに更新することをお勧めします。ケーパビリティ自体にもバグ修正が含まれているため、ネットワークバイナリがケーパビリティをサポートするようになったら更新することをお勧めします。

Capability configuration groupings

すでに説明したように、チャネル全体を網羅する単一のケーパビリティレベルはありません。むしろ、3つのケーパビリティがあり、それぞれ管理領域を表しています。

チャネルのOrdererケーパビリティとチャネルケーパビリティは、デフォルトではオーダリングシステムチャネルから継承されます。このチャネルの変更は、オーダリングサービス管理者だけの権限です。そのため、ピア組織は、ピアをチャネルに参加させる前に、チャネルのジェネシスブロックを検査する必要があります。チャネルケーパビリティは、(コンソーシアムのメンバーシップと同様に)オーダリングシステムチャネルのOrdererによって管理されますが、一般的に、オーダリングサービス管理者は、コンソーシアムの準備ができたときにのみチャネルケーパビリティがアップグレードされるように、コンソーシアムの管理者と調整します。

オーダリングシステムチャネルはアプリケーションケーパビリティを定義しないため、チャネルのジェネシスブロックを作成するときに、このケーパビリティをチャネルプロファイルで指定する必要があります。

アプリケーションケーパビリティを指定または変更する場合は注意が必要です。オーダリングサービスは、ケーパビリティレベルが存在することを検証しないため、そのようなケーパビリティが存在しない場合でも、たとえばv1.8アプリケーションケーパビリティを含むチャネルを作成(または変更)できます。このケーパビリティを使用してコンフィグレーションブロックを読み取ろうとすると、ピアがクラッシュし、チャネルを再び有効なケーパビリティレベルに変更できたとしても、無効なv1.8のケーパビリティを使用してブロックを通過できるピアがないため、問題にはなりません。

現在有効なOrderer、アプリケーション、およびチャネルケーパビリティの詳細については、「Capabilities」セクションにリストされているsample configtx.yaml fileを参照してください。

ケーパビリティおよびチャネル設定内でのケーパビリティの設定箇所に関する詳細については、defining capability requirementsを参照してください。