Chaincode mit der CLI testen
Wenn Ihr Chaincode in einem Netzwerk ausgeführt wird, können Sie eine der generierten Methoden testen. Wenn Sie während der Chaincode-Entwicklung die Methode executeQuery
erstellt haben, können Sie außerdem SQL-reiche Abfragen ausführen, wenn Ihr Chaincode in einem Oracle Blockchain Platform-Netzwerk bereitgestellt wird.
Chaincode in einem lokalen Hyperledger Fabric-Netzwerk testen
Sobald Ihr Chaincode-Projekt in einem lokalen Netzwerk ausgeführt wird, können Sie es testen.
Öffnen Sie eine neue Shell, und navigieren Sie zum Projektverzeichnis, um mit Ihren Chaincodes zu interagieren. Nachdem ein Chaincode installiert und bereitgestellt wurde, können Sie Transaktionen mit den Befehlen ochain invoke
und ochain query
an die Funktionen in Ihrem Chaincode weiterleiten.
ochain invoke
Syntax: ochain invoke <methodName> <methodArguments>
ochain invoke
verwendet:
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 und Linux
ochain invoke createSupplier
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
Ein weiteres Beispiel: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
Um den Chaincode aufzurufen, verwenden Sie Folgendes:ochain invoke createEmployee '{"employeeID":"e01", "firstName":"John", "lastName":"Doe",
"age":35, "address":{"street":"Elm Ave", "city":"LA", "state":"California", "country":"US"}}'
Fenster
Die Windows-Eingabeaufforderung akzeptiert keine einfachen Anführungszeichen ('), daher müssen alle Argumente in doppelten Anführungszeichen (") stehen. Jedes Argument, das ein doppeltes Anführungszeichen enthält, muss mit Escapezeichen versehen werden.
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\"}}"
Validierungen
Die Methodenargumente werden anhand der in der Spezifikationsdatei angegebenen Validierungen validiert. Wenn eine Validierung nicht erfolgreich verläuft, werden Fehler in der Ausgabe aufgeführt.
========== 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
Syntax: ochain query <methodName> <methodArguments>
ochain query
aufgeführt: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
befolgt dieselben Regeln zum Übergeben von <methodName>
und <methodArguments>
wie ochain invoke
.
- Unter Mac OSX und Linux können einfache Anführungszeichen verwendet werden, und es ist nicht erforderlich, Anführungszeichen innerhalb von Argumenten zu maskieren.
- Unter Windows müssen alle Argumente in doppelte Anführungszeichen gesetzt werden, und jedes Anführungszeichen innerhalb eines Arguments muss mit Escapezeichen versehen werden.
Mehrere Tokenbenutzer lokal testen
Um ein Tokenprojekt mit mehreren Benutzern lokal zu testen, können Sie mit der Eigenschaft tokenUser
den Aufrufer jeder Transaktion ändern. Jedes gerüstete Chaincode-Projekt enthält eine .ochain.json
-Datei, in der Metadaten des Chaincodes gespeichert werden. Sie ändern den Aufrufer, indem Sie den Wert des Feldes tokenUser
in der Datei .ochain.json
aktualisieren.
{
"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"
}
Wenn ein Projekt mit Gerüst versehen ist, wird die Eigenschaft tokenUser
auf den Standardbenutzer admin
des lokalen Netzwerks gesetzt. Um den Aufrufer einer Transaktion zu ändern, ändern Sie die Eigenschaft tokenUser
so, dass sie mit der Eigenschaft user_id
übereinstimmt, die beim Erstellen des Accounts beim Aufrufen der Methode createAccount
(TypeScript) oder CreateAccount
(Go) festgelegt wurde.
Automatische Installation und Bereitstellung nach dem Update
Wenn Sie Ihren Chaincode aktualisieren, werden die Änderungen automatisch kompiliert, installiert und bereitgestellt, wenn sie in einem lokalen Netzwerk bereitgestellt werden. Es ist nicht erforderlich, das lokale Netzwerk zu entfernen oder wieder hochzufahren. Alle Projekte werden bei jeder Änderung automatisch kompiliert und bereitgestellt.
Chaincode in einem Remote-Oracle Blockchain Platform-Netzwerk testen
Nachdem Ihr Chaincode-Projekt erfolgreich in Ihrem Remote-Netzwerk von Oracle Blockchain Platform bereitgestellt wurde, können Sie es wie unter Chaincode in einem lokalen Hyperledger Fabric-Netzwerk testen beschrieben testen.
Wenn Sie Ihren Chaincode manuell bereitgestellt haben, müssen Sie die Funktion init
manuell aufrufen, bevor Sie den Chaincode testen.
Sie können dieselben Befehle ochain invoke
und ochain query
verwenden, um alle Methodentransaktionen in einem Remotenetzwerk von Oracle Blockchain Platform Cloud oder Enterprise Edition auszuführen. Alles, was im lokalen Netzwerk unterstützt wird, wird auch im Remotenetzwerk unterstützt. Übergeben Sie die URL der Remote-Optionen für die Oracle Blockchain Platform-Instanz (-r), den Benutzernamen (-u) und das Kennwort (-s) an den Befehl.
Beispiel
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
Tokenprojekte in einem Remote-Oracle Blockchain Platform-Netzwerk testen
Sie können Chaincode-Projekte, die mit Token arbeiten, mit Blockchain App Builder, dem REST-Proxy von Oracle Blockchain Platform oder dem Hyperledger Fabric-SDK testen.
Blockchain-App Builder
Mit der Blockchain App Builder-CLI können Sie Transaktionen mit mehreren Benutzern aufrufen, um Tokenkettencodes zu testen.
Um mit mehreren Benutzern zu testen, ändern Sie die Autorisierungsparameter (Benutzername- und Kennwortoptionen) in den Aufrufen- und Abfragebefehlen.
REST-Proxy für Oracle Blockchain Platform
Sie können den REST-Proxy in Oracle Blockchain Platform verwenden, um Ihren Token Chaincode in einem Remote-Oracle Blockchain Platform-Netzwerk auszuführen. Verwenden Sie einen beliebigen REST-Proxyclient, wie den Postman-REST-Client, um Ihr Chaincode-Projekt zu testen.
Um mehrere Benutzer zu testen, ändern Sie die Autorisierungsparameter (Benutzername und Kennwort) in Ihrem REST-Client, oder stellen Sie eine Verbindung zu einer anderen Instanz von Oracle Blockchain Platform her.
SQL Rich-Abfragen für Berkeley DB ausführen
Wenn Sie die Methode executeQuery
während der Chaincode-Entwicklung erstellen, können Sie SQL-reiche Abfragen ausführen, wenn Ihr Chaincode in einem Oracle Blockchain Platform-Netzwerk bereitgestellt wird.
Wenn Sie executeQuery
im Abschnitt customMethods
der Spezifikationsdatei verwendet haben, wird eine entsprechende executeQuery
-Methode im Controller erstellt.
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;
}
Sie können diese Methode aufrufen, um SQL-reiche Berkeley-DB-Abfragen im Oracle Blockchain Platform-Netzwerk auszuführen. Dabei müssen Sie die Optionen -r, -u und -s verwenden, um die URL, den Benutzernamen und das Kennwort der Remote-Oracle Blockchain Platform-Instanz anzugeben.
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
Die gesamte SQL-Abfrage wird im Argument verwendet, sodass Sie die Abfrage sofort ändern können. Die Syntax für TypeScript und Go chaincode ist unterschiedlich. Wie im vorherigen Beispiel gezeigt, verwendet die Go-Abfrage doppelte Anführungszeichen für die Abfrageparameter anstelle von einfachen Anführungszeichen. Den doppelten Anführungszeichen müssen umgekehrte Schrägstriche vorangestellt werden.