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 mehr als ein Argument benötigt, müssen sie durch ein Leerzeichen getrennt werden. Beispiel:
ochain invoke getSupplierByRange 's01' 's03'
Wenn Sie Assets in Ihren Chaincode eingebettet haben, z.B. ein Mitarbeiterasset, das 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
Sie rufen den Chaincode in etwa wie folgt auf:
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 doppelte 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 mehr als ein Argument benötigt, müssen sie durch ein Leerzeichen getrennt werden. Beispiel:
ochain invoke getSupplierByRange "s01" "s03"
Wenn Sie Assets in Ihren Chaincode eingebettet haben, z.B. ein Mitarbeiterasset, das wie oben gezeigt ein eingebettetes Adressasset verwendet, können Sie den Chaincode 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 ist, werden Fehler in der Ausgabe aufgeführt.

Wenn er erfolgreich aufgerufen wird, 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>

Die folgenden Argumente und Optionen werden vom Befehl ochain query verwendet:
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 folgt denselben Regeln für die Übergabe von <methodName> und <methodArguments> wie ochain invoke.
  • Unter Mac OSX und Linux können einfache Anführungszeichen verwendet werden, und Anführungszeichen in Argumenten müssen nicht hinterlegt werden.
  • Unter Windows müssen alle Argumente in doppelte Anführungszeichen gesetzt werden, und alle Anführungszeichen innerhalb eines Arguments müssen 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 gerüstet 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 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 er in einem lokalen Netzwerk bereitgestellt wird. Es ist nicht erforderlich, ein Striping durchzuführen oder das lokale Netzwerk erneut 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-Oracle Blockchain Platform-Netzwerk 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, anstatt Blockchain App Builder zu verwenden, bevor Sie den Chaincode testen.

Sie können dieselben ochain invoke- und ochain query-Befehle verwenden, um alle Methodentransaktionen in einem Remote-Netzwerk von Oracle Blockchain Platform Cloud oder Enterprise Edition auszuführen. Alles, was im lokalen Netzwerk unterstützt wird, wird auch im Remote-Netzwerk unterstützt. Übergeben Sie die URL der Remote-Option der 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 Oracle Blockchain Platform-REST-Proxy oder dem Hyperledger Fabric-SDK testen.

Blockchain App Builder

Mit der Blockchain App Builder-CLI können Sie Transaktionen mit mehreren Benutzern aufrufen, um Token Chaincodes zu testen.

Um Tests mit mehreren Benutzern durchzuführen, ändern Sie die Autorisierungsparameter (Benutzername und Kennwortoptionen) in den Aufruf- und Abfragebefehlen.

REST-Proxy für Oracle Blockchain Platform

Mit dem REST-Proxy in Oracle Blockchain Platform können Sie Ihren Token Chaincode in einem Remote-Oracle Blockchain Platform-Netzwerk ausfü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 Queries für Berkeley DB ausführen

Wenn Sie die Methode executeQuery während der Chaincode-Entwicklung erstellt haben, 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 im Controller eine entsprechende executeQuery-Methode 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-Rich-Abfragen in Berkeley DB im Oracle Blockchain Platform-Netzwerk auszuführen. Dabei wird sichergestellt, dass 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 in das Argument übernommen, sodass Sie Ihre Abfrage im Handumdrehen ä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. Vor den doppelten Anführungszeichen müssen umgekehrte Schrägstriche stehen.