Tester le code de chaîne à l'aide de l'interface de ligne de commande

Si votre code de chaîne s'exécute sur un réseau, vous pouvez tester l'une des méthodes générées. De plus, si vous choisissez de créer la méthode executeQuery lors du développement de votre code de chaîne, vous pouvez exécuter des interrogations SQL enrichies si votre code de chaîne est déployé dans un réseau Oracle Blockchain Platform.

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

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

Ouvrez un nouvel interpréteur de commandes et accédez au répertoire de projet pour interagir avec vos codes de chaîne. Après l'installation et le déploiement d'un code de chaîne, vous pouvez soumettre des transactions aux fonctions du code de chaîne à l'aide des commandes ochain invoke et ochain query.

ochain invoke

Utilisation : ochain invoke <methodName> <methodArguments>

Les arguments et options suivants sont utilisés par la commande ochain invoke :
my-mac:TSProject myname$ 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) URL of the remote OBP instance. Example: https://<blockchain-instance-url>:7443/

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 <url of the remote OBP instance> -u <username> -s <password>
(for remote invocation)

Mac OSX et Linux

Si la méthode prend un argument, entrez-le sous forme de chaîne. Par exemple :
ochain invoke createSupplier
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
Autre exemple :
ochain invoke getSupplierDetails 's01'
'{"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. Par exemple :
ochain invoke getSupplierByRange 's01' 's03'
Si vous avez des ressources intégrées dans votre code de chaîne, comme une ressource d'employé qui utilise une ressource d'adresse intégrée :
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 appeler le code de chaîne, vous devez utiliser le type suivant :
ochain invoke createEmployee '{"employeeID":"e01", "firstName":"John", "lastName":"Doe", 
"age":35, "address":{"street":"Elm Ave", "city":"LA", "state":"California", "country":"US"}}'

Windows

L'invite de commande Windows n'accepte pas les guillemets simples ('), de sorte que tous les arguments doivent être conservés entre guillemets doubles ("). Tout argument qui contient un guillemet double doit être échappé.

Par exemple :
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. Par exemple :
ochain invoke getSupplierByRange "s01" "s03"
Si vous avez des ressources intégrées dans votre code de chaîne, comme une ressource d'employé qui utilise une ressource d'adresse intégrée comme indiqué ci-dessus, vous pouvez utiliser un élément similaire à ce qui suit pour appeler le code de 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 la méthode sont validés par rapport aux validations spécifiées dans le fichier de spécification. Si une validation échoue, les erreurs sont répertoriées dans la sortie.

Lorsqu'il est appelé avec succès, il doit afficher un journal similaire à :
========== 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 ==========

ochain query

Utilisation : ochain query <methodName> <methodArguments>

Les arguments et options pris par la commande ochain query sont les suivants :
my-mac:TSProject myname$ 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) URL of the remote OBP instance. Example: https://<blockchain-instance-url>:7443/

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 <url of the remote OBP 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 ochain invoke.
  • Sur Mac OSX et Linux, des guillemets simples peuvent être utilisés et il n'est pas nécessaire d'échapper des guillemets dans les arguments.
  • Sous Windows, tous les arguments doivent être encadrés par des guillemets doubles et toute citation dans un argument doit être échappée.

Test local de plusieurs utilisateurs de jetons

Pour tester localement un projet de jeton avec plusieurs utilisateurs, vous pouvez utiliser la propriété tokenUser pour modifier l'appelant de chaque transaction. Chaque projet de chaîne de code échafaudé comprend un fichier .ochain.json, qui stocke les métadonnées du code de chaîne. Vous modifiez l'appelant en mettant à 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 réglée à l'utilisateur admin par défaut du réseau local. Pour modifier l'appelant d'une transaction, modifiez la propriété tokenUser pour 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 de 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 de supprimer ou de réactiver le réseau local. Tous les projets seront automatiquement compilés et déployés à chaque modification.

Tester le code de chaîne sur un réseau Oracle Blockchain Platform distant

Une fois le projet de chaîne de blocs déployé sur votre réseau Oracle Blockchain Platform distant, vous pouvez le tester comme décrit sous Tester votre code de chaîne sur un réseau Hyperledger Fabric local.

Si vous avez déployé votre code de chaîne manuellement, au lieu d'utiliser le générateur d'applications de chaîne de blocs, vous devez appeler la fonction init manuellement avant de tester le code de chaîne.

Vous pouvez utiliser les mêmes commandes ochain invoke et ochain query pour effectuer 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 l'URL de l'instance Oracle Blockchain Platform distante (-r), le nom d'utilisateur (-u) et le mot de passe (-s) à la commande.

Exemple

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

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

Vous pouvez tester des projets de chaîne de blocs qui fonctionnent avec des jetons à l'aide du générateur d'applications de chaîne de blocs, du mandataire REST d'Oracle Blockchain Platform ou de la trousse SDK Hyperledger Fabric.

Générateur d'application de chaîne de blocs

Vous pouvez utiliser l'interface de ligne de commande du générateur d'applications de chaîne de blocs pour appeler des transactions avec plusieurs utilisateurs afin de tester les codes de chaîne de jeton.

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

Mandataire REST d'Oracle Blockchain Platform

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

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

Exécuter des interrogations enrichies Berkeley DB SQL

Si vous choisissez de créer la méthode executeQuery lors du développement de votre code de chaîne, vous pouvez exécuter des interrogations SQL enrichies si votre code de chaîne est déployé dans un réseau Oracle Blockchain Platform.

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

Fichier de spécifications :
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 interrogations SQL de base de données Berkeley sur le réseau Oracle Blockchain Platform, en vous assurant d'utiliser les options -r, -u et -s pour spécifier l'URL, le nom d'utilisateur et le mot de passe de l'instance Oracle Blockchain Platform distante, respectivement.

Exemple d'interrogation pour TypeScript :
ochain query  executeQuery "SELECT key, valueJson FROM <STATE> WHERE 
json_extract(valueJson, '$.rawMaterialAvailable') = 4" -r 
[https://%3cblockchain-instance-url%3e:7443/]https://<blockchain-instance-url>:7443/ 
-u idcqa -s password
Exemple d'interrogation pour Go :
ochain query  executeQuery "SELECT key, valueJson FROM <STATE> WHERE 
json_extract(valueJson, \"$.rawMaterialAvailable\") = 4" -r 
[https://%3cblockchain-instance-url%3e:7443/]https://<blockchain-instance-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. La syntaxe est différente pour le code de chaîne TypeScript et 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 de barres obliques inverses.