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
ochain run
eine Liste der Administratoren angeben:
ochain run <adminList 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
unduser_id
. - Für Token, die den ERC-1155-Standard verwenden, sind die Parameter
orgId
unduserId
. - Bei nicht fungiblen Token, die den ERC-721-Standard und ein TypeScript-Projekt verwenden, sind die Parameter
orgId
unduserId
. - Für nicht fungible Token, die den ERC-721-Standard und ein Go-Projekt verwenden, sind die Parameter
OrgId
undUserId
.
Die folgenden Beispiele gelten für nicht fungible Token.
adminList
für TypeScript unter Mac OSX und Linux:'[{"userId":"userid", "orgId":"OrgMSPId"}]'
adminList
für Go unter Mac OSX und Linux:'[{"UserId":"userid", "OrgId":"OrgMSPId"}]'
adminList
für TypeScript unter Microsoft Windows:"[{\"userId\":\"userid\", \"orgId\":\"OrgMSPId\"}]"
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
- 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
- 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
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.
- 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.
- 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.
--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.
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"