Private Daten von Hyperledger Fabric sind eine neue Funktion, die in Version 1.2 eingeführt wurde. Private Daten von Fabric verwenden eine Seitendatenbank (SideDB), um private Daten zwischen mehreren Kanalmitgliedern zu speichern und so einen flexibleren Datenschutzmechanismus bereitzustellen. In diesem Artikel wird erläutert, wie private Fabric-Daten in der Chain-Code-Entwicklung verwendet werden.
Fabric Private Data verwendet SideDB zum Speichern privater Daten, was der Bereitstellung eines detaillierteren Datenschutzmechanismus über dem Kanal entspricht. In diesem Artikel werden der Zweck, die Grundkonzepte und Anwendungsszenarien privater Fabric-Daten vorgestellt.
Was sind Fabric-Privatdaten?
Der aktuelle Weg, Datenschutz in Hyperledger Fabric zu erreichen, ist die Verwendung von Kanälen. Allerdings sind Beamte nicht die Einzigen, die in großen Netzwerken eine große Anzahl von Kanälen einrichten, um den Datenschutz zu gewährleisten, da dies zusätzlichen Aufwand mit sich bringt, wie z. B. Verwaltungsrichtlinien, Chain-Code-Versionen und Member Service Provision (MSP). In einem Kanal sind alle Daten entweder öffentlich oder privat. Daher wird es problematisch sein, wenn Sie Vermögenswerte an Mitglieder außerhalb des Kanals übertragen möchten. Aus diesem Grund führt Hyperledger Fabric private Transaktionen ein. Farbic Private Data ermöglicht die Erstellung privater Datensätze auf der Grundlage von Richtlinien, um zu definieren, welche Mitglieder des Kanals auf die Daten zugreifen können. Private Fabric-Daten können einfach durch Hinzufügen von Richtlinien verwaltet werden. Dadurch ist es möglich, bestimmte Daten nur einigen Mitgliedern zugänglich zu machen.
Betrachten Sie das Murmelbeispiel von Hyperledger Fabric. Alle Marmordaten können veröffentlicht werden, mit Ausnahme der Besitzer- und Preisinformationen. Diese beiden Daten dürfen nicht an andere weitergegeben werden, und der Preis sollte anderen nicht bekannt sein. Möglicherweise müssen Sie diese Daten nachverfolgen, um sicherzustellen, dass die Person, die die Murmel verkauft, der wahre Eigentümer ist. Eine hypothetische Marmorprüfungsgesellschaft kann als Ihr Partner fungieren, um dies zu überprüfen. Wenn Sie Kanäle verwenden, werden alle Ihre Aktionen im Hauptbuchstatus aufgezeichnet und sind für jedermann sichtbar.
Wie lösen private Fabric-Daten die oben genannten Probleme?
Im Bild oben ist der erste Satz „Channel Read-Write Sets“ die Architektur, bei der keine privaten Fabric-Daten eingeführt werden, sondern bei jeder Transaktion Beides Zeichnen Sie ihren Status und Verlauf auf.
Der zweite Satz, private Statuspartition 1, zeigt einen gemeinsamen privaten Status zwischen zwei Knoten, die zu verschiedenen Organisationen gehören. Der dritte Satz, private Zustandspartition 2 und 3, zeigt das wahre Beispiel von Fabric-Privatdaten, was bedeutet, dass Sie es für jeden Marmor ignorieren können. Diese Datensätze ermöglichen das Hinzufügen einiger zusätzlicher Daten Die Hauptdaten werden weiterhin im Hauptbuch und im Hauptbuch gespeichert. Nicht autorisierte Knoten können die Daten im Hauptbuch und in der privaten Datenbank nicht synchronisieren Daten-Hash im Hauptbuch ist irreversibel, sodass diese nicht autorisierten Knoten die echten Daten nicht sehen können
Von einer höheren Ebene aus sieht das durch Fabric-Privatdaten gelöste Problem wie folgt aus:
Fabric-Anwendungsfall für private Daten
Wir verwenden den klassischen Fabcar-Fall in Hyperledger Fabric, um zu zeigen, wie der private Datensatz verwendet wird die initLedger-Funktion. Alle diese Autos können von jedem im Netzwerk eingesehen werden und diese Daten werden nur mit den anderen Mitgliedswerkstätten geteilt >Fabric-Konfiguration des privaten DatensatzesWir benötigen zunächst eine Datensatzkonfigurationsdateicollections_config.json, die den Namen des privaten Datensatzes und die Zugriffsrichtlinie enthält ermöglicht es uns, vorhandene Richtlinienlogik wie ODER, UND usw. zu verwenden. [
{
"name": "carCollection",
"policy": "OR ('Org1MSP.member','Org2MSP.member')",
"requiredPeerCount": 0,
"maxPeerCount": 3,
"blockToLive":1000000
}
]
Hier ist die ursprüngliche Funktion „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);
}
await stubHelper.putState(verifiedArgs.key, car, {privateCollection: 'carCollection'});
Als nächstes müssen wir, wenn wir das Fahrzeug abfragen möchten, auch den Zieldatensatz privat angeben Datensatz:
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; }
In ähnlicher Weise müssen Sie sowohl für Lösch- als auch für Aktualisierungsvorgänge den privaten Zieldatensatz angeben, der bearbeitet werden soll.
Best Practices für Fabric Private Data ChaincodesNatürlich sind einige unserer Daten für jeden im Hyperledger Fabric-Netzwerk sichtbar. Einige dieser Daten sind jedoch privat und werden in einem privaten Datensatz gespeichert und können daher nur von Peers abgerufen werden, die in der Datensatzkonfigurationsdatei definiert sind.
Wir empfehlen, Daten sowohl in öffentlichen als auch in privaten Datensätzen mit demselben Schlüssel zu speichern, um das Extrahieren der Daten zu erleichtern. Abschließend hoffe ich, dass dieser Artikel für Sie hilfreich ist.
Wenn Sie weitere verwandte Tutorials erfahren möchten, schauen Sie sich bitte die PHP-Chinese-Website an!
Das obige ist der detaillierte Inhalt vonPraktische Erfahrungen für Anfänger mit privaten Daten in Fabric. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!