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 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-Netzwerk bereitstellen. Dieses Single-Channel-Testnetzwerk wird für Sie erstellt, wenn Sie Blockchain App Builder installieren.

Der Befehl Blockchain App Builder ochain run startet das Hyperledger Fabric-Netzwerk und andere Services und installiert und stellt den Chaincode für Sie bereit.

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 sind für fungible Token und nicht fungible Token unterschiedlich:
  • Bei fungiblen Token, die den Token Taxonomy Framework-Standard verwenden, lauten die Parameter org_id und user_id.
  • Für alle Token, die den ERC-1155-Standard verwenden, lauten die Parameter orgId und userId.
  • Bei nicht fungiblen Token, die den ERC-721-Standard und ein TypeScript-Projekt verwenden, lauten die Parameter orgId und userId.
  • Bei nicht fungiblen Token, die den ERC-721-Standard und ein Go-Projekt verwenden, lauten 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"}]'
Beispiel-Array 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 Debuglogs 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

Bei der Ausführung 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 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
Grund dafür sind fehlende 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 fehlerhaften 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 Peercontainer nicht wieder ordnungsgemäß hochgefahren werden kann.
Lösung: Wiederholen Sie den Befehl ochain run, aber mit der Option -b. Mit dieser Option wird die Laufzeit für Sie neu erstellt.
ochain run -b
Neuerstellung der Umgebung erforderlich
Erstellen Sie die Umgebung neu, wenn der 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

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.

Chaincode bereitstellen

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 Oracle Identity Cloud Service-Benutzernamen und das Kennwort für einen Oracle Blockchain Platform-Benutzer mit den Rollen ADMIN oder REST_CLIENT ein. Weitere Informationen zu Benutzern und Rollen finden Sie in Benutzer und Anwendungsrollen einrichten.

Um den Chaincode aufzurufen, ist nur die Rolle REST_CLIENT erforderlich. Um den Chaincode bereitzustellen oder upzugraden, muss dem IDCS-Benutzer auch die Rolle ADMIN zugewiesen sein.

Nachdem der Chaincode erfolgreich auf 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 erneut auf demselben Kanal bereitzustellen, verwenden Sie die Konsole, um den Chaincode bereitzustellen.

Chaincode-Projekt upgraden

Das Upgrade des Chaincodes wird automatisch vom Blockchain App Builder ausgefü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 upgegradet. 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 das 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, und falls 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.

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

Sie können Ihre Chaincode-Projekte für die manuelle Bereitstellung in 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 Chaincodeprojekt sind nicht enthalten. Diese Archivdatei kann manuell zur Bereitstellung in Oracle Blockchain Platform hochgeladen werden.

Wenn Sie den Befehl ochain package für den Chaincode TypeScript ausführen, werden Sie aufgrund von Änderungen an den Softwarevoraussetzungen aufgefordert, das Provisioning-Datum der Oracle Blockchain Platform-Instanz einzugeben, 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 wird, wird der Speicherort des Packages zurückgegeben.

Dieser Befehl akzeptiert zwei optionale Argumente:
  • --project

    Diese Option definiert den Speicherort des zu verpackenden Blockchain App Builder-Kettencodeprojekts. 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 dies nicht der Fall, 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"