Prueba del código de cadenas con la CLI

Si el código de cadenas se está ejecutando en una red, puede probar cualquiera de los métodos generados. Además, si ha elegido crear el método executeQuery durante el desarrollo del código de cadenas, puede ejecutar consultas enriquecidas con SQL si el código de cadenas se despliega en una red de Oracle Blockchain Platform.

Prueba del código de cadenas en una red de Hyperledger Fabric local

Una vez que el proyecto de código de cadenas se esté ejecutando en una red local, puede probarlo.

Abra un nuevo shell y navegue hasta el directorio del proyecto para interactuar con los códigos de cadenas. Después de instalar y desplegar un código de cadena, puede enviar transacciones a las funciones de su código de cadena mediante los comandos ochain invoke y ochain query.

ochain invoke

Uso: ochain invoke <methodName> <methodArguments>

A continuación, se muestran los argumentos y las opciones que toma el 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 y Linux

Si el método toma un argumento, introdúzcalo como una cadena. Por ejemplo:
ochain invoke createSupplier
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
Otro ejemplo:
ochain invoke getSupplierDetails 's01'
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
Si el método toma más de un argumento, deben estar separados por un espacio. Por ejemplo:
ochain invoke getSupplierByRange 's01' 's03'
Si ha embebido activos en el código de cadenas, como un activo de empleado que utiliza un activo de dirección embebido:
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
Debe utilizar algo similar al siguiente para llamar al código de cadenas:
ochain invoke createEmployee '{"employeeID":"e01", "firstName":"John", "lastName":"Doe", 
"age":35, "address":{"street":"Elm Ave", "city":"LA", "state":"California", "country":"US"}}'

Ventanas

El símbolo del sistema de Windows no acepta comillas simples ('), por lo que todos los argumentos se deben mantener entre comillas dobles ("). Cualquier argumento que contenga comillas dobles se debe escapar.

Por ejemplo:
ochain invoke createSupplier
"{\"supplierId\":\"s01\",\"rawMaterialAvailable\":5,\"license\":\"valid
supplier\",\"expiryDate\":\"2020-05-30\",\"active\":true}"
Si el método toma más de un argumento, deben estar separados por un espacio. Por ejemplo:
ochain invoke getSupplierByRange "s01" "s03"
Si ha embebido activos en el código de cadenas, como un activo de empleado que utiliza un activo de dirección embebido como se muestra anteriormente, puede utilizar algo similar a lo siguiente para llamar al código de cadenas:
ochain invoke createEmployee "{\"employeeID\":\"e01\", \"firstName\":\"John\", 
\"lastName\":\"Doe\", \"age\":35, \"address\":{\"street\":\"Elm Ave\", \"city\":\"LA\", 
\"state\":\"California\", \"country\":\"US\"}}"

Validaciones

Los argumentos del método se validan con las validaciones especificadas en el archivo de especificación. Si falla alguna validación, los errores se mostrarán en la salida.

Cuando se llama correctamente, debe mostrar un log similar a:
========== 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>

A continuación se muestran los argumentos y las opciones que toma el 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)
El comando ochain query sigue las mismas reglas de transferencia de <methodName> y <methodArguments> que ochain invoke.
  • En Mac OSX y Linux, se pueden usar comillas simples y no hay necesidad de escapar comillas dentro de los argumentos.
  • En Windows, todos los argumentos deben estar entre comillas dobles y cualquier comilla dentro de un argumento debe identificarse.

Prueba de Varios Usuarios de Token Localmente

Para probar un proyecto de token con varios usuarios localmente, puede utilizar la propiedad tokenUser para cambiar el emisor de llamada de cada transacción. Cada proyecto de código de cadenas con andamios incluye un archivo .ochain.json, que almacena metadatos del código de cadenas. Puede cambiar el emisor de llamada actualizando el valor del campo tokenUser en el archivo .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"
}

Cuando un proyecto está en andamio, la propiedad tokenUser se establece en el usuario admin predeterminado de la red local. Para cambiar el emisor de llamada de una transacción, cambie la propiedad tokenUser para que coincida con la propiedad user_id definida cuando se creó la cuenta cuando se llamó al método createAccount (TypeScript) o CreateAccount (Go).

Instalación y despliegue automáticos después de la actualización

Cada vez que actualice el código de cadenas, los cambios se compilarán, instalarán y desplegarán automáticamente cuando se desplieguen en una red local. No es necesario eliminar ni volver a activar la red local. Todos los proyectos se compilarán y desplegarán automáticamente en cada cambio.

Prueba de tu código de cadenas en una red remota de Oracle Blockchain Platform

Una vez que el proyecto de código de cadenas se haya desplegado correctamente en su red remota de Oracle Blockchain Platform, puede probarlo como se describe en Prueba del código de cadenas en una red local de Hyperledger Fabric.

Si ha desplegado el código de cadenas manualmente, en lugar de utilizar Blockchain App Builder, debe llamar a la función init manualmente antes de probar el código de cadenas.

Puede utilizar los mismos comandos ochain invoke y ochain query para realizar todas las transacciones de método en una red remota de Oracle Blockchain Platform Cloud o Enterprise Edition; todo lo soportado en la red local también está soportado en la red remota. Transfiera la URL de las opciones de instancia remota de Oracle Blockchain Platform (-r), nombre de usuario (-u) y contraseña (-s) al comando.

Ejemplo

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

Prueba de proyectos de token en una red remota de Oracle Blockchain Platform

Puede probar proyectos de código de cadena que funcionan con tokens mediante el creador de aplicaciones de cadena de bloques, el proxy REST de Oracle Blockchain Platform o el SDK de Hyperledger Fabric.

Creador de Aplicaciones de Blockchain

Puede utilizar la CLI de Blockchain App Builder para llamar a transacciones con varios usuarios para probar los códigos de cadenas de token.

Para realizar pruebas con varios usuarios, cambie los parámetros de autorización (opciones de nombre de usuario y contraseña) en los comandos de llamada y consulta.

Proxy REST de Oracle Blockchain Platform

Puede utilizar el proxy REST en Oracle Blockchain Platform para ejecutar su código de cadena de token en una red remota de Oracle Blockchain Platform. Utilice cualquier cliente de proxy REST, como el cliente REST Postman, para probar el proyecto de código de cadenas.

Para probar varios usuarios, cambie los parámetros de autorización (nombre de usuario y contraseña) en el cliente REST o conéctese a una instancia diferente de Oracle Blockchain Platform.

Ejecutar consultas enriquecidas SQL de Berkeley DB

Si ha elegido crear el método executeQuery durante el desarrollo del código de cadenas, puede ejecutar consultas enriquecidas con SQL si el código de cadenas se despliega en una red de Oracle Blockchain Platform.

Si ha utilizado executeQuery en la sección customMethods del archivo de especificación, se creará el método executeQuery correspondiente en el controlador.

Archivo de especificación:
customMethods:
    - executeQuery
    - "fetchRawMaterial(supplierid: string, rawMaterialSupply: number)"
    - "getRawMaterialFromSupplier(manufacturerId: string, supplierld: string, rawMaterialSupply: number)"
    - "createProducts(manufacturerId: string, rawMaterialConsumed: number, productsCreated: number)"
    - "sendProductsToDistribution()"
Archivo controlador:
**
*
* 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;
}

Puede llamar a este método para ejecutar consultas enriquecidas de SQL de base de datos Berkeley en la red de Oracle Blockchain Platform, asegurándose de utilizar las opciones -r, -u y -s para especificar la URL de instancia remota de Oracle Blockchain Platform, el nombre de usuario y la contraseña respectivamente.

Consulta de ejemplo para 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
Consulta de ejemplo para 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

La consulta SQL completa se toma en el argumento, por lo que puede realizar cambios en la consulta sobre la marcha. La sintaxis es diferente para TypeScript y el código de cadena Go. Como se muestra en el ejemplo anterior, la consulta Go utiliza comillas dobles para los parámetros de consulta en lugar de comillas simples. Las comillas dobles deben ir precedidas de caracteres de barra invertida.