Test du 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. De plus, 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.
Test de votre code chaîne sur un réseau Hyperledger Fabric local
Une fois le projet de code chaîne 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 à l'intérieur de votre code chaîne à l'aide des commandes ochain invoke
et ochain query
.
ochain invoke
Syntaxe : ochain invoke <methodName> <methodArguments>
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
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}'
ochain invoke getSupplierByRange 's01' 's03'
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 chaîne, procédez comme suit :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 apostrophes ('), de sorte que tous les arguments doivent être conservés entre guillemets ("). Tout argument contenant des guillemets doit être échappé.
ochain invoke createSupplier
"{\"supplierId\":\"s01\",\"rawMaterialAvailable\":5,\"license\":\"valid
supplier\",\"expiryDate\":\"2020-05-30\",\"active\":true}"
ochain invoke getSupplierByRange "s01" "s03"
ochain invoke createEmployee "{\"employeeID\":\"e01\", \"firstName\":\"John\",
\"lastName\":\"Doe\", \"age\":35, \"address\":{\"street\":\"Elm Ave\", \"city\":\"LA\",
\"state\":\"California\", \"country\":\"US\"}}"
Valeurs
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.
========== 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
Syntaxe : ochain query <methodName> <methodArguments>
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)
ochain query
suit les mêmes règles de transmission de <methodName>
et <methodArguments>
que ochain invoke
.
- Sur Mac OSX et Linux, les guillemets simples peuvent être utilisés et il n'est pas nécessaire d'échapper les guillemets dans les arguments.
- Sous Windows, tous les arguments doivent être entourés de guillemets doubles et tous les guillemets au sein d'un argument doivent être échappés.
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 code chaîne reposant sur un échafaudage inclut un fichier .ochain.json
, qui stocke les métadonnées du code 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 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
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 de supprimer 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 le projet de code chaîne déployé sur le réseau Oracle Blockchain Platform distant, vous pouvez le tester comme décrit dans Test du 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 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 à la commande l'URL de l'instance Oracle Blockchain Platform distante (-r), les options de nom utilisateur (-u) et de mot de passe (-s).
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 des projets de jeton sur un réseau Oracle Blockchain Platform distant
Vous pouvez tester les projets de code chaîne qui fonctionnent avec des jetons à l'aide de Blockchain App Builder, du proxy REST Oracle Blockchain Platform ou du SDK Hyperledger Fabric.
Blockchain App Builder
Vous pouvez utiliser l'interface de ligne de commande Blockchain App Builder pour appeler des transactions avec plusieurs utilisateurs afin de tester des codes chaîne de jeton.
Pour effectuer un test avec plusieurs utilisateurs, modifiez les paramètres d'autorisation (options de nom d'utilisateur et de 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 jeton 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 votre client REST ou connectez-vous à une autre instance d'Oracle Blockchain Platform.
Exécuter des requêtes enrichies SQL Berkeley DB
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 utilisé executeQuery
dans la section customMethods
du fichier de spécification, une méthode executeQuery
correspondante sera créée dans le contrôleur.
customMethods:
- executeQuery
- "fetchRawMaterial(supplierid: string, rawMaterialSupply: number)"
- "getRawMaterialFromSupplier(manufacturerId: string, supplierld: string, rawMaterialSupply: number)"
- "createProducts(manufacturerId: string, rawMaterialConsumed: number, productsCreated: number)"
- "sendProductsToDistribution()"
**
*
* 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 SQL enrichies Berkeley DB sur le réseau Oracle Blockchain Platform, en veillant à utiliser les options -r, -u et -s pour indiquer respectivement l'URL de l'instance Oracle Blockchain Platform distante, le nom utilisateur et le mot de passe.
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
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'intégralité de la requête SQL est prise dans l'argument, de sorte que vous pouvez apporter des modifications à la requête à la volée. La syntaxe est différente pour les codes 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 doivent être précédés d'une barre oblique inverse.