Chaincode mit Visual Studio Code bereitstellen

Nachdem Sie ein Chaincode-Projekt erstellt haben, 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 die manuelle Bereitstellung 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 Visual Studio 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.

Das Testnetzwerk, das bei der Installation von Blockchain App Builder erstellt wird, führt Hyperledger Fabric v2.5.7 und Hyperledger Fabric CA v1.5.9 aus.

Blockchain App Builder Chaincode-Bereitstellung startet das Hyperledger Fabric-Basisnetzwerk, 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-Assistenten:
    • Stellen Sie sicher, dass der richtige Chaincode-Name ausgewählt ist.
    • Wählen Sie die Zielumgebung aus. Wählen Sie für das lokale Deployment die Option Lokale Umgebung.
    • Wählen Sie den Kanal aus, für den Sie das Deployment ausführen möchten. Ein Kanal mit dem Namen "mychannel" wird standardmäßig erstellt, wenn die Erweiterung installiert ist, und kann zum Testen verwendet werden.
    • Geben Sie optional alle erforderlichen Anfangsparameter 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-Chaincodes 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 erstmalige 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 die Schaltfläche mit dem Minuszeichen (–) neben dem Parameter adminList, der ein leeres Array auswählt.
  3. Klicken Sie auf Bereitstellen.

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

Problembehandlung

Beim Ausführen Ihres 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 ähnlich dem folgenden Text 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 "Los". Dieser Fehler wurde nur unter Mac OS erkannt. Das ist ein bekanntes Problem.
Lösung: Führen Sie den folgenden Befehl aus, um die Berechtigungen Ihrer $GOROOT zu ändern, und versuchen Sie dann erneut, das Deployment durchzuführen.
sudo chmod -R 777 /usr/local/go
Deployment-Fehler
Aufgrund eines Deployment-Fehlers, eines beschädigten Deployments, eines vollen Docker-Peercontainers oder eines Docker-Peers, der im lokalen Netzwerk gestoppt wurde, wird möglicherweise ein Fehler ähnlich dem folgenden Text 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 ist auf einen Peer-Container zurückzuführen, der 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 Bereitstellungsversuch.
Umgebungsneuerstellung erforderlich
Möglicherweise wird ein Fehler ähnlich dem folgenden Text 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 erstellen. Klicken Sie im Bereich Umgebungen des App Builder mit der rechten Maustaste auf Ihre lokale Umgebung, und wählen Sie Lokale Umgebung neu erstellen aus.

Chaincode in einem Remote-Oracle Blockchain Platform-Netzwerk bereitstellen

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 für eine Oracle Blockchain Platform-Instanz erstellen

Um diesen Schritt abzuschließen, muss eine Oracle Blockchain Platform-Instanz hochgefahren und gestartet sein.

  1. Klicken Sie im Visual Studio Code-Fensterbereich Umgebungen auf das Symbol Umgebung erstellen.
  2. Gehen Sie im Assistenten Umgebungsdetails wie folgt vor:
    • Geben Sie den Namen für die Remoteumgebung ein.
    • Geben Sie eine Beschreibung ein.
    • Geben Sie unter REST-Proxy-URL die REST-Proxy-URL der Oracle Blockchain Platform-Remoteinstanz 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 upzugraden, muss dem Identity Cloud Service-Benutzer auch die Rolle ADMIN zugewiesen sein. Weitere Informationen zu Benutzern und Rollen finden Sie unter Benutzer und Anwendungsrollen einrichten in Oracle Blockchain Platform verwalten.
  3. Klicken Sie auf Erstellen, um die Umgebung zu speichern. Der Benutzername und das Passwort 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-Session starten, müssen Sie den Benutzernamen und das Kennwort erneut eingeben.

Chaincode bereitstellen

  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 ist der Name des Chaincode-Projekts bereits angegeben.
    • Wählen Sie die 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, für den Sie bereitstellen möchten.
    • Legen Sie optional alle erforderlichen Anfangsparameter fest.
  4. Klicken Sie auf Bereitstellen.
Nachdem der Chaincode erfolgreich in der Remoteinstanz von 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.

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

Chaincode-Projekt upgraden

Das Upgrade des Chaincodes wird automatisch vom Blockchain App Builder durchgeführt. Nachdem Sie Änderungen an Ihrem Chaincode vorgenommen haben, wird das Projekt beim erneuten Deployment automatisch upgegradet. 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 erstmalige 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 auf die Schaltfläche mit dem Minuszeichen (–) neben dem Parameter adminList, der ein leeres Array auswählt.

Wenn Ihr Upgrade erfolgreich ist, wird im Log angezeigt, 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 zu aktualisieren, verwenden Sie in einer Umgebung mit mehreren Organisationen die Konsole, und genehmigen Sie den Chaincode manuell von den Teilnehmern.

Paketieren Sie Ihr Chaincode-Projekt für die manuelle Bereitstellung auf Oracle Blockchain Platform

Sie können Ihre Chaincode-Projekte für die manuelle Bereitstellung in 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 die rechte Maustaste, und wählen Sie Package aus.
  3. Wählen Sie einen Speicherort aus, in dem das Paket gespeichert werden soll, 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-Chaincode 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 Pakets zurückgegeben.