Testar Seu Chaincode Usando a CLI
Se o seu chaincode estiver em execução em uma rede, você poderá testar qualquer um dos métodos gerados. Além disso, se você optar por criar o método executeQuery
durante o desenvolvimento do seu chaincode, poderá executar consultas ricas em SQL se seu chaincode for implantado em uma rede do Oracle Blockchain Platform.
Testar seu Chaincode em uma Rede Local do Hyperledger Fabric
Depois que seu projeto de chaincode estiver em execução em uma rede local, você poderá testá-lo.
Abra um novo shell e navegue até o diretório do projeto para interagir com seus chaincodes. Depois que um chaincode é instalado e implantado, você pode enviar transações para as funções dentro do seu chaincode usando os comandos ochain invoke
e ochain query
.
ochain invoke
Uso: ochain invoke <methodName> <methodArguments>
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
ochain invoke createSupplier
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
Outro exemplo: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
Você usaria algo semelhante ao seguinte para chamar o chaincode:ochain invoke createEmployee '{"employeeID":"e01", "firstName":"John", "lastName":"Doe",
"age":35, "address":{"street":"Elm Ave", "city":"LA", "state":"California", "country":"US"}}'
Janelas
Como o prompt de comando do Windows não aceita aspas simples ('), todos os argumentos precisam ser mantidos entre aspas duplas ("). Qualquer argumento que contenha aspas duplas deve ter escape.
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\"}}"
Validações
Os argumentos do método são validados em relação às validações especificadas no arquivo de especificação. Se alguma validação falhar, os erros serão listados na saída.
========== 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
Uso: ochain query <methodName> <methodArguments>
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)
ochain query
segue as mesmas regras de transmissão <methodName>
e <methodArguments>
que ochain invoke
.
- No Mac OSX e no Linux, aspas simples podem ser usadas e não há necessidade de escape de aspas dentro de argumentos.
- No Windows, todos os argumentos devem estar entre aspas duplas e qualquer aspa dentro de um argumento deve ter escape.
Testando Vários Usuários de Token Localmente
Para testar um projeto de token com vários usuários localmente, você pode usar a propriedade tokenUser
para alterar o chamador de cada transação. Cada projeto de chaincode com andaime inclui um arquivo .ochain.json
, que armazena metadados do chaincode. Você altera o chamador atualizando o valor do campo tokenUser
no arquivo .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 um projeto é scaffolded, a propriedade tokenUser
é definida como o usuário admin
padrão da rede local. Para alterar o chamador de uma transação, altere a propriedade tokenUser
para corresponder à propriedade user_id
que foi definida quando a conta foi criada quando o método createAccount
(TypeScript) ou CreateAccount
(Go) foi chamado.
Instalação e Implantação Automáticas Após Atualização
Sempre que você atualizar seu chaincode, as alterações serão compiladas, instaladas e implantadas automaticamente quando ele for implantado em uma rede local. Não há necessidade de remover ou abrir a rede local novamente. Todos os projetos serão compilados e implantados automaticamente em cada alteração.
Teste seu Chaincode em uma Rede Remota do Oracle Blockchain Platform
Depois que seu projeto de chaincode tiver sido implantado com sucesso na sua rede remota do Oracle Blockchain Platform, você poderá testá-lo conforme descrito em Testar Seu Chaincode em uma Rede Local do Hyperledger Fabric.
Se você implantou seu chaincode manualmente, em vez de usar o Blockchain App Builder, chame a função init
manualmente antes de testar seu chaincode.
Você pode usar os mesmos comandos ochain invoke
e ochain query
para executar todas as transações de método em uma rede remota do Oracle Blockchain Platform Cloud ou Enterprise Edition; tudo o que é suportado na rede local também é suportado na rede remota. Informe o URL das opções de instância remota do Oracle Blockchain Platform (-r), nome de usuário (-u) e senha (-s) para o comando.
Exemplo
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
Testando Projetos de Token em uma Rede Remota do Oracle Blockchain Platform
Você pode testar projetos de chaincode que funcionam com tokens usando o Blockchain App Builder, o proxy REST do Oracle Blockchain Platform ou o SDK do Hyperledger Fabric.
Blockchain App Builder
Você pode usar a CLI do Blockchain App Builder para chamar transações com vários usuários para testar códigos de cadeia de token.
Para testar com vários usuários, altere os parâmetros de autorização (opções de nome de usuário e senha) nos comandos de chamada e consulta.
Proxy REST do Oracle Blockchain Platform
Você pode usar o proxy REST no Oracle Blockchain Platform para executar seu código de cadeia de token em uma rede remota do Oracle Blockchain Platform. Use qualquer cliente Proxy REST, como o Cliente REST Postman, para testar seu projeto de chaincode.
Para testar vários usuários, altere os parâmetros de autorização (nome de usuário e senha) em seu cliente REST ou conecte-se a outra instância do Oracle Blockchain Platform.
Executar Consultas Berkeley DB SQL Rich
Se você optar por criar o método executeQuery
durante o desenvolvimento do seu chaincode, poderá executar consultas ricas em SQL se o seu chaincode estiver implantado em uma rede do Oracle Blockchain Platform.
Se você tiver usado executeQuery
na seção customMethods
do arquivo de especificação, um método executeQuery
correspondente será criado no controlador.
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;
}
Você pode chamar esse método para executar consultas ricas em SQL do BD Berkeley na rede do Oracle Blockchain Platform, garantindo que você use as opções -r, -u e -s para especificar o URL, o nome de usuário e a senha da instância remota do Oracle Blockchain Platform, respectivamente.
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
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
Como toda a consulta SQL é feita no argumento, você pode fazer alterações na consulta em tempo real. A sintaxe é diferente para TypeScript e para o chaincode Go. Conforme mostrado no exemplo anterior, a consulta Go usa aspas duplas para os parâmetros de consulta, em vez de aspas simples. As aspas duplas devem ser precedidas por barras invertidas.