Chaincode mit der CLI testen

Wenn Ihr Chaincode in einem Netzwerk ausgeführt wird, können Sie eine der generierten Methoden testen. Wenn Sie die executeQuery-Methode während der Chaincode-Entwicklung erstellen, 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

Verwendung: ochain invoke <methodName> <methodArguments>

Folgende 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) 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)

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 annimmt, sollten 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:
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 können 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"}}'

Fenster

Die Windows-Eingabeaufforderung akzeptiert keine einfachen Anführungszeichen ('). Daher müssen alle Argumente in Anführungszeichen (") gesetzt werden. Jedes Argument, das ein doppeltes Anführungszeichen enthält, muss mit Escape-Zeichen versehen werden.

Beispiel:
ochain invoke createSupplier
"{\"supplierId\":\"s01\",\"rawMaterialAvailable\":5,\"license\":\"valid
supplier\",\"expiryDate\":\"2020-05-30\",\"active\":true}"
Wenn die Methode mehrere Argumente annimmt, sollten 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 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 fehlschlägt, 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

Verwendung: ochain query <methodName> <methodArguments>

Folgende 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) 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 Befehl ochain query befolgt dieselben 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 es ist nicht erforderlich, Anführungszeichen in Argumenten zu maskieren.
  • Unter Windows müssen alle Argumente von doppelten Anführungszeichen umgeben sein, und alle Anführungszeichen in einem Argument müssen maskiert 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 ist nicht erforderlich, das lokale Netzwerk zu entfernen oder 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 Oracle Blockchain Platform-Remotenetzwerk bereitgestellt wurde, können Sie es wie unter Test Your Chaincode on a Local Hyperledger Fabric Network beschrieben testen.

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 ochain invoke- und ochain query-Befehle verwenden, um alle Methodentransaktionen in einem Remote-Netzwerk der Oracle Blockchain Platform Cloud oder Enterprise Edition auszuführen. Alle im lokalen Netzwerk unterstützten Elemente werden 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 aufrufen, 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.