Test del codice concatenato mediante l'interfaccia CLI
Se il codice concatenato è in esecuzione su una rete, è possibile eseguire il test di uno qualsiasi dei metodi generati. Inoltre, se hai scelto di creare il metodo executeQuery
durante lo sviluppo del codice concatenato, puoi eseguire query avanzate SQL se il tuo codice concatenato viene distribuito in una rete Oracle Blockchain Platform.
Test del codice concatenato su una rete Hyperledger Fabric locale
Dopo 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
Uso: ochain invoke <methodName> <methodArguments>
ochain invoke
: 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 e macOS
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}'
ochain invoke getSupplierByRange 's01' 's03'
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
Per questi asset incorporati, è possibile utilizzare un formato simile al seguente per chiamare il codice concatenato:ochain invoke createEmployee '{"employeeID":"e01", "firstName":"John", "lastName":"Doe",
"age":35, "address":{"street":"Elm Ave", "city":"LA", "state":"California", "country":"US"}}'
Microsoft Windows
Il prompt dei comandi di Windows non accetta virgolette singole ('), pertanto tutti gli argomenti devono essere specificati tra virgolette doppie ("). È necessario utilizzare un carattere di escape per qualsiasi argomento contenente una virgoletta doppia, come illustrato nel seguente esempio.
ochain invoke createSupplier
"{\"supplierId\":\"s01\",\"rawMaterialAvailable\":5,\"license\":\"valid
supplier\",\"expiryDate\":\"2020-05-30\",\"active\":true}"
ochain invoke getSupplierByRange "s01" "s03"
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 la convalida non riesce, nell'output verranno elencati gli errori.
========== 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 ==========
Il comando ochain query
Uso: ochain query <methodName> <methodArguments>
ochain query
: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)
ochain query
segue le stesse regole del passaggio <methodName>
e <methodArguments>
del comando ochain invoke
.
- Su macOS e Linux, è possibile utilizzare le virgolette singole e non è necessario sfuggire alle virgolette all'interno degli argomenti.
- In Microsoft Windows, tutti gli argomenti devono essere racchiusi tra virgolette doppie e qualsiasi virgoletta all'interno di un argomento deve essere esclusa.
Test di più utenti token in locale
Per eseguire il test locale di un progetto token con più utenti, è 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 viene eseguito lo scaffold di un progetto, 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 quando è stato richiamato il 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 vengono distribuite in una rete locale. Non c'è bisogno di eliminare 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
Una volta completata la distribuzione del progetto con codice concatenato nella rete remota di Oracle Blockchain Platform, è possibile eseguirne il test.
È possibile eseguire il test del codice concatenato in esecuzione su una rete remota simile al test su una rete locale, come descritto in Test del codice concatenato su una rete locale Hyperledger Fabric.
Se hai distribuito il codice concatenato manualmente, invece di utilizzare Blockchain App Builder, devi chiamare la funzione init
manualmente prima di eseguire il test del codice concatenato.
È possibile utilizzare gli stessi comandi ochain invoke
e ochain query
per eseguire tutte le transazioni di metodo su una rete Oracle Blockchain Platform Cloud o Enterprise Edition remota; tutte le operazioni supportate sulla rete locale sono supportate anche sulla rete remota. Passare al comando l'URL del proxy REST dell'istanza remota di Oracle Blockchain Platform (-r), il nome utente (-u) e la password (-s). Assicurarsi di specificare la porta proxy REST corretta, che in genere è 7443 o 443.
Esempio
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
Test dei progetti token su una rete remota di Oracle Blockchain Platform
È possibile eseguire il test dei progetti di codice concatenato che funzionano con i token utilizzando Blockchain App Builder, il proxy REST Oracle Blockchain Platform o l'SDK Hyperledger Fabric.
Creazione app blockchain
È possibile utilizzare l'interfaccia CLI di Blockchain App Builder per completare le transazioni con più utenti per eseguire il test dei codici a catena 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
È possibile utilizzare il proxy REST in Oracle Blockchain Platform per eseguire il codice concatenato del token su una rete remota di Oracle Blockchain Platform. Utilizzare qualsiasi client proxy REST, ad esempio Client REST Postman, per eseguire il test del progetto 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 rich query SQL DB Berkeley
Se hai scelto di creare il metodo executeQuery
durante lo sviluppo del codice concatenato, puoi eseguire query RTF SQL se il tuo codice concatenato viene distribuito in una rete Oracle Blockchain Platform.
Se è stato specificato executeQuery
nella sezione customMethods
del file di specifica, nel controller verrà creato un metodo executeQuery
corrispondente.
customMethods:
- executeQuery
- "fetchRawMaterial(supplierid: string, rawMaterialSupply: number)"
- "getRawMaterialFromSupplier(manufacturerId: string, supplierld: string, rawMaterialSupply: number)"
- "createProducts(manufacturerId: string, rawMaterialConsumed: number, productsCreated: number)"
- "sendProductsToDistribution()"
**
*
* 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 chiamare questo metodo per eseguire query RTF su Berkeley DB SQL sulla rete Oracle Blockchain Platform utilizzando le opzioni -r, -u e -s per specificare rispettivamente l'URL proxy REST, il nome utente e la password remoti di Oracle Blockchain Platform.
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
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
L'intera query SQL viene utilizzata nell'argomento in modo da poter apportare modifiche immediate alla query. Assicurarsi di specificare la porta corretta per il proxy REST, che in genere è 7443 o 443. La sintassi è diversa per il codice concatenato TypeScript e Go. Come mostrato nell'esempio precedente, la query Go utilizza virgolette doppie per i parametri di query anziché virgolette singole. Le virgolette doppie devono essere precedute da caratteri barra rovesciata.