Déployer votre code chaîne à l'aide de l'interface de ligne de commande

Une fois que vous avez créé un projet de code chaîne, vous pouvez le déployer localement sur le réseau Hyperledger Fabric généré automatiquement ou à distance sur Oracle Blockchain Platform Cloud ou Enterprise Edition. Vous pouvez également packager le projet de code chaîne pour un déploiement manuel vers Oracle Blockchain Platform.

Déploiement de votre code chaîne sur un réseau Hyperledger Fabric local

Une fois le projet de code chaîne créé, vous pouvez le déployer sur un réseau Hyperledger Fabric local. Ce réseau de test à canal unique est créé pour vous lorsque vous installez Blockchain App Builder.

La commande Blockchain App Builder ochain run démarre le réseau Hyperledger Fabric, d'autres services, et installe et déploie le code chaîne pour vous.

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   

Le réseau de test créé lors de l'installation de Blockchain App Builder exécute Hyperledger Fabric v2.5.7 et Hyperledger Fabric CA v1.5.9.

Projets de jeton

Pour les projets de code chaîne de jeton, vous devez indiquer la liste des administrateurs de jeton à l'aide de la commande ochain run :
ochain run <adminList array>
Le tableau adminList est un tableau d'informations qui spécifie les administrateurs de jeton. Lorsque vous déployez un projet de code chaîne de jeton pour la première fois, le tableau adminList est un paramètre obligatoire. Si vous déployez à nouveau le projet, vous pouvez transmettre un tableau vide pour le paramètre adminList ou utiliser le paramètre adminList pour ajouter des administrateurs de jeton. Les autres déploieurs qui ne sont pas le premier à déployer doivent fournir un tableau vide pour le paramètre adminList. Les informations de paramètre sont différentes pour les jetons fongibles et non fongibles :
  • Pour les jetons fongibles qui utilisent la norme Token Taxonomy Framework, les paramètres sont org_id et user_id.
  • Pour les jetons qui utilisent la norme ERC-1155, les paramètres sont orgId et userId.
  • Pour les jetons non fongibles qui utilisent la norme ERC-721 et un projet TypeScript, les paramètres sont orgId et userId.
  • Pour les jetons non fongibles qui utilisent la norme ERC-721 et un projet Go, les paramètres sont OrgId et UserId.

Les exemples suivants concernent les jetons non fongibles.

Exemple de tableau adminList pour TypeScript sur macOS et Linux :
'[{"userId":"userid", "orgId":"OrgMSPId"}]'
Exemple de tableau adminList pour Go sur macOS et Linux :
'[{"UserId":"userid", "OrgId":"OrgMSPId"}]'
Exemple de tableau adminList pour TypeScript sur Microsoft Windows :
"[{\"userId\":\"userid\", \"orgId\":\"OrgMSPId\"}]"
Exemple de tableau adminList pour Go sous Microsoft Windows :
"[{\"UserId\":\"userid\", \"OrgId\":\"OrgMSPId\"}]"

Pour le réseau Hyperledger Fabric local, le champ OrgMSPId est fixé à la valeur Org1MSP.

Pour afficher les journaux de débogage, transmettez l'option --debug à la commande. Sous Windows, utilisez l'invite de commande au lieu de PowerShell si vous spécifiez l'option --debug. Vous pouvez exécuter le réseau de base et déployer le code chaîne sur un port différent de celui par défaut en transmettant l'option --port à la commande.

Vérification

Les journaux suivants indiquent que le code chaîne a été installé et déployé avec succès.

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

Dépannage

Vous pouvez rencontrer les problèmes suivants lors de l'exécution de votre projet de code chaîne sur un réseau local.

Autorisations Go manquantes
Lors de l'installation du projet de code chaîne Go sur le réseau local, une erreur semblable au texte suivant peut apparaître :
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
Ceci est dû à des autorisations manquantes pour Go. Cette erreur n'a été vue que sur Mac OS. Il s'agit d'un problème connu.
Solution : utilisez la commande suivante pour modifier les droits d'accès de votre répertoire $GOROOT, puis réessayez la commande ochain run :
sudo chmod -R 777 /usr/local/go
Echec du déploiement
En raison d'un échec de déploiement, d'un déploiement endommagé, d'un conteneur homologue Docker complet ou d'un homologue Docker arrêté sur le réseau local, une erreur semblable au texte suivant peut s'afficher :
============ 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
Cela est dû à un conteneur pair qui ne peut pas redémarrer correctement.
Solution : réessayez la commande ochain run, mais avec l'option -b. Cette option reconstruit l'exécution pour vous.
ochain run -b
Recréation d'environnement requise
Recréez votre environnement si vous voyez une erreur canal introuvable ou une erreur similaire au texte suivant :
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
Pour reconstruire votre environnement local, exécutez la commande suivante :
ochain run -b

Déployer votre code chaîne sur un réseau Oracle Blockchain Platform distant

Une fois que vous avez déployé et testé votre projet de code chaîne sur un réseau local pour vérifier qu'il fonctionne correctement, vous pouvez le déployer sur Oracle Blockchain Platform.

Déployez votre code chaîne

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

Les arguments et options suivants peuvent être utilisés avec la commande ochain deploy :

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>

Entrez le nom utilisateur et le mot de passe Oracle Identity Cloud Service pour un utilisateur Oracle Blockchain Platform avec les rôles ADMIN ou REST_CLIENT. Pour plus d'informations sur les utilisateurs et les rôles, reportez-vous à Configuration d'utilisateurs et de rôles d'application dans Administration d'Oracle Blockchain Platform.

Pour appeler le code chaîne, seul le rôle REST_CLIENT est nécessaire. Pour déployer ou mettre à niveau le code chaîne, l'utilisateur Identity Cloud Service doit également disposer du rôle ADMIN.

Une fois le code chaîne déployé sur Oracle Blockchain Platform distant, le journal indique que les événements suivants se sont produits :
  • Les détails d'Oracle Blockchain Platform ont été extraits.
  • La liste des homologues a été extraite.
  • Le projet de code chaîne a été installé.
  • Le projet de code chaîne a été approuvé et validé.
  • Le code chaîne a été déployé sur chaque pair et sur le canal.

Dans un environnement comportant plusieurs organisations, pour déployer à nouveau le code chaîne sur le même canal via une instance de participant, utilisez la console pour déployer le code chaîne.

Mise à niveau du projet de code chaîne

La mise à niveau du code chaîne est gérée automatiquement par Blockchain App Builder. Une fois les modifications apportées au code chaîne, appelez à nouveau la commande ochain deploy, qui mettra automatiquement à niveau le projet pour vous. Lorsque vous exécutez à nouveau la commande ochain deploy, indiquez un tableau vide pour le paramètre adminList ou utilisez le paramètre adminList pour ajouter des administrateurs de jeton. Si vous n'êtes pas le premier déployeur, vous devez fournir un tableau vide pour le paramètre adminList.

Si la mise à niveau réussit, le journal indique que les événements suivants se sont produits :
  • Les détails d'Oracle Blockchain Platform ont été extraits.
  • La liste des homologues a été extraite.
  • Une vérification a été effectuée pour déterminer si le projet de code chaîne est déjà installé et, dans l'affirmative, la version a été extraite.
  • La version du code chaîne a été mise à niveau (par exemple, de la version 1.0 à la version 2.0).

Dans un environnement comportant plusieurs organisations, pour mettre à niveau le code chaîne, utilisez la console et approuvez manuellement le code chaîne des participants.

Packagez votre projet de code chaîne pour un déploiement manuel sur Oracle Blockchain Platform

Vous pouvez packager vos projets de code chaîne pour un déploiement manuel vers Oracle Blockchain Platform Cloud ou Enterprise Edition.

Syntaxe : ochain package

La commande package crée un fichier d'archive qui contient uniquement les fichiers de build et de distribution. Les dossiers binary, libs, node_modules et test de votre projet de code chaîne ne sont pas inclus. Ce fichier d'archive peut être téléchargé manuellement vers Oracle Blockchain Platform pour déploiement.

En raison des modifications apportées aux prérequis logiciels, lorsque vous exécutez la commande ochain package pour le code chaîne TypeScript, vous êtes invité à indiquer la date de provisionnement de l'instance Oracle Blockchain Platform pour laquelle créer le package. Le code chaîne TypeScript créé dans Blockchain App Builder n'est pas compatible avec les versions précédentes d'Oracle Blockchain Platform sans modification de l'infrastructure sous-jacente. Blockchain App Builder package l'infrastructure de code chaîne en fonction de votre sélection.

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>

Une fois la commande exécutée, l'emplacement du package est renvoyé.

Cette commande accepte deux arguments facultatifs :
  • --project

    Cette option définit l'emplacement du projet de code chaîne Blockchain App Builder à packager. S'il n'est pas spécifié, l'emplacement est par défaut le répertoire actuel.

  • --out

    Cette option peut être utilisée pour indiquer le chemin de sortie du fichier d'archive généré. S'il n'est pas spécifié, le répertoire actuel est utilisé par défaut.

Par exemple :
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"