Chaincode mit der CLI 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.

Stellen Sie Ihren Chaincode in einem lokalen Hyperledger Fabric-Netzwerk bereit

Nachdem Sie Ihr Chaincode-Projekt erstellt haben, können Sie es in einem lokalen Hyperledger Fabric-Netzwerk bereitstellen. Dieses Single-Channel-Testnetzwerk wird für Sie erstellt, wenn Sie Blockchain App Builder installieren.

Mit dem Befehl Blockchain App Builder ochain run wird das Hyperledger Fabric-Netzwerk und andere Services gestartet. Außerdem wird der Chaincode für Sie installiert und bereitgestellt.

my-mac:GOProject myname$ ochain run -h
Usage: run [options] [...args]
Run chaincode project locally in debug mode.

Arguments :
[...args] (optional) Chaincode instantiate arguments. Arguments should be space separated.

Options:
-h, --help        output command usage information 
-D, --debug       enable debug logging
-P, --debug-port  (optional) specify debug process port
-b, --build       (optional) rebuild runtime if already exists
-p, --project     (optional) Path to Chaincode project to run. If not specified, it defaults to current directory.  

Examples :
$> ochain run   

Tokenprojekte

Bei Token Chaincode-Projekten müssen Sie mit dem Befehl ochain run eine Liste der Administratoren angeben:
ochain run <adminList array>
Das Array adminList ist ein Array von Informationen, das die Tokenadministratoren angibt. Das Array adminList ist ein obligatorischer Parameter, wenn Sie ein Token Chaincode-Projekt zum ersten Mal bereitstellen. Wenn Sie das Projekt erneut bereitstellen, können Sie ein leeres Array für den Parameter adminList übergeben 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. Die Parameterinformationen unterscheiden sich bei fungiblen Token und nicht fungiblen Token:
  • Für fungible Token, die den Standard "Token Taxonomy Framework" verwenden, sind die Parameter org_id und user_id.
  • Für Token, die den ERC-1155-Standard verwenden, sind die Parameter orgId und userId.
  • Bei nicht fungiblen Token, die den ERC-721-Standard und ein TypeScript-Projekt verwenden, sind die Parameter orgId und userId.
  • Für nicht fungible Token, die den ERC-721-Standard und ein Go-Projekt verwenden, sind die Parameter OrgId und UserId.

Die folgenden Beispiele gelten für nicht fungible Token.

Beispielarray adminList für TypeScript unter Mac OSX und Linux:
'[{"userId":"userid", "orgId":"OrgMSPId"}]'
Beispielarray adminList für Go unter Mac OSX und Linux:
'[{"UserId":"userid", "OrgId":"OrgMSPId"}]'
Beispielarray adminList für TypeScript unter Microsoft Windows:
"[{\"userId\":\"userid\", \"orgId\":\"OrgMSPId\"}]"
Beispielarray adminList für Go unter Microsoft Windows:
"[{\"UserId\":\"userid\", \"OrgId\":\"OrgMSPId\"}]"

Für das lokale Hyperledger Fabric-Netzwerk ist das Feld OrgMSPId auf den Wert Org1MSP festgelegt.

Wenn Sie die Debug-Logs anzeigen möchten, können Sie die Option --debug an den Befehl übergeben. Verwenden Sie unter Windows die Eingabeaufforderung anstelle von PowerShell, wenn Sie die Option --debug angeben. Sie können das Basisnetzwerk ausführen und den Chaincode auf einem anderen Port als dem Standardport bereitstellen, indem Sie die Option --port an den Befehl übergeben.

Verifizierung

Die folgenden Logs zeigen, dass der Chaincode erfolgreich installiert und bereitgestellt wurde.

my-mac:TSProject myname$ ochain run
Recreating orderer.example.com ... done
Recreating ca.example.com ... done
Recreating peer0.org1.example.com ... done
[2020-09-23T18: 04:09.132] [INFO] default -
============ Started Install Chaincode ============
[2020-09-23T18:04:09.193] [INFO] default Chaincode TSProject:l not installed.
[2020-09-23T18:04:09.317] [INFO] default - Successfully sent install Proposal and received ProposalResponse
[2020-09-23T18:04:09.317] [INFO] default - Successfully installed chaincode TSProject
[2020-09-23T18:04:09.317] [INFO] default -
============ Finished Install Chaincode ============
[2020-09-23T18:04:09.317] [INFO] default - Successfully installed chaincode TSProject
[2020-09-23T18:04:09.318] [INFO] default -
============ started instantiate Chaincode ============
[2020-09-23T18:04:09.366] [INFO] default - Successfully sent Proposal and received ProposalResponse
[2020-09-23T18:04:11.434] [INFO] default - The chaincode instantiate transaction has been committed on peer localhost:7051
[2020-09-23T18:04:11.434] [INFO] default - The chaincode instantiate transaction was valid.
[2020-09-23T18:04:11.435] [INFO] default - Successfully sent transaction to the orderer.
[2020-09-23T18:04:11.435] [INFO] default - Successfully instantiated chaincode TSProject on channel mychannel
[2020-09-23T18:04:11.435] [INFO] default - 
============ Finished instantiate Chaincode ============
[2020-09-23T18:04:11.4351 INFO] default - Successfully instantiated chaincode TSProject on channel mychannel 
INFO (Runtime): Chaincode TSProject installed and ready:
INFO (RunCommand): Chaincode TSProject deployed

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 angezeigt:
My-Mac:GoProj myname$ ochain run
Starting ca.example.com    ... done
Starting orderer.example.com ... done
Starting peer0.orgl.example.com ... done
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

Stopping peer0.orgl.exmple.com ... done 
Stopping ca.example.com	... done
Stopping orderer.example.con ... done
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 Ihrer $GOROOT, und wiederholen Sie den Vorgang ochain run:
sudo chmod -R 777 /usr/local/go
Deployment-Fehler
Aufgrund eines Deployment-Fehlers, eines beschädigten Deployments, eines vollständigen 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: Wiederholen Sie den Befehl ochain run, jedoch mit der Option -b. Mit dieser Option wird die Laufzeit für Sie neu erstellt.
ochain run -b
Umgebungsneuerstellung erforderlich
Erstellen Sie Ihre Umgebung neu, wenn ein Fehler Kanal nicht gefunden oder ein Fehler ähnlich dem folgenden Text angezeigt wird:
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
Um die lokale Umgebung neu zu erstellen, führen Sie den folgenden Befehl aus:
ochain run -b

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.

Stellen Sie Ihren Chaincode bereit

Syntax: ochain deploy [options] [...args]

Die folgenden Argumente und Optionen können mit dem Befehl ochain deploy verwendet werden:

my-mac:TSProject myname$ ochain deploy -h 
Usage: deploy [options] [...args]
Deploy chaincode project to Oracle Blockchain Platform

Arguments:
     [...args]    (optional) Chaincode instantiate arguments. Arguments should be space separated.
 
Options :
    -h, --help                      output command usage information
    -D, --debug                     enable debug logging
    -P, --project <project>         (optional) Path to Chaincode project to deploy. If not specified, it defaults to current directory.
    -c, --channel <channel>         (optional) Blockchain Channel to deploy chaincode to. If not specified, it defaults to the 'default' channel.
    -u, --username <username>       (required) A user name that has install chaincode privileges. Contact your administrator for more details.
    -v, --userversion <userversion> (optional) A user-specified chaincode version.
                             If a version isn't specified, for a new chaincode it will start at v1 and then increment to v2, v3, and so on.
                             For an existing chaincode, v1.a will increment to v1.a1, v1 will increment to v2, and v1.0 will increment to v1.1.
    -s --sign <password>            (required) Password to authenticate user.
    -r --url <url>                  (required) URL of the remote OBP instance. Example: https://<blockchain-instance-url>:7443/

Examples:
$> ochain deploy -u <username> -s <password> -r <url of the remote OBP instance> -c <name of the channel>

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. Weitere Informationen zu Benutzern und Rollen finden Sie in Setup von Benutzern und Anwendungsrollen.

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.

Nachdem der Chaincode erfolgreich in der Remote-Oracle Blockchain Platform bereitgestellt wurde, zeigt das Log an, dass die folgenden Ereignisse aufgetreten sind:
  • 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, rufen Sie den Befehl ochain deploy erneut auf. Dadurch wird das Projekt automatisch für Sie aktualisiert. Wenn Sie den Befehl ochain deploy erneut ausführen, geben Sie ein leeres Array für den Parameter adminList an, oder verwenden Sie den Parameter adminList, um Tokenadministratoren hinzuzufügen. Wenn Sie nicht der erste Deployer sind, müssen Sie ein leeres Array für den Parameter adminList angeben.

Wenn Ihr Upgrade erfolgreich war, zeigt das Log an, dass die folgenden Ereignisse aufgetreten sind:
  • 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.

Syntax: ochain package

Der Befehl 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.

Wenn Sie den Befehl ochain package für den TypeScript-Chaincode ausführen, werden Sie aufgrund von Änderungen an 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.

my-mac:~ myname$ ochain package -h 
Usage: package [options]
Package and archive an Ochain chaincode project 
Options :
    -h, --help             output command usage information
    -D, --debug            enable debug logging
    -p, --project <path>   Path to the Ochain chaincode project to be packaged. If not specified, it defaults to current directory.
    -o, --out <path>       Path to the generated chaincode archive file. If not specified, it defaults to current directory.
About:
This CLI command packages and archives an existing chaincode project 
Examples:
$> ochain package --project <Path to the Ochain chaicode project> —out <Path to the generated chaincode archive file>

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

Dieser Befehl akzeptiert zwei optionale Argumente:
  • --project

    Diese Option definiert den Speicherort des Chaincode-Projekts Blockchain App Builder für das Package. Wenn keine Angabe gemacht wird, wird standardmäßig das aktuelle Verzeichnis verwendet.

  • --out

    Mit dieser Option können Sie den Ausgabepfad der generierten Archivdatei angeben. Ist es nicht festgelegt, wird standardmäßig das aktuelle Verzeichnis verwendet.

Beispiel:
ochain package -p /Blockchain/DevTools/bp1/CC -o /Blockchain/DevTools/bp1/output

"Your chaincode project has been packaged at /Blockchain/DevTools/bp1/output/CC.zip"