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 decide crear el método executeQuery
durante el desarrollo del código de cadenas, puede ejecutar consultas enriquecidas de 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 local de Hyperledger Fabric
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 dentro del código de cadena mediante los comandos ochain invoke
y 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 y 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 estos activos embebidos, puede utilizar un formato similar al siguiente para llamar al código de cadena:ochain invoke createEmployee '{"employeeID":"e01", "firstName":"John", "lastName":"Doe",
"age":35, "address":{"street":"Elm Ave", "city":"LA", "state":"California", "country":"US"}}'
Microsoft Windows
El símbolo del sistema de Windows no acepta comillas simples ('), por lo que todos los argumentos se deben especificar entre comillas dobles ("). Cualquier argumento que contenga comillas dobles debe escaparse, como se muestra en el siguiente ejemplo.
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\"}}"
Validaciones
Los argumentos de método se validan con respecto a las validaciones especificadas en el archivo de especificación. Si falla alguna validación, los errores se mostrarán en la salida.
========== 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 ==========
El 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
sigue las mismas reglas de transferencia de <methodName>
y <methodArguments>
que el comando ochain invoke
.
- En macOS y Linux, se pueden utilizar comillas simples y no es necesario omitir las comillas en los argumentos.
- En Microsoft Windows, todos los argumentos deben estar entre comillas dobles y todas las comillas dentro de un argumento deben estar separadas.
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 de andamios incluye un archivo .ochain.json
, que almacena metadatos del código de cadenas. Para cambiar el emisor de llamada, actualice 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á andamiado, la propiedad tokenUser
se define en el usuario admin
por defecto 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
que se definió cuando se creó la cuenta al llamar 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 despliegue en una red local. No hay necesidad de derribar o volver a abrir la red local. Todos los proyectos se compilarán y desplegarán automáticamente en cada cambio.
Prueba del código de cadena en una red remota de Oracle Blockchain Platform
Una vez que su proyecto de código de cadenas se haya desplegado correctamente en su red remota de Oracle Blockchain Platform, puede probarlo.
Puede probar el código de cadena que se ejecuta en una red remota de manera similar a probarlo en una red local, como se describe en Test Your Chaincode on a Local Hyperledger Fabric Network.
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 ejecutar 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 proxy REST de las opciones de instancia remota de Oracle Blockchain Platform (-r), nombre de usuario (-u) y contraseña (-s) al comando. Asegúrese de especificar el puerto de proxy REST correcto, que normalmente es 7443 o 443.
Ejemplo
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
Prueba de proyectos de token en una red remota de Oracle Blockchain Platform
Puede probar proyectos de código de cadenas que funcionan con tokens mediante el creador de aplicaciones de blockchain, el proxy de REST de Oracle Blockchain Platform o el SDK de Hyperledger Fabric.
Creador de aplicaciones de blockchain
Puede usar la CLI de Blockchain App Builder para completar transacciones con varios usuarios para probar códigos de cadenas de tokens.
Para probar 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 el código de cadena de token en una red remota de Oracle Blockchain Platform. Use cualquier cliente de proxy REST, como el cliente REST de Postman, para probar el proyecto de código de cadena.
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 de SQL de Berkeley DB
Si decide crear el método executeQuery
durante el desarrollo del código de cadenas, puede ejecutar consultas enriquecidas de SQL si el código de cadena se despliega en una red de Oracle Blockchain Platform.
Si ha especificado executeQuery
en la sección customMethods
del archivo de especificación, se creará un método executeQuery
correspondiente en el 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;
}
Puede llamar a este método para ejecutar consultas enriquecidas SQL de base de datos de Berkeley en la red de Oracle Blockchain Platform mediante las opciones -r, -u y -s para especificar la URL de proxy de REST de Oracle Blockchain Platform remota, el nombre de usuario y la contraseña, 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
La consulta SQL completa se toma en el argumento, por lo que puede realizar cambios en la consulta sobre la marcha. Asegúrese de especificar el puerto correcto para el proxy REST, que normalmente es 7443 o 443. La sintaxis es diferente para TypeScript y código de cadena de 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.