Chaincode mit der CLI 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-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 sowie andere Services und installiert und stellt den Chaincode für Sie bereit.

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   

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.

Tokenprojekte

Für Token-Chaincode-Projekte müssen Sie mit dem Befehl ochain run eine Liste der Tokenadministratoren angeben:
ochain run <adminList array>
Das Array adminList ist ein Informationsarray, 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 erstmalige 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:
  • Für fungible 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.
  • Für nicht fungible 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 sind für nicht fungible Token.

Beispiel-Array adminList für TypeScript unter macOS und Linux:
'[{"userId":"userid", "orgId":"OrgMSPId"}]'
Beispiel-Array adminList für Go auf macOS und Linux:
'[{"UserId":"userid", "OrgId":"OrgMSPId"}]'
Beispiel für das Array adminList für TypeScript unter Microsoft Windows:
"[{\"userId\":\"userid\", \"orgId\":\"OrgMSPId\"}]"
Beispiel-Array adminList für "Gehe zu Microsoft Windows":
"[{\"UserId\":\"userid\", \"OrgId\":\"OrgMSPId\"}]"

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

Um die Debuglogs anzuzeigen, übergeben Sie die Option --debug an den Befehl. Verwenden Sie unter Windows die Eingabeaufforderung anstelle von PowerShell, wenn Sie die Option --debug angeben. Sie können das grundlegende Netzwerk ausführen und den Chaincode auf einem anderen 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 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 angezeigt:
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 "Los". Dieser Fehler wurde nur unter Mac OS erkannt. Das ist ein bekanntes Problem.
Lösung: Verwenden Sie den folgenden Befehl, um die Berechtigungen des Verzeichnisses $GOROOT zu ändern, und wiederholen Sie den Befehl ochain run:
sudo chmod -R 777 /usr/local/go
Deployment-Fehler
Aufgrund eines Deployment-Fehlers, einer fehlerhaften Bereitstellung, eines vollständigen 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: Versuchen Sie den Befehl ochain run erneut, aber mit der Option -b. Mit dieser Option wird die Laufzeit für Sie neu erstellt.
ochain run -b
Umgebungsneuerstellung erforderlich
Erstellen Sie die Umgebung neu, wenn ein Fehler Channel not found 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

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

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

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) Restproxy Url of the remote OBP instance.
    For example,
    OBP Cloud Services: https://test-xyz-abc.blockchain.ocp.oraclecloud.com:7443/restproxy
    OBP Enterprise Edition: https://restproxy.test-xyz-abc.blockchain.platform.com:443/restproxy

Examples:
$> ochain deploy -u <username> -s <password> -r <REST proxy URL of the remote 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 unter Benutzer und Anwendungsrollen einrichten in Oracle Blockchain Platform verwalten.

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.

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.

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, 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 erstmalige Deployer sind, müssen Sie ein leeres Array für den Parameter adminList angeben.

Wenn Ihr Upgrade erfolgreich ist, wird im Log angezeigt, 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 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.

Verwendung: 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 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-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.

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 Pakets zurückgegeben.

Dieser Befehl akzeptiert zwei optionale Argumente:
  • --project

    Diese Option definiert den Speicherort des zu verpackenden Blockchain App Builder-Chaincode-Projekts. 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. Wenn keine Angabe gemacht wird, 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"