Chaincode mit Visual Studio Code bereitstellen

Nachdem Ihr Chaincode-Projekt erstellt wurde, können Sie es lokal im automatisch generierten Hyperledger Fabric-Netzwerk oder remote in Ihrer Oracle Blockchain Platform Cloud oder Enterprise Edition bereitstellen. Sie können das Chaincode-Projekt auch für das manuelle Deployment in Oracle Blockchain Platform verpacken.

Chaincode in einem lokalen Hyperledger Fabric-Netzwerk bereitstellen

Nachdem Sie Ihr Chaincode-Projekt erstellt haben, können Sie es in einem lokalen Hyperledger Fabric-Basisnetzwerk testen.

Wenn Sie die Blockchain App Builder-Erweiterung für VS Code installieren, wird automatisch ein Hyperledger Fabric-Netzwerk mit einem einzigen Kanal erstellt. Dies wird im Bereich Umgebungen als Local Environment aufgeführt. Sie können diese Umgebung nicht löschen oder ändern. Sie können Chaincodes einfach darin bereitstellen und neu erstellen, wenn sie nicht mehr ordnungsgemäß funktioniert.

Blockchain App Builder Chaincode-Bereitstellung startet das grundlegende Hyperledger Fabric-Netzwerk und andere Services und installiert und stellt den Chaincode für Sie bereit.

  1. Wählen Sie im Bereich Chaincode-Details die Option Bereitstellen aus.
  2. Im Deployment Wizard:
    • Stellen Sie sicher, dass der korrekte Chaincode-Name ausgewählt ist.
    • Wählen Sie die Zielumgebung aus. Wählen Sie für das lokale Deployment die Option Lokale Umgebung aus.
    • Wählen Sie den Kanal aus, in dem Sie bereitstellen möchten. Ein Kanal namens "mychannel" wird standardmäßig mit der Installation der Erweiterung erstellt und kann zum Testen verwendet werden.
    • Geben Sie optional alle erforderlichen Ausgangsparameter ein.
    • Bei Tokenprojekten müssen Sie beim ersten Deployment eine Liste der Tokenadministratoren als Parameter eingeben. Die Liste ist ein Array mit {user_id, org_id}-Informationen, das die Tokenadministratoren angibt. Verwenden Sie für das lokale Hyperledger Fabric-Netzwerk den Wert Org1MSP für das Feld org_id. Bei NFT-Kettencodes sind die Schlüssel für den Parameter adminList userId und orgId für TypeScript und UserId und OrgId für Go. Nach dem ersten Deployment können Sie ein leeres Array für den Parameter adminList angeben oder den Parameter adminList verwenden, um Tokenadministratoren hinzuzufügen. Andere Deployer, die nicht der erste Deployer sind, müssen ein leeres Array für den Parameter adminList angeben. Öffnen Sie dazu die Parameterliste Init im Deployment-Bereich, und klicken Sie auf das Minuszeichen (-) neben dem Parameter adminList. Dadurch wird ein leeres Array ausgewählt.
  3. Klicken Sie auf Bereitstellen.

Wenn das Deployment des Chaincodes abgeschlossen ist, gibt die Ausgabekonsole an, dass der Chaincode erfolgreich installiert und auf dem angegebenen Kanal bereitgestellt wurde.

Problembehandlung

Beim Ausführen des Chaincode-Projekts in einem lokalen Netzwerk können folgende Probleme auftreten.

Fehlende Go-Berechtigungen
Bei der Installation des Go Chaincode-Projekts im lokalen Netzwerk wird möglicherweise ein Fehler wie der Folgende in der Ausgabekonsole angezeigt:
INFO (Runtime): 2020/06/22 22:57:09 build started

INFO (Runtime): Building ....

INFO (Runtime): go build runtime/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtine/ 
cgo.a: permission denied

ERROR (Runtime): go build runtine/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtime/
cgo.a: permission denied

INFO (Runtime): An error occurred while building: exit status 1
Dies liegt an fehlenden Berechtigungen für Go. Dieser Fehler wurde nur in Mac OS angezeigt. Das ist ein bekanntes Problem:
Lösung: Ändern Sie die Berechtigungen von $GOROOT, und wiederholen Sie das Deployment:
sudo chmod -R 777 /usr/local/go
Deployment-Fehler
Aufgrund eines Deployment-Fehlers, eines beschädigten Deployments, eines vollen Docker-Peercontainers oder eines abgebrochenen Docker-Peers im lokalen Netzwerk wird möglicherweise ein Fehler wie der folgende angezeigt:
============ Started instantiate Chaincode ============
[2028-19-01T19:25:lO.372] [ERROR] default - Error instantiating Chaincode GollGl on channel mychannel, detailed 
error: Error: error starting container: error starting container: Failed to generate platform-specific docker 
build: Failed to pull hyperledger/fabric-ccenv:latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:latest not found: manifest unknown: manifest unknown [2020-19-01T19:25:10.372] (INFO) default -
============ Finished instantiate Chaincode ============
[2020-19-01119:25:10.372] [ERROR] default - Error: Error instantiating Chaincode Goll01 on channel mychannel, 
detailed error: Error: error starting container: error starting container: Failed to generate platfom-specific 
docker build: Failed to pull hyperledger/fabric-ccenv: latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:lalest not found: manifest unknown: manifest unknown exited: signal: terminated 
INFO: exited: signal: terminated

ERROR: Error in Chaincode deployment
Dies liegt daran, dass ein Peer-Container nicht ordnungsgemäß neu gestartet werden kann.
Lösung: Erstellen Sie Ihre Laufzeit neu, indem Sie Ihre lokale Umgebung im Bereich Umgebungen auswählen, mit der rechten Maustaste klicken und Lokale Umgebung neu erstellen auswählen. Erneuter Deployment-Versuch.
Umgebungsneuerstellung erforderlich
Möglicherweise wird ein Fehler wie folgt angezeigt:
Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: 
error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com ... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Error in Chaincode deployment
Sie müssen Ihre lokale Umgebung neu aufbauen. Klicken Sie im App Builder-Bereich Umgebungen mit der rechten Maustaste auf Ihre lokale Umgebung, und wählen Sie Lokale Umgebung neu erstellen aus.

Stellen Sie Ihren Chaincode in einem Remote-Oracle Blockchain Platform-Netzwerk bereit

Nachdem Sie Ihr Chaincode-Projekt in einem lokalen Netzwerk bereitgestellt und getestet haben, um sicherzustellen, dass es wie geplant funktioniert, können Sie es in Oracle Blockchain Platform bereitstellen.

Verbindungskonfiguration zu einer Oracle Blockchain Platform-Instanz erstellen

Sie müssen eine Blockchain Platform-Instanz hochgefahren und gestartet haben, um diesen Schritt abzuschließen.

  1. Klicken Sie im Visual Studio-Codebereich Umgebungen auf das Symbol Umgebung erstellen.
  2. Führen Sie im Assistenten Umgebungsdetails folgende Schritte aus:
    • Geben Sie den Namen für die Remoteumgebung ein.
    • Geben Sie eine Beschreibung ein.
    • Geben Sie unter Remote-URL die URL der Remote-Oracle Blockchain Platform-Instanz ein.
    • Geben Sie den Benutzernamen und das Kennwort für Oracle Identity Cloud Service für einen Oracle Blockchain Platform-Benutzer mit den Rollen ADMIN oder REST_CLIENT ein. Um den Chaincode aufzurufen, ist nur die Rolle REST_CLIENT erforderlich. Um den Chaincode bereitzustellen oder zu aktualisieren, muss dem IDCS-Benutzer auch die Rolle ADMIN zugewiesen werden. Weitere Informationen zu Benutzern und Rollen finden Sie in Setup von Benutzern und Anwendungsrollen.
  3. Klicken Sie auf Create, um die Umgebung zu speichern. Der Benutzername und das Kennwort werden vorübergehend in der lokalen Visual Studio Code-Sitzung gespeichert. Wenn Sie Visual Studio Code schließen und dann eine neue Visual Studio Code-Sitzung starten, müssen Sie den Benutzernamen und das Kennwort erneut eingeben.

Stellen Sie Ihren Chaincode bereit

  1. Wählen Sie das Chaincode-Projekt, das Sie bereitstellen möchten, im Bereich Chaincodes aus.
  2. Wählen Sie im Bereich Chaincode-Details die Option Bereitstellen aus.
  3. Im Deployment-Assistenten muss der Name des Chaincode-Projekts vorab ausgefüllt werden.
    • Wählen Sie Ihre Zielumgebung aus. Wählen Sie für das Remote-Deployment die zuvor eingerichtete Oracle Blockchain Platform-Umgebung aus.
    • Geben Sie den Namen des Kanals ein, in dem Sie bereitstellen möchten.
    • Legen Sie optional alle erforderlichen Anfangsparameter fest.
  4. Klicken Sie auf Bereitstellen.
Nachdem der Chaincode erfolgreich in der Remote-Oracle Blockchain Platform bereitgestellt wurde, zeigt das Konsolenlog an, dass die folgenden Ereignisse aufgetreten sind:
  • Die Oracle Blockchain Platform-Details wurden erfolgreich abgerufen.
  • Die Liste der Peers wurde erfolgreich abgerufen.
  • Das Chaincode-Projekt wurde erfolgreich installiert.
  • Das Chaincode-Projekt wurde erfolgreich genehmigt und festgeschrieben.
  • Der Chaincode wurde erfolgreich auf jedem Peer und Kanal bereitgestellt.

Um den Chaincode in einer Umgebung mit mehreren Organisationen über eine Teilnehmerinstanz auf demselben Kanal erneut bereitzustellen, verwenden Sie die Konsole, um den Chaincode bereitzustellen.

Chaincode-Projekt aktualisieren

Das Upgrade des Chaincodes wird automatisch von Blockchain App Builder durchgeführt. Nachdem Sie Änderungen an Ihrem Chaincode vorgenommen haben, stellen Sie ihn einfach erneut bereit. Dadurch wird das Projekt automatisch für Sie aktualisiert. Wenn Sie den Upgradeprozess ausführen, können Sie ein leeres Array für den Parameter adminList übergeben oder den Parameter adminList verwenden, um Tokenadministratoren hinzuzufügen. Wenn Sie nicht der erste Deployer sind, müssen Sie ein leeres Array für den Parameter adminList angeben. Um ein leeres Array für den Parameter adminList zu übergeben, öffnen Sie die Parameterliste Init im Deployment-Bereich, und klicken Sie dann auf die Schaltfläche mit dem Minuszeichen (-) neben dem Parameter adminList. Dadurch wird ein leeres Array ausgewählt.

Wenn Ihr Upgrade erfolgreich war, zeigt das Log an, dass die folgenden Ereignisse aufgetreten sind:
  • Die Oracle Blockchain Platform-Details wurden erfolgreich abgerufen.
  • Die Liste der Peers wurde erfolgreich abgerufen.
  • Es wurde geprüft, ob das Chaincode-Projekt bereits installiert ist. Wenn ja, wurde die Version abgerufen.
  • Die Chaincode-Version wurde erfolgreich upgegradet (z.B. von Version 1.0 auf 2.0).

Um den Chaincode in einer Umgebung mit mehreren Organisationen zu aktualisieren, verwenden Sie die Konsole, und genehmigen Sie den Chaincode manuell von den Teilnehmern.

Package Ihres Chaincode-Projekts zur manuellen Bereitstellung in Oracle Blockchain Platform

Sie können Ihre Chaincode-Projekte zur manuellen Bereitstellung in der Oracle Blockchain Platform Cloud oder Enterprise Edition verpacken.

Die Funktion Package erstellt eine Archivdatei, die nur die Build- und Verteilungsdateien enthält. Die Ordner binary, libs, node_modules und test aus Ihrem Chaincode-Projekt sind nicht enthalten. Diese Archivdatei kann manuell zur Bereitstellung in Oracle Blockchain Platform hochgeladen werden.

  1. Wählen Sie Ihr Chaincode-Projekt im Bereich Chaincodes aus.
  2. Klicken Sie mit der rechten Maustaste, und wählen Sie Package aus.
  3. Wählen Sie einen Speicherort für das Package aus, und klicken Sie auf Ausgabeordner auswählen.

Wenn Sie die Funktion Package für den Chaincode TypeScript ausführen, werden Sie aufgrund von Änderungen an den Softwarevoraussetzungen zur Eingabe des Provisioning-Datums der Oracle Blockchain Platform-Instanz aufgefordert, für die Sie das Package erstellen möchten. Der in Blockchain App Builder erstellte TypeScript-Kettencode ist ohne Änderungen an der zugrunde liegenden Infrastruktur nicht mit früheren Versionen von Oracle Blockchain Platform kompatibel. Blockchain App Builder verpackt die Chaincode-Infrastruktur entsprechend Ihrer Auswahl.

Wenn der Befehl erfolgreich abgeschlossen wurde, wird der Speicherort des Packages zurückgegeben.