Lebenszyklus des Hyperledger Fabric-Kettencodes

Inhaltsverzeichnis

1. Was ist Kettencode?

2. Kettencode bereitstellen

2.1 Chaincode installieren und definieren

2.1.1 Intelligente Verträge verpacken

2.1.2 Peer-Knoten installiert Kettencode

2.1.3 Organisation genehmigt Chaincode

2.1.4 Senden Sie den Kettencode an den Kanal

2.2 Kettencode aktualisieren

Zusammenfassen


1. Was ist Kettencode?

ChainCode ist ein in Go , Node.js oder Java geschriebenes Programm , das eine bestimmte Schnittstelle implementiert. ChainCode läuft in einem sicheren Docker-Container und ist vom Endorsement-Knoten isoliert. ChainCode initialisiert und verwaltet den Ledger-Status durch von der Anwendung übermittelte Transaktionen.

Chaincode verwaltet in der Regel die von Netzwerkmitgliedern vereinbarte Geschäftslogik und kann daher als „intelligenter Vertrag“ betrachtet werden. Aktualisierungen des von einem Chaincode erstellten Ledgers sind auf diesen Chaincode beschränkt und können von anderen Chaincodes nicht direkt aufgerufen werden. Innerhalb desselben Netzwerks kann ein Chaincode jedoch bei Erteilung der entsprechenden Berechtigungen einen anderen Chaincode aufrufen, um auf seinen Status zuzugreifen.

2. Kettencode bereitstellen

Der Fabric-Chaincode-Lebenszyklus ist ein Prozess, der es mehreren Organisationen ermöglicht, sich auf die Funktionsweise des Chaincodes zu einigen, bevor sie ihn auf dem Kanal verwenden. Wir verwenden den Fabric-Lebenszyklus, um die Bereitstellung und den Betrieb des Chaincodes zu steuern:

2.1 Chaincode installieren und definieren

Der Fabric-Chaincode-Lebenszyklus erfordert, dass Organisationen sich auf die Parameter einigen, die den Chaincode definieren, wie z. B. Name, Version und Chaincode-Befürwortungsrichtlinie. Kanalmitglieder stimmen durch die folgenden vier Schritte zu, aber nicht jede Organisation im Kanal muss jeden Schritt abschließen.

  1. Intelligente Verträge verpacken: Dieser Schritt kann von einer Organisation oder von jeder Organisation durchgeführt werden.
  2. Installieren Sie den Chaincode auf dem Peer-Knoten: Jede Organisation, die den Chaincode zum Bestätigen von Transaktionen oder zum Abfragen des Hauptbuchs verwenden möchte, muss diesen Schritt ausführen.
  3. Organisationsgenehmigung von Chaincode: Jede Organisation, die Chaincode verwenden wird, muss diesen Schritt abschließen. Die Chaincode-Definition muss von einer ausreichenden Anzahl von Organisationen genehmigt werden, um die LifecycleEndorsement-Richtlinie des Kanals zu erfüllen (Standard ist Mehrheit), bevor der Chaincode auf dem Kanal gestartet werden kann.
  4. Übermittlung des Kettencodes an den Kanal: Sobald die erforderliche Anzahl von Organisationen auf dem Kanal genehmigt wurde, wird eine Transaktion von einer Organisation festgeschrieben. Der Einreicher sammelt zunächst Empfehlungen von genügend Kollegen zugelassener Organisationen und übermittelt dann eine Transaktion, um den Kettencode einzureichen.

2.1.1 Intelligente Verträge verpacken

Der Chaincode muss in einer TAR-Datei gepackt werden, bevor er auf dem Peer-Knoten installiert werden kann. Sie können die Fabric-Peer-Binärdatei, das Node Fabric SDK oder ein Drittanbieter-Tool (z. B. GNU tar) verwenden, um den Chaincode zu packen. Wenn Sie ein Chaincode-Paket erstellen, müssen Sie ein Chaincode-Paket-Tag bereitstellen, um eine prägnante und lesbare Paketbeschreibung zu erstellen.

Wenn Sie zum Packen des Chaincodes ein Tool eines Drittanbieters verwenden, muss die generierte Datei im folgenden Format vorliegen. Die Fabric-Peer-Binärdateien und das Fabric SDK erstellen automatisch Dateien in diesem Format.

  • Der Kettencode muss in einer TAR-Datei gepackt werden, die mit der Dateierweiterung .tar.gz endet.

  • Die TAR-Datei muss zwei Dateien (keine Verzeichnisse) enthalten: eine Metadatendatei „metadata.json“ und eine weitere TAR-Datei „code.tar.gz“, die die Chaincode-Datei enthält.

  • „metadata.json“ enthält JSON, das die Chaincode-Sprache, den Codepfad und die Paket-Tags angibt. Ein Beispiel einer Metadatendatei finden Sie unten:

{"Path":"fabric-samples/asset-transfer-basic/chaincode-go","Type":"golang","Label":"basicv1"}

 Der Kettencode wird von Org1 bzw. Org2 gepackt. Beide Organisationen verwenden MYCC_1 als Paketbezeichnung, um Pakete anhand von Name und Version zu identifizieren. Es ist nicht erforderlich, dass Organisationen dieselben Paketetiketten verwenden.

2.1.2 Peer-Knoten installiert Kettencode

Nur Peer-Knoten mit installiertem Chaincode können Transaktionen und Bestätigungstransaktionen durchführen. Unabhängig davon, ob es sich um CLI oder SDK handelt, müssen Sie Peer Administrator verwenden, um diesen Schritt abzuschließen. Der Chaincode wird nach der Installation erstellt. Wenn ein Problem mit dem Chaincode auftritt, wird ein Build-Fehler zurückgegeben. Es wird empfohlen, dass die Organisation den Kettencode nur einmal paketiert und dann dasselbe Kettencodepaket auf den Peer-Knoten der Organisation installiert, die installiert werden müssen. Wenn der Kanal sicherstellen möchte, dass jede Organisation dieselbe Kette ausführt Code wird eine Organisation die Verpackungsarbeit abschließen und sie dann an andere Mitglieder des Kanals senden.

Ein erfolgreicher Installationsbefehl gibt eine Chaincode-Paketkennung zurück, die eine gehashte Kombination aus der Paketbezeichnung und dem Paket ist. Dieser Paketbezeichner wird verwendet, um das auf dem Peer-Knoten installierte Chaincode-Paket mit der von der Organisation genehmigten Chaincode-Definition zu verknüpfen. Speichern Sie den Bezeichner für den nächsten Schritt. Sie können ihn auch finden, indem Sie das auf dem Peer installierte Paket mithilfe der Peer-CLI abfragen. Paket Identifikator.

 Die Peer-Administratoren von Org1 und Org2 installieren das Chaincode-Paket MYCC_1 auf den Peers, die dem Kanal beitreten. Durch die Installation des Chaincode-Pakets wird der Chaincode erstellt und eine Paketkennung MYCC_1:hash erstellt.

2.1.3 Organisation genehmigt Chaincode

Wenn ein Kanalmitglied eine Chaincode-Definition genehmigt, wird die Genehmigung durch eine Abstimmung der Organisation bestimmt, die die Chaincode-Parameter akzeptiert. Diese genehmigten Organisationsdefinitionen ermöglichen es den Kanalmitgliedern, sich auf den Chaincode zu einigen, bevor er im Kanal verwendet wird. Die Chaincode-Definition umfasst die folgenden Parameter, die in allen Organisationen konsistent sein müssen:

  • Name: Der Name, den die Anwendung beim Aufrufen des Chaincodes verwendet.

  • Version: Die Versionsnummer oder der Wert, der einem bestimmten Chaincode-Paket zugeordnet ist. Wenn Sie die Chaincode-Binärdatei aktualisieren, müssen Sie auch die Chaincode-Version ändern. Die Version kann beliebige Zeichen enthalten, verwendet jedoch normalerweise ein Format wie v1.v2.v3. Der Peer-Knoten überprüft die Version nicht, es handelt sich lediglich um eine Indikator, der der Organisation helfen soll. Koordinieren Sie bei der Aktualisierung ihrer Chaincode-Logik.

  • Sequenz: Die Häufigkeit, mit der der Kettencode auf dem Kanal definiert wird. Dieser Wert ist eine Ganzzahl, die zum Verfolgen von Chaincode-Upgrades verwendet wird. Wenn beispielsweise eine Chaincode-Definition zum ersten Mal genehmigt und auf einem Kanal übermittelt wird, muss die Sequenznummer auf 1 gesetzt werden. Wenn der Chaincode das nächste Mal aktualisiert oder die Chaincode-Definition aktualisiert wird, wird die Sequenznummer auf 2 erhöht. Die Sequenznummer wird von den Peer-Knoten verwendet, um sicherzustellen, dass alle Organisationen mit ihren genehmigten und übermittelten Chaincode-Definitionen synchronisiert sind.

  • Befürwortungsrichtlinie: Welche Organisationen müssen Transaktionsausgaben ausführen und überprüfen? Endorsement-Richtlinien können als an die CLI übergebene Zeichenfolgen ausgedrückt werden oder auf Richtlinien in der Kanalkonfiguration verweisen. Standardmäßig ist die Befürwortungsrichtlinie auf „Kanal/Anwendung/Befürwortung“ eingestellt, sodass die meisten Organisationen im Kanal die Transaktion befürworten müssen.

  • Sammlungskonfiguration: Der Pfad zur privaten Datensammlungsdefinitionsdatei, die dem Kettencode zugeordnet ist. Weitere Informationen zu privaten Datensammlungen finden Sie unter Private Data Schema Reference .

  • ESCC/VSCC-Plugin: Der Name des benutzerdefinierten Bestätigungs- oder Verifizierungs-Plugins, das vom Chaincode verwendet werden soll.

  • Initialisierung: Wenn Sie die von der Fabric ChainCode Shim API bereitgestellte Low-Level-API verwenden, muss der Chaincode eine Init-Funktion zum Initialisieren des Chaincodes enthalten. Diese Funktion wird von der Chaincode-Schnittstelle benötigt, muss aber nicht unbedingt von Ihrer Anwendung aufgerufen werden. Wenn Sie die Chaincode-Definition genehmigen, können Sie angeben, ob Init vor dem Aufruf aufgerufen werden muss. Wenn Sie angeben, dass Init erforderlich ist, stellt Fabric sicher, dass Init diese Funktion vor allen anderen Funktionen im Chaincode aufruft und sie nur einmal aufruft. Durch das Anfordern der Ausführung der Init-Funktion können Sie Logik implementieren, die ausgeführt wird, wenn der Chaincode initialisiert wird, z einen Anfangszustand festlegen. Jedes Mal, wenn Sie die Version des Kettencodes erhöhen, müssen Sie init aufrufen, um den Kettencode zu initialisieren, vorausgesetzt, der Kettencode definiert den Init, der zum Erhöhen der Versionsanzeige erforderlich ist.

Die Chaincode-Definition enthält auch die Paketkennung . Dies ist ein erforderlicher Parameter für jede Organisation, die Chaincode verwenden möchte. Die Paket-ID muss nicht für alle Organisationen gleich sein. Organisationen können Chaincode-Definitionen genehmigen, ohne den Chaincode zu installieren oder die Kennung in die Definition aufzunehmen.

Jedes Kanalmitglied, das Chaincode verwenden möchte, muss die Chaincode-Definition für seine Organisation genehmigen. Diese Genehmigung muss dem Bestelldienst vorgelegt und dann an alle Peers verteilt werden. Diese Genehmigung muss von Ihrem Organisationsadministrator übermittelt werden . Nachdem die Genehmigungstransaktion erfolgreich übermittelt wurde, wird die genehmigte Definition in einer Sammlung gespeichert, die allen Kollegen in der Organisation zur Verfügung steht. Selbst wenn Sie mehrere Peers haben, muss Ihre Organisation den Chaincode daher nur einmal genehmigen.

Die Organisationsadministratoren von Org1 und Org2 genehmigen die Chaincode-Definition von MYCC für ihre Organisationen. Die Chaincode-Definition umfasst Felder wie Chaincode-Name, Version und Endorsement-Richtlinie. Da beide Organisationen Chaincode zum Bestätigen von Transaktionen verwenden, müssen die Genehmigungsdefinitionen beider Organisationen die Paket-ID enthalten. 

2.1.4 Senden Sie den Kettencode an den Kanal

Sobald eine ausreichende Anzahl von Kanalmitgliedern eine Chaincode-Definition genehmigt, kann eine Organisation die Definition an den Kanal übermitteln. Bevor Sie eine Definition mithilfe der Peer-CLI an einen Kanal übergeben, können Sie mit dem Befehl checkcommitreadiness prüfen, ob die Übermittlung einer Chaincode-Definition erfolgreich sein sollte, basierend darauf, welche Kanalmitglieder die Definition genehmigt haben. Eingereichte Transaktionsvorschläge werden zunächst an Peers gesendet, die Mitglieder des Kanals sind, die die von ihrer Organisation genehmigte Chaincode-Definition abfragen und, wenn ihre Organisation zustimmt, die Definition unterstützen. Senden Sie dann die Transaktion an den Besteller und dann die Chaincode-Definition an den Kanal. Die Übermittlung der Definitionstransaktion muss als Administrator der Organisation übermittelt werden.

Die Anzahl der Organisationen, die Definitionen für eine erfolgreiche Übermittlung an den Kanal genehmigen müssen, wird durch die Kanal-/Anwendungs-/LifecycleEndorsement-Richtlinie gesteuert. Standardmäßig erfordert diese Richtlinie, dass die Mehrheit der Organisationen im Kanal die Transaktion befürwortet, und die LifecycleEndorsement-Richtlinie ist von der Chaincode-Befürwortungsrichtlinie getrennt. Selbst wenn beispielsweise eine Chaincode-Befürwortungsrichtlinie nur Unterschriften von einer oder zwei Organisationen erfordert, muss die Mehrheit der Kanalmitglieder die Chaincode-Definition dennoch gemäß der Standardrichtlinie genehmigen. Wenn Sie eine Kanaldefinition einreichen, müssen Sie genügend Peer-Organisationen ansprechen Der Kanal, der Ihre Anforderungen erfüllt. LifecycleEndorsement-Richtlinie.

Sie können auch die Channel/Application/LifeCycleEndoseMent-Richtlinie als Signaturrichtlinie festlegen und explizit die Gruppe von Organisationen auf dem Kanal angeben, die die Chaincode-Definition genehmigen können. Dadurch können Sie einen Kanal erstellen, in dem eine ausgewählte Anzahl von Organisationen als Chaincode-Administratoren fungieren und die vom Kanal verwendete Geschäftslogik verwalten. Sie können eine Signaturrichtlinie auch verwenden , wenn Ihr Kanal über eine große Anzahl von Idemix- Organisationen verfügt, die die Chaincode-Definition nicht genehmigen oder den Chaincode nicht unterstützen können und daher möglicherweise verhindern, dass der Kanal eine Mehrheit erreicht.

Ein Organisationsadministrator von Org1 oder Org2 übermittelt die Chaincode-Definition an den Kanal. Die Definition auf dem Kanal enthält keine Paket-ID.

Nachdem die Chaincode-Definition an den Kanal übermittelt wurde, wird der Chaincode-Container auf allen Peers gestartet, auf denen der Chaincode installiert ist, sodass Kanalmitglieder mit der Verwendung des Chaincodes beginnen können. Der Start des Chaincode-Containers kann einige Minuten dauern. Sie können den Chaincode verwenden Definiert, dass der Aufruf der Init-Funktion erforderlich ist, um den Kettencode zu initialisieren. Wenn die Init-Anfrage eine Funktion aufruft, muss der erste Aufruf des Kettencodes ein Aufruf der Init-Funktion sein. Der Aufruf der Funktion Init unterliegt der Chain-Code-Endorsement-Richtlinie.

2.2 Kettencode aktualisieren

Sie können Chaincode mit demselben Fabric-Lebenszyklusprozess wie beim Installieren und Starten von Chaincode aktualisieren. Sie können die Chaincode-Binärdatei aktualisieren oder einfach die Chaincode-Richtlinie aktualisieren. Befolgen Sie diese Schritte, um Chaincode zu aktualisieren:

  1. Den Chaincode neu verpacken: Sie müssen diesen Schritt nur ausführen, wenn Sie die Chaincode-Binärdateien aktualisieren.

    Org1 und Org2 aktualisieren die Chaincode-Binärdatei und verpacken den Chaincode neu. Beide Organisationen verwenden andere Verpackungs-Tags als zuvor. 

  2. Installieren Sie das neue Chaincode-Paket auf Ihren Peers: Auch hier müssen Sie diesen Schritt nur ausführen, wenn Sie die Chaincode-Binärdateien aktualisieren. Durch die Installation eines neuen Chaincode-Pakets wird eine Paket-ID generiert, die an die neue Chaincode-Definition übergeben werden muss. Außerdem müssen Sie die Chaincode-Version ändern, die vom Lebenszyklusprozess verwendet wird, um zu verfolgen, ob die Chaincode-Binärdatei aktualisiert wurde.

    Org1 und Org2 installieren neue Pakete auf ihren Peers. Die Installation erstellt eine neue Paket-ID. 

  3. Neue Chaincode-Definition genehmigen: Wenn Sie die Chaincode-Binärdatei aktualisieren möchten, müssen Sie die Chaincode-Version und die Paket-ID in der Chaincode-Definition aktualisieren. Sie können Ihre Chaincode-Befürwortungsrichtlinie auch aktualisieren, ohne Ihre Chaincode-Binärdatei neu zu packen. Kanalmitglieder genehmigen einfach die Definition der neuen Richtlinie, was eine Erhöhung der Sequenzvariablen in der Definition erfordert .

    Die Organisationsadministratoren von Org1 und Org2 genehmigen die neue Chaincode-Definition für ihre jeweiligen Organisationen. Die neue Definition verweist auf die neue Paket-ID und ändert die Chaincode-Version, wodurch die Reihenfolge von eins auf zwei erhöht wird, da dies die erste Aktualisierung des Chaincodes ist.

  4. Definitionen an den Kanal senden: Wenn eine ausreichende Anzahl von Kanalmitgliedern die neue Chaincode-Definition genehmigt, kann eine Organisation die neue Definition übermitteln, um die Chaincode-Definition im Rahmen des Lebenszyklusprozesses an den Kanal zu aktualisieren, ohne einen separaten Upgrade-Befehl.

    Der Organisationsadministrator von Org1 oder Org2 übermittelt die neue Chaincode-Definition an den Kanal.

Nachdem Sie die Chaincode-Definition festgeschrieben haben, wird ein neuer Chaincode-Container mit dem Code in der aktualisierten Chaincode-Binärdatei gestartet. Wenn Sie die Ausführung dieser Funktion in der Chaincode-Definition anfordern, müssen Sie diese Funktion erneut aufrufen, nachdem die neue Definition erfolgreich übermittelt wurde, um den aktualisierten Chaincode zu initialisieren. Wenn die Chaincode-Definition aktualisiert wird, ohne die Chaincode-Version zu ändern, bleibt der Chaincode-Container unverändert und Sie müssen die Init-Funktion nicht aufrufen.

Nachdem die neue Definition an den Kanal übermittelt wurde, startet jeder Peer automatisch einen neuen Chaincode-Container.

Der Fabric-Chaincode-Lebenszyklus verwendet Sequenzen in der Chaincode-Definition , um Upgrades zu verfolgen. Alle Kanalmitglieder müssen die Seriennummer erhöhen und die neue Definition genehmigen, um den Chaincode zu aktualisieren. Der Versionsparameter wird zum Verfolgen der Chaincode-Binärdatei verwendet und muss nur geändert werden, wenn die Chaincode-Binärdatei aktualisiert wird.


Zusammenfassen

Beschreibung: Fabric-Chaincode-Lebenszyklus – Hauptdokumentation von hyperledger-fabricdocs

Supongo que te gusta

Origin blog.csdn.net/humingwei11/article/details/124151808
Recomendado
Clasificación