Hyperledger ファブリックのプライベート データは、バージョン 1.2 で導入された新機能です。ファブリックのプライベート データは、サイド データベース (SideDB) を使用して、複数のチャネル メンバー間でプライベート データを保存し、チャネルの上部により柔軟なレイヤーを提供します。データ保護メカニズム。この記事では、チェーンコード開発でファブリックのプライベートデータを使用する方法を紹介します。
ファブリック プライベート データは、SideDB を使用してプライベート データを保存します。これは、よりきめの細かいデータ プライバシー保護メカニズムをチャネル上に提供することと同じです。この記事では、ファブリック プライベート データの目的、基本概念、およびアプリケーション シナリオを紹介します。
ファブリックのプライベート データとは何ですか?
Hyperledger Fabric でデータ プライバシーを実現する現在の方法は、チャネルを使用することです。ただし、データプライバシー保護を達成するために大規模なネットワークに多数のチャネルを作成しているのは当局だけではありません。これは、管理ポリシー、チェーンコードのバージョン、メンバーサービスの提供(MSP)などの追加のオーバーヘッドをもたらすためです。チャネルでは、すべてのデータはパブリックまたはプライベートのいずれかです。そのため、チャンネル外のメンバーにアセットを移管したい場合は非常に面倒になります。これが、Hyperledger Fabric がプライベート トランザクションを導入する理由です。 farbic プライベート データを使用すると、チャネルのどのメンバーがデータにアクセスできるかを定義するポリシーに基づいてプライベート データ セットを作成できます。ファブリックのプライベート データは、ポリシーを追加するだけで管理できます。これにより、特定のデータを一部のメンバーのみに公開することが可能になります。
Hyperledger Fabric のビー玉の例を考えてみましょう。大理石のデータは、所有者情報と価格情報を除いてすべて公開できますが、この 2 つのデータは他人に公開することはできず、価格も他人に知られることはありません。大理石を販売した人が本当の所有者であることを確認する必要があるため、このデータを追跡する必要がある場合があります。仮想の大理石監査法人がパートナーとしてこれを検証できます。チャネルを使用すると、すべてのアクションが台帳状態に記録され、誰でも見ることができます。
ファブリック プライベート データは上記の問題をどのように解決しますか?
#上図の最初のセット「Channel Read-Write Sets」は、ファブリックのプライベート データが導入されていない場合のアーキテクチャです。各トランザクションは両方ともステータスと履歴を記録します。2 番目のセットであるプライベート状態パーティション 1 は、異なる組織に属する 2 つのノード間の共有プライベート状態を示しています。この状態は、事前に設定されたポリシーに基づいています。ノード間で複製されます。 3 番目のセット、プライベート ステート パーティション 2&3 は、ファブリックのプライベート データの実例を示しています。このデータ セットは一部のメンバーによって無視される可能性があります。これは、販売者と監査人がプライベートに設定した大理石ごとに新しいセットを作成できることを意味しますデータ セットは個別に作成されます。これらのデータ セットを使用すると、いくつかの追加データを追加でき、メイン データは引き続きメインの状態と台帳に保存されます。 承認されたノードは、次のことが可能になります。メイン台帳のデータ ハッシュだけでなく、プライベート データベースの実際のデータも参照できます。権限のないノードはプライベート データベースを同期せず、メイン台帳のデータ ハッシュのみを参照できます。ハッシュのため、ハッシュは不可逆的であるため、これらの権限のないノードは実際のデータを見ることができません。より高いレベルから見ると、ファブリックのプライベート データによって解決される問題は次のようになります。 ##ファブリック プライベート データの使用例Hyperledger Fabric の古典的な fabcar ケースを使用して、プライベート データ セットの使用方法を示します。initLedger 関数は、「データセットに 10 台の新しい車を作成する」にあります。これらの車はすべて、ネットワーク上の誰でも閲覧できます。次に、プライベート データベースを作成しましょう。このデータは、私たちが保有する他のメンバー ガレージとのみ共有されます。
ファブリック プライベート データ データ セットの構成最初に、プライベート データ セット名とアクセス ポリシーを含むデータ セット構成ファイル collections_config.json が必要です。アクセス ポリシーは承認ポリシーに似ており、これにより、既存のポリシーを使用できます。
[ { "name": "carCollection", "policy": "OR ('Org1MSP.member','Org2MSP.member')", "requiredPeerCount": 0, "maxPeerCount": 3, "blockToLive":1000000 } ]ファブリックのプライベート データをサポートするようにチェーンコードを変更します
元の createCar 関数は次のとおりです:
async createCar(stubHelper: StubHelper, args: string[]) { const verifiedArgs = await Helpers.checkArgs<any>(args[0], Yup.object() .shape({ key: Yup.string().required(), make: Yup.string().required(), model: Yup.string().required(), color: Yup.string().required(), owner: Yup.string().required(), })); let car = { docType: 'car', make: verifiedArgs.make, model: verifiedArgs.model, color: verifiedArgs.color, owner: verifiedArgs.owner }; await stubHelper.putState(verifiedArgs.key, car); }
プライベート データ セット carCollection にデータを追加するには、ターゲット データ セットを指定する必要があります:
await stubHelper.putState(verifiedArgs.key, car, {privateCollection: 'carCollection'});
次に、車両をクエリする場合は、ターゲット プライベート データ セットも指定する必要があります: async queryPrivateCar(stubHelper: StubHelper, args: string[]) {
const verifiedArgs = await Helpers.checkArgs<any>(args[0], Yup.object()
.shape({
key: Yup.string().required(),
}));
const car = await stubHelper.getStateAsObject(verifiedArgs.key, {privateCollection: 'carCollection'});
if (!car) {
throw new NotFoundError('Car does not exist');
}
return car;
}
同様に、削除および更新操作の場合は、操作対象のプライベート データ セットを指定する必要があります。
もちろん、データの一部は Hyperledger Fabric ネットワーク内の誰でも見ることができます。ただし、このデータの一部はプライベートであり、プライベート データセットに保持されているため、データセット構成ファイルで定義されたピアのみがアクセスできます。
データの抽出を容易にするために、パブリック データセットとプライベート データセットの両方で同じキーを使用してデータを保存することをお勧めします。最後に、この記事があなたのお役に立てれば幸いです。
さらに関連するチュートリアルを知りたい場合は、PHP 中国語 Web サイト に注目してください。
以上がファブリックプライベートデータ初心者の実践体験の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。