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 erstellen möchten, können Sie SQL-reiche Abfragen ausführen, wenn Ihr Chaincode in einem Oracle Blockchain Platform-Netzwerk bereitgestellt wird.

Chaincode in einem lokalen Hyperledger Fabric-Netzwerk testen

Nachdem Ihr Chaincode-Projekt in einem lokalen Netzwerk ausgeführt wurde, 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

Verwendung: ochain invoke <methodName> <methodArguments>

Die folgenden Argumente und Optionen sind für den Befehl ochain invoke verfügbar:
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 und macOS

Wenn eine Methode ein Argument akzeptiert, geben Sie es als Zeichenfolge ein, wie in den folgenden Beispielen gezeigt:
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}'
Wenn eine Methode mehrere Argumente annimmt, müssen die Argumente durch ein Leerzeichen getrennt werden. Beispiel:
ochain invoke getSupplierByRange 's01' 's03'
Sie müssen ein anderes Format verwenden, um eingebettete Assets in Ihrem Chaincode anzugeben, wie z.B. eine Mitarbeiteranlage, die eine eingebettete Adressanlage verwendet, wie in den folgenden Beispielen dargestellt:
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
Für diese eingebetteten Assets können Sie zum Aufrufen des Chaincodes ein Format wie das Folgende verwenden:
ochain invoke createEmployee '{"employeeID":"e01", "firstName":"John", "lastName":"Doe", 
"age":35, "address":{"street":"Elm Ave", "city":"LA", "state":"California", "country":"US"}}'

Microsoft Windows

Die Windows-Eingabeaufforderung akzeptiert keine einfachen Anführungszeichen ('). Daher müssen alle Argumente in doppelten Anführungszeichen (") angegeben werden. Jedes Argument, das ein doppeltes Anführungszeichen enthält, muss mit Escapezeichen versehen werden (siehe folgendes Beispiel).

ochain invoke createSupplier
"{\"supplierId\":\"s01\",\"rawMaterialAvailable\":5,\"license\":\"valid
supplier\",\"expiryDate\":\"2020-05-30\",\"active\":true}"
Wenn die Methode mehrere Argumente annimmt, 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 eine eingebettete Adressanlage verwendet, wie zuvor gezeigt, können Sie den Chaincode in einem ähnlichen Format 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 fehlschlägt, werden Fehler in der Ausgabe aufgeführt.

Wenn der Chaincode erfolgreich aufgerufen wird, wird ein Log ähnlich dem folgenden Text angezeigt:
========== 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 ==========

Befehl ochain query

Verwendung: ochain query <methodName> <methodArguments>

Die folgenden Argumente und Optionen sind für den Befehl ochain query verfügbar:
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)
Der ochain query-Befehl befolgt dieselben Regeln für die Übergabe von <methodName> und <methodArguments> wie der ochain invoke-Befehl.
  • Unter macOS und Linux können einfache Anführungszeichen verwendet werden. Innerhalb von Argumenten müssen keine Escape-Anführungszeichen gesetzt werden.
  • Bei Microsoft Windows müssen alle Argumente von doppelten Anführungszeichen umgeben sein, und alle Anführungszeichen in einem Argument müssen mit Escapezeichen versehen werden.

Mehrere Tokenbenutzer lokal testen

Um ein Tokenprojekt mit mehreren Benutzern lokal zu testen, können Sie die Eigenschaft tokenUser verwenden, um den Aufrufer jeder Transaktion zu ä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 eingerichtet wird, 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 Kontos festgelegt wurde, als die Methode createAccount (TypeScript) oder CreateAccount (Go) aufgerufen 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 besteht keine Notwendigkeit, das lokale Netzwerk wieder herunterzufahren oder 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 Oracle Blockchain Platform-Remotenetzwerk bereitgestellt wurde, können Sie es testen.

Sie testen Chaincode, der in einem Remote-Netzwerk ausgeführt wird, ähnlich wie er in einem lokalen Netzwerk getestet wird, wie unter Test Your Chaincode on a Local Hyperledger Fabric Network beschrieben.

Wenn Sie Ihren Chaincode manuell bereitgestellt haben, anstatt Blockchain App Builder zu verwenden, müssen Sie die Funktion init manuell aufrufen, bevor Sie Ihren Chaincode testen.

Sie können dieselben Befehle ochain invoke und ochain query verwenden, um alle Methodentransaktionen in einem Remote-Netzwerk der 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 REST-Proxy-URL der Remote-Oracle Blockchain Platform-Instanz (-r), den Benutzernamen (-u) und das Kennwort (-s) an den Befehl. Stellen Sie sicher, dass Sie den richtigen REST-Proxyport angeben, der normalerweise 7443 oder 443 ist.

Beispiel

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

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 abschließen, um Token Chaincodes zu testen.

Um mit mehreren Benutzern zu testen, ändern Sie die Autorisierungsparameter (Benutzername und Kennwortoptionen) in den Aufruf- 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 Oracle Blockchain Platform-Remotenetzwerk auszuführen. Verwenden Sie einen beliebigen REST-Proxyclient, wie z.B. Postman-REST-Client, um Ihr Chaincode-Projekt zu testen.

Um mehrere Benutzer zu testen, ändern Sie die Autorisierungsparameter (Benutzername und Kennwort) im REST-Client, oder stellen Sie eine Verbindung zu einer anderen Instanz von Oracle Blockchain Platform her.

Ausführen von Berkeley DB SQL Rich Queries

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 angegeben 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. Verwenden Sie dazu die Optionen -r, -u und -s, um die Remote-REST-Proxy-URL, den Benutzernamen und das Kennwort von Oracle Blockchain Platform anzugeben.

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

Die gesamte SQL-Abfrage wird im Argument ausgeführt, sodass Sie Änderungen an der Abfrage sofort vornehmen können. Stellen Sie sicher, dass Sie den richtigen Port für den REST-Proxy angeben, der normalerweise entweder 7443 oder 443 lautet. Die Syntax für TypeScript und Go chaincode ist unterschiedlich. Wie im vorherigen Beispiel gezeigt, verwendet die Go-Abfrage für die Abfrageparameter doppelte Anführungszeichen anstelle von einfachen Anführungszeichen. Den doppelten Anführungszeichen müssen umgekehrte Schrägstriche vorangestellt werden.