Testar seu Chaincode Usando a CLI
Se o seu chaincode estiver sendo executado 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 rich SQL se seu chaincode for implantado em uma rede do Oracle Blockchain Platform.
Teste seu Chaincode em uma rede local do Hyperledger Fabric
Depois que seu projeto 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 de seu chaincode usando os comandos 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
Para esses ativos incorporados, você pode usar um formato 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"}}'
Microsoft Windows
O prompt de comando do Windows não aceita aspas simples ('). Portanto, todos os argumentos devem ser especificados entre aspas duplas ("). Qualquer argumento que contenha aspas duplas deve ser escapado, conforme mostrado no exemplo a seguir.
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 qualquer 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 ==========
O 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 as mesmas regras de especificação de <methodName>
e <methodArguments>
do comando ochain invoke
.
- Em macOS e Linux, aspas simples podem ser usadas e não há necessidade de escape de aspas dentro de argumentos.
- No Microsoft Windows, todos os argumentos devem estar entre aspas duplas e qualquer aspas 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 scaffolded 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 forem implantadas em uma rede local. Não há necessidade de derrubar ou trazer 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 chaincode tiver sido implantado com sucesso na sua rede remota do Oracle Blockchain Platform, você poderá testá-lo.
Você testa o chaincode em execução em uma rede remota similar a testá-lo em uma rede local, 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 for suportado na rede local também será suportado na rede remota. Informe o URL do proxy REST da instância remota do Oracle Blockchain Platform (-r), as opções de nome de usuário (-u) e senha (-s) para o comando. Certifique-se de especificar a porta de proxy REST correta, que geralmente é 7443 ou 443.
Exemplo
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
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.
Construtor de Aplicativos Blockchain
Você pode usar a CLI do Blockchain App Builder para concluir 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 de proxy REST, como Cliente REST Postman, para testar seu projeto chaincode.
Para testar vários usuários, altere os parâmetros de autorização (nome de usuário e senha) no seu cliente REST ou conecte-se a outra instância do Oracle Blockchain Platform.
Executar Berkeley DB SQL Rich Queries
Se você optar por criar o método executeQuery
durante o desenvolvimento do seu chaincode, poderá executar consultas rich SQL se seu chaincode for implantado em uma rede do Oracle Blockchain Platform.
Se você especificou 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 avançadas de SQL do BD Berkeley na rede do Oracle Blockchain Platform usando as opções -r, -u e -s para especificar o URL do proxy REST remoto do Oracle Blockchain Platform, o nome do usuário e a senha, respectivamente.
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
A consulta SQL inteira é usada no argumento para que você possa fazer alterações na consulta rapidamente. Certifique-se de especificar a porta correta para o proxy REST, que geralmente é 7443 ou 443. A sintaxe é diferente para o chaincode TypeScript e Go. Como 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 caracteres de barra invertida.