Testare il codice concatenato utilizzando l'interfaccia CLI

Se il codice concatenato è in esecuzione su una rete, è possibile eseguire il test di uno qualsiasi dei metodi generati. Inoltre, se si è scelto di creare il metodo executeQuery durante lo sviluppo del codice concatenato, è possibile eseguire query Rich SQL se il codice concatenato viene distribuito su una rete Oracle Blockchain Platform.

Test del codice concatenato su una rete Hyperledger Fabric locale

Una volta che il progetto con codice concatenato è in esecuzione su una rete locale, è possibile testarlo.

Aprire una nuova shell e passare alla directory del progetto per interagire con i codici concatenati. Dopo aver installato e distribuito un codice concatenato, è possibile inviare le transazioni alle funzioni all'interno del codice concatenato utilizzando i comandi ochain invoke e ochain query.

ochain invoke

Sintassi: ochain invoke <methodName> <methodArguments>

Di seguito sono riportati gli argomenti e le opzioni utilizzate dal comando ochain invoke.
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 e Linux

Se il metodo accetta un solo argomento, immetterlo come stringa. Ad esempio:
ochain invoke createSupplier
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
Altro esempio:
ochain invoke getSupplierDetails 's01'
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
Se il metodo accetta più argomenti, questi devono essere separati da uno spazio. Ad esempio:
ochain invoke getSupplierByRange 's01' 's03'
Se nel codice concatenato sono presenti asset incorporati, ad esempio un asset dipendente che utilizza un asset indirizzo incorporato:
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
Utilizzare qualcosa di simile al seguente per richiamare il codice concatenato:
ochain invoke createEmployee '{"employeeID":"e01", "firstName":"John", "lastName":"Doe", 
"age":35, "address":{"street":"Elm Ave", "city":"LA", "state":"California", "country":"US"}}'

Finestre

Il prompt dei comandi di Windows non accetta virgolette singole ('), pertanto tutti gli argomenti devono essere mantenuti tra virgolette doppie ("). Qualsiasi argomento contenente le virgolette deve essere preceduto da escape.

Ad esempio:
ochain invoke createSupplier
"{\"supplierId\":\"s01\",\"rawMaterialAvailable\":5,\"license\":\"valid
supplier\",\"expiryDate\":\"2020-05-30\",\"active\":true}"
Se il metodo accetta più argomenti, questi devono essere separati da uno spazio. Ad esempio:
ochain invoke getSupplierByRange "s01" "s03"
Se nel codice concatenato sono presenti asset incorporati, ad esempio un asset dipendente che utilizza un asset indirizzo incorporato come illustrato in precedenza, è possibile utilizzare elementi simili ai seguenti per richiamare il codice concatenato:
ochain invoke createEmployee "{\"employeeID\":\"e01\", \"firstName\":\"John\", 
\"lastName\":\"Doe\", \"age\":35, \"address\":{\"street\":\"Elm Ave\", \"city\":\"LA\", 
\"state\":\"California\", \"country\":\"US\"}}"

convalide

Gli argomenti del metodo vengono convalidati in base alle convalide specificate nel file di specifica. Se una convalida non riesce, nell'output verranno elencati gli errori.

Quando viene richiamato correttamente, deve visualizzare un log simile al seguente:
========== 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

Sintassi: ochain query <methodName> <methodArguments>

Di seguito sono riportati gli argomenti e le opzioni del comando ochain query.
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)
Il comando ochain query segue le stesse regole di passaggio di <methodName> e <methodArguments> di ochain invoke.
  • Su Mac OSX e Linux, è possibile utilizzare le virgolette singole e non è necessario sfuggire alle virgolette all'interno degli argomenti.
  • In Windows, tutti gli argomenti devono essere racchiusi tra virgolette e qualsiasi virgoletta all'interno di un argomento deve essere preceduta da un carattere di escape.

Test di più utenti token in locale

Per eseguire il test di un progetto token con più utenti in locale, è possibile utilizzare la proprietà tokenUser per modificare il chiamante di ogni transazione. Ogni progetto di codice concatenato impalcato include un file .ochain.json, che memorizza i metadati del codice concatenato. Per modificare il chiamante, aggiornare il valore del campo tokenUser nel file .ochain.json.

{
  "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"
}

Quando un progetto è impalcato, la proprietà tokenUser viene impostata sull'utente admin predefinito della rete locale. Per modificare il chiamante di una transazione, modificare la proprietà tokenUser in modo che corrisponda alla proprietà user_id impostata al momento della creazione dell'account al momento della chiamata del metodo createAccount (TypeScript) o CreateAccount (Go).

Installazione e distribuzione automatiche dopo l'aggiornamento

Ogni volta che si aggiorna il codice concatenato, le modifiche verranno compilate, installate e distribuite automaticamente quando viene distribuito in una rete locale. Non è necessario rimuovere o riattivare la rete locale. Tutti i progetti verranno compilati e distribuiti automaticamente ad ogni modifica.

Test del codice concatenato su una rete Oracle Blockchain Platform remota

Dopo che il progetto con codice concatenato è stato distribuito correttamente sulla rete remota di Oracle Blockchain Platform, è possibile testarlo come descritto in Test del codice concatenato su una rete Hyperledger Fabric locale.

Se il codice concatenato è stato distribuito manualmente, anziché utilizzare Blockchain App Builder, è necessario chiamare manualmente la funzione init prima di eseguire il test del codice concatenato.

È possibile utilizzare gli stessi comandi ochain invoke e ochain query per eseguire tutte le transazioni del metodo su una rete remota di Oracle Blockchain Platform Cloud o Enterprise Edition. Tutti gli elementi supportati nella rete locale sono supportati anche nella rete remota. Passare l'URL delle opzioni dell'istanza remota di Oracle Blockchain Platform (-r), del nome utente (-u) e della password (-s) al comando.

Esempio

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

Test dei progetti token su una rete Oracle Blockchain Platform remota

Puoi testare i progetti con codice concatenato che funzionano con i token utilizzando Blockchain App Builder, il proxy REST di Oracle Blockchain Platform o l'SDK Hyperledger Fabric.

App Builder di blockchain

È possibile utilizzare l'interfaccia CLI di Blockchain App Builder per richiamare le transazioni con più utenti per eseguire il test dei codici concatenati dei token.

Per eseguire il test con più utenti, modificare i parametri di autorizzazione (opzioni nome utente e password) nei comandi di richiamo e query.

Proxy REST di Oracle Blockchain Platform

Puoi utilizzare il proxy REST in Oracle Blockchain Platform per eseguire il codice concatenato del token su una rete Oracle Blockchain Platform remota. Utilizzare qualsiasi client proxy REST, ad esempio il client REST Postman, per eseguire il test del progetto con codice concatenato.

Per eseguire il test di più utenti, modificare i parametri di autorizzazione (nome utente e password) nel client REST o connettersi a un'altra istanza di Oracle Blockchain Platform.

Esegui query Rich SQL DB Berkeley

Se si è scelto di creare il metodo executeQuery durante lo sviluppo del codice concatenato, è possibile eseguire query Rich SQL se il codice concatenato viene distribuito su una rete Oracle Blockchain Platform.

Se si è utilizzato executeQuery nella sezione customMethods del file di specifica, nel controller verrà creato un metodo executeQuery corrispondente.

File specifica:
customMethods:
    - executeQuery
    - "fetchRawMaterial(supplierid: string, rawMaterialSupply: number)"
    - "getRawMaterialFromSupplier(manufacturerId: string, supplierld: string, rawMaterialSupply: number)"
    - "createProducts(manufacturerId: string, rawMaterialConsumed: number, productsCreated: number)"
    - "sendProductsToDistribution()"
File controller:
**
*
* 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;
}

È possibile richiamare questo metodo per eseguire query rich SQL DB Berkeley sulla rete Oracle Blockchain Platform, assicurandosi di utilizzare le opzioni -r, -u e -s per specificare rispettivamente l'URL, il nome utente e la password dell'istanza remota di Oracle Blockchain Platform.

Query di esempio per 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
Query di esempio per 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

L'intera query SQL viene utilizzata nell'argomento, in modo da poter apportare modifiche alla query in tempo reale. La sintassi è diversa per TypeScript e codice concatenato Go. Come illustrato nell'esempio precedente, la query Go utilizza le virgolette doppie per i parametri di query anziché le virgolette singole. Le virgolette doppie devono essere precedute da caratteri barre rovesciate.