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>

Die folgenden Argumente und Optionen werden vom Befehl 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

Wenn die Methode ein Argument annimmt, geben Sie es als Zeichenfolge ein. Beispiel:
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}'
Wenn die Methode mehrere Argumente benötigt, müssen diese durch ein Leerzeichen getrennt werden. Beispiel:
ochain invoke getSupplierByRange 's01' 's03'
Wenn Sie Assets in Ihren Chaincode eingebettet haben, wie z.B. eine Mitarbeiteranlage, die ein eingebettetes Adressasset verwendet:
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.

Beispiel:
ochain invoke createSupplier
"{\"supplierId\":\"s01\",\"rawMaterialAvailable\":5,\"license\":\"valid
supplier\",\"expiryDate\":\"2020-05-30\",\"active\":true}"
Wenn die Methode mehrere Argumente benötigt, müssen diese durch ein Leerzeichen getrennt werden. Beispiel:
ochain invoke getSupplierByRange "s01" "s03"
Wenn Sie Assets in Ihren Chaincode eingebettet haben, wie z.B. ein Mitarbeiterasset, das ein eingebettetes Adressasset wie oben gezeigt verwendet, können Sie den Chaincode in etwa wie folgt aufrufen:
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.

Beim erfolgreichen Aufruf sollte ein Log wie folgt angezeigt werden:
========== 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>

Im Folgenden werden die Argumente und Optionen des Befehls 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)
Der Befehl 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.

Spezifikationsdatei:
customMethods:
    - executeQuery
    - "fetchRawMaterial(supplierid: string, rawMaterialSupply: number)"
    - "getRawMaterialFromSupplier(manufacturerId: string, supplierld: string, rawMaterialSupply: number)"
    - "createProducts(manufacturerId: string, rawMaterialConsumed: number, productsCreated: number)"
    - "sendProductsToDistribution()"
Controllerdatei:
**
*
* 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.

Beispielabfrage für 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
Beispielabfrage für 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

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.