Tester le code de chaîne à l'aide de l'interface de ligne de commande
Si votre code de chaîne est exécuté sur un réseau, vous pouvez tester l'une des méthodes générées. En outre, 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 enrichies SQL si votre code de chaîne est déployé dans un réseau Oracle Blockchain Platform.
Tester le code de chaîne sur un réseau Hyperledger Fabric local
Une fois que votre projet de code de chaîne est exécuté sur un réseau local, vous pouvez le tester.
Ouvrir un nouvel interpréteur de commandes et naviguer jusqu'au répertoire du projet pour interagir avec vos codes de chaîne. Une fois qu'un code de chaîne est installé et déployé, vous pouvez soumettre des transactions aux fonctions de votre code de chaîne à l'aide des commandes ochain invoke
et ochain query
.
ochain invoke
Utilisation : ochain invoke <methodName> <methodArguments>
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
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}'
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 ces ressources intégrées, vous pouvez utiliser un format similaire au suivant 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"}}'
Microsoft Windows
L'invite de commande Windows n'accepte pas les apostrophes ('), de sorte que tous les arguments doivent être indiqués entre guillemets ("). Tout argument contenant une guillemet double doit être échappé, comme illustré dans l'exemple suivant.
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\"}}"
Validations
Les arguments de la méthode sont validés par rapport aux validations spécifiées dans le fichier de spécification. En cas d'échec de la validation, 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 ==========
La commande ochain query
Utilisation : ochain query <methodName> <methodArguments>
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)
ochain query
suit les mêmes règles de transmission <methodName>
et <methodArguments>
que la commande ochain invoke
.
- Sur macOS et Linux, des guillemets simples peuvent être utilisés et il n'est pas nécessaire d'échapper les guillemets dans les arguments.
- Sur Microsoft Windows, tous les arguments doivent être entourés de guillemets et tous les guillemets d'un argument doivent être échappés.
Test local de plusieurs utilisateurs de jeton
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 de chaîne échafaudé inclut 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 fait l'objet d'un échafaudage, 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 la 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 dans 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.
Tester le code de chaîne sur un réseau Oracle Blockchain Platform distant
Une fois que le projet de code de chaîne a été déployé sur votre réseau Oracle Blockchain Platform distant, vous pouvez le tester.
Vous testez le code de chaîne exécuté sur un réseau distant comme s'il était testé sur un réseau local, comme décrit à la section Tester votre code de chaîne sur un réseau Hyperledger Fabric local.
Si vous avez déployé le code de chaîne manuellement, au lieu d'utiliser le générateur d'applications Blockchain, 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 exécuter toutes les transactions de méthode sur un réseau Oracle Blockchain Platform Cloud ou Enterprise Edition distant; tous les éléments pris en charge sur le réseau local sont également pris en charge sur le réseau distant. Transmettez l'URL mandataire REST de l'instance Oracle Blockchain Platform distante (-r), le nom d'utilisateur (-u) et le mot de passe (-s) à la commande. Assurez-vous de spécifier le port mandataire 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 de projets de jeton sur un réseau Oracle Blockchain Platform distant
Vous pouvez tester les projets de code de chaîne qui fonctionnent avec des jetons à l'aide du générateur d'applications Blockchain, du mandataire REST d'Oracle Blockchain Platform ou de la trousse SDK Hyperledger Fabric.
Générateur d'applications Blockchain
Vous pouvez utiliser l'interface de ligne de commande du générateur d'applications Blockchain pour terminer les 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 (options de nom d'utilisateur et de mot de passe) dans les commandes d'appel et d'interrogation.
Mandataire REST pour Oracle Blockchain Platform
Vous pouvez utiliser le mandataire REST d'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 SQL Berkeley DB
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 enrichies SQL si votre code de chaîne est déployé dans 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.
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 interrogations enrichies SQL de base de données Berkeley sur le réseau Oracle Blockchain Platform à l'aide des options -r, -u et -s pour spécifier l'URL mandataire REST d'Oracle Blockchain Platform distante, le nom d'utilisateur et le mot de passe, respectivement.
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
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. Assurez-vous de spécifier le port correct pour le mandataire REST, qui est généralement 7443 ou 443. La syntaxe est différente pour le code de chaîne TypeScript et le code de chaîne Go. Comme illustré dans l'exemple précédent, l'interrogation Go utilise des guillemets doubles pour les paramètres d'interrogation au lieu de guillemets simples. Les guillemets doivent être précédés de barres obliques inverses.