Test de votre code chaîne à l'aide de la CLI

Si votre code chaîne est exécuté sur un réseau, vous pouvez tester l'une des méthodes générées. Par ailleurs, si vous choisissez de créer la méthode executeQuery lors du développement de votre code chaîne, vous pouvez exécuter des requêtes SQL riches si votre code chaîne est déployé sur un réseau Oracle Blockchain Platform.

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

Une fois que votre projet de code chaîne est exécuté sur un réseau local, vous pouvez le tester.

Ouvrez un nouveau shell et accédez au répertoire du projet pour interagir avec vos codes chaîne. Une fois qu'un code chaîne est installé et déployé, vous pouvez soumettre des transactions aux fonctions de votre code chaîne à l'aide des commandes ochain invoke et ochain query.

ochain invoke

Syntaxe : ochain invoke <methodName> <methodArguments>

Les arguments et options suivants sont disponibles pour la commande ochain invoke :
ochain invoke -h 
Usage: invoke [options] <methodName> [...args] 
Invoke a Chaincode transaction

Arguments :
    <methodName>  (required) Name of chaincode method to invoke.
    [...args]     (optional) Chaincode method input parameters if any. Parameters should be space separated strings/JSON strings for objects.

Options:
    -h, --help                output command usage information
    -D, --debug               enable debug logging
    -P, --project <path>      (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> (optional, if -r option is applied) A user name that has install chaincode privileges. Contact your administrator for more details.
    -s, --sign <password>     (optional) 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 invoke <method>
(without chaincode initial arguments)  
$> ochain invoke <method> '{"manufacturerId":"m01","rawMaterialAvailable":9,"productsAvailable":4,"completionDate":"05-26-2020"}'
(for a single parameter)
$> ochain invoke <method> 's01' 's10'
$> ochain invoke <method> 's01' '{"manufacturerId":"m01","rawMaterialAvailable":9,"productsAvailable":4,"completionDate":"05-26-2020"}'
(for multiple parameters)
$> ochain invoke <method> 's01' 's10' -r <REST proxy URL of the remote instance> -u <username> -s <password>
(for remote invocation)

Linux et macOS

Si une méthode prend un argument, entrez-le sous forme de chaîne, comme indiqué dans les exemples suivants :
ochain invoke createSupplier
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
ochain invoke getSupplierDetails 's01'
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
Si une méthode prend plusieurs arguments, ceux-ci doivent être séparés par un espace. Exemple :
ochain invoke getSupplierByRange 's01' 's03'
Vous devez utiliser un format différent pour spécifier des ressources intégrées dans votre code chaîne, par exemple une ressource d'employé qui utilise une ressource d'adresse intégrée, comme indiqué dans les exemples suivants :
name: employee
  properties:
     name: employeeId
     type: string
     mandatory: true
     id: true

     name: firstName
     type: string
     validate: max(30)
     mandatory: true

     name: lastName
     type: string
     validate: max(30)
     mandatory: true

     name: age
     type: number
     validate: positive(),min(18)

     name: address
     type: address
name: address

type: embedded

properties:
   name: street
   type: string

   name: city
   type: string

   name: state
   type: string

   name: country
   type: string
Pour ces ressources intégrées, vous pouvez utiliser un format similaire au suivant pour appeler le code chaîne :
ochain invoke createEmployee '{"employeeID":"e01", "firstName":"John", "lastName":"Doe", 
"age":35, "address":{"street":"Elm Ave", "city":"LA", "state":"California", "country":"US"}}'

Microsoft Windows

L'invite de commande Windows n'accepte pas les apostrophes ('). Tous les arguments doivent donc être indiqués entre guillemets ("). Tous les arguments qui contiennent des guillemets doivent être échappés, comme indiqué dans l'exemple suivant.

ochain invoke createSupplier
"{\"supplierId\":\"s01\",\"rawMaterialAvailable\":5,\"license\":\"valid
supplier\",\"expiryDate\":\"2020-05-30\",\"active\":true}"
Si la méthode prend plusieurs arguments, ils doivent être séparés par un espace. Exemple :
ochain invoke getSupplierByRange "s01" "s03"
Si vous avez des ressources incorporées dans votre code chaîne, telles qu'une ressource d'employé qui utilise une ressource d'adresse incorporée comme indiqué précédemment, vous pouvez utiliser un format similaire au suivant pour appeler le code chaîne :
ochain invoke createEmployee "{\"employeeID\":\"e01\", \"firstName\":\"John\", 
\"lastName\":\"Doe\", \"age\":35, \"address\":{\"street\":\"Elm Ave\", \"city\":\"LA\", 
\"state\":\"California\", \"country\":\"US\"}}"

Validations

Les arguments de méthode sont validés par rapport aux validations indiquées dans le fichier de spécification. Si une validation échoue, les erreurs sont répertoriées dans la sortie.

Lorsque le code chaîne est appelé avec succès, un journal semblable au texte suivant s'affiche :
========== Started Invoke Chaincode ==========
[2020-06-23T18:37:54.563] [INFO] default - Successfully sent Proposal and received ProposalResponse
[2020-06-23T18:37:56.619] [INFO default - The chaincode invoke transaction has been committed on peer localhost:7051
[2020-06-23T18:37:56.619] [INFO] default - The chaincode invoke transaction was valid.
[2020-06-23T18:37:56.620] [INFO default - Successfully sent transaction to the orderer.
[2020-06-23T18:37:56.620] [INFO] default - Successfully invoked method "createSupplier" on chaincode "TSProject" on channel "mychannel"
[2020-06-23T18:37:56.620] [INFO] default - 
========== Finished Invoke Chaincode ==========

La commande ochain query

Syntaxe : ochain query <methodName> <methodArguments>

Les arguments et options suivants sont disponibles pour la commande ochain query :
ochain query -h 
Usage: query [options] <methodName> [...args] 
Invoke a Chaincode Query.

Arguments :
    <methodName>     (required) Name of chaincode method to invoke.
    [...args]        (optional) Chaincode method input parameters if any. Parameters should be space separated strings/JSON strings for objects.

Options:
    -h, --help                output command usage information
    -D, --debug               enable debug logging
    -P, --project <path>      (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> (optional, if -r option is applied) A user name that has install chaincode privileges. Contact your administrator for more details.
    -s, --sign <password>     (optional) 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 query <method>
(without chaincode initial arguments)
$> ochain query <method> s01
(for a single parameter)
$> ochain query <method> 's01' 's10'
$> ochain query <method> 's01' '{"manufacturerId":"m01"}'
(for multiple parameters)
$> ochain query <method> 's01' 's10' -r <REST proxy URL of the remote instance> -u <username> -s <password>
(for remote query)
La commande ochain query suit les mêmes règles de transmission de <methodName> et <methodArguments> que la commande ochain invoke.
  • Sous macOS et Linux, des apostrophes peuvent être utilisées. Il n'est pas nécessaire d'ajouter des guillemets dans les arguments.
  • Sur Microsoft Windows, tous les arguments doivent être entourés de guillemets et les guillemets d'un argument doivent être échappés.

Test local de plusieurs utilisateurs de jeton

Pour tester un projet de jeton avec plusieurs utilisateurs localement, vous pouvez utiliser la propriété tokenUser pour modifier l'appelant de chaque transaction. Chaque projet de code chaîne échafaudé comprend un fichier .ochain.json, qui stocke les métadonnées du code chaîne. Pour modifier l'appelant, mettez à jour la valeur du champ tokenUser dans le fichier .ochain.json.

{
  "name": "digiCurrCC",
  "description": "Chaincode package for digiCurrCC",
  "chaincodeName": "digiCurrCC",
  "chaincodeType": "node",
  "configFileLocation": "/Users/user1/token.yml",
  "appBuilderVersion": "21.2.3",
  "nodeVersion": "v12.18.1",
  "tokenUser": "admin"
}

Lorsqu'un projet est échafaudé, la propriété tokenUser est définie sur l'utilisateur admin par défaut du réseau local. Pour modifier l'appelant d'une transaction, modifiez la propriété tokenUser afin qu'elle corresponde à la propriété user_id qui a été définie lors de la création du compte lors de l'appel de la méthode createAccount (TypeScript) ou CreateAccount (Go).

Installation et déploiement automatiques après mise à jour

Chaque fois que vous mettez à jour votre code chaîne, les modifications sont compilées, installées et déployées automatiquement lorsqu'elles sont déployées sur un réseau local. Il n'est pas nécessaire d'arrêter ou de réactiver le réseau local. Tous les projets seront automatiquement compilés et déployés à chaque modification.

Test de votre code chaîne sur un réseau Oracle Blockchain Platform distant

Une fois que votre projet de code chaîne a été déployé sur votre réseau Oracle Blockchain Platform distant, vous pouvez le tester.

Vous testez le code chaîne exécuté sur un réseau distant comme le test sur un réseau local, comme décrit dans Test de votre code chaîne sur un réseau Hyperledger Fabric local.

Si vous avez déployé votre code chaîne manuellement, au lieu d'utiliser Blockchain App Builder, vous devez appeler la fonction init manuellement avant de tester votre code chaîne.

Vous pouvez utiliser les mêmes commandes ochain invoke et ochain query pour exécuter toutes les transactions de méthode sur un réseau Oracle Blockchain Platform Cloud ou Enterprise Edition distant ; tout ce qui est pris en charge sur le réseau local est également pris en charge sur le réseau distant. Transmettez à la commande l'URL de proxy REST des options d'instance Oracle Blockchain Platform distante (-r), de nom utilisateur (-u) et de mot de passe (-s). Veillez à spécifier le port proxy REST correct, qui est généralement 7443 ou 443.

Exemple

ochain invoke createSupplier 
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid 
supplier","expiryDate":"2020-05-30","active":true}' -r 
[https://%3cblockchain-restproxy-url%3e:7443/]https://<blockchain-proxy-url>:7443/ 
-u idcqa -s password

Test des projets de jeton sur un réseau distant Oracle Blockchain Platform

Vous pouvez tester des projets de code chaîne qui fonctionnent avec des jetons à l'aide de Blockchain App Builder, du proxy REST Oracle Blockchain Platform ou du kit SDK Hyperledger Fabric.

Générateur d'applications Blockchain

Vous pouvez utiliser l'interface de ligne de commande Blockchain App Builder pour effectuer des transactions avec plusieurs utilisateurs afin de tester les codes chaîne de jeton.

Pour effectuer un test avec plusieurs utilisateurs, modifiez les paramètres d'autorisation (options nom utilisateur et mot de passe) dans les commandes Invoke et Query.

Proxy REST Oracle Blockchain Platform

Vous pouvez utiliser le proxy REST dans Oracle Blockchain Platform pour exécuter votre code chaîne de jetons sur un réseau Oracle Blockchain Platform distant. Utiliser n'importe quel client proxy REST, tel que le client REST Postman, pour tester votre projet de code chaîne.

Pour tester plusieurs utilisateurs, modifiez les paramètres d'autorisation (nom utilisateur et mot de passe) dans le client REST ou connectez-vous à une autre instance d'Oracle Blockchain Platform.

Exécuter des requêtes enrichies Berkeley DB SQL

Si vous avez choisi de créer la méthode executeQuery lors du développement de votre code chaîne, vous pouvez exécuter des requêtes SQL riches si votre code chaîne est déployé sur un réseau Oracle Blockchain Platform.

Si vous avez spécifié executeQuery dans la section customMethods du fichier de spécification, une méthode executeQuery correspondante sera créée dans le contrôleur.

Fichier de spécification :
customMethods:
    - executeQuery
    - "fetchRawMaterial(supplierid: string, rawMaterialSupply: number)"
    - "getRawMaterialFromSupplier(manufacturerId: string, supplierld: string, rawMaterialSupply: number)"
    - "createProducts(manufacturerId: string, rawMaterialConsumed: number, productsCreated: number)"
    - "sendProductsToDistribution()"
Fichier de contrôleur:
**
*
* BDB sql rich queries can be executed in OBP CS/EE.
* This method can be invoked only when connected to remote OBP CS/EE network.
*
*/
@Validator(yup.string())
public async executeQuery(query: string) {
    const result = await this.query(query);
    return result;
    }

Vous pouvez appeler cette méthode pour exécuter des requêtes enrichies Berkeley DB SQL sur le réseau Oracle Blockchain Platform à l'aide des options -r, -u et -s afin d'indiquer respectivement l'URL de proxy REST Oracle Blockchain Platform distante, le nom utilisateur et le mot de passe.

Exemple de requête pour TypeScript :
ochain query  executeQuery "SELECT key, valueJson FROM <STATE> WHERE 
json_extract(valueJson, '$.rawMaterialAvailable') = 4" -r 
[https://%3cblockchain-restproxy-url%3e:7443/]https://<blockchain-restproxy-url>:7443/ 
-u idcqa -s password
Exemple de requête Go :
ochain query  executeQuery "SELECT key, valueJson FROM <STATE> WHERE 
json_extract(valueJson, \"$.rawMaterialAvailable\") = 4" -r 
[https://%3cblockchain-restproxy-url%3e:7443/]https://<blockchain-restproxy-url>:7443/ 
-u idcqa -s password

L'ensemble de l'interrogation SQL est pris dans l'argument, de sorte que vous pouvez apporter des modifications à votre interrogation à la volée. Veillez à spécifier le port correct pour le proxy REST, qui est généralement 7443 ou 443. La syntaxe est différente pour TypeScript et le code chaîne Go. Comme indiqué dans l'exemple précédent, la requête Go utilise des guillemets doubles pour les paramètres de requête au lieu de guillemets simples. Les guillemets doubles doivent être précédés d'une barre oblique inverse.